vendor: Bump go-azure-helpers to 0.7.0
This commit is contained in:
parent
273b668976
commit
dee450cf8c
|
@ -13,7 +13,6 @@ import (
|
||||||
armStorage "github.com/Azure/azure-sdk-for-go/profiles/2017-03-09/storage/mgmt/storage"
|
armStorage "github.com/Azure/azure-sdk-for-go/profiles/2017-03-09/storage/mgmt/storage"
|
||||||
"github.com/Azure/azure-sdk-for-go/storage"
|
"github.com/Azure/azure-sdk-for-go/storage"
|
||||||
"github.com/Azure/go-autorest/autorest"
|
"github.com/Azure/go-autorest/autorest"
|
||||||
"github.com/Azure/go-autorest/autorest/adal"
|
|
||||||
"github.com/Azure/go-autorest/autorest/azure"
|
"github.com/Azure/go-autorest/autorest/azure"
|
||||||
"github.com/hashicorp/go-azure-helpers/authentication"
|
"github.com/hashicorp/go-azure-helpers/authentication"
|
||||||
"github.com/hashicorp/terraform/httpclient"
|
"github.com/hashicorp/terraform/httpclient"
|
||||||
|
@ -75,7 +74,7 @@ func buildArmClient(config BackendConfig) (*ArmClient, error) {
|
||||||
return nil, fmt.Errorf("Error building ARM Config: %+v", err)
|
return nil, fmt.Errorf("Error building ARM Config: %+v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
oauthConfig, err := adal.NewOAuthConfig(env.ActiveDirectoryEndpoint, armConfig.TenantID)
|
oauthConfig, err := armConfig.BuildOAuthConfig(env.ActiveDirectoryEndpoint)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
10
go.mod
10
go.mod
|
@ -2,9 +2,9 @@ module github.com/hashicorp/terraform
|
||||||
|
|
||||||
require (
|
require (
|
||||||
cloud.google.com/go v0.36.0
|
cloud.google.com/go v0.36.0
|
||||||
github.com/Azure/azure-sdk-for-go v31.2.0+incompatible
|
github.com/Azure/azure-sdk-for-go v32.5.0+incompatible
|
||||||
github.com/Azure/go-autorest/autorest v0.5.0
|
github.com/Azure/go-autorest/autorest v0.9.0
|
||||||
github.com/Azure/go-autorest/autorest/adal v0.2.0
|
github.com/Azure/go-autorest/autorest/adal v0.6.0
|
||||||
github.com/Unknwon/com v0.0.0-20151008135407-28b053d5a292 // indirect
|
github.com/Unknwon/com v0.0.0-20151008135407-28b053d5a292 // indirect
|
||||||
github.com/abdullin/seq v0.0.0-20160510034733-d5467c17e7af // indirect
|
github.com/abdullin/seq v0.0.0-20160510034733-d5467c17e7af // indirect
|
||||||
github.com/agext/levenshtein v1.2.2
|
github.com/agext/levenshtein v1.2.2
|
||||||
|
@ -43,10 +43,11 @@ require (
|
||||||
github.com/gorilla/websocket v1.4.0 // indirect
|
github.com/gorilla/websocket v1.4.0 // indirect
|
||||||
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0 // indirect
|
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0 // indirect
|
||||||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect
|
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect
|
||||||
|
github.com/grpc-ecosystem/grpc-gateway v1.8.5 // indirect
|
||||||
github.com/hashicorp/aws-sdk-go-base v0.3.0
|
github.com/hashicorp/aws-sdk-go-base v0.3.0
|
||||||
github.com/hashicorp/consul v0.0.0-20171026175957-610f3c86a089
|
github.com/hashicorp/consul v0.0.0-20171026175957-610f3c86a089
|
||||||
github.com/hashicorp/errwrap v1.0.0
|
github.com/hashicorp/errwrap v1.0.0
|
||||||
github.com/hashicorp/go-azure-helpers v0.5.0
|
github.com/hashicorp/go-azure-helpers v0.7.0
|
||||||
github.com/hashicorp/go-checkpoint v0.5.0
|
github.com/hashicorp/go-checkpoint v0.5.0
|
||||||
github.com/hashicorp/go-cleanhttp v0.5.0
|
github.com/hashicorp/go-cleanhttp v0.5.0
|
||||||
github.com/hashicorp/go-getter v1.3.1-0.20190627223108-da0323b9545e
|
github.com/hashicorp/go-getter v1.3.1-0.20190627223108-da0323b9545e
|
||||||
|
@ -112,6 +113,7 @@ require (
|
||||||
github.com/xlab/treeprint v0.0.0-20161029104018-1d6e34225557
|
github.com/xlab/treeprint v0.0.0-20161029104018-1d6e34225557
|
||||||
github.com/zclconf/go-cty v1.0.1-0.20190708163926-19588f92a98f
|
github.com/zclconf/go-cty v1.0.1-0.20190708163926-19588f92a98f
|
||||||
github.com/zclconf/go-cty-yaml v1.0.1
|
github.com/zclconf/go-cty-yaml v1.0.1
|
||||||
|
go.opencensus.io v0.20.2 // indirect
|
||||||
go.uber.org/atomic v1.3.2 // indirect
|
go.uber.org/atomic v1.3.2 // indirect
|
||||||
go.uber.org/multierr v1.1.0 // indirect
|
go.uber.org/multierr v1.1.0 // indirect
|
||||||
go.uber.org/zap v1.9.1 // indirect
|
go.uber.org/zap v1.9.1 // indirect
|
||||||
|
|
45
go.sum
45
go.sum
|
@ -4,36 +4,37 @@ cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
|
||||||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||||
cloud.google.com/go v0.36.0 h1:+aCSj7tOo2LODWVEuZDZeGCckdt6MlSF+X/rB3wUiS8=
|
cloud.google.com/go v0.36.0 h1:+aCSj7tOo2LODWVEuZDZeGCckdt6MlSF+X/rB3wUiS8=
|
||||||
cloud.google.com/go v0.36.0/go.mod h1:RUoy9p/M4ge0HzT8L+SDZ8jg+Q6fth0CiBuhFJpSV40=
|
cloud.google.com/go v0.36.0/go.mod h1:RUoy9p/M4ge0HzT8L+SDZ8jg+Q6fth0CiBuhFJpSV40=
|
||||||
contrib.go.opencensus.io/exporter/ocagent v0.4.12 h1:jGFvw3l57ViIVEPKKEUXPcLYIXJmQxLUh6ey1eJhwyc=
|
|
||||||
contrib.go.opencensus.io/exporter/ocagent v0.4.12/go.mod h1:450APlNTSR6FrvC3CTRqYosuDstRB9un7SOx2k/9ckA=
|
|
||||||
dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU=
|
dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU=
|
||||||
dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU=
|
dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU=
|
||||||
dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4=
|
dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4=
|
||||||
dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU=
|
dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU=
|
||||||
git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg=
|
git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg=
|
||||||
github.com/Azure/azure-sdk-for-go v31.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
|
github.com/Azure/azure-sdk-for-go v32.5.0+incompatible h1:Hn/DsObfmw0M7dMGS/c0MlVrJuGFzHzOpBWL89acR68=
|
||||||
github.com/Azure/azure-sdk-for-go v31.2.0+incompatible h1:kZFnTLmdQYNGfakatSivKHUfUnDZhqNdchHD4oIhp5k=
|
github.com/Azure/azure-sdk-for-go v32.5.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
|
||||||
github.com/Azure/azure-sdk-for-go v31.2.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
|
github.com/Azure/go-autorest/autorest v0.9.0 h1:MRvx8gncNaXJqOoLmhNjUAKh33JJF8LyxPhomEtOsjs=
|
||||||
github.com/Azure/go-autorest/autorest v0.3.0/go.mod h1:AKyIcETwSUFxIcs/Wnq/C+kwCtlEYGUVd7FPNb2slmg=
|
github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
|
||||||
github.com/Azure/go-autorest/autorest v0.5.0 h1:Mlm9qy2fpQ9MvfyI41G2Zf5B4CsgjjNbLOWszfK6KrY=
|
github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
|
||||||
github.com/Azure/go-autorest/autorest v0.5.0/go.mod h1:9HLKlQjVBH6U3oDfsXOeVc56THsLPw1L03yban4xThw=
|
github.com/Azure/go-autorest/autorest/adal v0.6.0 h1:UCTq22yE3RPgbU/8u4scfnnzuCW6pwQ9n+uBtV78ouo=
|
||||||
github.com/Azure/go-autorest/autorest/adal v0.1.0/go.mod h1:MeS4XhScH55IST095THyTxElntu7WqB7pNbZo8Q5G3E=
|
github.com/Azure/go-autorest/autorest/adal v0.6.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc=
|
||||||
github.com/Azure/go-autorest/autorest/adal v0.2.0 h1:7IBDu1jgh+ADHXnEYExkV9RE/ztOOlxdACkkPRthGKw=
|
github.com/Azure/go-autorest/autorest/azure/cli v0.2.0 h1:pSwNMF0qotgehbQNllUWwJ4V3vnrLKOzHrwDLEZK904=
|
||||||
github.com/Azure/go-autorest/autorest/adal v0.2.0/go.mod h1:MeS4XhScH55IST095THyTxElntu7WqB7pNbZo8Q5G3E=
|
github.com/Azure/go-autorest/autorest/azure/cli v0.2.0/go.mod h1:WWTbGPvkAg3I4ms2j2s+Zr5xCGwGqTQh+6M2ZqOczkE=
|
||||||
github.com/Azure/go-autorest/autorest/azure/cli v0.1.0 h1:YTtBrcb6mhA+PoSW8WxFDoIIyjp13XqJeX80ssQtri4=
|
|
||||||
github.com/Azure/go-autorest/autorest/azure/cli v0.1.0/go.mod h1:Dk8CUAt/b/PzkfeRsWzVG9Yj3ps8mS8ECztu43rdU8U=
|
|
||||||
github.com/Azure/go-autorest/autorest/date v0.1.0 h1:YGrhWfrgtFs84+h0o46rJrlmsZtyZRg470CqAXTZaGM=
|
github.com/Azure/go-autorest/autorest/date v0.1.0 h1:YGrhWfrgtFs84+h0o46rJrlmsZtyZRg470CqAXTZaGM=
|
||||||
github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
|
github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
|
||||||
|
github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM=
|
||||||
|
github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g=
|
||||||
github.com/Azure/go-autorest/autorest/mocks v0.1.0 h1:Kx+AUU2Te+A3JIyYn6Dfs+cFgx5XorQKuIXrZGoq/SI=
|
github.com/Azure/go-autorest/autorest/mocks v0.1.0 h1:Kx+AUU2Te+A3JIyYn6Dfs+cFgx5XorQKuIXrZGoq/SI=
|
||||||
github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
|
github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
|
||||||
github.com/Azure/go-autorest/autorest/to v0.2.0 h1:nQOZzFCudTh+TvquAtCRjM01VEYx85e9qbwt5ncW4L8=
|
github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
|
||||||
github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc=
|
github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc=
|
||||||
github.com/Azure/go-autorest/autorest/validation v0.1.0 h1:ISSNzGUh+ZSzizJWOWzs8bwpXIePbGLW4z/AmUFGH5A=
|
github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM=
|
||||||
github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8=
|
github.com/Azure/go-autorest/autorest/to v0.3.0 h1:zebkZaadz7+wIQYgC7GXaz3Wb28yKYfVkkBKwc38VF8=
|
||||||
|
github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA=
|
||||||
|
github.com/Azure/go-autorest/autorest/validation v0.2.0 h1:15vMO4y76dehZSq7pAaOLQxC6dZYsSrj2GQpflyM/L4=
|
||||||
|
github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI=
|
||||||
github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY=
|
github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY=
|
||||||
github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
|
github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
|
||||||
github.com/Azure/go-autorest/tracing v0.1.0 h1:TRBxC5Pj/fIuh4Qob0ZpkggbfT8RC0SubHbpV3p4/Vc=
|
github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k=
|
||||||
github.com/Azure/go-autorest/tracing v0.1.0/go.mod h1:ROEEAFwXycQw7Sn3DXNtEedEvdeRAgDr0izn4z5Ij88=
|
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
|
||||||
github.com/Azure/go-ntlmssp v0.0.0-20180810175552-4a21cbd618b4 h1:pSm8mp0T2OH2CPmPDPtwHPr3VAQaOwVF/JbllOPP4xA=
|
github.com/Azure/go-ntlmssp v0.0.0-20180810175552-4a21cbd618b4 h1:pSm8mp0T2OH2CPmPDPtwHPr3VAQaOwVF/JbllOPP4xA=
|
||||||
github.com/Azure/go-ntlmssp v0.0.0-20180810175552-4a21cbd618b4/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU=
|
github.com/Azure/go-ntlmssp v0.0.0-20180810175552-4a21cbd618b4/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU=
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
|
@ -99,8 +100,6 @@ github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4=
|
||||||
github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
|
github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
|
||||||
github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g=
|
github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g=
|
||||||
github.com/bsm/go-vlq v0.0.0-20150828105119-ec6e8d4f5f4e/go.mod h1:N+BjUcTjSxc2mtRGSCPsat1kze3CUtvJN3/jTXlp29k=
|
github.com/bsm/go-vlq v0.0.0-20150828105119-ec6e8d4f5f4e/go.mod h1:N+BjUcTjSxc2mtRGSCPsat1kze3CUtvJN3/jTXlp29k=
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.0 h1:LzQXZOgg4CQfE6bFvXGM30YZL1WW/M337pXml+GrcZ4=
|
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
|
||||||
github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s=
|
github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s=
|
||||||
github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE=
|
github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE=
|
||||||
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
|
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
|
||||||
|
@ -211,8 +210,8 @@ github.com/hashicorp/consul v0.0.0-20171026175957-610f3c86a089/go.mod h1:mFrjN1m
|
||||||
github.com/hashicorp/errwrap v0.0.0-20180715044906-d6c0cd880357/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
github.com/hashicorp/errwrap v0.0.0-20180715044906-d6c0cd880357/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||||
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
|
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
|
||||||
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||||
github.com/hashicorp/go-azure-helpers v0.5.0 h1:GW5YJKeeMfyIEZjiVf84Av2W6FizMwS1OYLtDwDwah0=
|
github.com/hashicorp/go-azure-helpers v0.7.0 h1:wxGpOyWYp15bjBMeL3pXKP5X3oFLZbThAMcJcU6x4FA=
|
||||||
github.com/hashicorp/go-azure-helpers v0.5.0/go.mod h1:1kVoV5ZV0b/Wc/Rck7dKgW0MhmUrZiRxt/OnG42Yeow=
|
github.com/hashicorp/go-azure-helpers v0.7.0/go.mod h1:3xdjhbL7qs69rnwxA0UENOzkPJjtTFIRb5aRyrEpbCU=
|
||||||
github.com/hashicorp/go-checkpoint v0.5.0 h1:MFYpPZCnQqQTE18jFwSII6eUQrD/oxMFp3mlgcqk5mU=
|
github.com/hashicorp/go-checkpoint v0.5.0 h1:MFYpPZCnQqQTE18jFwSII6eUQrD/oxMFp3mlgcqk5mU=
|
||||||
github.com/hashicorp/go-checkpoint v0.5.0/go.mod h1:7nfLNL10NsxqO4iWuW6tWW0HjZuDrwkBuEQsVcpCOgg=
|
github.com/hashicorp/go-checkpoint v0.5.0/go.mod h1:7nfLNL10NsxqO4iWuW6tWW0HjZuDrwkBuEQsVcpCOgg=
|
||||||
github.com/hashicorp/go-cleanhttp v0.5.0 h1:wvCrVc9TjDls6+YGAF2hAifE1E5U1+b4tH6KdvN3Gig=
|
github.com/hashicorp/go-cleanhttp v0.5.0 h1:wvCrVc9TjDls6+YGAF2hAifE1E5U1+b4tH6KdvN3Gig=
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
language: go
|
|
||||||
|
|
||||||
go:
|
|
||||||
- 1.11.x
|
|
||||||
|
|
||||||
go_import_path: contrib.go.opencensus.io/exporter/ocagent
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
- GO_FILES=$(find . -iname '*.go' | grep -v /vendor/) # All the .go files, excluding vendor/ if any
|
|
||||||
- PKGS=$(go list ./... | grep -v /vendor/) # All the import paths, excluding vendor/ if any
|
|
||||||
|
|
||||||
script:
|
|
||||||
- go build ./... # Ensure dependency updates don't break build
|
|
||||||
- if [ -n "$(gofmt -s -l $GO_FILES)" ]; then echo "gofmt the following files:"; gofmt -s -l $GO_FILES; exit 1; fi
|
|
||||||
- go vet ./...
|
|
||||||
- GO111MODULE=on go test -v -race $PKGS # Run all the tests with the race detector enabled
|
|
||||||
- GO111MODULE=off go test -v -race $PKGS # Make sure tests still pass when not using Go modules.
|
|
||||||
- 'if [[ $TRAVIS_GO_VERSION = 1.8* ]]; then ! golint ./... | grep -vE "(_mock|_string|\.pb)\.go:"; fi'
|
|
|
@ -1,24 +0,0 @@
|
||||||
# How to contribute
|
|
||||||
|
|
||||||
We'd love to accept your patches and contributions to this project. There are
|
|
||||||
just a few small guidelines you need to follow.
|
|
||||||
|
|
||||||
## Contributor License Agreement
|
|
||||||
|
|
||||||
Contributions to this project must be accompanied by a Contributor License
|
|
||||||
Agreement. You (or your employer) retain the copyright to your contribution,
|
|
||||||
this simply gives us permission to use and redistribute your contributions as
|
|
||||||
part of the project. Head over to <https://cla.developers.google.com/> to see
|
|
||||||
your current agreements on file or to sign a new one.
|
|
||||||
|
|
||||||
You generally only need to submit a CLA once, so if you've already submitted one
|
|
||||||
(even if it was for a different project), you probably don't need to do it
|
|
||||||
again.
|
|
||||||
|
|
||||||
## Code reviews
|
|
||||||
|
|
||||||
All submissions, including submissions by project members, require review. We
|
|
||||||
use GitHub pull requests for this purpose. Consult [GitHub Help] for more
|
|
||||||
information on using pull requests.
|
|
||||||
|
|
||||||
[GitHub Help]: https://help.github.com/articles/about-pull-requests/
|
|
|
@ -1,201 +0,0 @@
|
||||||
Apache License
|
|
||||||
Version 2.0, January 2004
|
|
||||||
http://www.apache.org/licenses/
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
||||||
|
|
||||||
1. Definitions.
|
|
||||||
|
|
||||||
"License" shall mean the terms and conditions for use, reproduction,
|
|
||||||
and distribution as defined by Sections 1 through 9 of this document.
|
|
||||||
|
|
||||||
"Licensor" shall mean the copyright owner or entity authorized by
|
|
||||||
the copyright owner that is granting the License.
|
|
||||||
|
|
||||||
"Legal Entity" shall mean the union of the acting entity and all
|
|
||||||
other entities that control, are controlled by, or are under common
|
|
||||||
control with that entity. For the purposes of this definition,
|
|
||||||
"control" means (i) the power, direct or indirect, to cause the
|
|
||||||
direction or management of such entity, whether by contract or
|
|
||||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
||||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
||||||
|
|
||||||
"You" (or "Your") shall mean an individual or Legal Entity
|
|
||||||
exercising permissions granted by this License.
|
|
||||||
|
|
||||||
"Source" form shall mean the preferred form for making modifications,
|
|
||||||
including but not limited to software source code, documentation
|
|
||||||
source, and configuration files.
|
|
||||||
|
|
||||||
"Object" form shall mean any form resulting from mechanical
|
|
||||||
transformation or translation of a Source form, including but
|
|
||||||
not limited to compiled object code, generated documentation,
|
|
||||||
and conversions to other media types.
|
|
||||||
|
|
||||||
"Work" shall mean the work of authorship, whether in Source or
|
|
||||||
Object form, made available under the License, as indicated by a
|
|
||||||
copyright notice that is included in or attached to the work
|
|
||||||
(an example is provided in the Appendix below).
|
|
||||||
|
|
||||||
"Derivative Works" shall mean any work, whether in Source or Object
|
|
||||||
form, that is based on (or derived from) the Work and for which the
|
|
||||||
editorial revisions, annotations, elaborations, or other modifications
|
|
||||||
represent, as a whole, an original work of authorship. For the purposes
|
|
||||||
of this License, Derivative Works shall not include works that remain
|
|
||||||
separable from, or merely link (or bind by name) to the interfaces of,
|
|
||||||
the Work and Derivative Works thereof.
|
|
||||||
|
|
||||||
"Contribution" shall mean any work of authorship, including
|
|
||||||
the original version of the Work and any modifications or additions
|
|
||||||
to that Work or Derivative Works thereof, that is intentionally
|
|
||||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
||||||
or by an individual or Legal Entity authorized to submit on behalf of
|
|
||||||
the copyright owner. For the purposes of this definition, "submitted"
|
|
||||||
means any form of electronic, verbal, or written communication sent
|
|
||||||
to the Licensor or its representatives, including but not limited to
|
|
||||||
communication on electronic mailing lists, source code control systems,
|
|
||||||
and issue tracking systems that are managed by, or on behalf of, the
|
|
||||||
Licensor for the purpose of discussing and improving the Work, but
|
|
||||||
excluding communication that is conspicuously marked or otherwise
|
|
||||||
designated in writing by the copyright owner as "Not a Contribution."
|
|
||||||
|
|
||||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
||||||
on behalf of whom a Contribution has been received by Licensor and
|
|
||||||
subsequently incorporated within the Work.
|
|
||||||
|
|
||||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
copyright license to reproduce, prepare Derivative Works of,
|
|
||||||
publicly display, publicly perform, sublicense, and distribute the
|
|
||||||
Work and such Derivative Works in Source or Object form.
|
|
||||||
|
|
||||||
3. Grant of Patent License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
(except as stated in this section) patent license to make, have made,
|
|
||||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
||||||
where such license applies only to those patent claims licensable
|
|
||||||
by such Contributor that are necessarily infringed by their
|
|
||||||
Contribution(s) alone or by combination of their Contribution(s)
|
|
||||||
with the Work to which such Contribution(s) was submitted. If You
|
|
||||||
institute patent litigation against any entity (including a
|
|
||||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
||||||
or a Contribution incorporated within the Work constitutes direct
|
|
||||||
or contributory patent infringement, then any patent licenses
|
|
||||||
granted to You under this License for that Work shall terminate
|
|
||||||
as of the date such litigation is filed.
|
|
||||||
|
|
||||||
4. Redistribution. You may reproduce and distribute copies of the
|
|
||||||
Work or Derivative Works thereof in any medium, with or without
|
|
||||||
modifications, and in Source or Object form, provided that You
|
|
||||||
meet the following conditions:
|
|
||||||
|
|
||||||
(a) You must give any other recipients of the Work or
|
|
||||||
Derivative Works a copy of this License; and
|
|
||||||
|
|
||||||
(b) You must cause any modified files to carry prominent notices
|
|
||||||
stating that You changed the files; and
|
|
||||||
|
|
||||||
(c) You must retain, in the Source form of any Derivative Works
|
|
||||||
that You distribute, all copyright, patent, trademark, and
|
|
||||||
attribution notices from the Source form of the Work,
|
|
||||||
excluding those notices that do not pertain to any part of
|
|
||||||
the Derivative Works; and
|
|
||||||
|
|
||||||
(d) If the Work includes a "NOTICE" text file as part of its
|
|
||||||
distribution, then any Derivative Works that You distribute must
|
|
||||||
include a readable copy of the attribution notices contained
|
|
||||||
within such NOTICE file, excluding those notices that do not
|
|
||||||
pertain to any part of the Derivative Works, in at least one
|
|
||||||
of the following places: within a NOTICE text file distributed
|
|
||||||
as part of the Derivative Works; within the Source form or
|
|
||||||
documentation, if provided along with the Derivative Works; or,
|
|
||||||
within a display generated by the Derivative Works, if and
|
|
||||||
wherever such third-party notices normally appear. The contents
|
|
||||||
of the NOTICE file are for informational purposes only and
|
|
||||||
do not modify the License. You may add Your own attribution
|
|
||||||
notices within Derivative Works that You distribute, alongside
|
|
||||||
or as an addendum to the NOTICE text from the Work, provided
|
|
||||||
that such additional attribution notices cannot be construed
|
|
||||||
as modifying the License.
|
|
||||||
|
|
||||||
You may add Your own copyright statement to Your modifications and
|
|
||||||
may provide additional or different license terms and conditions
|
|
||||||
for use, reproduction, or distribution of Your modifications, or
|
|
||||||
for any such Derivative Works as a whole, provided Your use,
|
|
||||||
reproduction, and distribution of the Work otherwise complies with
|
|
||||||
the conditions stated in this License.
|
|
||||||
|
|
||||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
||||||
any Contribution intentionally submitted for inclusion in the Work
|
|
||||||
by You to the Licensor shall be under the terms and conditions of
|
|
||||||
this License, without any additional terms or conditions.
|
|
||||||
Notwithstanding the above, nothing herein shall supersede or modify
|
|
||||||
the terms of any separate license agreement you may have executed
|
|
||||||
with Licensor regarding such Contributions.
|
|
||||||
|
|
||||||
6. Trademarks. This License does not grant permission to use the trade
|
|
||||||
names, trademarks, service marks, or product names of the Licensor,
|
|
||||||
except as required for reasonable and customary use in describing the
|
|
||||||
origin of the Work and reproducing the content of the NOTICE file.
|
|
||||||
|
|
||||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
||||||
agreed to in writing, Licensor provides the Work (and each
|
|
||||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
||||||
implied, including, without limitation, any warranties or conditions
|
|
||||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
||||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
||||||
appropriateness of using or redistributing the Work and assume any
|
|
||||||
risks associated with Your exercise of permissions under this License.
|
|
||||||
|
|
||||||
8. Limitation of Liability. In no event and under no legal theory,
|
|
||||||
whether in tort (including negligence), contract, or otherwise,
|
|
||||||
unless required by applicable law (such as deliberate and grossly
|
|
||||||
negligent acts) or agreed to in writing, shall any Contributor be
|
|
||||||
liable to You for damages, including any direct, indirect, special,
|
|
||||||
incidental, or consequential damages of any character arising as a
|
|
||||||
result of this License or out of the use or inability to use the
|
|
||||||
Work (including but not limited to damages for loss of goodwill,
|
|
||||||
work stoppage, computer failure or malfunction, or any and all
|
|
||||||
other commercial damages or losses), even if such Contributor
|
|
||||||
has been advised of the possibility of such damages.
|
|
||||||
|
|
||||||
9. Accepting Warranty or Additional Liability. While redistributing
|
|
||||||
the Work or Derivative Works thereof, You may choose to offer,
|
|
||||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
||||||
or other liability obligations and/or rights consistent with this
|
|
||||||
License. However, in accepting such obligations, You may act only
|
|
||||||
on Your own behalf and on Your sole responsibility, not on behalf
|
|
||||||
of any other Contributor, and only if You agree to indemnify,
|
|
||||||
defend, and hold each Contributor harmless for any liability
|
|
||||||
incurred by, or claims asserted against, such Contributor by reason
|
|
||||||
of your accepting any such warranty or additional liability.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
APPENDIX: How to apply the Apache License to your work.
|
|
||||||
|
|
||||||
To apply the Apache License to your work, attach the following
|
|
||||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
||||||
replaced with your own identifying information. (Don't include
|
|
||||||
the brackets!) The text should be enclosed in the appropriate
|
|
||||||
comment syntax for the file format. We also recommend that a
|
|
||||||
file or class name and description of purpose be included on the
|
|
||||||
same "printed page" as the copyright notice for easier
|
|
||||||
identification within third-party archives.
|
|
||||||
|
|
||||||
Copyright [yyyy] [name of copyright owner]
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
|
@ -1,61 +0,0 @@
|
||||||
# OpenCensus Agent Go Exporter
|
|
||||||
|
|
||||||
[![Build Status][travis-image]][travis-url] [![GoDoc][godoc-image]][godoc-url]
|
|
||||||
|
|
||||||
|
|
||||||
This repository contains the Go implementation of the OpenCensus Agent (OC-Agent) Exporter.
|
|
||||||
OC-Agent is a deamon process running in a VM that can retrieve spans/stats/metrics from
|
|
||||||
OpenCensus Library, export them to other backends and possibly push configurations back to
|
|
||||||
Library. See more details on [OC-Agent Readme][OCAgentReadme].
|
|
||||||
|
|
||||||
Note: This is an experimental repository and is likely to get backwards-incompatible changes.
|
|
||||||
Ultimately we may want to move the OC-Agent Go Exporter to [OpenCensus Go core library][OpenCensusGo].
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ go get -u contrib.go.opencensus.io/exporter/ocagent
|
|
||||||
```
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```go
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"contrib.go.opencensus.io/exporter/ocagent"
|
|
||||||
"go.opencensus.io/trace"
|
|
||||||
)
|
|
||||||
|
|
||||||
func Example() {
|
|
||||||
exp, err := ocagent.NewExporter(ocagent.WithInsecure(), ocagent.WithServiceName("your-service-name"))
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Failed to create the agent exporter: %v", err)
|
|
||||||
}
|
|
||||||
defer exp.Stop()
|
|
||||||
|
|
||||||
// Now register it as a trace exporter.
|
|
||||||
trace.RegisterExporter(exp)
|
|
||||||
|
|
||||||
// Then use the OpenCensus tracing library, like we normally would.
|
|
||||||
ctx, span := trace.StartSpan(context.Background(), "AgentExporter-Example")
|
|
||||||
defer span.End()
|
|
||||||
|
|
||||||
for i := 0; i < 10; i++ {
|
|
||||||
_, iSpan := trace.StartSpan(ctx, fmt.Sprintf("Sample-%d", i))
|
|
||||||
<-time.After(6 * time.Millisecond)
|
|
||||||
iSpan.End()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
[OCAgentReadme]: https://github.com/census-instrumentation/opencensus-proto/tree/master/opencensus/proto/agent#opencensus-agent-proto
|
|
||||||
[OpenCensusGo]: https://github.com/census-instrumentation/opencensus-go
|
|
||||||
[godoc-image]: https://godoc.org/contrib.go.opencensus.io/exporter/ocagent?status.svg
|
|
||||||
[godoc-url]: https://godoc.org/contrib.go.opencensus.io/exporter/ocagent
|
|
||||||
[travis-image]: https://travis-ci.org/census-ecosystem/opencensus-go-exporter-ocagent.svg?branch=master
|
|
||||||
[travis-url]: https://travis-ci.org/census-ecosystem/opencensus-go-exporter-ocagent
|
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
// Copyright 2018, OpenCensus Authors
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package ocagent
|
|
||||||
|
|
||||||
import (
|
|
||||||
"math/rand"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
var randSrc = rand.New(rand.NewSource(time.Now().UnixNano()))
|
|
||||||
|
|
||||||
// retries function fn upto n times, if fn returns an error lest it returns nil early.
|
|
||||||
// It applies exponential backoff in units of (1<<n) + jitter microsends.
|
|
||||||
func nTriesWithExponentialBackoff(nTries int64, timeBaseUnit time.Duration, fn func() error) (err error) {
|
|
||||||
for i := int64(0); i < nTries; i++ {
|
|
||||||
err = fn()
|
|
||||||
if err == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
// Backoff for a time period with a pseudo-random jitter
|
|
||||||
jitter := time.Duration(randSrc.Float64()*100) * time.Microsecond
|
|
||||||
ts := jitter + ((1 << uint64(i)) * timeBaseUnit)
|
|
||||||
<-time.After(ts)
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
|
@ -1,97 +0,0 @@
|
||||||
// Copyright 2018, OpenCensus Authors
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package ocagent
|
|
||||||
|
|
||||||
import (
|
|
||||||
"math/rand"
|
|
||||||
"sync/atomic"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
sDisconnected int32 = 5 + iota
|
|
||||||
sConnected
|
|
||||||
)
|
|
||||||
|
|
||||||
func (ae *Exporter) setStateDisconnected() {
|
|
||||||
atomic.StoreInt32(&ae.connectionState, sDisconnected)
|
|
||||||
select {
|
|
||||||
case ae.disconnectedCh <- true:
|
|
||||||
default:
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ae *Exporter) setStateConnected() {
|
|
||||||
atomic.StoreInt32(&ae.connectionState, sConnected)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ae *Exporter) connected() bool {
|
|
||||||
return atomic.LoadInt32(&ae.connectionState) == sConnected
|
|
||||||
}
|
|
||||||
|
|
||||||
const defaultConnReattemptPeriod = 10 * time.Second
|
|
||||||
|
|
||||||
func (ae *Exporter) indefiniteBackgroundConnection() error {
|
|
||||||
defer func() {
|
|
||||||
ae.backgroundConnectionDoneCh <- true
|
|
||||||
}()
|
|
||||||
|
|
||||||
connReattemptPeriod := ae.reconnectionPeriod
|
|
||||||
if connReattemptPeriod <= 0 {
|
|
||||||
connReattemptPeriod = defaultConnReattemptPeriod
|
|
||||||
}
|
|
||||||
|
|
||||||
// No strong seeding required, nano time can
|
|
||||||
// already help with pseudo uniqueness.
|
|
||||||
rng := rand.New(rand.NewSource(time.Now().UnixNano() + rand.Int63n(1024)))
|
|
||||||
|
|
||||||
// maxJitter: 1 + (70% of the connectionReattemptPeriod)
|
|
||||||
maxJitter := int64(1 + 0.7*float64(connReattemptPeriod))
|
|
||||||
|
|
||||||
for {
|
|
||||||
// Otherwise these will be the normal scenarios to enable
|
|
||||||
// reconnections if we trip out.
|
|
||||||
// 1. If we've stopped, return entirely
|
|
||||||
// 2. Otherwise block until we are disconnected, and
|
|
||||||
// then retry connecting
|
|
||||||
select {
|
|
||||||
case <-ae.stopCh:
|
|
||||||
return errStopped
|
|
||||||
|
|
||||||
case <-ae.disconnectedCh:
|
|
||||||
// Normal scenario that we'll wait for
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := ae.connect(); err == nil {
|
|
||||||
ae.setStateConnected()
|
|
||||||
} else {
|
|
||||||
ae.setStateDisconnected()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Apply some jitter to avoid lockstep retrials of other
|
|
||||||
// agent-exporters. Lockstep retrials could result in an
|
|
||||||
// innocent DDOS, by clogging the machine's resources and network.
|
|
||||||
jitter := time.Duration(rng.Int63n(maxJitter))
|
|
||||||
<-time.After(connReattemptPeriod + jitter)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ae *Exporter) connect() error {
|
|
||||||
cc, err := ae.dialToAgent()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return ae.enableConnectionStreams(cc)
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
module contrib.go.opencensus.io/exporter/ocagent
|
|
||||||
|
|
||||||
require (
|
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.0 // this is to match the version used in census-instrumentation/opencensus-service
|
|
||||||
github.com/golang/protobuf v1.3.1
|
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.8.5 // indirect
|
|
||||||
go.opencensus.io v0.20.2
|
|
||||||
google.golang.org/api v0.3.1
|
|
||||||
google.golang.org/grpc v1.19.1
|
|
||||||
)
|
|
|
@ -1,130 +0,0 @@
|
||||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
|
||||||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
|
||||||
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
|
|
||||||
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
|
|
||||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
|
||||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
|
||||||
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
|
|
||||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.0 h1:LzQXZOgg4CQfE6bFvXGM30YZL1WW/M337pXml+GrcZ4=
|
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
|
||||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
|
||||||
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
|
|
||||||
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
|
|
||||||
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
|
|
||||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
|
||||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
|
||||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
|
||||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
|
||||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
|
||||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
|
||||||
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
|
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
|
||||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
|
||||||
github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
|
|
||||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
|
||||||
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
|
|
||||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
|
||||||
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
|
||||||
github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
|
|
||||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
|
||||||
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
|
||||||
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.8.5 h1:2+KSC78XiO6Qy0hIjfc1OD9H+hsaJdJlb8Kqsd41CTE=
|
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
|
||||||
github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
|
|
||||||
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
|
||||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
|
||||||
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
|
||||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
|
||||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
|
||||||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
|
|
||||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
|
||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
|
||||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
|
||||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
|
||||||
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
|
||||||
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
|
||||||
github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
|
|
||||||
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
|
|
||||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
|
||||||
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
|
||||||
github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
|
|
||||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
|
||||||
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
|
||||||
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
|
||||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
|
||||||
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
|
||||||
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
|
||||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
|
||||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
|
||||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
|
||||||
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
|
||||||
go.opencensus.io v0.20.2 h1:NAfh7zF0/3/HqtMvJNZ/RFrSlCE6ZTlHmKfhL/Dm1Jk=
|
|
||||||
go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
|
||||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
|
||||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
|
||||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
|
||||||
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628=
|
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA=
|
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6 h1:bjcUS9ztw9kFmmIxJInhon/0Is3p+EHBKNgquIzo1OI=
|
|
||||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
|
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
|
||||||
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
|
||||||
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
|
||||||
google.golang.org/api v0.3.1 h1:oJra/lMfmtm13/rgY/8i3MzjFWYXvQIAKjQ3HqofMk8=
|
|
||||||
google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
|
|
||||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
|
||||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
|
||||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
|
||||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19 h1:Lj2SnHtxkRGJDqnGaSjo+CCdIieEnwVazbOXILwQemk=
|
|
||||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
|
||||||
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
|
||||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
|
||||||
google.golang.org/grpc v1.19.1 h1:TrBcJ1yqAl1G++wO39nD/qtgpsW9/1+QGrluyMGEYgM=
|
|
||||||
google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
|
||||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
|
||||||
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
|
||||||
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
|
|
||||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|
||||||
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
|
||||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
|
|
@ -1,46 +0,0 @@
|
||||||
// Copyright 2018, OpenCensus Authors
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package ocagent
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
|
|
||||||
commonpb "github.com/census-instrumentation/opencensus-proto/gen-go/agent/common/v1"
|
|
||||||
"go.opencensus.io"
|
|
||||||
)
|
|
||||||
|
|
||||||
// NodeWithStartTime creates a node using nodeName and derives:
|
|
||||||
// Hostname from the environment
|
|
||||||
// Pid from the current process
|
|
||||||
// StartTimestamp from the start time of this process
|
|
||||||
// Language and library information.
|
|
||||||
func NodeWithStartTime(nodeName string) *commonpb.Node {
|
|
||||||
return &commonpb.Node{
|
|
||||||
Identifier: &commonpb.ProcessIdentifier{
|
|
||||||
HostName: os.Getenv("HOSTNAME"),
|
|
||||||
Pid: uint32(os.Getpid()),
|
|
||||||
StartTimestamp: timeToTimestamp(startTime),
|
|
||||||
},
|
|
||||||
LibraryInfo: &commonpb.LibraryInfo{
|
|
||||||
Language: commonpb.LibraryInfo_GO_LANG,
|
|
||||||
ExporterVersion: Version,
|
|
||||||
CoreLibraryVersion: opencensus.Version(),
|
|
||||||
},
|
|
||||||
ServiceInfo: &commonpb.ServiceInfo{
|
|
||||||
Name: nodeName,
|
|
||||||
},
|
|
||||||
Attributes: make(map[string]string),
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,496 +0,0 @@
|
||||||
// Copyright 2018, OpenCensus Authors
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package ocagent
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
"sync"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"google.golang.org/api/support/bundler"
|
|
||||||
"google.golang.org/grpc"
|
|
||||||
"google.golang.org/grpc/credentials"
|
|
||||||
"google.golang.org/grpc/metadata"
|
|
||||||
|
|
||||||
"go.opencensus.io/plugin/ocgrpc"
|
|
||||||
"go.opencensus.io/resource"
|
|
||||||
"go.opencensus.io/stats/view"
|
|
||||||
"go.opencensus.io/trace"
|
|
||||||
|
|
||||||
commonpb "github.com/census-instrumentation/opencensus-proto/gen-go/agent/common/v1"
|
|
||||||
agentmetricspb "github.com/census-instrumentation/opencensus-proto/gen-go/agent/metrics/v1"
|
|
||||||
agenttracepb "github.com/census-instrumentation/opencensus-proto/gen-go/agent/trace/v1"
|
|
||||||
metricspb "github.com/census-instrumentation/opencensus-proto/gen-go/metrics/v1"
|
|
||||||
resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1"
|
|
||||||
tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1"
|
|
||||||
)
|
|
||||||
|
|
||||||
var startupMu sync.Mutex
|
|
||||||
var startTime time.Time
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
startupMu.Lock()
|
|
||||||
startTime = time.Now()
|
|
||||||
startupMu.Unlock()
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ trace.Exporter = (*Exporter)(nil)
|
|
||||||
var _ view.Exporter = (*Exporter)(nil)
|
|
||||||
|
|
||||||
type Exporter struct {
|
|
||||||
connectionState int32
|
|
||||||
|
|
||||||
// mu protects the non-atomic and non-channel variables
|
|
||||||
mu sync.RWMutex
|
|
||||||
// senderMu protects the concurrent unsafe traceExporter client
|
|
||||||
senderMu sync.RWMutex
|
|
||||||
started bool
|
|
||||||
stopped bool
|
|
||||||
agentAddress string
|
|
||||||
serviceName string
|
|
||||||
canDialInsecure bool
|
|
||||||
traceExporter agenttracepb.TraceService_ExportClient
|
|
||||||
metricsExporter agentmetricspb.MetricsService_ExportClient
|
|
||||||
nodeInfo *commonpb.Node
|
|
||||||
grpcClientConn *grpc.ClientConn
|
|
||||||
reconnectionPeriod time.Duration
|
|
||||||
resource *resourcepb.Resource
|
|
||||||
compressor string
|
|
||||||
headers map[string]string
|
|
||||||
|
|
||||||
startOnce sync.Once
|
|
||||||
stopCh chan bool
|
|
||||||
disconnectedCh chan bool
|
|
||||||
|
|
||||||
backgroundConnectionDoneCh chan bool
|
|
||||||
|
|
||||||
traceBundler *bundler.Bundler
|
|
||||||
|
|
||||||
// viewDataBundler is the bundler to enable conversion
|
|
||||||
// from OpenCensus-Go view.Data to metricspb.Metric.
|
|
||||||
// Please do not confuse it with metricsBundler!
|
|
||||||
viewDataBundler *bundler.Bundler
|
|
||||||
|
|
||||||
clientTransportCredentials credentials.TransportCredentials
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewExporter(opts ...ExporterOption) (*Exporter, error) {
|
|
||||||
exp, err := NewUnstartedExporter(opts...)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if err := exp.Start(); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return exp, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
const spanDataBufferSize = 300
|
|
||||||
|
|
||||||
func NewUnstartedExporter(opts ...ExporterOption) (*Exporter, error) {
|
|
||||||
e := new(Exporter)
|
|
||||||
for _, opt := range opts {
|
|
||||||
opt.withExporter(e)
|
|
||||||
}
|
|
||||||
traceBundler := bundler.NewBundler((*trace.SpanData)(nil), func(bundle interface{}) {
|
|
||||||
e.uploadTraces(bundle.([]*trace.SpanData))
|
|
||||||
})
|
|
||||||
traceBundler.DelayThreshold = 2 * time.Second
|
|
||||||
traceBundler.BundleCountThreshold = spanDataBufferSize
|
|
||||||
e.traceBundler = traceBundler
|
|
||||||
|
|
||||||
viewDataBundler := bundler.NewBundler((*view.Data)(nil), func(bundle interface{}) {
|
|
||||||
e.uploadViewData(bundle.([]*view.Data))
|
|
||||||
})
|
|
||||||
viewDataBundler.DelayThreshold = 2 * time.Second
|
|
||||||
viewDataBundler.BundleCountThreshold = 500 // TODO: (@odeke-em) make this configurable.
|
|
||||||
e.viewDataBundler = viewDataBundler
|
|
||||||
e.nodeInfo = NodeWithStartTime(e.serviceName)
|
|
||||||
e.resource = resourceProtoFromEnv()
|
|
||||||
|
|
||||||
return e, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
|
||||||
maxInitialConfigRetries = 10
|
|
||||||
maxInitialTracesRetries = 10
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
errAlreadyStarted = errors.New("already started")
|
|
||||||
errNotStarted = errors.New("not started")
|
|
||||||
errStopped = errors.New("stopped")
|
|
||||||
errNoConnection = errors.New("no active connection")
|
|
||||||
)
|
|
||||||
|
|
||||||
// Start dials to the agent, establishing a connection to it. It also
|
|
||||||
// initiates the Config and Trace services by sending over the initial
|
|
||||||
// messages that consist of the node identifier. Start invokes a background
|
|
||||||
// connector that will reattempt connections to the agent periodically
|
|
||||||
// if the connection dies.
|
|
||||||
func (ae *Exporter) Start() error {
|
|
||||||
var err = errAlreadyStarted
|
|
||||||
ae.startOnce.Do(func() {
|
|
||||||
ae.mu.Lock()
|
|
||||||
defer ae.mu.Unlock()
|
|
||||||
|
|
||||||
ae.started = true
|
|
||||||
ae.disconnectedCh = make(chan bool, 1)
|
|
||||||
ae.stopCh = make(chan bool)
|
|
||||||
ae.backgroundConnectionDoneCh = make(chan bool)
|
|
||||||
|
|
||||||
ae.setStateDisconnected()
|
|
||||||
go ae.indefiniteBackgroundConnection()
|
|
||||||
|
|
||||||
err = nil
|
|
||||||
})
|
|
||||||
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ae *Exporter) prepareAgentAddress() string {
|
|
||||||
if ae.agentAddress != "" {
|
|
||||||
return ae.agentAddress
|
|
||||||
}
|
|
||||||
return fmt.Sprintf("%s:%d", DefaultAgentHost, DefaultAgentPort)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ae *Exporter) enableConnectionStreams(cc *grpc.ClientConn) error {
|
|
||||||
ae.mu.RLock()
|
|
||||||
started := ae.started
|
|
||||||
nodeInfo := ae.nodeInfo
|
|
||||||
ae.mu.RUnlock()
|
|
||||||
|
|
||||||
if !started {
|
|
||||||
return errNotStarted
|
|
||||||
}
|
|
||||||
|
|
||||||
ae.mu.Lock()
|
|
||||||
// If the previous clientConn was non-nil, close it
|
|
||||||
if ae.grpcClientConn != nil {
|
|
||||||
_ = ae.grpcClientConn.Close()
|
|
||||||
}
|
|
||||||
ae.grpcClientConn = cc
|
|
||||||
ae.mu.Unlock()
|
|
||||||
|
|
||||||
if err := ae.createTraceServiceConnection(ae.grpcClientConn, nodeInfo); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return ae.createMetricsServiceConnection(ae.grpcClientConn, nodeInfo)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ae *Exporter) createTraceServiceConnection(cc *grpc.ClientConn, node *commonpb.Node) error {
|
|
||||||
// Initiate the trace service by sending over node identifier info.
|
|
||||||
traceSvcClient := agenttracepb.NewTraceServiceClient(cc)
|
|
||||||
ctx := context.Background()
|
|
||||||
if len(ae.headers) > 0 {
|
|
||||||
ctx = metadata.NewOutgoingContext(ctx, metadata.New(ae.headers))
|
|
||||||
}
|
|
||||||
traceExporter, err := traceSvcClient.Export(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("Exporter.Start:: TraceServiceClient: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
firstTraceMessage := &agenttracepb.ExportTraceServiceRequest{
|
|
||||||
Node: node,
|
|
||||||
Resource: ae.resource,
|
|
||||||
}
|
|
||||||
if err := traceExporter.Send(firstTraceMessage); err != nil {
|
|
||||||
return fmt.Errorf("Exporter.Start:: Failed to initiate the Config service: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
ae.mu.Lock()
|
|
||||||
ae.traceExporter = traceExporter
|
|
||||||
ae.mu.Unlock()
|
|
||||||
|
|
||||||
// Initiate the config service by sending over node identifier info.
|
|
||||||
configStream, err := traceSvcClient.Config(context.Background())
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("Exporter.Start:: ConfigStream: %v", err)
|
|
||||||
}
|
|
||||||
firstCfgMessage := &agenttracepb.CurrentLibraryConfig{Node: node}
|
|
||||||
if err := configStream.Send(firstCfgMessage); err != nil {
|
|
||||||
return fmt.Errorf("Exporter.Start:: Failed to initiate the Config service: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// In the background, handle trace configurations that are beamed down
|
|
||||||
// by the agent, but also reply to it with the applied configuration.
|
|
||||||
go ae.handleConfigStreaming(configStream)
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ae *Exporter) createMetricsServiceConnection(cc *grpc.ClientConn, node *commonpb.Node) error {
|
|
||||||
metricsSvcClient := agentmetricspb.NewMetricsServiceClient(cc)
|
|
||||||
metricsExporter, err := metricsSvcClient.Export(context.Background())
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("MetricsExporter: failed to start the service client: %v", err)
|
|
||||||
}
|
|
||||||
// Initiate the metrics service by sending over the first message just containing the Node and Resource.
|
|
||||||
firstMetricsMessage := &agentmetricspb.ExportMetricsServiceRequest{
|
|
||||||
Node: node,
|
|
||||||
Resource: ae.resource,
|
|
||||||
}
|
|
||||||
if err := metricsExporter.Send(firstMetricsMessage); err != nil {
|
|
||||||
return fmt.Errorf("MetricsExporter:: failed to send the first message: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
ae.mu.Lock()
|
|
||||||
ae.metricsExporter = metricsExporter
|
|
||||||
ae.mu.Unlock()
|
|
||||||
|
|
||||||
// With that we are good to go and can start sending metrics
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ae *Exporter) dialToAgent() (*grpc.ClientConn, error) {
|
|
||||||
addr := ae.prepareAgentAddress()
|
|
||||||
var dialOpts []grpc.DialOption
|
|
||||||
if ae.clientTransportCredentials != nil {
|
|
||||||
dialOpts = append(dialOpts, grpc.WithTransportCredentials(ae.clientTransportCredentials))
|
|
||||||
} else if ae.canDialInsecure {
|
|
||||||
dialOpts = append(dialOpts, grpc.WithInsecure())
|
|
||||||
}
|
|
||||||
if ae.compressor != "" {
|
|
||||||
dialOpts = append(dialOpts, grpc.WithDefaultCallOptions(grpc.UseCompressor(ae.compressor)))
|
|
||||||
}
|
|
||||||
dialOpts = append(dialOpts, grpc.WithStatsHandler(&ocgrpc.ClientHandler{}))
|
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
if len(ae.headers) > 0 {
|
|
||||||
ctx = metadata.NewOutgoingContext(ctx, metadata.New(ae.headers))
|
|
||||||
}
|
|
||||||
return grpc.DialContext(ctx, addr, dialOpts...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ae *Exporter) handleConfigStreaming(configStream agenttracepb.TraceService_ConfigClient) error {
|
|
||||||
// Note: We haven't yet implemented configuration sending so we
|
|
||||||
// should NOT be changing connection states within this function for now.
|
|
||||||
for {
|
|
||||||
recv, err := configStream.Recv()
|
|
||||||
if err != nil {
|
|
||||||
// TODO: Check if this is a transient error or exponential backoff-able.
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
cfg := recv.Config
|
|
||||||
if cfg == nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
// Otherwise now apply the trace configuration sent down from the agent
|
|
||||||
if psamp := cfg.GetProbabilitySampler(); psamp != nil {
|
|
||||||
trace.ApplyConfig(trace.Config{DefaultSampler: trace.ProbabilitySampler(psamp.SamplingProbability)})
|
|
||||||
} else if csamp := cfg.GetConstantSampler(); csamp != nil {
|
|
||||||
alwaysSample := csamp.Decision == tracepb.ConstantSampler_ALWAYS_ON
|
|
||||||
if alwaysSample {
|
|
||||||
trace.ApplyConfig(trace.Config{DefaultSampler: trace.AlwaysSample()})
|
|
||||||
} else {
|
|
||||||
trace.ApplyConfig(trace.Config{DefaultSampler: trace.NeverSample()})
|
|
||||||
}
|
|
||||||
} else { // TODO: Add the rate limiting sampler here
|
|
||||||
}
|
|
||||||
|
|
||||||
// Then finally send back to upstream the newly applied configuration
|
|
||||||
err = configStream.Send(&agenttracepb.CurrentLibraryConfig{Config: &tracepb.TraceConfig{Sampler: cfg.Sampler}})
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Stop shuts down all the connections and resources
|
|
||||||
// related to the exporter.
|
|
||||||
func (ae *Exporter) Stop() error {
|
|
||||||
ae.mu.RLock()
|
|
||||||
cc := ae.grpcClientConn
|
|
||||||
started := ae.started
|
|
||||||
stopped := ae.stopped
|
|
||||||
ae.mu.RUnlock()
|
|
||||||
|
|
||||||
if !started {
|
|
||||||
return errNotStarted
|
|
||||||
}
|
|
||||||
if stopped {
|
|
||||||
// TODO: tell the user that we've already stopped, so perhaps a sentinel error?
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
ae.Flush()
|
|
||||||
|
|
||||||
// Now close the underlying gRPC connection.
|
|
||||||
var err error
|
|
||||||
if cc != nil {
|
|
||||||
err = cc.Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
// At this point we can change the state variables: started and stopped
|
|
||||||
ae.mu.Lock()
|
|
||||||
ae.started = false
|
|
||||||
ae.stopped = true
|
|
||||||
ae.mu.Unlock()
|
|
||||||
close(ae.stopCh)
|
|
||||||
|
|
||||||
// Ensure that the backgroundConnector returns
|
|
||||||
<-ae.backgroundConnectionDoneCh
|
|
||||||
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ae *Exporter) ExportSpan(sd *trace.SpanData) {
|
|
||||||
if sd == nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
_ = ae.traceBundler.Add(sd, 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ae *Exporter) ExportTraceServiceRequest(batch *agenttracepb.ExportTraceServiceRequest) error {
|
|
||||||
if batch == nil || len(batch.Spans) == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
select {
|
|
||||||
case <-ae.stopCh:
|
|
||||||
return errStopped
|
|
||||||
|
|
||||||
default:
|
|
||||||
if !ae.connected() {
|
|
||||||
return errNoConnection
|
|
||||||
}
|
|
||||||
|
|
||||||
ae.senderMu.Lock()
|
|
||||||
err := ae.traceExporter.Send(batch)
|
|
||||||
ae.senderMu.Unlock()
|
|
||||||
if err != nil {
|
|
||||||
ae.setStateDisconnected()
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ae *Exporter) ExportView(vd *view.Data) {
|
|
||||||
if vd == nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
_ = ae.viewDataBundler.Add(vd, 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
func ocSpanDataToPbSpans(sdl []*trace.SpanData) []*tracepb.Span {
|
|
||||||
if len(sdl) == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
protoSpans := make([]*tracepb.Span, 0, len(sdl))
|
|
||||||
for _, sd := range sdl {
|
|
||||||
if sd != nil {
|
|
||||||
protoSpans = append(protoSpans, ocSpanToProtoSpan(sd))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return protoSpans
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ae *Exporter) uploadTraces(sdl []*trace.SpanData) {
|
|
||||||
select {
|
|
||||||
case <-ae.stopCh:
|
|
||||||
return
|
|
||||||
|
|
||||||
default:
|
|
||||||
if !ae.connected() {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
protoSpans := ocSpanDataToPbSpans(sdl)
|
|
||||||
if len(protoSpans) == 0 {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
ae.senderMu.Lock()
|
|
||||||
err := ae.traceExporter.Send(&agenttracepb.ExportTraceServiceRequest{
|
|
||||||
Spans: protoSpans,
|
|
||||||
})
|
|
||||||
ae.senderMu.Unlock()
|
|
||||||
if err != nil {
|
|
||||||
ae.setStateDisconnected()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func ocViewDataToPbMetrics(vdl []*view.Data) []*metricspb.Metric {
|
|
||||||
if len(vdl) == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
metrics := make([]*metricspb.Metric, 0, len(vdl))
|
|
||||||
for _, vd := range vdl {
|
|
||||||
if vd != nil {
|
|
||||||
vmetric, err := viewDataToMetric(vd)
|
|
||||||
// TODO: (@odeke-em) somehow report this error, if it is non-nil.
|
|
||||||
if err == nil && vmetric != nil {
|
|
||||||
metrics = append(metrics, vmetric)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return metrics
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ae *Exporter) uploadViewData(vdl []*view.Data) {
|
|
||||||
select {
|
|
||||||
case <-ae.stopCh:
|
|
||||||
return
|
|
||||||
|
|
||||||
default:
|
|
||||||
if !ae.connected() {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
protoMetrics := ocViewDataToPbMetrics(vdl)
|
|
||||||
if len(protoMetrics) == 0 {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
err := ae.metricsExporter.Send(&agentmetricspb.ExportMetricsServiceRequest{
|
|
||||||
Metrics: protoMetrics,
|
|
||||||
// TODO:(@odeke-em)
|
|
||||||
// a) Figure out how to derive a Node from the environment
|
|
||||||
// b) Figure out how to derive a Resource from the environment
|
|
||||||
// or better letting users of the exporter configure it.
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
ae.setStateDisconnected()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ae *Exporter) Flush() {
|
|
||||||
ae.traceBundler.Flush()
|
|
||||||
ae.viewDataBundler.Flush()
|
|
||||||
}
|
|
||||||
|
|
||||||
func resourceProtoFromEnv() *resourcepb.Resource {
|
|
||||||
rs, _ := resource.FromEnv(context.Background())
|
|
||||||
if rs == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
rprs := &resourcepb.Resource{
|
|
||||||
Type: rs.Type,
|
|
||||||
}
|
|
||||||
if rs.Labels != nil {
|
|
||||||
rprs.Labels = make(map[string]string)
|
|
||||||
for k, v := range rs.Labels {
|
|
||||||
rprs.Labels[k] = v
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return rprs
|
|
||||||
}
|
|
|
@ -1,128 +0,0 @@
|
||||||
// Copyright 2018, OpenCensus Authors
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package ocagent
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"google.golang.org/grpc/credentials"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
DefaultAgentPort uint16 = 55678
|
|
||||||
DefaultAgentHost string = "localhost"
|
|
||||||
)
|
|
||||||
|
|
||||||
type ExporterOption interface {
|
|
||||||
withExporter(e *Exporter)
|
|
||||||
}
|
|
||||||
|
|
||||||
type insecureGrpcConnection int
|
|
||||||
|
|
||||||
var _ ExporterOption = (*insecureGrpcConnection)(nil)
|
|
||||||
|
|
||||||
func (igc *insecureGrpcConnection) withExporter(e *Exporter) {
|
|
||||||
e.canDialInsecure = true
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithInsecure disables client transport security for the exporter's gRPC connection
|
|
||||||
// just like grpc.WithInsecure() https://godoc.org/google.golang.org/grpc#WithInsecure
|
|
||||||
// does. Note, by default, client security is required unless WithInsecure is used.
|
|
||||||
func WithInsecure() ExporterOption { return new(insecureGrpcConnection) }
|
|
||||||
|
|
||||||
type addressSetter string
|
|
||||||
|
|
||||||
func (as addressSetter) withExporter(e *Exporter) {
|
|
||||||
e.agentAddress = string(as)
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ ExporterOption = (*addressSetter)(nil)
|
|
||||||
|
|
||||||
// WithAddress allows one to set the address that the exporter will
|
|
||||||
// connect to the agent on. If unset, it will instead try to use
|
|
||||||
// connect to DefaultAgentHost:DefaultAgentPort
|
|
||||||
func WithAddress(addr string) ExporterOption {
|
|
||||||
return addressSetter(addr)
|
|
||||||
}
|
|
||||||
|
|
||||||
type serviceNameSetter string
|
|
||||||
|
|
||||||
func (sns serviceNameSetter) withExporter(e *Exporter) {
|
|
||||||
e.serviceName = string(sns)
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ ExporterOption = (*serviceNameSetter)(nil)
|
|
||||||
|
|
||||||
// WithServiceName allows one to set/override the service name
|
|
||||||
// that the exporter will report to the agent.
|
|
||||||
func WithServiceName(serviceName string) ExporterOption {
|
|
||||||
return serviceNameSetter(serviceName)
|
|
||||||
}
|
|
||||||
|
|
||||||
type reconnectionPeriod time.Duration
|
|
||||||
|
|
||||||
func (rp reconnectionPeriod) withExporter(e *Exporter) {
|
|
||||||
e.reconnectionPeriod = time.Duration(rp)
|
|
||||||
}
|
|
||||||
|
|
||||||
func WithReconnectionPeriod(rp time.Duration) ExporterOption {
|
|
||||||
return reconnectionPeriod(rp)
|
|
||||||
}
|
|
||||||
|
|
||||||
type compressorSetter string
|
|
||||||
|
|
||||||
func (c compressorSetter) withExporter(e *Exporter) {
|
|
||||||
e.compressor = string(c)
|
|
||||||
}
|
|
||||||
|
|
||||||
// UseCompressor will set the compressor for the gRPC client to use when sending requests.
|
|
||||||
// It is the responsibility of the caller to ensure that the compressor set has been registered
|
|
||||||
// with google.golang.org/grpc/encoding. This can be done by encoding.RegisterCompressor. Some
|
|
||||||
// compressors auto-register on import, such as gzip, which can be registered by calling
|
|
||||||
// `import _ "google.golang.org/grpc/encoding/gzip"`
|
|
||||||
func UseCompressor(compressorName string) ExporterOption {
|
|
||||||
return compressorSetter(compressorName)
|
|
||||||
}
|
|
||||||
|
|
||||||
type headerSetter map[string]string
|
|
||||||
|
|
||||||
func (h headerSetter) withExporter(e *Exporter) {
|
|
||||||
e.headers = map[string]string(h)
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithHeaders will send the provided headers when the gRPC stream connection
|
|
||||||
// is instantiated
|
|
||||||
func WithHeaders(headers map[string]string) ExporterOption {
|
|
||||||
return headerSetter(headers)
|
|
||||||
}
|
|
||||||
|
|
||||||
type clientCredentials struct {
|
|
||||||
credentials.TransportCredentials
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ ExporterOption = (*clientCredentials)(nil)
|
|
||||||
|
|
||||||
// WithTLSCredentials allows the connection to use TLS credentials
|
|
||||||
// when talking to the server. It takes in grpc.TransportCredentials instead
|
|
||||||
// of say a Certificate file or a tls.Certificate, because the retrieving
|
|
||||||
// these credentials can be done in many ways e.g. plain file, in code tls.Config
|
|
||||||
// or by certificate rotation, so it is up to the caller to decide what to use.
|
|
||||||
func WithTLSCredentials(creds credentials.TransportCredentials) ExporterOption {
|
|
||||||
return &clientCredentials{TransportCredentials: creds}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (cc *clientCredentials) withExporter(e *Exporter) {
|
|
||||||
e.clientTransportCredentials = cc.TransportCredentials
|
|
||||||
}
|
|
|
@ -1,248 +0,0 @@
|
||||||
// Copyright 2018, OpenCensus Authors
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package ocagent
|
|
||||||
|
|
||||||
import (
|
|
||||||
"math"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"go.opencensus.io/trace"
|
|
||||||
"go.opencensus.io/trace/tracestate"
|
|
||||||
|
|
||||||
tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1"
|
|
||||||
"github.com/golang/protobuf/ptypes/timestamp"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
maxAnnotationEventsPerSpan = 32
|
|
||||||
maxMessageEventsPerSpan = 128
|
|
||||||
)
|
|
||||||
|
|
||||||
func ocSpanToProtoSpan(sd *trace.SpanData) *tracepb.Span {
|
|
||||||
if sd == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
var namePtr *tracepb.TruncatableString
|
|
||||||
if sd.Name != "" {
|
|
||||||
namePtr = &tracepb.TruncatableString{Value: sd.Name}
|
|
||||||
}
|
|
||||||
return &tracepb.Span{
|
|
||||||
TraceId: sd.TraceID[:],
|
|
||||||
SpanId: sd.SpanID[:],
|
|
||||||
ParentSpanId: sd.ParentSpanID[:],
|
|
||||||
Status: ocStatusToProtoStatus(sd.Status),
|
|
||||||
StartTime: timeToTimestamp(sd.StartTime),
|
|
||||||
EndTime: timeToTimestamp(sd.EndTime),
|
|
||||||
Links: ocLinksToProtoLinks(sd.Links),
|
|
||||||
Kind: ocSpanKindToProtoSpanKind(sd.SpanKind),
|
|
||||||
Name: namePtr,
|
|
||||||
Attributes: ocAttributesToProtoAttributes(sd.Attributes),
|
|
||||||
TimeEvents: ocTimeEventsToProtoTimeEvents(sd.Annotations, sd.MessageEvents),
|
|
||||||
Tracestate: ocTracestateToProtoTracestate(sd.Tracestate),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var blankStatus trace.Status
|
|
||||||
|
|
||||||
func ocStatusToProtoStatus(status trace.Status) *tracepb.Status {
|
|
||||||
if status == blankStatus {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return &tracepb.Status{
|
|
||||||
Code: status.Code,
|
|
||||||
Message: status.Message,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func ocLinksToProtoLinks(links []trace.Link) *tracepb.Span_Links {
|
|
||||||
if len(links) == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
sl := make([]*tracepb.Span_Link, 0, len(links))
|
|
||||||
for _, ocLink := range links {
|
|
||||||
// This redefinition is necessary to prevent ocLink.*ID[:] copies
|
|
||||||
// being reused -- in short we need a new ocLink per iteration.
|
|
||||||
ocLink := ocLink
|
|
||||||
|
|
||||||
sl = append(sl, &tracepb.Span_Link{
|
|
||||||
TraceId: ocLink.TraceID[:],
|
|
||||||
SpanId: ocLink.SpanID[:],
|
|
||||||
Type: ocLinkTypeToProtoLinkType(ocLink.Type),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
return &tracepb.Span_Links{
|
|
||||||
Link: sl,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func ocLinkTypeToProtoLinkType(oct trace.LinkType) tracepb.Span_Link_Type {
|
|
||||||
switch oct {
|
|
||||||
case trace.LinkTypeChild:
|
|
||||||
return tracepb.Span_Link_CHILD_LINKED_SPAN
|
|
||||||
case trace.LinkTypeParent:
|
|
||||||
return tracepb.Span_Link_PARENT_LINKED_SPAN
|
|
||||||
default:
|
|
||||||
return tracepb.Span_Link_TYPE_UNSPECIFIED
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func ocAttributesToProtoAttributes(attrs map[string]interface{}) *tracepb.Span_Attributes {
|
|
||||||
if len(attrs) == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
outMap := make(map[string]*tracepb.AttributeValue)
|
|
||||||
for k, v := range attrs {
|
|
||||||
switch v := v.(type) {
|
|
||||||
case bool:
|
|
||||||
outMap[k] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_BoolValue{BoolValue: v}}
|
|
||||||
|
|
||||||
case int:
|
|
||||||
outMap[k] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{IntValue: int64(v)}}
|
|
||||||
|
|
||||||
case int64:
|
|
||||||
outMap[k] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{IntValue: v}}
|
|
||||||
|
|
||||||
case string:
|
|
||||||
outMap[k] = &tracepb.AttributeValue{
|
|
||||||
Value: &tracepb.AttributeValue_StringValue{
|
|
||||||
StringValue: &tracepb.TruncatableString{Value: v},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return &tracepb.Span_Attributes{
|
|
||||||
AttributeMap: outMap,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// This code is mostly copied from
|
|
||||||
// https://github.com/census-ecosystem/opencensus-go-exporter-stackdriver/blob/master/trace_proto.go#L46
|
|
||||||
func ocTimeEventsToProtoTimeEvents(as []trace.Annotation, es []trace.MessageEvent) *tracepb.Span_TimeEvents {
|
|
||||||
if len(as) == 0 && len(es) == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
timeEvents := &tracepb.Span_TimeEvents{}
|
|
||||||
var annotations, droppedAnnotationsCount int
|
|
||||||
var messageEvents, droppedMessageEventsCount int
|
|
||||||
|
|
||||||
// Transform annotations
|
|
||||||
for i, a := range as {
|
|
||||||
if annotations >= maxAnnotationEventsPerSpan {
|
|
||||||
droppedAnnotationsCount = len(as) - i
|
|
||||||
break
|
|
||||||
}
|
|
||||||
annotations++
|
|
||||||
timeEvents.TimeEvent = append(timeEvents.TimeEvent,
|
|
||||||
&tracepb.Span_TimeEvent{
|
|
||||||
Time: timeToTimestamp(a.Time),
|
|
||||||
Value: transformAnnotationToTimeEvent(&a),
|
|
||||||
},
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Transform message events
|
|
||||||
for i, e := range es {
|
|
||||||
if messageEvents >= maxMessageEventsPerSpan {
|
|
||||||
droppedMessageEventsCount = len(es) - i
|
|
||||||
break
|
|
||||||
}
|
|
||||||
messageEvents++
|
|
||||||
timeEvents.TimeEvent = append(timeEvents.TimeEvent,
|
|
||||||
&tracepb.Span_TimeEvent{
|
|
||||||
Time: timeToTimestamp(e.Time),
|
|
||||||
Value: transformMessageEventToTimeEvent(&e),
|
|
||||||
},
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Process dropped counter
|
|
||||||
timeEvents.DroppedAnnotationsCount = clip32(droppedAnnotationsCount)
|
|
||||||
timeEvents.DroppedMessageEventsCount = clip32(droppedMessageEventsCount)
|
|
||||||
|
|
||||||
return timeEvents
|
|
||||||
}
|
|
||||||
|
|
||||||
func transformAnnotationToTimeEvent(a *trace.Annotation) *tracepb.Span_TimeEvent_Annotation_ {
|
|
||||||
return &tracepb.Span_TimeEvent_Annotation_{
|
|
||||||
Annotation: &tracepb.Span_TimeEvent_Annotation{
|
|
||||||
Description: &tracepb.TruncatableString{Value: a.Message},
|
|
||||||
Attributes: ocAttributesToProtoAttributes(a.Attributes),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func transformMessageEventToTimeEvent(e *trace.MessageEvent) *tracepb.Span_TimeEvent_MessageEvent_ {
|
|
||||||
return &tracepb.Span_TimeEvent_MessageEvent_{
|
|
||||||
MessageEvent: &tracepb.Span_TimeEvent_MessageEvent{
|
|
||||||
Type: tracepb.Span_TimeEvent_MessageEvent_Type(e.EventType),
|
|
||||||
Id: uint64(e.MessageID),
|
|
||||||
UncompressedSize: uint64(e.UncompressedByteSize),
|
|
||||||
CompressedSize: uint64(e.CompressedByteSize),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// clip32 clips an int to the range of an int32.
|
|
||||||
func clip32(x int) int32 {
|
|
||||||
if x < math.MinInt32 {
|
|
||||||
return math.MinInt32
|
|
||||||
}
|
|
||||||
if x > math.MaxInt32 {
|
|
||||||
return math.MaxInt32
|
|
||||||
}
|
|
||||||
return int32(x)
|
|
||||||
}
|
|
||||||
|
|
||||||
func timeToTimestamp(t time.Time) *timestamp.Timestamp {
|
|
||||||
nanoTime := t.UnixNano()
|
|
||||||
return ×tamp.Timestamp{
|
|
||||||
Seconds: nanoTime / 1e9,
|
|
||||||
Nanos: int32(nanoTime % 1e9),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func ocSpanKindToProtoSpanKind(kind int) tracepb.Span_SpanKind {
|
|
||||||
switch kind {
|
|
||||||
case trace.SpanKindClient:
|
|
||||||
return tracepb.Span_CLIENT
|
|
||||||
case trace.SpanKindServer:
|
|
||||||
return tracepb.Span_SERVER
|
|
||||||
default:
|
|
||||||
return tracepb.Span_SPAN_KIND_UNSPECIFIED
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func ocTracestateToProtoTracestate(ts *tracestate.Tracestate) *tracepb.Span_Tracestate {
|
|
||||||
if ts == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return &tracepb.Span_Tracestate{
|
|
||||||
Entries: ocTracestateEntriesToProtoTracestateEntries(ts.Entries()),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func ocTracestateEntriesToProtoTracestateEntries(entries []tracestate.Entry) []*tracepb.Span_Tracestate_Entry {
|
|
||||||
protoEntries := make([]*tracepb.Span_Tracestate_Entry, 0, len(entries))
|
|
||||||
for _, entry := range entries {
|
|
||||||
protoEntries = append(protoEntries, &tracepb.Span_Tracestate_Entry{
|
|
||||||
Key: entry.Key,
|
|
||||||
Value: entry.Value,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
return protoEntries
|
|
||||||
}
|
|
274
vendor/contrib.go.opencensus.io/exporter/ocagent/transform_stats_to_metrics.go
generated
vendored
274
vendor/contrib.go.opencensus.io/exporter/ocagent/transform_stats_to_metrics.go
generated
vendored
|
@ -1,274 +0,0 @@
|
||||||
// Copyright 2018, OpenCensus Authors
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package ocagent
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"go.opencensus.io/stats"
|
|
||||||
"go.opencensus.io/stats/view"
|
|
||||||
"go.opencensus.io/tag"
|
|
||||||
|
|
||||||
"github.com/golang/protobuf/ptypes/timestamp"
|
|
||||||
|
|
||||||
metricspb "github.com/census-instrumentation/opencensus-proto/gen-go/metrics/v1"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
errNilMeasure = errors.New("expecting a non-nil stats.Measure")
|
|
||||||
errNilView = errors.New("expecting a non-nil view.View")
|
|
||||||
errNilViewData = errors.New("expecting a non-nil view.Data")
|
|
||||||
)
|
|
||||||
|
|
||||||
func viewDataToMetric(vd *view.Data) (*metricspb.Metric, error) {
|
|
||||||
if vd == nil {
|
|
||||||
return nil, errNilViewData
|
|
||||||
}
|
|
||||||
|
|
||||||
descriptor, err := viewToMetricDescriptor(vd.View)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
timeseries, err := viewDataToTimeseries(vd)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
metric := &metricspb.Metric{
|
|
||||||
MetricDescriptor: descriptor,
|
|
||||||
Timeseries: timeseries,
|
|
||||||
}
|
|
||||||
return metric, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func viewToMetricDescriptor(v *view.View) (*metricspb.MetricDescriptor, error) {
|
|
||||||
if v == nil {
|
|
||||||
return nil, errNilView
|
|
||||||
}
|
|
||||||
if v.Measure == nil {
|
|
||||||
return nil, errNilMeasure
|
|
||||||
}
|
|
||||||
|
|
||||||
desc := &metricspb.MetricDescriptor{
|
|
||||||
Name: stringOrCall(v.Name, v.Measure.Name),
|
|
||||||
Description: stringOrCall(v.Description, v.Measure.Description),
|
|
||||||
Unit: v.Measure.Unit(),
|
|
||||||
Type: aggregationToMetricDescriptorType(v),
|
|
||||||
LabelKeys: tagKeysToLabelKeys(v.TagKeys),
|
|
||||||
}
|
|
||||||
return desc, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func stringOrCall(first string, call func() string) string {
|
|
||||||
if first != "" {
|
|
||||||
return first
|
|
||||||
}
|
|
||||||
return call()
|
|
||||||
}
|
|
||||||
|
|
||||||
type measureType uint
|
|
||||||
|
|
||||||
const (
|
|
||||||
measureUnknown measureType = iota
|
|
||||||
measureInt64
|
|
||||||
measureFloat64
|
|
||||||
)
|
|
||||||
|
|
||||||
func measureTypeFromMeasure(m stats.Measure) measureType {
|
|
||||||
switch m.(type) {
|
|
||||||
default:
|
|
||||||
return measureUnknown
|
|
||||||
case *stats.Float64Measure:
|
|
||||||
return measureFloat64
|
|
||||||
case *stats.Int64Measure:
|
|
||||||
return measureInt64
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func aggregationToMetricDescriptorType(v *view.View) metricspb.MetricDescriptor_Type {
|
|
||||||
if v == nil || v.Aggregation == nil {
|
|
||||||
return metricspb.MetricDescriptor_UNSPECIFIED
|
|
||||||
}
|
|
||||||
if v.Measure == nil {
|
|
||||||
return metricspb.MetricDescriptor_UNSPECIFIED
|
|
||||||
}
|
|
||||||
|
|
||||||
switch v.Aggregation.Type {
|
|
||||||
case view.AggTypeCount:
|
|
||||||
// Cumulative on int64
|
|
||||||
return metricspb.MetricDescriptor_CUMULATIVE_INT64
|
|
||||||
|
|
||||||
case view.AggTypeDistribution:
|
|
||||||
// Cumulative types
|
|
||||||
return metricspb.MetricDescriptor_CUMULATIVE_DISTRIBUTION
|
|
||||||
|
|
||||||
case view.AggTypeLastValue:
|
|
||||||
// Gauge types
|
|
||||||
switch measureTypeFromMeasure(v.Measure) {
|
|
||||||
case measureFloat64:
|
|
||||||
return metricspb.MetricDescriptor_GAUGE_DOUBLE
|
|
||||||
case measureInt64:
|
|
||||||
return metricspb.MetricDescriptor_GAUGE_INT64
|
|
||||||
}
|
|
||||||
|
|
||||||
case view.AggTypeSum:
|
|
||||||
// Cumulative types
|
|
||||||
switch measureTypeFromMeasure(v.Measure) {
|
|
||||||
case measureFloat64:
|
|
||||||
return metricspb.MetricDescriptor_CUMULATIVE_DOUBLE
|
|
||||||
case measureInt64:
|
|
||||||
return metricspb.MetricDescriptor_CUMULATIVE_INT64
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// For all other cases, return unspecified.
|
|
||||||
return metricspb.MetricDescriptor_UNSPECIFIED
|
|
||||||
}
|
|
||||||
|
|
||||||
func tagKeysToLabelKeys(tagKeys []tag.Key) []*metricspb.LabelKey {
|
|
||||||
labelKeys := make([]*metricspb.LabelKey, 0, len(tagKeys))
|
|
||||||
for _, tagKey := range tagKeys {
|
|
||||||
labelKeys = append(labelKeys, &metricspb.LabelKey{
|
|
||||||
Key: tagKey.Name(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
return labelKeys
|
|
||||||
}
|
|
||||||
|
|
||||||
func viewDataToTimeseries(vd *view.Data) ([]*metricspb.TimeSeries, error) {
|
|
||||||
if vd == nil || len(vd.Rows) == 0 {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Given that view.Data only contains Start, End
|
|
||||||
// the timestamps for all the row data will be the exact same
|
|
||||||
// per aggregation. However, the values will differ.
|
|
||||||
// Each row has its own tags.
|
|
||||||
startTimestamp := timeToProtoTimestamp(vd.Start)
|
|
||||||
endTimestamp := timeToProtoTimestamp(vd.End)
|
|
||||||
|
|
||||||
mType := measureTypeFromMeasure(vd.View.Measure)
|
|
||||||
timeseries := make([]*metricspb.TimeSeries, 0, len(vd.Rows))
|
|
||||||
// It is imperative that the ordering of "LabelValues" matches those
|
|
||||||
// of the Label keys in the metric descriptor.
|
|
||||||
for _, row := range vd.Rows {
|
|
||||||
labelValues := labelValuesFromTags(row.Tags)
|
|
||||||
point := rowToPoint(vd.View, row, endTimestamp, mType)
|
|
||||||
timeseries = append(timeseries, &metricspb.TimeSeries{
|
|
||||||
StartTimestamp: startTimestamp,
|
|
||||||
LabelValues: labelValues,
|
|
||||||
Points: []*metricspb.Point{point},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(timeseries) == 0 {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return timeseries, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func timeToProtoTimestamp(t time.Time) *timestamp.Timestamp {
|
|
||||||
unixNano := t.UnixNano()
|
|
||||||
return ×tamp.Timestamp{
|
|
||||||
Seconds: int64(unixNano / 1e9),
|
|
||||||
Nanos: int32(unixNano % 1e9),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func rowToPoint(v *view.View, row *view.Row, endTimestamp *timestamp.Timestamp, mType measureType) *metricspb.Point {
|
|
||||||
pt := &metricspb.Point{
|
|
||||||
Timestamp: endTimestamp,
|
|
||||||
}
|
|
||||||
|
|
||||||
switch data := row.Data.(type) {
|
|
||||||
case *view.CountData:
|
|
||||||
pt.Value = &metricspb.Point_Int64Value{Int64Value: data.Value}
|
|
||||||
|
|
||||||
case *view.DistributionData:
|
|
||||||
pt.Value = &metricspb.Point_DistributionValue{
|
|
||||||
DistributionValue: &metricspb.DistributionValue{
|
|
||||||
Count: data.Count,
|
|
||||||
Sum: float64(data.Count) * data.Mean, // because Mean := Sum/Count
|
|
||||||
// TODO: Add Exemplar
|
|
||||||
Buckets: bucketsToProtoBuckets(data.CountPerBucket),
|
|
||||||
BucketOptions: &metricspb.DistributionValue_BucketOptions{
|
|
||||||
Type: &metricspb.DistributionValue_BucketOptions_Explicit_{
|
|
||||||
Explicit: &metricspb.DistributionValue_BucketOptions_Explicit{
|
|
||||||
Bounds: v.Aggregation.Buckets,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
SumOfSquaredDeviation: data.SumOfSquaredDev,
|
|
||||||
}}
|
|
||||||
|
|
||||||
case *view.LastValueData:
|
|
||||||
setPointValue(pt, data.Value, mType)
|
|
||||||
|
|
||||||
case *view.SumData:
|
|
||||||
setPointValue(pt, data.Value, mType)
|
|
||||||
}
|
|
||||||
|
|
||||||
return pt
|
|
||||||
}
|
|
||||||
|
|
||||||
// Not returning anything from this function because metricspb.Point.is_Value is an unexported
|
|
||||||
// interface hence we just have to set its value by pointer.
|
|
||||||
func setPointValue(pt *metricspb.Point, value float64, mType measureType) {
|
|
||||||
if mType == measureInt64 {
|
|
||||||
pt.Value = &metricspb.Point_Int64Value{Int64Value: int64(value)}
|
|
||||||
} else {
|
|
||||||
pt.Value = &metricspb.Point_DoubleValue{DoubleValue: value}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func bucketsToProtoBuckets(countPerBucket []int64) []*metricspb.DistributionValue_Bucket {
|
|
||||||
distBuckets := make([]*metricspb.DistributionValue_Bucket, len(countPerBucket))
|
|
||||||
for i := 0; i < len(countPerBucket); i++ {
|
|
||||||
count := countPerBucket[i]
|
|
||||||
|
|
||||||
distBuckets[i] = &metricspb.DistributionValue_Bucket{
|
|
||||||
Count: count,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return distBuckets
|
|
||||||
}
|
|
||||||
|
|
||||||
func labelValuesFromTags(tags []tag.Tag) []*metricspb.LabelValue {
|
|
||||||
if len(tags) == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
labelValues := make([]*metricspb.LabelValue, 0, len(tags))
|
|
||||||
for _, tag_ := range tags {
|
|
||||||
labelValues = append(labelValues, &metricspb.LabelValue{
|
|
||||||
Value: tag_.Value,
|
|
||||||
|
|
||||||
// It is imperative that we set the "HasValue" attribute,
|
|
||||||
// in order to distinguish missing a label from the empty string.
|
|
||||||
// https://godoc.org/github.com/census-instrumentation/opencensus-proto/gen-go/metrics/v1#LabelValue.HasValue
|
|
||||||
//
|
|
||||||
// OpenCensus-Go uses non-pointers for tags as seen by this function's arguments,
|
|
||||||
// so the best case that we can use to distinguish missing labels/tags from the
|
|
||||||
// empty string is by checking if the Tag.Key.Name() != "" to indicate that we have
|
|
||||||
// a value.
|
|
||||||
HasValue: tag_.Key.Name() != "",
|
|
||||||
})
|
|
||||||
}
|
|
||||||
return labelValues
|
|
||||||
}
|
|
|
@ -1,17 +0,0 @@
|
||||||
// Copyright 2018, OpenCensus Authors
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package ocagent
|
|
||||||
|
|
||||||
const Version = "0.0.1"
|
|
|
@ -111,8 +111,8 @@ func (client DeploymentOperationsClient) GetPreparer(ctx context.Context, resour
|
||||||
// GetSender sends the Get request. The method will close the
|
// GetSender sends the Get request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client DeploymentOperationsClient) GetSender(req *http.Request) (*http.Response, error) {
|
func (client DeploymentOperationsClient) GetSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetResponder handles the response to the Get request. The method always
|
// GetResponder handles the response to the Get request. The method always
|
||||||
|
@ -201,8 +201,8 @@ func (client DeploymentOperationsClient) ListPreparer(ctx context.Context, resou
|
||||||
// ListSender sends the List request. The method will close the
|
// ListSender sends the List request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client DeploymentOperationsClient) ListSender(req *http.Request) (*http.Response, error) {
|
func (client DeploymentOperationsClient) ListSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListResponder handles the response to the List request. The method always
|
// ListResponder handles the response to the List request. The method always
|
||||||
|
|
|
@ -109,8 +109,8 @@ func (client DeploymentsClient) CancelPreparer(ctx context.Context, resourceGrou
|
||||||
// CancelSender sends the Cancel request. The method will close the
|
// CancelSender sends the Cancel request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client DeploymentsClient) CancelSender(req *http.Request) (*http.Response, error) {
|
func (client DeploymentsClient) CancelSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CancelResponder handles the response to the Cancel request. The method always
|
// CancelResponder handles the response to the Cancel request. The method always
|
||||||
|
@ -193,8 +193,8 @@ func (client DeploymentsClient) CheckExistencePreparer(ctx context.Context, reso
|
||||||
// CheckExistenceSender sends the CheckExistence request. The method will close the
|
// CheckExistenceSender sends the CheckExistence request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client DeploymentsClient) CheckExistenceSender(req *http.Request) (*http.Response, error) {
|
func (client DeploymentsClient) CheckExistenceSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CheckExistenceResponder handles the response to the CheckExistence request. The method always
|
// CheckExistenceResponder handles the response to the CheckExistence request. The method always
|
||||||
|
@ -281,9 +281,9 @@ func (client DeploymentsClient) CreateOrUpdatePreparer(ctx context.Context, reso
|
||||||
// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
|
// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client DeploymentsClient) CreateOrUpdateSender(req *http.Request) (future DeploymentsCreateOrUpdateFuture, err error) {
|
func (client DeploymentsClient) CreateOrUpdateSender(req *http.Request) (future DeploymentsCreateOrUpdateFuture, err error) {
|
||||||
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
var resp *http.Response
|
var resp *http.Response
|
||||||
resp, err = autorest.SendWithSender(client, req,
|
resp, err = autorest.SendWithSender(client, req, sd...)
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -366,9 +366,9 @@ func (client DeploymentsClient) DeletePreparer(ctx context.Context, resourceGrou
|
||||||
// DeleteSender sends the Delete request. The method will close the
|
// DeleteSender sends the Delete request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client DeploymentsClient) DeleteSender(req *http.Request) (future DeploymentsDeleteFuture, err error) {
|
func (client DeploymentsClient) DeleteSender(req *http.Request) (future DeploymentsDeleteFuture, err error) {
|
||||||
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
var resp *http.Response
|
var resp *http.Response
|
||||||
resp, err = autorest.SendWithSender(client, req,
|
resp, err = autorest.SendWithSender(client, req, sd...)
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -456,8 +456,8 @@ func (client DeploymentsClient) ExportTemplatePreparer(ctx context.Context, reso
|
||||||
// ExportTemplateSender sends the ExportTemplate request. The method will close the
|
// ExportTemplateSender sends the ExportTemplate request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client DeploymentsClient) ExportTemplateSender(req *http.Request) (*http.Response, error) {
|
func (client DeploymentsClient) ExportTemplateSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ExportTemplateResponder handles the response to the ExportTemplate request. The method always
|
// ExportTemplateResponder handles the response to the ExportTemplate request. The method always
|
||||||
|
@ -541,8 +541,8 @@ func (client DeploymentsClient) GetPreparer(ctx context.Context, resourceGroupNa
|
||||||
// GetSender sends the Get request. The method will close the
|
// GetSender sends the Get request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client DeploymentsClient) GetSender(req *http.Request) (*http.Response, error) {
|
func (client DeploymentsClient) GetSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetResponder handles the response to the Get request. The method always
|
// GetResponder handles the response to the Get request. The method always
|
||||||
|
@ -633,8 +633,8 @@ func (client DeploymentsClient) ListPreparer(ctx context.Context, resourceGroupN
|
||||||
// ListSender sends the List request. The method will close the
|
// ListSender sends the List request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client DeploymentsClient) ListSender(req *http.Request) (*http.Response, error) {
|
func (client DeploymentsClient) ListSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListResponder handles the response to the List request. The method always
|
// ListResponder handles the response to the List request. The method always
|
||||||
|
@ -765,8 +765,8 @@ func (client DeploymentsClient) ValidatePreparer(ctx context.Context, resourceGr
|
||||||
// ValidateSender sends the Validate request. The method will close the
|
// ValidateSender sends the Validate request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client DeploymentsClient) ValidateSender(req *http.Request) (*http.Response, error) {
|
func (client DeploymentsClient) ValidateSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ValidateResponder handles the response to the Validate request. The method always
|
// ValidateResponder handles the response to the Validate request. The method always
|
||||||
|
|
|
@ -107,8 +107,8 @@ func (client GroupsClient) CheckExistencePreparer(ctx context.Context, resourceG
|
||||||
// CheckExistenceSender sends the CheckExistence request. The method will close the
|
// CheckExistenceSender sends the CheckExistence request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client GroupsClient) CheckExistenceSender(req *http.Request) (*http.Response, error) {
|
func (client GroupsClient) CheckExistenceSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CheckExistenceResponder handles the response to the CheckExistence request. The method always
|
// CheckExistenceResponder handles the response to the CheckExistence request. The method always
|
||||||
|
@ -195,8 +195,8 @@ func (client GroupsClient) CreateOrUpdatePreparer(ctx context.Context, resourceG
|
||||||
// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
|
// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client GroupsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) {
|
func (client GroupsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
|
// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
|
||||||
|
@ -272,9 +272,9 @@ func (client GroupsClient) DeletePreparer(ctx context.Context, resourceGroupName
|
||||||
// DeleteSender sends the Delete request. The method will close the
|
// DeleteSender sends the Delete request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client GroupsClient) DeleteSender(req *http.Request) (future GroupsDeleteFuture, err error) {
|
func (client GroupsClient) DeleteSender(req *http.Request) (future GroupsDeleteFuture, err error) {
|
||||||
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
var resp *http.Response
|
var resp *http.Response
|
||||||
resp, err = autorest.SendWithSender(client, req,
|
resp, err = autorest.SendWithSender(client, req, sd...)
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -363,8 +363,8 @@ func (client GroupsClient) ExportTemplatePreparer(ctx context.Context, resourceG
|
||||||
// ExportTemplateSender sends the ExportTemplate request. The method will close the
|
// ExportTemplateSender sends the ExportTemplate request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client GroupsClient) ExportTemplateSender(req *http.Request) (*http.Response, error) {
|
func (client GroupsClient) ExportTemplateSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ExportTemplateResponder handles the response to the ExportTemplate request. The method always
|
// ExportTemplateResponder handles the response to the ExportTemplate request. The method always
|
||||||
|
@ -446,8 +446,8 @@ func (client GroupsClient) GetPreparer(ctx context.Context, resourceGroupName st
|
||||||
// GetSender sends the Get request. The method will close the
|
// GetSender sends the Get request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client GroupsClient) GetSender(req *http.Request) (*http.Response, error) {
|
func (client GroupsClient) GetSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetResponder handles the response to the Get request. The method always
|
// GetResponder handles the response to the Get request. The method always
|
||||||
|
@ -528,8 +528,8 @@ func (client GroupsClient) ListPreparer(ctx context.Context, filter string, top
|
||||||
// ListSender sends the List request. The method will close the
|
// ListSender sends the List request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client GroupsClient) ListSender(req *http.Request) (*http.Response, error) {
|
func (client GroupsClient) ListSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListResponder handles the response to the List request. The method always
|
// ListResponder handles the response to the List request. The method always
|
||||||
|
@ -661,8 +661,8 @@ func (client GroupsClient) ListResourcesPreparer(ctx context.Context, resourceGr
|
||||||
// ListResourcesSender sends the ListResources request. The method will close the
|
// ListResourcesSender sends the ListResources request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client GroupsClient) ListResourcesSender(req *http.Request) (*http.Response, error) {
|
func (client GroupsClient) ListResourcesSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListResourcesResponder handles the response to the ListResources request. The method always
|
// ListResourcesResponder handles the response to the ListResources request. The method always
|
||||||
|
@ -787,8 +787,8 @@ func (client GroupsClient) PatchPreparer(ctx context.Context, resourceGroupName
|
||||||
// PatchSender sends the Patch request. The method will close the
|
// PatchSender sends the Patch request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client GroupsClient) PatchSender(req *http.Request) (*http.Response, error) {
|
func (client GroupsClient) PatchSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// PatchResponder handles the response to the Patch request. The method always
|
// PatchResponder handles the response to the Patch request. The method always
|
||||||
|
|
|
@ -103,8 +103,8 @@ func (client ProvidersClient) GetPreparer(ctx context.Context, resourceProviderN
|
||||||
// GetSender sends the Get request. The method will close the
|
// GetSender sends the Get request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client ProvidersClient) GetSender(req *http.Request) (*http.Response, error) {
|
func (client ProvidersClient) GetSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetResponder handles the response to the Get request. The method always
|
// GetResponder handles the response to the Get request. The method always
|
||||||
|
@ -186,8 +186,8 @@ func (client ProvidersClient) ListPreparer(ctx context.Context, top *int32, expa
|
||||||
// ListSender sends the List request. The method will close the
|
// ListSender sends the List request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client ProvidersClient) ListSender(req *http.Request) (*http.Response, error) {
|
func (client ProvidersClient) ListSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListResponder handles the response to the List request. The method always
|
// ListResponder handles the response to the List request. The method always
|
||||||
|
@ -298,8 +298,8 @@ func (client ProvidersClient) RegisterPreparer(ctx context.Context, resourceProv
|
||||||
// RegisterSender sends the Register request. The method will close the
|
// RegisterSender sends the Register request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client ProvidersClient) RegisterSender(req *http.Request) (*http.Response, error) {
|
func (client ProvidersClient) RegisterSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegisterResponder handles the response to the Register request. The method always
|
// RegisterResponder handles the response to the Register request. The method always
|
||||||
|
@ -373,8 +373,8 @@ func (client ProvidersClient) UnregisterPreparer(ctx context.Context, resourcePr
|
||||||
// UnregisterSender sends the Unregister request. The method will close the
|
// UnregisterSender sends the Unregister request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client ProvidersClient) UnregisterSender(req *http.Request) (*http.Response, error) {
|
func (client ProvidersClient) UnregisterSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// UnregisterResponder handles the response to the Unregister request. The method always
|
// UnregisterResponder handles the response to the Unregister request. The method always
|
||||||
|
|
|
@ -115,8 +115,8 @@ func (client Client) CheckExistencePreparer(ctx context.Context, resourceGroupNa
|
||||||
// CheckExistenceSender sends the CheckExistence request. The method will close the
|
// CheckExistenceSender sends the CheckExistence request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client Client) CheckExistenceSender(req *http.Request) (*http.Response, error) {
|
func (client Client) CheckExistenceSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CheckExistenceResponder handles the response to the CheckExistence request. The method always
|
// CheckExistenceResponder handles the response to the CheckExistence request. The method always
|
||||||
|
@ -208,8 +208,8 @@ func (client Client) CreateOrUpdatePreparer(ctx context.Context, resourceGroupNa
|
||||||
// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
|
// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client Client) CreateOrUpdateSender(req *http.Request) (*http.Response, error) {
|
func (client Client) CreateOrUpdateSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
|
// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
|
||||||
|
@ -299,8 +299,8 @@ func (client Client) DeletePreparer(ctx context.Context, resourceGroupName strin
|
||||||
// DeleteSender sends the Delete request. The method will close the
|
// DeleteSender sends the Delete request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client Client) DeleteSender(req *http.Request) (*http.Response, error) {
|
func (client Client) DeleteSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteResponder handles the response to the Delete request. The method always
|
// DeleteResponder handles the response to the Delete request. The method always
|
||||||
|
@ -389,8 +389,8 @@ func (client Client) GetPreparer(ctx context.Context, resourceGroupName string,
|
||||||
// GetSender sends the Get request. The method will close the
|
// GetSender sends the Get request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client Client) GetSender(req *http.Request) (*http.Response, error) {
|
func (client Client) GetSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetResponder handles the response to the Get request. The method always
|
// GetResponder handles the response to the Get request. The method always
|
||||||
|
@ -475,8 +475,8 @@ func (client Client) ListPreparer(ctx context.Context, filter string, expand str
|
||||||
// ListSender sends the List request. The method will close the
|
// ListSender sends the List request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client Client) ListSender(req *http.Request) (*http.Response, error) {
|
func (client Client) ListSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListResponder handles the response to the List request. The method always
|
// ListResponder handles the response to the List request. The method always
|
||||||
|
@ -593,9 +593,9 @@ func (client Client) MoveResourcesPreparer(ctx context.Context, sourceResourceGr
|
||||||
// MoveResourcesSender sends the MoveResources request. The method will close the
|
// MoveResourcesSender sends the MoveResources request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client Client) MoveResourcesSender(req *http.Request) (future MoveResourcesFuture, err error) {
|
func (client Client) MoveResourcesSender(req *http.Request) (future MoveResourcesFuture, err error) {
|
||||||
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
var resp *http.Response
|
var resp *http.Response
|
||||||
resp, err = autorest.SendWithSender(client, req,
|
resp, err = autorest.SendWithSender(client, req, sd...)
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -686,9 +686,9 @@ func (client Client) UpdatePreparer(ctx context.Context, resourceGroupName strin
|
||||||
// UpdateSender sends the Update request. The method will close the
|
// UpdateSender sends the Update request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client Client) UpdateSender(req *http.Request) (future UpdateFuture, err error) {
|
func (client Client) UpdateSender(req *http.Request) (future UpdateFuture, err error) {
|
||||||
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
var resp *http.Response
|
var resp *http.Response
|
||||||
resp, err = autorest.SendWithSender(client, req,
|
resp, err = autorest.SendWithSender(client, req, sd...)
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,8 +98,8 @@ func (client TagsClient) CreateOrUpdatePreparer(ctx context.Context, tagName str
|
||||||
// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
|
// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client TagsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) {
|
func (client TagsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
|
// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
|
||||||
|
@ -175,8 +175,8 @@ func (client TagsClient) CreateOrUpdateValuePreparer(ctx context.Context, tagNam
|
||||||
// CreateOrUpdateValueSender sends the CreateOrUpdateValue request. The method will close the
|
// CreateOrUpdateValueSender sends the CreateOrUpdateValue request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client TagsClient) CreateOrUpdateValueSender(req *http.Request) (*http.Response, error) {
|
func (client TagsClient) CreateOrUpdateValueSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateOrUpdateValueResponder handles the response to the CreateOrUpdateValue request. The method always
|
// CreateOrUpdateValueResponder handles the response to the CreateOrUpdateValue request. The method always
|
||||||
|
@ -250,8 +250,8 @@ func (client TagsClient) DeletePreparer(ctx context.Context, tagName string) (*h
|
||||||
// DeleteSender sends the Delete request. The method will close the
|
// DeleteSender sends the Delete request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client TagsClient) DeleteSender(req *http.Request) (*http.Response, error) {
|
func (client TagsClient) DeleteSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteResponder handles the response to the Delete request. The method always
|
// DeleteResponder handles the response to the Delete request. The method always
|
||||||
|
@ -326,8 +326,8 @@ func (client TagsClient) DeleteValuePreparer(ctx context.Context, tagName string
|
||||||
// DeleteValueSender sends the DeleteValue request. The method will close the
|
// DeleteValueSender sends the DeleteValue request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client TagsClient) DeleteValueSender(req *http.Request) (*http.Response, error) {
|
func (client TagsClient) DeleteValueSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteValueResponder handles the response to the DeleteValue request. The method always
|
// DeleteValueResponder handles the response to the DeleteValue request. The method always
|
||||||
|
@ -398,8 +398,8 @@ func (client TagsClient) ListPreparer(ctx context.Context) (*http.Request, error
|
||||||
// ListSender sends the List request. The method will close the
|
// ListSender sends the List request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client TagsClient) ListSender(req *http.Request) (*http.Response, error) {
|
func (client TagsClient) ListSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListResponder handles the response to the List request. The method always
|
// ListResponder handles the response to the List request. The method always
|
||||||
|
|
|
@ -108,8 +108,8 @@ func (client AccountsClient) CheckNameAvailabilityPreparer(ctx context.Context,
|
||||||
// CheckNameAvailabilitySender sends the CheckNameAvailability request. The method will close the
|
// CheckNameAvailabilitySender sends the CheckNameAvailability request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client AccountsClient) CheckNameAvailabilitySender(req *http.Request) (*http.Response, error) {
|
func (client AccountsClient) CheckNameAvailabilitySender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CheckNameAvailabilityResponder handles the response to the CheckNameAvailability request. The method always
|
// CheckNameAvailabilityResponder handles the response to the CheckNameAvailability request. The method always
|
||||||
|
@ -202,9 +202,9 @@ func (client AccountsClient) CreatePreparer(ctx context.Context, resourceGroupNa
|
||||||
// CreateSender sends the Create request. The method will close the
|
// CreateSender sends the Create request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client AccountsClient) CreateSender(req *http.Request) (future AccountsCreateFuture, err error) {
|
func (client AccountsClient) CreateSender(req *http.Request) (future AccountsCreateFuture, err error) {
|
||||||
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
var resp *http.Response
|
var resp *http.Response
|
||||||
resp, err = autorest.SendWithSender(client, req,
|
resp, err = autorest.SendWithSender(client, req, sd...)
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -293,8 +293,8 @@ func (client AccountsClient) DeletePreparer(ctx context.Context, resourceGroupNa
|
||||||
// DeleteSender sends the Delete request. The method will close the
|
// DeleteSender sends the Delete request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client AccountsClient) DeleteSender(req *http.Request) (*http.Response, error) {
|
func (client AccountsClient) DeleteSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteResponder handles the response to the Delete request. The method always
|
// DeleteResponder handles the response to the Delete request. The method always
|
||||||
|
@ -378,8 +378,8 @@ func (client AccountsClient) GetPropertiesPreparer(ctx context.Context, resource
|
||||||
// GetPropertiesSender sends the GetProperties request. The method will close the
|
// GetPropertiesSender sends the GetProperties request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client AccountsClient) GetPropertiesSender(req *http.Request) (*http.Response, error) {
|
func (client AccountsClient) GetPropertiesSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertiesResponder handles the response to the GetProperties request. The method always
|
// GetPropertiesResponder handles the response to the GetProperties request. The method always
|
||||||
|
@ -451,8 +451,8 @@ func (client AccountsClient) ListPreparer(ctx context.Context) (*http.Request, e
|
||||||
// ListSender sends the List request. The method will close the
|
// ListSender sends the List request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client AccountsClient) ListSender(req *http.Request) (*http.Response, error) {
|
func (client AccountsClient) ListSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListResponder handles the response to the List request. The method always
|
// ListResponder handles the response to the List request. The method always
|
||||||
|
@ -527,8 +527,8 @@ func (client AccountsClient) ListByResourceGroupPreparer(ctx context.Context, re
|
||||||
// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the
|
// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client AccountsClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) {
|
func (client AccountsClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always
|
// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always
|
||||||
|
@ -612,8 +612,8 @@ func (client AccountsClient) ListKeysPreparer(ctx context.Context, resourceGroup
|
||||||
// ListKeysSender sends the ListKeys request. The method will close the
|
// ListKeysSender sends the ListKeys request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client AccountsClient) ListKeysSender(req *http.Request) (*http.Response, error) {
|
func (client AccountsClient) ListKeysSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListKeysResponder handles the response to the ListKeys request. The method always
|
// ListKeysResponder handles the response to the ListKeys request. The method always
|
||||||
|
@ -702,8 +702,8 @@ func (client AccountsClient) RegenerateKeyPreparer(ctx context.Context, resource
|
||||||
// RegenerateKeySender sends the RegenerateKey request. The method will close the
|
// RegenerateKeySender sends the RegenerateKey request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client AccountsClient) RegenerateKeySender(req *http.Request) (*http.Response, error) {
|
func (client AccountsClient) RegenerateKeySender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegenerateKeyResponder handles the response to the RegenerateKey request. The method always
|
// RegenerateKeyResponder handles the response to the RegenerateKey request. The method always
|
||||||
|
@ -795,8 +795,8 @@ func (client AccountsClient) UpdatePreparer(ctx context.Context, resourceGroupNa
|
||||||
// UpdateSender sends the Update request. The method will close the
|
// UpdateSender sends the Update request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client AccountsClient) UpdateSender(req *http.Request) (*http.Response, error) {
|
func (client AccountsClient) UpdateSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdateResponder handles the response to the Update request. The method always
|
// UpdateResponder handles the response to the Update request. The method always
|
||||||
|
|
|
@ -95,8 +95,8 @@ func (client UsageClient) ListPreparer(ctx context.Context) (*http.Request, erro
|
||||||
// ListSender sends the List request. The method will close the
|
// ListSender sends the List request. The method will close the
|
||||||
// http.Response Body if it receives an error.
|
// http.Response Body if it receives an error.
|
||||||
func (client UsageClient) ListSender(req *http.Request) (*http.Response, error) {
|
func (client UsageClient) ListSender(req *http.Request) (*http.Response, error) {
|
||||||
return autorest.SendWithSender(client, req,
|
sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
return autorest.SendWithSender(client, req, sd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListResponder handles the response to the List request. The method always
|
// ListResponder handles the response to the List request. The method always
|
||||||
|
|
|
@ -355,8 +355,12 @@ func (t *Table) queryEntities(uri string, headers map[string]string, ml Metadata
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
v := originalURI.Query()
|
v := originalURI.Query()
|
||||||
v.Set(nextPartitionKeyQueryParameter, contToken.NextPartitionKey)
|
if contToken.NextPartitionKey != "" {
|
||||||
v.Set(nextRowKeyQueryParameter, contToken.NextRowKey)
|
v.Set(nextPartitionKeyQueryParameter, contToken.NextPartitionKey)
|
||||||
|
}
|
||||||
|
if contToken.NextRowKey != "" {
|
||||||
|
v.Set(nextRowKeyQueryParameter, contToken.NextRowKey)
|
||||||
|
}
|
||||||
newURI := t.tsc.client.getEndpoint(tableServiceName, t.buildPath(), v)
|
newURI := t.tsc.client.getEndpoint(tableServiceName, t.buildPath(), v)
|
||||||
entities.NextLink = &newURI
|
entities.NextLink = &newURI
|
||||||
entities.ml = ml
|
entities.ml = ml
|
||||||
|
@ -371,7 +375,7 @@ func extractContinuationTokenFromHeaders(h http.Header) *continuationToken {
|
||||||
NextRowKey: h.Get(headerNextRowKey),
|
NextRowKey: h.Get(headerNextRowKey),
|
||||||
}
|
}
|
||||||
|
|
||||||
if ct.NextPartitionKey != "" && ct.NextRowKey != "" {
|
if ct.NextPartitionKey != "" || ct.NextRowKey != "" {
|
||||||
return &ct
|
return &ct
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -18,4 +18,4 @@ package version
|
||||||
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||||
|
|
||||||
// Number contains the semantic version of this SDK.
|
// Number contains the semantic version of this SDK.
|
||||||
const Number = "v31.2.0"
|
const Number = "v32.5.0"
|
||||||
|
|
|
@ -135,7 +135,7 @@ resource := "https://management.core.windows.net/"
|
||||||
applicationSecret := "APPLICATION_SECRET"
|
applicationSecret := "APPLICATION_SECRET"
|
||||||
|
|
||||||
spt, err := adal.NewServicePrincipalToken(
|
spt, err := adal.NewServicePrincipalToken(
|
||||||
oauthConfig,
|
*oauthConfig,
|
||||||
appliationID,
|
appliationID,
|
||||||
applicationSecret,
|
applicationSecret,
|
||||||
resource,
|
resource,
|
||||||
|
@ -170,7 +170,7 @@ if err != nil {
|
||||||
}
|
}
|
||||||
|
|
||||||
spt, err := adal.NewServicePrincipalTokenFromCertificate(
|
spt, err := adal.NewServicePrincipalTokenFromCertificate(
|
||||||
oauthConfig,
|
*oauthConfig,
|
||||||
applicationID,
|
applicationID,
|
||||||
certificate,
|
certificate,
|
||||||
rsaPrivateKey,
|
rsaPrivateKey,
|
||||||
|
@ -195,7 +195,7 @@ oauthClient := &http.Client{}
|
||||||
// Acquire the device code
|
// Acquire the device code
|
||||||
deviceCode, err := adal.InitiateDeviceAuth(
|
deviceCode, err := adal.InitiateDeviceAuth(
|
||||||
oauthClient,
|
oauthClient,
|
||||||
oauthConfig,
|
*oauthConfig,
|
||||||
applicationID,
|
applicationID,
|
||||||
resource)
|
resource)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -212,7 +212,7 @@ if err != nil {
|
||||||
}
|
}
|
||||||
|
|
||||||
spt, err := adal.NewServicePrincipalTokenFromManualToken(
|
spt, err := adal.NewServicePrincipalTokenFromManualToken(
|
||||||
oauthConfig,
|
*oauthConfig,
|
||||||
applicationID,
|
applicationID,
|
||||||
resource,
|
resource,
|
||||||
*token,
|
*token,
|
||||||
|
@ -227,7 +227,7 @@ if (err == nil) {
|
||||||
|
|
||||||
```Go
|
```Go
|
||||||
spt, err := adal.NewServicePrincipalTokenFromUsernamePassword(
|
spt, err := adal.NewServicePrincipalTokenFromUsernamePassword(
|
||||||
oauthConfig,
|
*oauthConfig,
|
||||||
applicationID,
|
applicationID,
|
||||||
username,
|
username,
|
||||||
password,
|
password,
|
||||||
|
@ -243,11 +243,11 @@ if (err == nil) {
|
||||||
|
|
||||||
``` Go
|
``` Go
|
||||||
spt, err := adal.NewServicePrincipalTokenFromAuthorizationCode(
|
spt, err := adal.NewServicePrincipalTokenFromAuthorizationCode(
|
||||||
oauthConfig,
|
*oauthConfig,
|
||||||
applicationID,
|
applicationID,
|
||||||
clientSecret,
|
clientSecret,
|
||||||
authorizationCode,
|
authorizationCode,
|
||||||
redirectURI,
|
redirectURI,
|
||||||
resource,
|
resource,
|
||||||
callbacks...)
|
callbacks...)
|
||||||
|
|
||||||
|
|
|
@ -3,9 +3,10 @@ module github.com/Azure/go-autorest/autorest/adal
|
||||||
go 1.12
|
go 1.12
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/Azure/go-autorest/autorest/date v0.1.0
|
github.com/Azure/go-autorest/autorest v0.9.0
|
||||||
github.com/Azure/go-autorest/autorest/mocks v0.1.0
|
github.com/Azure/go-autorest/autorest/date v0.2.0
|
||||||
github.com/Azure/go-autorest/tracing v0.1.0
|
github.com/Azure/go-autorest/autorest/mocks v0.3.0
|
||||||
|
github.com/Azure/go-autorest/tracing v0.5.0
|
||||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,139 +1,23 @@
|
||||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
github.com/Azure/go-autorest/autorest v0.9.0 h1:MRvx8gncNaXJqOoLmhNjUAKh33JJF8LyxPhomEtOsjs=
|
||||||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
|
||||||
contrib.go.opencensus.io/exporter/ocagent v0.4.12 h1:jGFvw3l57ViIVEPKKEUXPcLYIXJmQxLUh6ey1eJhwyc=
|
github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
|
||||||
contrib.go.opencensus.io/exporter/ocagent v0.4.12/go.mod h1:450APlNTSR6FrvC3CTRqYosuDstRB9un7SOx2k/9ckA=
|
|
||||||
github.com/Azure/go-autorest/autorest/date v0.1.0 h1:YGrhWfrgtFs84+h0o46rJrlmsZtyZRg470CqAXTZaGM=
|
github.com/Azure/go-autorest/autorest/date v0.1.0 h1:YGrhWfrgtFs84+h0o46rJrlmsZtyZRg470CqAXTZaGM=
|
||||||
github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
|
github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
|
||||||
|
github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM=
|
||||||
|
github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g=
|
||||||
github.com/Azure/go-autorest/autorest/mocks v0.1.0 h1:Kx+AUU2Te+A3JIyYn6Dfs+cFgx5XorQKuIXrZGoq/SI=
|
github.com/Azure/go-autorest/autorest/mocks v0.1.0 h1:Kx+AUU2Te+A3JIyYn6Dfs+cFgx5XorQKuIXrZGoq/SI=
|
||||||
github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
|
github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
|
||||||
github.com/Azure/go-autorest/tracing v0.1.0 h1:TRBxC5Pj/fIuh4Qob0ZpkggbfT8RC0SubHbpV3p4/Vc=
|
github.com/Azure/go-autorest/autorest/mocks v0.2.0 h1:Ww5g4zThfD/6cLb4z6xxgeyDa7QDkizMkJKe0ysZXp0=
|
||||||
github.com/Azure/go-autorest/tracing v0.1.0/go.mod h1:ROEEAFwXycQw7Sn3DXNtEedEvdeRAgDr0izn4z5Ij88=
|
github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc=
|
||||||
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
|
github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM=
|
||||||
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
|
github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY=
|
||||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
|
||||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k=
|
||||||
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
|
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
|
||||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.0 h1:LzQXZOgg4CQfE6bFvXGM30YZL1WW/M337pXml+GrcZ4=
|
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
|
||||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
|
||||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
|
||||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
||||||
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
|
|
||||||
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
|
|
||||||
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
|
|
||||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
|
||||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
|
||||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
|
||||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
|
||||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
|
||||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
|
||||||
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
|
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
|
||||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
|
||||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
|
||||||
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
|
|
||||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
|
||||||
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
|
||||||
github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
|
|
||||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
|
||||||
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
|
||||||
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.8.5 h1:2+KSC78XiO6Qy0hIjfc1OD9H+hsaJdJlb8Kqsd41CTE=
|
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
|
||||||
github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
|
|
||||||
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
|
||||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
|
||||||
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
|
||||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
|
||||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
|
||||||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
|
|
||||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
|
||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
|
||||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
|
||||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
|
||||||
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
|
||||||
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
|
||||||
github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
|
|
||||||
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
|
|
||||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
|
||||||
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
|
||||||
github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
|
|
||||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
|
||||||
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
|
||||||
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
|
||||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
|
||||||
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
|
||||||
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
|
||||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
|
||||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
|
||||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
|
||||||
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
|
||||||
go.opencensus.io v0.20.2 h1:NAfh7zF0/3/HqtMvJNZ/RFrSlCE6ZTlHmKfhL/Dm1Jk=
|
|
||||||
go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
|
||||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
|
||||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
|
||||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
|
||||||
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628=
|
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6 h1:bjcUS9ztw9kFmmIxJInhon/0Is3p+EHBKNgquIzo1OI=
|
|
||||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
|
||||||
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
|
||||||
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
|
||||||
google.golang.org/api v0.3.1 h1:oJra/lMfmtm13/rgY/8i3MzjFWYXvQIAKjQ3HqofMk8=
|
|
||||||
google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
|
|
||||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
|
||||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
|
||||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
|
||||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19 h1:Lj2SnHtxkRGJDqnGaSjo+CCdIieEnwVazbOXILwQemk=
|
|
||||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
|
||||||
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
|
||||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
|
||||||
google.golang.org/grpc v1.19.1 h1:TrBcJ1yqAl1G++wO39nD/qtgpsW9/1+QGrluyMGEYgM=
|
|
||||||
google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
|
||||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
|
||||||
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
|
||||||
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
|
|
||||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|
||||||
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
|
||||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
|
||||||
|
|
24
vendor/github.com/Azure/go-autorest/autorest/adal/go_mod_tidy_hack.go
generated
vendored
Normal file
24
vendor/github.com/Azure/go-autorest/autorest/adal/go_mod_tidy_hack.go
generated
vendored
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
// +build modhack
|
||||||
|
|
||||||
|
package adal
|
||||||
|
|
||||||
|
// Copyright 2017 Microsoft Corporation
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
// This file, and the github.com/Azure/go-autorest/autorest import, won't actually become part of
|
||||||
|
// the resultant binary.
|
||||||
|
|
||||||
|
// Necessary for safely adding multi-module repo.
|
||||||
|
// See: https://github.com/golang/go/wiki/Modules#is-it-possible-to-add-a-module-to-a-multi-module-repository
|
||||||
|
import _ "github.com/Azure/go-autorest/autorest"
|
|
@ -15,7 +15,12 @@ package adal
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/tls"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/http/cookiejar"
|
||||||
|
"sync"
|
||||||
|
|
||||||
|
"github.com/Azure/go-autorest/tracing"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -23,6 +28,9 @@ const (
|
||||||
mimeTypeFormPost = "application/x-www-form-urlencoded"
|
mimeTypeFormPost = "application/x-www-form-urlencoded"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var defaultSender Sender
|
||||||
|
var defaultSenderInit = &sync.Once{}
|
||||||
|
|
||||||
// Sender is the interface that wraps the Do method to send HTTP requests.
|
// Sender is the interface that wraps the Do method to send HTTP requests.
|
||||||
//
|
//
|
||||||
// The standard http.Client conforms to this interface.
|
// The standard http.Client conforms to this interface.
|
||||||
|
@ -45,7 +53,7 @@ type SendDecorator func(Sender) Sender
|
||||||
|
|
||||||
// CreateSender creates, decorates, and returns, as a Sender, the default http.Client.
|
// CreateSender creates, decorates, and returns, as a Sender, the default http.Client.
|
||||||
func CreateSender(decorators ...SendDecorator) Sender {
|
func CreateSender(decorators ...SendDecorator) Sender {
|
||||||
return DecorateSender(&http.Client{}, decorators...)
|
return DecorateSender(sender(), decorators...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DecorateSender accepts a Sender and a, possibly empty, set of SendDecorators, which is applies to
|
// DecorateSender accepts a Sender and a, possibly empty, set of SendDecorators, which is applies to
|
||||||
|
@ -58,3 +66,30 @@ func DecorateSender(s Sender, decorators ...SendDecorator) Sender {
|
||||||
}
|
}
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func sender() Sender {
|
||||||
|
// note that we can't init defaultSender in init() since it will
|
||||||
|
// execute before calling code has had a chance to enable tracing
|
||||||
|
defaultSenderInit.Do(func() {
|
||||||
|
// Use behaviour compatible with DefaultTransport, but require TLS minimum version.
|
||||||
|
defaultTransport := http.DefaultTransport.(*http.Transport)
|
||||||
|
transport := &http.Transport{
|
||||||
|
Proxy: defaultTransport.Proxy,
|
||||||
|
DialContext: defaultTransport.DialContext,
|
||||||
|
MaxIdleConns: defaultTransport.MaxIdleConns,
|
||||||
|
IdleConnTimeout: defaultTransport.IdleConnTimeout,
|
||||||
|
TLSHandshakeTimeout: defaultTransport.TLSHandshakeTimeout,
|
||||||
|
ExpectContinueTimeout: defaultTransport.ExpectContinueTimeout,
|
||||||
|
TLSClientConfig: &tls.Config{
|
||||||
|
MinVersion: tls.VersionTLS12,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
var roundTripper http.RoundTripper = transport
|
||||||
|
if tracing.IsEnabled() {
|
||||||
|
roundTripper = tracing.NewTransport(transport)
|
||||||
|
}
|
||||||
|
j, _ := cookiejar.New(nil)
|
||||||
|
defaultSender = &http.Client{Jar: j, Transport: roundTripper}
|
||||||
|
})
|
||||||
|
return defaultSender
|
||||||
|
}
|
||||||
|
|
|
@ -34,7 +34,6 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/Azure/go-autorest/autorest/date"
|
"github.com/Azure/go-autorest/autorest/date"
|
||||||
"github.com/Azure/go-autorest/tracing"
|
|
||||||
"github.com/dgrijalva/jwt-go"
|
"github.com/dgrijalva/jwt-go"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -396,7 +395,7 @@ func (spt *ServicePrincipalToken) UnmarshalJSON(data []byte) error {
|
||||||
spt.refreshLock = &sync.RWMutex{}
|
spt.refreshLock = &sync.RWMutex{}
|
||||||
}
|
}
|
||||||
if spt.sender == nil {
|
if spt.sender == nil {
|
||||||
spt.sender = &http.Client{Transport: tracing.Transport}
|
spt.sender = sender()
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -444,7 +443,7 @@ func NewServicePrincipalTokenWithSecret(oauthConfig OAuthConfig, id string, reso
|
||||||
RefreshWithin: defaultRefresh,
|
RefreshWithin: defaultRefresh,
|
||||||
},
|
},
|
||||||
refreshLock: &sync.RWMutex{},
|
refreshLock: &sync.RWMutex{},
|
||||||
sender: &http.Client{Transport: tracing.Transport},
|
sender: sender(),
|
||||||
refreshCallbacks: callbacks,
|
refreshCallbacks: callbacks,
|
||||||
}
|
}
|
||||||
return spt, nil
|
return spt, nil
|
||||||
|
@ -685,7 +684,7 @@ func newServicePrincipalTokenFromMSI(msiEndpoint, resource string, userAssignedI
|
||||||
RefreshWithin: defaultRefresh,
|
RefreshWithin: defaultRefresh,
|
||||||
},
|
},
|
||||||
refreshLock: &sync.RWMutex{},
|
refreshLock: &sync.RWMutex{},
|
||||||
sender: &http.Client{Transport: tracing.Transport},
|
sender: sender(),
|
||||||
refreshCallbacks: callbacks,
|
refreshCallbacks: callbacks,
|
||||||
MaxMSIRefreshAttempts: defaultMaxMSIRefreshAttempts,
|
MaxMSIRefreshAttempts: defaultMaxMSIRefreshAttempts,
|
||||||
}
|
}
|
||||||
|
@ -1024,6 +1023,32 @@ func (mt *MultiTenantServicePrincipalToken) EnsureFreshWithContext(ctx context.C
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RefreshWithContext obtains a fresh token for the Service Principal.
|
||||||
|
func (mt *MultiTenantServicePrincipalToken) RefreshWithContext(ctx context.Context) error {
|
||||||
|
if err := mt.PrimaryToken.RefreshWithContext(ctx); err != nil {
|
||||||
|
return fmt.Errorf("failed to refresh primary token: %v", err)
|
||||||
|
}
|
||||||
|
for _, aux := range mt.AuxiliaryTokens {
|
||||||
|
if err := aux.RefreshWithContext(ctx); err != nil {
|
||||||
|
return fmt.Errorf("failed to refresh auxiliary token: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// RefreshExchangeWithContext refreshes the token, but for a different resource.
|
||||||
|
func (mt *MultiTenantServicePrincipalToken) RefreshExchangeWithContext(ctx context.Context, resource string) error {
|
||||||
|
if err := mt.PrimaryToken.RefreshExchangeWithContext(ctx, resource); err != nil {
|
||||||
|
return fmt.Errorf("failed to refresh primary token: %v", err)
|
||||||
|
}
|
||||||
|
for _, aux := range mt.AuxiliaryTokens {
|
||||||
|
if err := aux.RefreshExchangeWithContext(ctx, resource); err != nil {
|
||||||
|
return fmt.Errorf("failed to refresh auxiliary token: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// NewMultiTenantServicePrincipalToken creates a new MultiTenantServicePrincipalToken with the specified credentials and resource.
|
// NewMultiTenantServicePrincipalToken creates a new MultiTenantServicePrincipalToken with the specified credentials and resource.
|
||||||
func NewMultiTenantServicePrincipalToken(multiTenantCfg MultiTenantOAuthConfig, clientID string, secret string, resource string) (*MultiTenantServicePrincipalToken, error) {
|
func NewMultiTenantServicePrincipalToken(multiTenantCfg MultiTenantOAuthConfig, clientID string, secret string, resource string) (*MultiTenantServicePrincipalToken, error) {
|
||||||
if err := validateStringParam(clientID, "clientID"); err != nil {
|
if err := validateStringParam(clientID, "clientID"); err != nil {
|
||||||
|
|
|
@ -15,6 +15,7 @@ package autorest
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/tls"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
@ -22,7 +23,6 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/Azure/go-autorest/autorest/adal"
|
"github.com/Azure/go-autorest/autorest/adal"
|
||||||
"github.com/Azure/go-autorest/tracing"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -149,11 +149,11 @@ type BearerAuthorizerCallback struct {
|
||||||
|
|
||||||
// NewBearerAuthorizerCallback creates a bearer authorization callback. The callback
|
// NewBearerAuthorizerCallback creates a bearer authorization callback. The callback
|
||||||
// is invoked when the HTTP request is submitted.
|
// is invoked when the HTTP request is submitted.
|
||||||
func NewBearerAuthorizerCallback(sender Sender, callback BearerAuthorizerCallbackFunc) *BearerAuthorizerCallback {
|
func NewBearerAuthorizerCallback(s Sender, callback BearerAuthorizerCallbackFunc) *BearerAuthorizerCallback {
|
||||||
if sender == nil {
|
if s == nil {
|
||||||
sender = &http.Client{Transport: tracing.Transport}
|
s = sender(tls.RenegotiateNever)
|
||||||
}
|
}
|
||||||
return &BearerAuthorizerCallback{sender: sender, callback: callback}
|
return &BearerAuthorizerCallback{sender: s, callback: callback}
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithAuthorization returns a PrepareDecorator that adds an HTTP Authorization header whose value
|
// WithAuthorization returns a PrepareDecorator that adds an HTTP Authorization header whose value
|
||||||
|
|
|
@ -417,6 +417,11 @@ func (pt *pollingTrackerBase) pollForStatus(ctx context.Context, sender autorest
|
||||||
}
|
}
|
||||||
|
|
||||||
req = req.WithContext(ctx)
|
req = req.WithContext(ctx)
|
||||||
|
preparer := autorest.CreatePreparer(autorest.GetPrepareDecorators(ctx)...)
|
||||||
|
req, err = preparer.Prepare(req)
|
||||||
|
if err != nil {
|
||||||
|
return autorest.NewErrorWithError(err, "pollingTrackerBase", "pollForStatus", nil, "failed preparing HTTP request")
|
||||||
|
}
|
||||||
pt.resp, err = sender.Do(req)
|
pt.resp, err = sender.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return autorest.NewErrorWithError(err, "pollingTrackerBase", "pollForStatus", nil, "failed to send HTTP request")
|
return autorest.NewErrorWithError(err, "pollingTrackerBase", "pollForStatus", nil, "failed to send HTTP request")
|
||||||
|
|
|
@ -3,7 +3,7 @@ module github.com/Azure/go-autorest/autorest/azure/cli
|
||||||
go 1.12
|
go 1.12
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/Azure/go-autorest/autorest/adal v0.1.0
|
github.com/Azure/go-autorest/autorest/adal v0.5.0
|
||||||
github.com/Azure/go-autorest/autorest/date v0.1.0
|
github.com/Azure/go-autorest/autorest/date v0.1.0
|
||||||
github.com/dimchansky/utfbom v1.1.0
|
github.com/dimchansky/utfbom v1.1.0
|
||||||
github.com/mitchellh/go-homedir v1.1.0
|
github.com/mitchellh/go-homedir v1.1.0
|
||||||
|
|
|
@ -1,144 +1,17 @@
|
||||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
github.com/Azure/go-autorest/autorest/adal v0.5.0 h1:q2gDruN08/guU9vAjuPWff0+QIrpH6ediguzdAzXAUU=
|
||||||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
|
||||||
contrib.go.opencensus.io/exporter/ocagent v0.4.12 h1:jGFvw3l57ViIVEPKKEUXPcLYIXJmQxLUh6ey1eJhwyc=
|
|
||||||
contrib.go.opencensus.io/exporter/ocagent v0.4.12/go.mod h1:450APlNTSR6FrvC3CTRqYosuDstRB9un7SOx2k/9ckA=
|
|
||||||
github.com/Azure/go-autorest/autorest/adal v0.1.0 h1:RSw/7EAullliqwkZvgIGDYZWQm1PGKXI8c4aY/87yuU=
|
|
||||||
github.com/Azure/go-autorest/autorest/adal v0.1.0/go.mod h1:MeS4XhScH55IST095THyTxElntu7WqB7pNbZo8Q5G3E=
|
|
||||||
github.com/Azure/go-autorest/autorest/date v0.1.0 h1:YGrhWfrgtFs84+h0o46rJrlmsZtyZRg470CqAXTZaGM=
|
github.com/Azure/go-autorest/autorest/date v0.1.0 h1:YGrhWfrgtFs84+h0o46rJrlmsZtyZRg470CqAXTZaGM=
|
||||||
github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
|
github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
|
||||||
github.com/Azure/go-autorest/autorest/mocks v0.1.0 h1:Kx+AUU2Te+A3JIyYn6Dfs+cFgx5XorQKuIXrZGoq/SI=
|
github.com/Azure/go-autorest/autorest/mocks v0.1.0 h1:Kx+AUU2Te+A3JIyYn6Dfs+cFgx5XorQKuIXrZGoq/SI=
|
||||||
github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
|
github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
|
||||||
github.com/Azure/go-autorest/tracing v0.1.0 h1:TRBxC5Pj/fIuh4Qob0ZpkggbfT8RC0SubHbpV3p4/Vc=
|
github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k=
|
||||||
github.com/Azure/go-autorest/tracing v0.1.0/go.mod h1:ROEEAFwXycQw7Sn3DXNtEedEvdeRAgDr0izn4z5Ij88=
|
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
|
||||||
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
|
|
||||||
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
|
|
||||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
|
||||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
|
||||||
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
|
|
||||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.0 h1:LzQXZOgg4CQfE6bFvXGM30YZL1WW/M337pXml+GrcZ4=
|
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
|
||||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
|
||||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
|
||||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
||||||
github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4=
|
github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4=
|
||||||
github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8=
|
github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8=
|
||||||
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
|
|
||||||
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
|
|
||||||
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
|
|
||||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
|
||||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
|
||||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
|
||||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
|
||||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
|
||||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
|
||||||
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
|
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
|
||||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
|
||||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
|
||||||
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
|
|
||||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
|
||||||
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
|
||||||
github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
|
|
||||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
|
||||||
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
|
||||||
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.8.5 h1:2+KSC78XiO6Qy0hIjfc1OD9H+hsaJdJlb8Kqsd41CTE=
|
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
|
||||||
github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
|
|
||||||
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
|
||||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
|
||||||
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
|
||||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
|
||||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
|
||||||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
|
|
||||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
|
||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
|
||||||
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
||||||
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
|
||||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
|
||||||
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
|
||||||
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
|
||||||
github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
|
|
||||||
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
|
|
||||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
|
||||||
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
|
||||||
github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
|
|
||||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
|
||||||
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
|
||||||
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
|
||||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
|
||||||
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
|
||||||
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
|
||||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
|
||||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
|
||||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
|
||||||
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
|
||||||
go.opencensus.io v0.20.2 h1:NAfh7zF0/3/HqtMvJNZ/RFrSlCE6ZTlHmKfhL/Dm1Jk=
|
|
||||||
go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
|
||||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
|
||||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
|
||||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
|
||||||
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628=
|
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6 h1:bjcUS9ztw9kFmmIxJInhon/0Is3p+EHBKNgquIzo1OI=
|
|
||||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
|
||||||
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
|
||||||
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
|
||||||
google.golang.org/api v0.3.1 h1:oJra/lMfmtm13/rgY/8i3MzjFWYXvQIAKjQ3HqofMk8=
|
|
||||||
google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
|
|
||||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
|
||||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
|
||||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
|
||||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19 h1:Lj2SnHtxkRGJDqnGaSjo+CCdIieEnwVazbOXILwQemk=
|
|
||||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
|
||||||
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
|
||||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
|
||||||
google.golang.org/grpc v1.19.1 h1:TrBcJ1yqAl1G++wO39nD/qtgpsW9/1+QGrluyMGEYgM=
|
|
||||||
google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
|
||||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
|
||||||
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
|
||||||
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
|
|
||||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|
||||||
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
|
||||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
|
||||||
|
|
|
@ -22,12 +22,10 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/cookiejar"
|
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/Azure/go-autorest/logger"
|
"github.com/Azure/go-autorest/logger"
|
||||||
"github.com/Azure/go-autorest/tracing"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -264,30 +262,8 @@ func (c Client) Do(r *http.Request) (*http.Response, error) {
|
||||||
// sender returns the Sender to which to send requests.
|
// sender returns the Sender to which to send requests.
|
||||||
func (c Client) sender(renengotiation tls.RenegotiationSupport) Sender {
|
func (c Client) sender(renengotiation tls.RenegotiationSupport) Sender {
|
||||||
if c.Sender == nil {
|
if c.Sender == nil {
|
||||||
// Use behaviour compatible with DefaultTransport, but require TLS minimum version.
|
return sender(renengotiation)
|
||||||
var defaultTransport = http.DefaultTransport.(*http.Transport)
|
|
||||||
transport := tracing.Transport
|
|
||||||
// for non-default values of TLS renegotiation create a new tracing transport.
|
|
||||||
// updating tracing.Transport affects all clients which is not what we want.
|
|
||||||
if renengotiation != tls.RenegotiateNever {
|
|
||||||
transport = tracing.NewTransport()
|
|
||||||
}
|
|
||||||
transport.Base = &http.Transport{
|
|
||||||
Proxy: defaultTransport.Proxy,
|
|
||||||
DialContext: defaultTransport.DialContext,
|
|
||||||
MaxIdleConns: defaultTransport.MaxIdleConns,
|
|
||||||
IdleConnTimeout: defaultTransport.IdleConnTimeout,
|
|
||||||
TLSHandshakeTimeout: defaultTransport.TLSHandshakeTimeout,
|
|
||||||
ExpectContinueTimeout: defaultTransport.ExpectContinueTimeout,
|
|
||||||
TLSClientConfig: &tls.Config{
|
|
||||||
MinVersion: tls.VersionTLS12,
|
|
||||||
Renegotiation: renengotiation,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
j, _ := cookiejar.New(nil)
|
|
||||||
return &http.Client{Jar: j, Transport: transport}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return c.Sender
|
return c.Sender
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
module github.com/Azure/go-autorest/autorest/date
|
module github.com/Azure/go-autorest/autorest/date
|
||||||
|
|
||||||
go 1.12
|
go 1.12
|
||||||
|
|
||||||
|
require github.com/Azure/go-autorest/autorest v0.9.0
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
github.com/Azure/go-autorest/autorest v0.9.0 h1:MRvx8gncNaXJqOoLmhNjUAKh33JJF8LyxPhomEtOsjs=
|
||||||
|
github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
|
||||||
|
github.com/Azure/go-autorest/autorest/adal v0.5.0 h1:q2gDruN08/guU9vAjuPWff0+QIrpH6ediguzdAzXAUU=
|
||||||
|
github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
|
||||||
|
github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
|
||||||
|
github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
|
||||||
|
github.com/Azure/go-autorest/autorest/mocks v0.2.0 h1:Ww5g4zThfD/6cLb4z6xxgeyDa7QDkizMkJKe0ysZXp0=
|
||||||
|
github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
|
||||||
|
github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY=
|
||||||
|
github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
|
||||||
|
github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k=
|
||||||
|
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
|
||||||
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
|
||||||
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
||||||
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
24
vendor/github.com/Azure/go-autorest/autorest/date/go_mod_tidy_hack.go
generated
vendored
Normal file
24
vendor/github.com/Azure/go-autorest/autorest/date/go_mod_tidy_hack.go
generated
vendored
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
// +build modhack
|
||||||
|
|
||||||
|
package date
|
||||||
|
|
||||||
|
// Copyright 2017 Microsoft Corporation
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
// This file, and the github.com/Azure/go-autorest/autorest import, won't actually become part of
|
||||||
|
// the resultant binary.
|
||||||
|
|
||||||
|
// Necessary for safely adding multi-module repo.
|
||||||
|
// See: https://github.com/golang/go/wiki/Modules#is-it-possible-to-add-a-module-to-a-multi-module-repository
|
||||||
|
import _ "github.com/Azure/go-autorest/autorest"
|
|
@ -3,10 +3,9 @@ module github.com/Azure/go-autorest/autorest
|
||||||
go 1.12
|
go 1.12
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/Azure/go-autorest/autorest/adal v0.2.0
|
github.com/Azure/go-autorest/autorest/adal v0.5.0
|
||||||
github.com/Azure/go-autorest/autorest/mocks v0.1.0
|
github.com/Azure/go-autorest/autorest/mocks v0.2.0
|
||||||
github.com/Azure/go-autorest/logger v0.1.0
|
github.com/Azure/go-autorest/logger v0.1.0
|
||||||
github.com/Azure/go-autorest/tracing v0.1.0
|
github.com/Azure/go-autorest/tracing v0.5.0
|
||||||
go.opencensus.io v0.20.2
|
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,143 +1,18 @@
|
||||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
github.com/Azure/go-autorest/autorest/adal v0.5.0 h1:q2gDruN08/guU9vAjuPWff0+QIrpH6ediguzdAzXAUU=
|
||||||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
|
||||||
contrib.go.opencensus.io/exporter/ocagent v0.4.12 h1:jGFvw3l57ViIVEPKKEUXPcLYIXJmQxLUh6ey1eJhwyc=
|
|
||||||
contrib.go.opencensus.io/exporter/ocagent v0.4.12/go.mod h1:450APlNTSR6FrvC3CTRqYosuDstRB9un7SOx2k/9ckA=
|
|
||||||
github.com/Azure/go-autorest/autorest/adal v0.2.0 h1:7IBDu1jgh+ADHXnEYExkV9RE/ztOOlxdACkkPRthGKw=
|
|
||||||
github.com/Azure/go-autorest/autorest/adal v0.2.0/go.mod h1:MeS4XhScH55IST095THyTxElntu7WqB7pNbZo8Q5G3E=
|
|
||||||
github.com/Azure/go-autorest/autorest/date v0.1.0 h1:YGrhWfrgtFs84+h0o46rJrlmsZtyZRg470CqAXTZaGM=
|
github.com/Azure/go-autorest/autorest/date v0.1.0 h1:YGrhWfrgtFs84+h0o46rJrlmsZtyZRg470CqAXTZaGM=
|
||||||
github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
|
github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
|
||||||
github.com/Azure/go-autorest/autorest/mocks v0.1.0 h1:Kx+AUU2Te+A3JIyYn6Dfs+cFgx5XorQKuIXrZGoq/SI=
|
github.com/Azure/go-autorest/autorest/mocks v0.1.0 h1:Kx+AUU2Te+A3JIyYn6Dfs+cFgx5XorQKuIXrZGoq/SI=
|
||||||
github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
|
github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
|
||||||
|
github.com/Azure/go-autorest/autorest/mocks v0.2.0 h1:Ww5g4zThfD/6cLb4z6xxgeyDa7QDkizMkJKe0ysZXp0=
|
||||||
|
github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
|
||||||
github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY=
|
github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY=
|
||||||
github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
|
github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
|
||||||
github.com/Azure/go-autorest/tracing v0.1.0 h1:TRBxC5Pj/fIuh4Qob0ZpkggbfT8RC0SubHbpV3p4/Vc=
|
github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k=
|
||||||
github.com/Azure/go-autorest/tracing v0.1.0/go.mod h1:ROEEAFwXycQw7Sn3DXNtEedEvdeRAgDr0izn4z5Ij88=
|
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
|
||||||
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
|
|
||||||
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
|
|
||||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
|
||||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
|
||||||
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
|
|
||||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.0 h1:LzQXZOgg4CQfE6bFvXGM30YZL1WW/M337pXml+GrcZ4=
|
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
|
||||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
|
||||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
|
||||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
||||||
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
|
|
||||||
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
|
|
||||||
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
|
|
||||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
|
||||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
|
||||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
|
||||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
|
||||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
|
||||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
|
||||||
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
|
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
|
||||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
|
||||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
|
||||||
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
|
|
||||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
|
||||||
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
|
||||||
github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
|
|
||||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
|
||||||
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
|
||||||
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.8.5 h1:2+KSC78XiO6Qy0hIjfc1OD9H+hsaJdJlb8Kqsd41CTE=
|
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
|
||||||
github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
|
|
||||||
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
|
||||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
|
||||||
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
|
||||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
|
||||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
|
||||||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
|
|
||||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
|
||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
|
||||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
|
||||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
|
||||||
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
|
||||||
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
|
||||||
github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
|
|
||||||
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
|
|
||||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
|
||||||
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
|
||||||
github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
|
|
||||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
|
||||||
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
|
||||||
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
|
||||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
|
||||||
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
|
||||||
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
|
||||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
|
||||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
|
||||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
|
||||||
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
|
||||||
go.opencensus.io v0.20.2 h1:NAfh7zF0/3/HqtMvJNZ/RFrSlCE6ZTlHmKfhL/Dm1Jk=
|
|
||||||
go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
|
||||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
|
||||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
|
||||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
|
||||||
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628=
|
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6 h1:bjcUS9ztw9kFmmIxJInhon/0Is3p+EHBKNgquIzo1OI=
|
|
||||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
|
||||||
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
|
||||||
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
|
||||||
google.golang.org/api v0.3.1 h1:oJra/lMfmtm13/rgY/8i3MzjFWYXvQIAKjQ3HqofMk8=
|
|
||||||
google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
|
|
||||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
|
||||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
|
||||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
|
||||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19 h1:Lj2SnHtxkRGJDqnGaSjo+CCdIieEnwVazbOXILwQemk=
|
|
||||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
|
||||||
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
|
||||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
|
||||||
google.golang.org/grpc v1.19.1 h1:TrBcJ1yqAl1G++wO39nD/qtgpsW9/1+QGrluyMGEYgM=
|
|
||||||
google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
|
||||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
|
||||||
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
|
||||||
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
|
|
||||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|
||||||
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
|
||||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
|
||||||
|
|
|
@ -16,6 +16,7 @@ package autorest
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
@ -38,6 +39,27 @@ const (
|
||||||
headerUserAgent = "User-Agent"
|
headerUserAgent = "User-Agent"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// used as a key type in context.WithValue()
|
||||||
|
type ctxPrepareDecorators struct{}
|
||||||
|
|
||||||
|
// WithPrepareDecorators adds the specified PrepareDecorators to the provided context.
|
||||||
|
// If no PrepareDecorators are provided the context is unchanged.
|
||||||
|
func WithPrepareDecorators(ctx context.Context, prepareDecorator []PrepareDecorator) context.Context {
|
||||||
|
if len(prepareDecorator) == 0 {
|
||||||
|
return ctx
|
||||||
|
}
|
||||||
|
return context.WithValue(ctx, ctxPrepareDecorators{}, prepareDecorator)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPrepareDecorators returns the PrepareDecorators in the provided context or the provided default PrepareDecorators.
|
||||||
|
func GetPrepareDecorators(ctx context.Context, defaultPrepareDecorators ...PrepareDecorator) []PrepareDecorator {
|
||||||
|
inCtx := ctx.Value(ctxPrepareDecorators{})
|
||||||
|
if pd, ok := inCtx.([]PrepareDecorator); ok {
|
||||||
|
return pd
|
||||||
|
}
|
||||||
|
return defaultPrepareDecorators
|
||||||
|
}
|
||||||
|
|
||||||
// Preparer is the interface that wraps the Prepare method.
|
// Preparer is the interface that wraps the Prepare method.
|
||||||
//
|
//
|
||||||
// Prepare accepts and possibly modifies an http.Request (e.g., adding Headers). Implementations
|
// Prepare accepts and possibly modifies an http.Request (e.g., adding Headers). Implementations
|
||||||
|
|
|
@ -16,10 +16,12 @@ package autorest
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"crypto/tls"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"math"
|
"math"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/http/cookiejar"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -30,7 +32,11 @@ import (
|
||||||
type ctxSendDecorators struct{}
|
type ctxSendDecorators struct{}
|
||||||
|
|
||||||
// WithSendDecorators adds the specified SendDecorators to the provided context.
|
// WithSendDecorators adds the specified SendDecorators to the provided context.
|
||||||
|
// If no SendDecorators are provided the context is unchanged.
|
||||||
func WithSendDecorators(ctx context.Context, sendDecorator []SendDecorator) context.Context {
|
func WithSendDecorators(ctx context.Context, sendDecorator []SendDecorator) context.Context {
|
||||||
|
if len(sendDecorator) == 0 {
|
||||||
|
return ctx
|
||||||
|
}
|
||||||
return context.WithValue(ctx, ctxSendDecorators{}, sendDecorator)
|
return context.WithValue(ctx, ctxSendDecorators{}, sendDecorator)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,7 +71,7 @@ type SendDecorator func(Sender) Sender
|
||||||
|
|
||||||
// CreateSender creates, decorates, and returns, as a Sender, the default http.Client.
|
// CreateSender creates, decorates, and returns, as a Sender, the default http.Client.
|
||||||
func CreateSender(decorators ...SendDecorator) Sender {
|
func CreateSender(decorators ...SendDecorator) Sender {
|
||||||
return DecorateSender(&http.Client{}, decorators...)
|
return DecorateSender(sender(tls.RenegotiateNever), decorators...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DecorateSender accepts a Sender and a, possibly empty, set of SendDecorators, which is applies to
|
// DecorateSender accepts a Sender and a, possibly empty, set of SendDecorators, which is applies to
|
||||||
|
@ -88,7 +94,7 @@ func DecorateSender(s Sender, decorators ...SendDecorator) Sender {
|
||||||
//
|
//
|
||||||
// Send will not poll or retry requests.
|
// Send will not poll or retry requests.
|
||||||
func Send(r *http.Request, decorators ...SendDecorator) (*http.Response, error) {
|
func Send(r *http.Request, decorators ...SendDecorator) (*http.Response, error) {
|
||||||
return SendWithSender(&http.Client{Transport: tracing.Transport}, r, decorators...)
|
return SendWithSender(sender(tls.RenegotiateNever), r, decorators...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendWithSender sends the passed http.Request, through the provided Sender, returning the
|
// SendWithSender sends the passed http.Request, through the provided Sender, returning the
|
||||||
|
@ -100,6 +106,29 @@ func SendWithSender(s Sender, r *http.Request, decorators ...SendDecorator) (*ht
|
||||||
return DecorateSender(s, decorators...).Do(r)
|
return DecorateSender(s, decorators...).Do(r)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func sender(renengotiation tls.RenegotiationSupport) Sender {
|
||||||
|
// Use behaviour compatible with DefaultTransport, but require TLS minimum version.
|
||||||
|
defaultTransport := http.DefaultTransport.(*http.Transport)
|
||||||
|
transport := &http.Transport{
|
||||||
|
Proxy: defaultTransport.Proxy,
|
||||||
|
DialContext: defaultTransport.DialContext,
|
||||||
|
MaxIdleConns: defaultTransport.MaxIdleConns,
|
||||||
|
IdleConnTimeout: defaultTransport.IdleConnTimeout,
|
||||||
|
TLSHandshakeTimeout: defaultTransport.TLSHandshakeTimeout,
|
||||||
|
ExpectContinueTimeout: defaultTransport.ExpectContinueTimeout,
|
||||||
|
TLSClientConfig: &tls.Config{
|
||||||
|
MinVersion: tls.VersionTLS12,
|
||||||
|
Renegotiation: renengotiation,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
var roundTripper http.RoundTripper = transport
|
||||||
|
if tracing.IsEnabled() {
|
||||||
|
roundTripper = tracing.NewTransport(transport)
|
||||||
|
}
|
||||||
|
j, _ := cookiejar.New(nil)
|
||||||
|
return &http.Client{Jar: j, Transport: roundTripper}
|
||||||
|
}
|
||||||
|
|
||||||
// AfterDelay returns a SendDecorator that delays for the passed time.Duration before
|
// AfterDelay returns a SendDecorator that delays for the passed time.Duration before
|
||||||
// invoking the Sender. The delay may be terminated by closing the optional channel on the
|
// invoking the Sender. The delay may be terminated by closing the optional channel on the
|
||||||
// http.Request. If canceled, no further Senders are invoked.
|
// http.Request. If canceled, no further Senders are invoked.
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
module github.com/Azure/go-autorest/autorest/to
|
module github.com/Azure/go-autorest/autorest/to
|
||||||
|
|
||||||
go 1.12
|
go 1.12
|
||||||
|
|
||||||
|
require github.com/Azure/go-autorest/autorest v0.9.0
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
github.com/Azure/go-autorest/autorest v0.9.0 h1:MRvx8gncNaXJqOoLmhNjUAKh33JJF8LyxPhomEtOsjs=
|
||||||
|
github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
|
||||||
|
github.com/Azure/go-autorest/autorest/adal v0.5.0 h1:q2gDruN08/guU9vAjuPWff0+QIrpH6ediguzdAzXAUU=
|
||||||
|
github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
|
||||||
|
github.com/Azure/go-autorest/autorest/date v0.1.0 h1:YGrhWfrgtFs84+h0o46rJrlmsZtyZRg470CqAXTZaGM=
|
||||||
|
github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
|
||||||
|
github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
|
||||||
|
github.com/Azure/go-autorest/autorest/mocks v0.2.0 h1:Ww5g4zThfD/6cLb4z6xxgeyDa7QDkizMkJKe0ysZXp0=
|
||||||
|
github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
|
||||||
|
github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY=
|
||||||
|
github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
|
||||||
|
github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k=
|
||||||
|
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
|
||||||
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
|
||||||
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
||||||
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
24
vendor/github.com/Azure/go-autorest/autorest/to/go_mod_tidy_hack.go
generated
vendored
Normal file
24
vendor/github.com/Azure/go-autorest/autorest/to/go_mod_tidy_hack.go
generated
vendored
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
// +build modhack
|
||||||
|
|
||||||
|
package to
|
||||||
|
|
||||||
|
// Copyright 2017 Microsoft Corporation
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
// This file, and the github.com/Azure/go-autorest/autorest import, won't actually become part of
|
||||||
|
// the resultant binary.
|
||||||
|
|
||||||
|
// Necessary for safely adding multi-module repo.
|
||||||
|
// See: https://github.com/golang/go/wiki/Modules#is-it-possible-to-add-a-module-to-a-multi-module-repository
|
||||||
|
import _ "github.com/Azure/go-autorest/autorest"
|
|
@ -2,4 +2,7 @@ module github.com/Azure/go-autorest/autorest/validation
|
||||||
|
|
||||||
go 1.12
|
go 1.12
|
||||||
|
|
||||||
require github.com/stretchr/testify v1.3.0
|
require (
|
||||||
|
github.com/Azure/go-autorest/autorest v0.9.0
|
||||||
|
github.com/stretchr/testify v1.3.0
|
||||||
|
)
|
||||||
|
|
|
@ -1,7 +1,24 @@
|
||||||
|
github.com/Azure/go-autorest/autorest v0.9.0 h1:MRvx8gncNaXJqOoLmhNjUAKh33JJF8LyxPhomEtOsjs=
|
||||||
|
github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
|
||||||
|
github.com/Azure/go-autorest/autorest/adal v0.5.0 h1:q2gDruN08/guU9vAjuPWff0+QIrpH6ediguzdAzXAUU=
|
||||||
|
github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
|
||||||
|
github.com/Azure/go-autorest/autorest/date v0.1.0 h1:YGrhWfrgtFs84+h0o46rJrlmsZtyZRg470CqAXTZaGM=
|
||||||
|
github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
|
||||||
|
github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
|
||||||
|
github.com/Azure/go-autorest/autorest/mocks v0.2.0 h1:Ww5g4zThfD/6cLb4z6xxgeyDa7QDkizMkJKe0ysZXp0=
|
||||||
|
github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
|
||||||
|
github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY=
|
||||||
|
github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
|
||||||
|
github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k=
|
||||||
|
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
|
||||||
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
|
||||||
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
|
24
vendor/github.com/Azure/go-autorest/autorest/validation/go_mod_tidy_hack.go
generated
vendored
Normal file
24
vendor/github.com/Azure/go-autorest/autorest/validation/go_mod_tidy_hack.go
generated
vendored
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
// +build modhack
|
||||||
|
|
||||||
|
package validation
|
||||||
|
|
||||||
|
// Copyright 2017 Microsoft Corporation
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
// This file, and the github.com/Azure/go-autorest/autorest import, won't actually become part of
|
||||||
|
// the resultant binary.
|
||||||
|
|
||||||
|
// Necessary for safely adding multi-module repo.
|
||||||
|
// See: https://github.com/golang/go/wiki/Modules#is-it-possible-to-add-a-module-to-a-multi-module-repository
|
||||||
|
import _ "github.com/Azure/go-autorest/autorest"
|
|
@ -19,7 +19,7 @@ import (
|
||||||
"runtime"
|
"runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
const number = "v12.3.0"
|
const number = "v13.0.0"
|
||||||
|
|
||||||
var (
|
var (
|
||||||
userAgent = fmt.Sprintf("Go/%s (%s-%s) go-autorest/%s",
|
userAgent = fmt.Sprintf("Go/%s (%s-%s) go-autorest/%s",
|
||||||
|
|
|
@ -1,8 +1,3 @@
|
||||||
module github.com/Azure/go-autorest/tracing
|
module github.com/Azure/go-autorest/tracing
|
||||||
|
|
||||||
go 1.12
|
go 1.12
|
||||||
|
|
||||||
require (
|
|
||||||
contrib.go.opencensus.io/exporter/ocagent v0.4.12
|
|
||||||
go.opencensus.io v0.20.2
|
|
||||||
)
|
|
||||||
|
|
|
@ -1,130 +0,0 @@
|
||||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
|
||||||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
|
||||||
contrib.go.opencensus.io/exporter/ocagent v0.4.12 h1:jGFvw3l57ViIVEPKKEUXPcLYIXJmQxLUh6ey1eJhwyc=
|
|
||||||
contrib.go.opencensus.io/exporter/ocagent v0.4.12/go.mod h1:450APlNTSR6FrvC3CTRqYosuDstRB9un7SOx2k/9ckA=
|
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
|
||||||
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
|
|
||||||
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
|
|
||||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
|
||||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
|
||||||
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
|
|
||||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.0 h1:LzQXZOgg4CQfE6bFvXGM30YZL1WW/M337pXml+GrcZ4=
|
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
|
||||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
|
||||||
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
|
|
||||||
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
|
|
||||||
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
|
|
||||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
|
||||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
|
||||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
|
||||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
|
||||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
|
||||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
|
||||||
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
|
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
|
||||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
|
||||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
|
||||||
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
|
|
||||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
|
||||||
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
|
||||||
github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
|
|
||||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
|
||||||
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
|
||||||
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.8.5 h1:2+KSC78XiO6Qy0hIjfc1OD9H+hsaJdJlb8Kqsd41CTE=
|
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
|
||||||
github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
|
|
||||||
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
|
||||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
|
||||||
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
|
||||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
|
||||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
|
||||||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
|
|
||||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
|
||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
|
||||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
|
||||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
|
||||||
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
|
||||||
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
|
||||||
github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
|
|
||||||
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
|
|
||||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
|
||||||
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
|
||||||
github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
|
|
||||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
|
||||||
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
|
||||||
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
|
||||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
|
||||||
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
|
||||||
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
|
||||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
|
||||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
|
||||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
|
||||||
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
|
||||||
go.opencensus.io v0.20.2 h1:NAfh7zF0/3/HqtMvJNZ/RFrSlCE6ZTlHmKfhL/Dm1Jk=
|
|
||||||
go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
|
||||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
|
||||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
|
||||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
|
||||||
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628=
|
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6 h1:bjcUS9ztw9kFmmIxJInhon/0Is3p+EHBKNgquIzo1OI=
|
|
||||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
|
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
|
||||||
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
|
||||||
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
|
||||||
google.golang.org/api v0.3.1 h1:oJra/lMfmtm13/rgY/8i3MzjFWYXvQIAKjQ3HqofMk8=
|
|
||||||
google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
|
|
||||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
|
||||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
|
||||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
|
||||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19 h1:Lj2SnHtxkRGJDqnGaSjo+CCdIieEnwVazbOXILwQemk=
|
|
||||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
|
||||||
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
|
||||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
|
||||||
google.golang.org/grpc v1.19.1 h1:TrBcJ1yqAl1G++wO39nD/qtgpsW9/1+QGrluyMGEYgM=
|
|
||||||
google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
|
||||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
|
||||||
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
|
||||||
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
|
|
||||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|
||||||
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
|
||||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
|
|
@ -16,180 +16,52 @@ package tracing
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
|
||||||
|
|
||||||
"contrib.go.opencensus.io/exporter/ocagent"
|
|
||||||
"go.opencensus.io/plugin/ochttp"
|
|
||||||
"go.opencensus.io/plugin/ochttp/propagation/tracecontext"
|
|
||||||
"go.opencensus.io/stats/view"
|
|
||||||
"go.opencensus.io/trace"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Tracer represents an HTTP tracing facility.
|
||||||
|
type Tracer interface {
|
||||||
|
NewTransport(base *http.Transport) http.RoundTripper
|
||||||
|
StartSpan(ctx context.Context, name string) context.Context
|
||||||
|
EndSpan(ctx context.Context, httpStatusCode int, err error)
|
||||||
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
// Transport is the default tracing RoundTripper. The custom options setter will control
|
tracer Tracer
|
||||||
// if traces are being emitted or not.
|
|
||||||
Transport = NewTransport()
|
|
||||||
|
|
||||||
// enabled is the flag for marking if tracing is enabled.
|
|
||||||
enabled = false
|
|
||||||
|
|
||||||
// Sampler is the tracing sampler. If tracing is disabled it will never sample. Otherwise
|
|
||||||
// it will be using the parent sampler or the default.
|
|
||||||
sampler = trace.NeverSample()
|
|
||||||
|
|
||||||
// Views for metric instrumentation.
|
|
||||||
views = map[string]*view.View{}
|
|
||||||
|
|
||||||
// the trace exporter
|
|
||||||
traceExporter trace.Exporter
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
// Register will register the provided Tracer. Pass nil to unregister a Tracer.
|
||||||
enableFromEnv()
|
func Register(t Tracer) {
|
||||||
|
tracer = t
|
||||||
}
|
}
|
||||||
|
|
||||||
func enableFromEnv() {
|
// IsEnabled returns true if a Tracer has been registered.
|
||||||
_, ok := os.LookupEnv("AZURE_SDK_TRACING_ENABLED")
|
|
||||||
_, legacyOk := os.LookupEnv("AZURE_SDK_TRACING_ENABELD")
|
|
||||||
if ok || legacyOk {
|
|
||||||
agentEndpoint, ok := os.LookupEnv("OCAGENT_TRACE_EXPORTER_ENDPOINT")
|
|
||||||
|
|
||||||
if ok {
|
|
||||||
EnableWithAIForwarding(agentEndpoint)
|
|
||||||
} else {
|
|
||||||
Enable()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewTransport returns a new instance of a tracing-aware RoundTripper.
|
|
||||||
func NewTransport() *ochttp.Transport {
|
|
||||||
return &ochttp.Transport{
|
|
||||||
Propagation: &tracecontext.HTTPFormat{},
|
|
||||||
GetStartOptions: getStartOptions,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// IsEnabled returns true if monitoring is enabled for the sdk.
|
|
||||||
func IsEnabled() bool {
|
func IsEnabled() bool {
|
||||||
return enabled
|
return tracer != nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enable will start instrumentation for metrics and traces.
|
// NewTransport creates a new instrumenting http.RoundTripper for the
|
||||||
func Enable() error {
|
// registered Tracer. If no Tracer has been registered it returns nil.
|
||||||
enabled = true
|
func NewTransport(base *http.Transport) http.RoundTripper {
|
||||||
sampler = nil
|
if tracer != nil {
|
||||||
|
return tracer.NewTransport(base)
|
||||||
err := initStats()
|
}
|
||||||
return err
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Disable will disable instrumentation for metrics and traces.
|
// StartSpan starts a trace span with the specified name, associating it with the
|
||||||
func Disable() {
|
// provided context. Has no effect if a Tracer has not been registered.
|
||||||
disableStats()
|
|
||||||
sampler = trace.NeverSample()
|
|
||||||
if traceExporter != nil {
|
|
||||||
trace.UnregisterExporter(traceExporter)
|
|
||||||
}
|
|
||||||
enabled = false
|
|
||||||
}
|
|
||||||
|
|
||||||
// EnableWithAIForwarding will start instrumentation and will connect to app insights forwarder
|
|
||||||
// exporter making the metrics and traces available in app insights.
|
|
||||||
func EnableWithAIForwarding(agentEndpoint string) (err error) {
|
|
||||||
err = Enable()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
traceExporter, err := ocagent.NewExporter(ocagent.WithInsecure(), ocagent.WithAddress(agentEndpoint))
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
trace.RegisterExporter(traceExporter)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// getStartOptions is the custom options setter for the ochttp package.
|
|
||||||
func getStartOptions(*http.Request) trace.StartOptions {
|
|
||||||
return trace.StartOptions{
|
|
||||||
Sampler: sampler,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// initStats registers the views for the http metrics
|
|
||||||
func initStats() (err error) {
|
|
||||||
clientViews := []*view.View{
|
|
||||||
ochttp.ClientCompletedCount,
|
|
||||||
ochttp.ClientRoundtripLatencyDistribution,
|
|
||||||
ochttp.ClientReceivedBytesDistribution,
|
|
||||||
ochttp.ClientSentBytesDistribution,
|
|
||||||
}
|
|
||||||
for _, cv := range clientViews {
|
|
||||||
vn := fmt.Sprintf("Azure/go-autorest/tracing-%s", cv.Name)
|
|
||||||
views[vn] = cv.WithName(vn)
|
|
||||||
err = view.Register(views[vn])
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// disableStats will unregister the previously registered metrics
|
|
||||||
func disableStats() {
|
|
||||||
for _, v := range views {
|
|
||||||
view.Unregister(v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// StartSpan starts a trace span
|
|
||||||
func StartSpan(ctx context.Context, name string) context.Context {
|
func StartSpan(ctx context.Context, name string) context.Context {
|
||||||
ctx, _ = trace.StartSpan(ctx, name, trace.WithSampler(sampler))
|
if tracer != nil {
|
||||||
|
return tracer.StartSpan(ctx, name)
|
||||||
|
}
|
||||||
return ctx
|
return ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
// EndSpan ends a previously started span stored in the context
|
// EndSpan ends a previously started span stored in the context.
|
||||||
|
// Has no effect if a Tracer has not been registered.
|
||||||
func EndSpan(ctx context.Context, httpStatusCode int, err error) {
|
func EndSpan(ctx context.Context, httpStatusCode int, err error) {
|
||||||
span := trace.FromContext(ctx)
|
if tracer != nil {
|
||||||
|
tracer.EndSpan(ctx, httpStatusCode, err)
|
||||||
if span == nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
span.SetStatus(trace.Status{Message: err.Error(), Code: toTraceStatusCode(httpStatusCode)})
|
|
||||||
}
|
|
||||||
span.End()
|
|
||||||
}
|
|
||||||
|
|
||||||
// toTraceStatusCode converts HTTP Codes to OpenCensus codes as defined
|
|
||||||
// at https://github.com/census-instrumentation/opencensus-specs/blob/master/trace/HTTP.md#status
|
|
||||||
func toTraceStatusCode(httpStatusCode int) int32 {
|
|
||||||
switch {
|
|
||||||
case http.StatusOK <= httpStatusCode && httpStatusCode < http.StatusBadRequest:
|
|
||||||
return trace.StatusCodeOK
|
|
||||||
case httpStatusCode == http.StatusBadRequest:
|
|
||||||
return trace.StatusCodeInvalidArgument
|
|
||||||
case httpStatusCode == http.StatusUnauthorized: // 401 is actually unauthenticated.
|
|
||||||
return trace.StatusCodeUnauthenticated
|
|
||||||
case httpStatusCode == http.StatusForbidden:
|
|
||||||
return trace.StatusCodePermissionDenied
|
|
||||||
case httpStatusCode == http.StatusNotFound:
|
|
||||||
return trace.StatusCodeNotFound
|
|
||||||
case httpStatusCode == http.StatusTooManyRequests:
|
|
||||||
return trace.StatusCodeResourceExhausted
|
|
||||||
case httpStatusCode == 499:
|
|
||||||
return trace.StatusCodeCancelled
|
|
||||||
case httpStatusCode == http.StatusNotImplemented:
|
|
||||||
return trace.StatusCodeUnimplemented
|
|
||||||
case httpStatusCode == http.StatusServiceUnavailable:
|
|
||||||
return trace.StatusCodeUnavailable
|
|
||||||
case httpStatusCode == http.StatusGatewayTimeout:
|
|
||||||
return trace.StatusCodeDeadlineExceeded
|
|
||||||
default:
|
|
||||||
return trace.StatusCodeUnknown
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
Google Inc.
|
|
|
@ -1,202 +0,0 @@
|
||||||
|
|
||||||
Apache License
|
|
||||||
Version 2.0, January 2004
|
|
||||||
http://www.apache.org/licenses/
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
||||||
|
|
||||||
1. Definitions.
|
|
||||||
|
|
||||||
"License" shall mean the terms and conditions for use, reproduction,
|
|
||||||
and distribution as defined by Sections 1 through 9 of this document.
|
|
||||||
|
|
||||||
"Licensor" shall mean the copyright owner or entity authorized by
|
|
||||||
the copyright owner that is granting the License.
|
|
||||||
|
|
||||||
"Legal Entity" shall mean the union of the acting entity and all
|
|
||||||
other entities that control, are controlled by, or are under common
|
|
||||||
control with that entity. For the purposes of this definition,
|
|
||||||
"control" means (i) the power, direct or indirect, to cause the
|
|
||||||
direction or management of such entity, whether by contract or
|
|
||||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
||||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
||||||
|
|
||||||
"You" (or "Your") shall mean an individual or Legal Entity
|
|
||||||
exercising permissions granted by this License.
|
|
||||||
|
|
||||||
"Source" form shall mean the preferred form for making modifications,
|
|
||||||
including but not limited to software source code, documentation
|
|
||||||
source, and configuration files.
|
|
||||||
|
|
||||||
"Object" form shall mean any form resulting from mechanical
|
|
||||||
transformation or translation of a Source form, including but
|
|
||||||
not limited to compiled object code, generated documentation,
|
|
||||||
and conversions to other media types.
|
|
||||||
|
|
||||||
"Work" shall mean the work of authorship, whether in Source or
|
|
||||||
Object form, made available under the License, as indicated by a
|
|
||||||
copyright notice that is included in or attached to the work
|
|
||||||
(an example is provided in the Appendix below).
|
|
||||||
|
|
||||||
"Derivative Works" shall mean any work, whether in Source or Object
|
|
||||||
form, that is based on (or derived from) the Work and for which the
|
|
||||||
editorial revisions, annotations, elaborations, or other modifications
|
|
||||||
represent, as a whole, an original work of authorship. For the purposes
|
|
||||||
of this License, Derivative Works shall not include works that remain
|
|
||||||
separable from, or merely link (or bind by name) to the interfaces of,
|
|
||||||
the Work and Derivative Works thereof.
|
|
||||||
|
|
||||||
"Contribution" shall mean any work of authorship, including
|
|
||||||
the original version of the Work and any modifications or additions
|
|
||||||
to that Work or Derivative Works thereof, that is intentionally
|
|
||||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
||||||
or by an individual or Legal Entity authorized to submit on behalf of
|
|
||||||
the copyright owner. For the purposes of this definition, "submitted"
|
|
||||||
means any form of electronic, verbal, or written communication sent
|
|
||||||
to the Licensor or its representatives, including but not limited to
|
|
||||||
communication on electronic mailing lists, source code control systems,
|
|
||||||
and issue tracking systems that are managed by, or on behalf of, the
|
|
||||||
Licensor for the purpose of discussing and improving the Work, but
|
|
||||||
excluding communication that is conspicuously marked or otherwise
|
|
||||||
designated in writing by the copyright owner as "Not a Contribution."
|
|
||||||
|
|
||||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
||||||
on behalf of whom a Contribution has been received by Licensor and
|
|
||||||
subsequently incorporated within the Work.
|
|
||||||
|
|
||||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
copyright license to reproduce, prepare Derivative Works of,
|
|
||||||
publicly display, publicly perform, sublicense, and distribute the
|
|
||||||
Work and such Derivative Works in Source or Object form.
|
|
||||||
|
|
||||||
3. Grant of Patent License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
(except as stated in this section) patent license to make, have made,
|
|
||||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
||||||
where such license applies only to those patent claims licensable
|
|
||||||
by such Contributor that are necessarily infringed by their
|
|
||||||
Contribution(s) alone or by combination of their Contribution(s)
|
|
||||||
with the Work to which such Contribution(s) was submitted. If You
|
|
||||||
institute patent litigation against any entity (including a
|
|
||||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
||||||
or a Contribution incorporated within the Work constitutes direct
|
|
||||||
or contributory patent infringement, then any patent licenses
|
|
||||||
granted to You under this License for that Work shall terminate
|
|
||||||
as of the date such litigation is filed.
|
|
||||||
|
|
||||||
4. Redistribution. You may reproduce and distribute copies of the
|
|
||||||
Work or Derivative Works thereof in any medium, with or without
|
|
||||||
modifications, and in Source or Object form, provided that You
|
|
||||||
meet the following conditions:
|
|
||||||
|
|
||||||
(a) You must give any other recipients of the Work or
|
|
||||||
Derivative Works a copy of this License; and
|
|
||||||
|
|
||||||
(b) You must cause any modified files to carry prominent notices
|
|
||||||
stating that You changed the files; and
|
|
||||||
|
|
||||||
(c) You must retain, in the Source form of any Derivative Works
|
|
||||||
that You distribute, all copyright, patent, trademark, and
|
|
||||||
attribution notices from the Source form of the Work,
|
|
||||||
excluding those notices that do not pertain to any part of
|
|
||||||
the Derivative Works; and
|
|
||||||
|
|
||||||
(d) If the Work includes a "NOTICE" text file as part of its
|
|
||||||
distribution, then any Derivative Works that You distribute must
|
|
||||||
include a readable copy of the attribution notices contained
|
|
||||||
within such NOTICE file, excluding those notices that do not
|
|
||||||
pertain to any part of the Derivative Works, in at least one
|
|
||||||
of the following places: within a NOTICE text file distributed
|
|
||||||
as part of the Derivative Works; within the Source form or
|
|
||||||
documentation, if provided along with the Derivative Works; or,
|
|
||||||
within a display generated by the Derivative Works, if and
|
|
||||||
wherever such third-party notices normally appear. The contents
|
|
||||||
of the NOTICE file are for informational purposes only and
|
|
||||||
do not modify the License. You may add Your own attribution
|
|
||||||
notices within Derivative Works that You distribute, alongside
|
|
||||||
or as an addendum to the NOTICE text from the Work, provided
|
|
||||||
that such additional attribution notices cannot be construed
|
|
||||||
as modifying the License.
|
|
||||||
|
|
||||||
You may add Your own copyright statement to Your modifications and
|
|
||||||
may provide additional or different license terms and conditions
|
|
||||||
for use, reproduction, or distribution of Your modifications, or
|
|
||||||
for any such Derivative Works as a whole, provided Your use,
|
|
||||||
reproduction, and distribution of the Work otherwise complies with
|
|
||||||
the conditions stated in this License.
|
|
||||||
|
|
||||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
||||||
any Contribution intentionally submitted for inclusion in the Work
|
|
||||||
by You to the Licensor shall be under the terms and conditions of
|
|
||||||
this License, without any additional terms or conditions.
|
|
||||||
Notwithstanding the above, nothing herein shall supersede or modify
|
|
||||||
the terms of any separate license agreement you may have executed
|
|
||||||
with Licensor regarding such Contributions.
|
|
||||||
|
|
||||||
6. Trademarks. This License does not grant permission to use the trade
|
|
||||||
names, trademarks, service marks, or product names of the Licensor,
|
|
||||||
except as required for reasonable and customary use in describing the
|
|
||||||
origin of the Work and reproducing the content of the NOTICE file.
|
|
||||||
|
|
||||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
||||||
agreed to in writing, Licensor provides the Work (and each
|
|
||||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
||||||
implied, including, without limitation, any warranties or conditions
|
|
||||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
||||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
||||||
appropriateness of using or redistributing the Work and assume any
|
|
||||||
risks associated with Your exercise of permissions under this License.
|
|
||||||
|
|
||||||
8. Limitation of Liability. In no event and under no legal theory,
|
|
||||||
whether in tort (including negligence), contract, or otherwise,
|
|
||||||
unless required by applicable law (such as deliberate and grossly
|
|
||||||
negligent acts) or agreed to in writing, shall any Contributor be
|
|
||||||
liable to You for damages, including any direct, indirect, special,
|
|
||||||
incidental, or consequential damages of any character arising as a
|
|
||||||
result of this License or out of the use or inability to use the
|
|
||||||
Work (including but not limited to damages for loss of goodwill,
|
|
||||||
work stoppage, computer failure or malfunction, or any and all
|
|
||||||
other commercial damages or losses), even if such Contributor
|
|
||||||
has been advised of the possibility of such damages.
|
|
||||||
|
|
||||||
9. Accepting Warranty or Additional Liability. While redistributing
|
|
||||||
the Work or Derivative Works thereof, You may choose to offer,
|
|
||||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
||||||
or other liability obligations and/or rights consistent with this
|
|
||||||
License. However, in accepting such obligations, You may act only
|
|
||||||
on Your own behalf and on Your sole responsibility, not on behalf
|
|
||||||
of any other Contributor, and only if You agree to indemnify,
|
|
||||||
defend, and hold each Contributor harmless for any liability
|
|
||||||
incurred by, or claims asserted against, such Contributor by reason
|
|
||||||
of your accepting any such warranty or additional liability.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
APPENDIX: How to apply the Apache License to your work.
|
|
||||||
|
|
||||||
To apply the Apache License to your work, attach the following
|
|
||||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
||||||
replaced with your own identifying information. (Don't include
|
|
||||||
the brackets!) The text should be enclosed in the appropriate
|
|
||||||
comment syntax for the file format. We also recommend that a
|
|
||||||
file or class name and description of purpose be included on the
|
|
||||||
same "printed page" as the copyright notice for easier
|
|
||||||
identification within third-party archives.
|
|
||||||
|
|
||||||
Copyright [yyyy] [name of copyright owner]
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
|
@ -1,356 +0,0 @@
|
||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
|
||||||
// source: opencensus/proto/agent/common/v1/common.proto
|
|
||||||
|
|
||||||
package v1
|
|
||||||
|
|
||||||
import (
|
|
||||||
fmt "fmt"
|
|
||||||
proto "github.com/golang/protobuf/proto"
|
|
||||||
timestamp "github.com/golang/protobuf/ptypes/timestamp"
|
|
||||||
math "math"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
|
||||||
var _ = proto.Marshal
|
|
||||||
var _ = fmt.Errorf
|
|
||||||
var _ = math.Inf
|
|
||||||
|
|
||||||
// This is a compile-time assertion to ensure that this generated file
|
|
||||||
// is compatible with the proto package it is being compiled against.
|
|
||||||
// A compilation error at this line likely means your copy of the
|
|
||||||
// proto package needs to be updated.
|
|
||||||
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
|
|
||||||
|
|
||||||
type LibraryInfo_Language int32
|
|
||||||
|
|
||||||
const (
|
|
||||||
LibraryInfo_LANGUAGE_UNSPECIFIED LibraryInfo_Language = 0
|
|
||||||
LibraryInfo_CPP LibraryInfo_Language = 1
|
|
||||||
LibraryInfo_C_SHARP LibraryInfo_Language = 2
|
|
||||||
LibraryInfo_ERLANG LibraryInfo_Language = 3
|
|
||||||
LibraryInfo_GO_LANG LibraryInfo_Language = 4
|
|
||||||
LibraryInfo_JAVA LibraryInfo_Language = 5
|
|
||||||
LibraryInfo_NODE_JS LibraryInfo_Language = 6
|
|
||||||
LibraryInfo_PHP LibraryInfo_Language = 7
|
|
||||||
LibraryInfo_PYTHON LibraryInfo_Language = 8
|
|
||||||
LibraryInfo_RUBY LibraryInfo_Language = 9
|
|
||||||
)
|
|
||||||
|
|
||||||
var LibraryInfo_Language_name = map[int32]string{
|
|
||||||
0: "LANGUAGE_UNSPECIFIED",
|
|
||||||
1: "CPP",
|
|
||||||
2: "C_SHARP",
|
|
||||||
3: "ERLANG",
|
|
||||||
4: "GO_LANG",
|
|
||||||
5: "JAVA",
|
|
||||||
6: "NODE_JS",
|
|
||||||
7: "PHP",
|
|
||||||
8: "PYTHON",
|
|
||||||
9: "RUBY",
|
|
||||||
}
|
|
||||||
|
|
||||||
var LibraryInfo_Language_value = map[string]int32{
|
|
||||||
"LANGUAGE_UNSPECIFIED": 0,
|
|
||||||
"CPP": 1,
|
|
||||||
"C_SHARP": 2,
|
|
||||||
"ERLANG": 3,
|
|
||||||
"GO_LANG": 4,
|
|
||||||
"JAVA": 5,
|
|
||||||
"NODE_JS": 6,
|
|
||||||
"PHP": 7,
|
|
||||||
"PYTHON": 8,
|
|
||||||
"RUBY": 9,
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x LibraryInfo_Language) String() string {
|
|
||||||
return proto.EnumName(LibraryInfo_Language_name, int32(x))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (LibraryInfo_Language) EnumDescriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_126c72ed8a252c84, []int{2, 0}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Identifier metadata of the Node that produces the span or tracing data.
|
|
||||||
// Note, this is not the metadata about the Node or service that is described by associated spans.
|
|
||||||
// In the future we plan to extend the identifier proto definition to support
|
|
||||||
// additional information (e.g cloud id, etc.)
|
|
||||||
type Node struct {
|
|
||||||
// Identifier that uniquely identifies a process within a VM/container.
|
|
||||||
Identifier *ProcessIdentifier `protobuf:"bytes,1,opt,name=identifier,proto3" json:"identifier,omitempty"`
|
|
||||||
// Information on the OpenCensus Library that initiates the stream.
|
|
||||||
LibraryInfo *LibraryInfo `protobuf:"bytes,2,opt,name=library_info,json=libraryInfo,proto3" json:"library_info,omitempty"`
|
|
||||||
// Additional information on service.
|
|
||||||
ServiceInfo *ServiceInfo `protobuf:"bytes,3,opt,name=service_info,json=serviceInfo,proto3" json:"service_info,omitempty"`
|
|
||||||
// Additional attributes.
|
|
||||||
Attributes map[string]string `protobuf:"bytes,4,rep,name=attributes,proto3" json:"attributes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Node) Reset() { *m = Node{} }
|
|
||||||
func (m *Node) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*Node) ProtoMessage() {}
|
|
||||||
func (*Node) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_126c72ed8a252c84, []int{0}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Node) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_Node.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *Node) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_Node.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *Node) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_Node.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *Node) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_Node.Size(m)
|
|
||||||
}
|
|
||||||
func (m *Node) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_Node.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_Node proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *Node) GetIdentifier() *ProcessIdentifier {
|
|
||||||
if m != nil {
|
|
||||||
return m.Identifier
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Node) GetLibraryInfo() *LibraryInfo {
|
|
||||||
if m != nil {
|
|
||||||
return m.LibraryInfo
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Node) GetServiceInfo() *ServiceInfo {
|
|
||||||
if m != nil {
|
|
||||||
return m.ServiceInfo
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Node) GetAttributes() map[string]string {
|
|
||||||
if m != nil {
|
|
||||||
return m.Attributes
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Identifier that uniquely identifies a process within a VM/container.
|
|
||||||
type ProcessIdentifier struct {
|
|
||||||
// The host name. Usually refers to the machine/container name.
|
|
||||||
// For example: os.Hostname() in Go, socket.gethostname() in Python.
|
|
||||||
HostName string `protobuf:"bytes,1,opt,name=host_name,json=hostName,proto3" json:"host_name,omitempty"`
|
|
||||||
// Process id.
|
|
||||||
Pid uint32 `protobuf:"varint,2,opt,name=pid,proto3" json:"pid,omitempty"`
|
|
||||||
// Start time of this ProcessIdentifier. Represented in epoch time.
|
|
||||||
StartTimestamp *timestamp.Timestamp `protobuf:"bytes,3,opt,name=start_timestamp,json=startTimestamp,proto3" json:"start_timestamp,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ProcessIdentifier) Reset() { *m = ProcessIdentifier{} }
|
|
||||||
func (m *ProcessIdentifier) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*ProcessIdentifier) ProtoMessage() {}
|
|
||||||
func (*ProcessIdentifier) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_126c72ed8a252c84, []int{1}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ProcessIdentifier) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_ProcessIdentifier.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *ProcessIdentifier) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_ProcessIdentifier.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *ProcessIdentifier) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_ProcessIdentifier.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *ProcessIdentifier) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_ProcessIdentifier.Size(m)
|
|
||||||
}
|
|
||||||
func (m *ProcessIdentifier) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_ProcessIdentifier.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_ProcessIdentifier proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *ProcessIdentifier) GetHostName() string {
|
|
||||||
if m != nil {
|
|
||||||
return m.HostName
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ProcessIdentifier) GetPid() uint32 {
|
|
||||||
if m != nil {
|
|
||||||
return m.Pid
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ProcessIdentifier) GetStartTimestamp() *timestamp.Timestamp {
|
|
||||||
if m != nil {
|
|
||||||
return m.StartTimestamp
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Information on OpenCensus Library.
|
|
||||||
type LibraryInfo struct {
|
|
||||||
// Language of OpenCensus Library.
|
|
||||||
Language LibraryInfo_Language `protobuf:"varint,1,opt,name=language,proto3,enum=opencensus.proto.agent.common.v1.LibraryInfo_Language" json:"language,omitempty"`
|
|
||||||
// Version of Agent exporter of Library.
|
|
||||||
ExporterVersion string `protobuf:"bytes,2,opt,name=exporter_version,json=exporterVersion,proto3" json:"exporter_version,omitempty"`
|
|
||||||
// Version of OpenCensus Library.
|
|
||||||
CoreLibraryVersion string `protobuf:"bytes,3,opt,name=core_library_version,json=coreLibraryVersion,proto3" json:"core_library_version,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *LibraryInfo) Reset() { *m = LibraryInfo{} }
|
|
||||||
func (m *LibraryInfo) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*LibraryInfo) ProtoMessage() {}
|
|
||||||
func (*LibraryInfo) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_126c72ed8a252c84, []int{2}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *LibraryInfo) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_LibraryInfo.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *LibraryInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_LibraryInfo.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *LibraryInfo) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_LibraryInfo.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *LibraryInfo) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_LibraryInfo.Size(m)
|
|
||||||
}
|
|
||||||
func (m *LibraryInfo) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_LibraryInfo.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_LibraryInfo proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *LibraryInfo) GetLanguage() LibraryInfo_Language {
|
|
||||||
if m != nil {
|
|
||||||
return m.Language
|
|
||||||
}
|
|
||||||
return LibraryInfo_LANGUAGE_UNSPECIFIED
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *LibraryInfo) GetExporterVersion() string {
|
|
||||||
if m != nil {
|
|
||||||
return m.ExporterVersion
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *LibraryInfo) GetCoreLibraryVersion() string {
|
|
||||||
if m != nil {
|
|
||||||
return m.CoreLibraryVersion
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
// Additional service information.
|
|
||||||
type ServiceInfo struct {
|
|
||||||
// Name of the service.
|
|
||||||
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ServiceInfo) Reset() { *m = ServiceInfo{} }
|
|
||||||
func (m *ServiceInfo) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*ServiceInfo) ProtoMessage() {}
|
|
||||||
func (*ServiceInfo) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_126c72ed8a252c84, []int{3}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ServiceInfo) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_ServiceInfo.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *ServiceInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_ServiceInfo.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *ServiceInfo) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_ServiceInfo.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *ServiceInfo) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_ServiceInfo.Size(m)
|
|
||||||
}
|
|
||||||
func (m *ServiceInfo) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_ServiceInfo.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_ServiceInfo proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *ServiceInfo) GetName() string {
|
|
||||||
if m != nil {
|
|
||||||
return m.Name
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
proto.RegisterEnum("opencensus.proto.agent.common.v1.LibraryInfo_Language", LibraryInfo_Language_name, LibraryInfo_Language_value)
|
|
||||||
proto.RegisterType((*Node)(nil), "opencensus.proto.agent.common.v1.Node")
|
|
||||||
proto.RegisterMapType((map[string]string)(nil), "opencensus.proto.agent.common.v1.Node.AttributesEntry")
|
|
||||||
proto.RegisterType((*ProcessIdentifier)(nil), "opencensus.proto.agent.common.v1.ProcessIdentifier")
|
|
||||||
proto.RegisterType((*LibraryInfo)(nil), "opencensus.proto.agent.common.v1.LibraryInfo")
|
|
||||||
proto.RegisterType((*ServiceInfo)(nil), "opencensus.proto.agent.common.v1.ServiceInfo")
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
proto.RegisterFile("opencensus/proto/agent/common/v1/common.proto", fileDescriptor_126c72ed8a252c84)
|
|
||||||
}
|
|
||||||
|
|
||||||
var fileDescriptor_126c72ed8a252c84 = []byte{
|
|
||||||
// 590 bytes of a gzipped FileDescriptorProto
|
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0x4f, 0x4f, 0xdb, 0x3e,
|
|
||||||
0x1c, 0xc6, 0x7f, 0x69, 0x0a, 0xb4, 0xdf, 0xfc, 0x06, 0x99, 0xc5, 0xa1, 0x62, 0x87, 0xb1, 0xee,
|
|
||||||
0xc2, 0x0e, 0x4d, 0x06, 0x48, 0xd3, 0x34, 0x69, 0x87, 0x52, 0x3a, 0x28, 0x42, 0x25, 0x72, 0x01,
|
|
||||||
0x89, 0x5d, 0xa2, 0xb4, 0xb8, 0xc1, 0x5a, 0x63, 0x57, 0xb6, 0x53, 0x8d, 0xd3, 0x8e, 0xd3, 0xde,
|
|
||||||
0xc0, 0x5e, 0xd4, 0x5e, 0xd5, 0x64, 0x3b, 0x69, 0xa3, 0x71, 0x28, 0xb7, 0xef, 0x9f, 0xe7, 0xf9,
|
|
||||||
0x38, 0x7a, 0x6c, 0x05, 0x3a, 0x7c, 0x4e, 0xd8, 0x84, 0x30, 0x99, 0xcb, 0x70, 0x2e, 0xb8, 0xe2,
|
|
||||||
0x61, 0x92, 0x12, 0xa6, 0xc2, 0x09, 0xcf, 0x32, 0xce, 0xc2, 0xc5, 0x61, 0x51, 0x05, 0x66, 0x89,
|
|
||||||
0xf6, 0x57, 0x72, 0x3b, 0x09, 0x8c, 0x3c, 0x28, 0x44, 0x8b, 0xc3, 0xbd, 0xd7, 0x29, 0xe7, 0xe9,
|
|
||||||
0x8c, 0x58, 0xd8, 0x38, 0x9f, 0x86, 0x8a, 0x66, 0x44, 0xaa, 0x24, 0x9b, 0x5b, 0x43, 0xfb, 0xb7,
|
|
||||||
0x0b, 0xf5, 0x21, 0xbf, 0x27, 0x68, 0x04, 0x40, 0xef, 0x09, 0x53, 0x74, 0x4a, 0x89, 0x68, 0x39,
|
|
||||||
0xfb, 0xce, 0x81, 0x77, 0x74, 0x1c, 0xac, 0x3b, 0x20, 0x88, 0x04, 0x9f, 0x10, 0x29, 0x07, 0x4b,
|
|
||||||
0x2b, 0xae, 0x60, 0x50, 0x04, 0xff, 0xcf, 0xe8, 0x58, 0x24, 0xe2, 0x31, 0xa6, 0x6c, 0xca, 0x5b,
|
|
||||||
0x35, 0x83, 0xed, 0xac, 0xc7, 0x5e, 0x5a, 0xd7, 0x80, 0x4d, 0x39, 0xf6, 0x66, 0xab, 0x46, 0x13,
|
|
||||||
0x25, 0x11, 0x0b, 0x3a, 0x21, 0x96, 0xe8, 0x3e, 0x97, 0x38, 0xb2, 0x2e, 0x4b, 0x94, 0xab, 0x06,
|
|
||||||
0xdd, 0x02, 0x24, 0x4a, 0x09, 0x3a, 0xce, 0x15, 0x91, 0xad, 0xfa, 0xbe, 0x7b, 0xe0, 0x1d, 0x7d,
|
|
||||||
0x58, 0xcf, 0xd3, 0xa1, 0x05, 0xdd, 0xa5, 0xb1, 0xcf, 0x94, 0x78, 0xc4, 0x15, 0xd2, 0xde, 0x67,
|
|
||||||
0xd8, 0xf9, 0x67, 0x8d, 0x7c, 0x70, 0xbf, 0x91, 0x47, 0x13, 0x6e, 0x13, 0xeb, 0x12, 0xed, 0xc2,
|
|
||||||
0xc6, 0x22, 0x99, 0xe5, 0xc4, 0x24, 0xd3, 0xc4, 0xb6, 0xf9, 0x54, 0xfb, 0xe8, 0xb4, 0x7f, 0x3a,
|
|
||||||
0xf0, 0xf2, 0x49, 0xb8, 0xe8, 0x15, 0x34, 0x1f, 0xb8, 0x54, 0x31, 0x4b, 0x32, 0x52, 0x70, 0x1a,
|
|
||||||
0x7a, 0x30, 0x4c, 0x32, 0xa2, 0xf1, 0x73, 0x7a, 0x6f, 0x50, 0x2f, 0xb0, 0x2e, 0x51, 0x0f, 0x76,
|
|
||||||
0xa4, 0x4a, 0x84, 0x8a, 0x97, 0xd7, 0x5e, 0x04, 0xb6, 0x17, 0xd8, 0x87, 0x11, 0x94, 0x0f, 0x23,
|
|
||||||
0xb8, 0x2e, 0x15, 0x78, 0xdb, 0x58, 0x96, 0x7d, 0xfb, 0x4f, 0x0d, 0xbc, 0xca, 0x7d, 0x20, 0x0c,
|
|
||||||
0x8d, 0x59, 0xc2, 0xd2, 0x3c, 0x49, 0xed, 0x27, 0x6c, 0x3f, 0x27, 0xae, 0x0a, 0x20, 0xb8, 0x2c,
|
|
||||||
0xdc, 0x78, 0xc9, 0x41, 0xef, 0xc0, 0x27, 0xdf, 0xe7, 0x5c, 0x28, 0x22, 0xe2, 0x05, 0x11, 0x92,
|
|
||||||
0x72, 0x56, 0x44, 0xb2, 0x53, 0xce, 0x6f, 0xed, 0x18, 0xbd, 0x87, 0xdd, 0x09, 0x17, 0x24, 0x2e,
|
|
||||||
0x1f, 0x56, 0x29, 0x77, 0x8d, 0x1c, 0xe9, 0x5d, 0x71, 0x58, 0xe1, 0x68, 0xff, 0x72, 0xa0, 0x51,
|
|
||||||
0x9e, 0x89, 0x5a, 0xb0, 0x7b, 0xd9, 0x1d, 0x9e, 0xdd, 0x74, 0xcf, 0xfa, 0xf1, 0xcd, 0x70, 0x14,
|
|
||||||
0xf5, 0x7b, 0x83, 0x2f, 0x83, 0xfe, 0xa9, 0xff, 0x1f, 0xda, 0x02, 0xb7, 0x17, 0x45, 0xbe, 0x83,
|
|
||||||
0x3c, 0xd8, 0xea, 0xc5, 0xa3, 0xf3, 0x2e, 0x8e, 0xfc, 0x1a, 0x02, 0xd8, 0xec, 0x63, 0xed, 0xf0,
|
|
||||||
0x5d, 0xbd, 0x38, 0xbb, 0x8a, 0x4d, 0x53, 0x47, 0x0d, 0xa8, 0x5f, 0x74, 0x6f, 0xbb, 0xfe, 0x86,
|
|
||||||
0x1e, 0x0f, 0xaf, 0x4e, 0xfb, 0xf1, 0xc5, 0xc8, 0xdf, 0xd4, 0x94, 0xe8, 0x3c, 0xf2, 0xb7, 0xb4,
|
|
||||||
0x31, 0xba, 0xbb, 0x3e, 0xbf, 0x1a, 0xfa, 0x0d, 0xad, 0xc5, 0x37, 0x27, 0x77, 0x7e, 0xb3, 0xfd,
|
|
||||||
0x06, 0xbc, 0xca, 0x4b, 0x44, 0x08, 0xea, 0x95, 0xab, 0x34, 0xf5, 0xc9, 0x0f, 0x78, 0x4b, 0xf9,
|
|
||||||
0xda, 0x44, 0x4f, 0xbc, 0x9e, 0x29, 0x23, 0xbd, 0x8c, 0x9c, 0xaf, 0x83, 0x94, 0xaa, 0x87, 0x7c,
|
|
||||||
0xac, 0x05, 0xa1, 0xf5, 0x75, 0x28, 0x93, 0x4a, 0xe4, 0x19, 0x61, 0x2a, 0x51, 0x94, 0xb3, 0x70,
|
|
||||||
0x85, 0xec, 0xd8, 0x9f, 0x4b, 0x4a, 0x58, 0x27, 0x7d, 0xf2, 0x8f, 0x19, 0x6f, 0x9a, 0xed, 0xf1,
|
|
||||||
0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x94, 0xe5, 0x77, 0x76, 0x8e, 0x04, 0x00, 0x00,
|
|
||||||
}
|
|
|
@ -1,264 +0,0 @@
|
||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
|
||||||
// source: opencensus/proto/agent/metrics/v1/metrics_service.proto
|
|
||||||
|
|
||||||
package v1
|
|
||||||
|
|
||||||
import (
|
|
||||||
context "context"
|
|
||||||
fmt "fmt"
|
|
||||||
v1 "github.com/census-instrumentation/opencensus-proto/gen-go/agent/common/v1"
|
|
||||||
v11 "github.com/census-instrumentation/opencensus-proto/gen-go/metrics/v1"
|
|
||||||
v12 "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1"
|
|
||||||
proto "github.com/golang/protobuf/proto"
|
|
||||||
grpc "google.golang.org/grpc"
|
|
||||||
math "math"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
|
||||||
var _ = proto.Marshal
|
|
||||||
var _ = fmt.Errorf
|
|
||||||
var _ = math.Inf
|
|
||||||
|
|
||||||
// This is a compile-time assertion to ensure that this generated file
|
|
||||||
// is compatible with the proto package it is being compiled against.
|
|
||||||
// A compilation error at this line likely means your copy of the
|
|
||||||
// proto package needs to be updated.
|
|
||||||
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
|
|
||||||
|
|
||||||
type ExportMetricsServiceRequest struct {
|
|
||||||
// This is required only in the first message on the stream or if the
|
|
||||||
// previous sent ExportMetricsServiceRequest message has a different Node (e.g.
|
|
||||||
// when the same RPC is used to send Metrics from multiple Applications).
|
|
||||||
Node *v1.Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"`
|
|
||||||
// A list of metrics that belong to the last received Node.
|
|
||||||
Metrics []*v11.Metric `protobuf:"bytes,2,rep,name=metrics,proto3" json:"metrics,omitempty"`
|
|
||||||
// The resource for the metrics in this message that do not have an explicit
|
|
||||||
// resource set.
|
|
||||||
// If unset, the most recently set resource in the RPC stream applies. It is
|
|
||||||
// valid to never be set within a stream, e.g. when no resource info is known
|
|
||||||
// at all or when all sent metrics have an explicit resource set.
|
|
||||||
Resource *v12.Resource `protobuf:"bytes,3,opt,name=resource,proto3" json:"resource,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ExportMetricsServiceRequest) Reset() { *m = ExportMetricsServiceRequest{} }
|
|
||||||
func (m *ExportMetricsServiceRequest) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*ExportMetricsServiceRequest) ProtoMessage() {}
|
|
||||||
func (*ExportMetricsServiceRequest) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_47e253a956287d04, []int{0}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ExportMetricsServiceRequest) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_ExportMetricsServiceRequest.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *ExportMetricsServiceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_ExportMetricsServiceRequest.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *ExportMetricsServiceRequest) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_ExportMetricsServiceRequest.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *ExportMetricsServiceRequest) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_ExportMetricsServiceRequest.Size(m)
|
|
||||||
}
|
|
||||||
func (m *ExportMetricsServiceRequest) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_ExportMetricsServiceRequest.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_ExportMetricsServiceRequest proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *ExportMetricsServiceRequest) GetNode() *v1.Node {
|
|
||||||
if m != nil {
|
|
||||||
return m.Node
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ExportMetricsServiceRequest) GetMetrics() []*v11.Metric {
|
|
||||||
if m != nil {
|
|
||||||
return m.Metrics
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ExportMetricsServiceRequest) GetResource() *v12.Resource {
|
|
||||||
if m != nil {
|
|
||||||
return m.Resource
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type ExportMetricsServiceResponse struct {
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ExportMetricsServiceResponse) Reset() { *m = ExportMetricsServiceResponse{} }
|
|
||||||
func (m *ExportMetricsServiceResponse) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*ExportMetricsServiceResponse) ProtoMessage() {}
|
|
||||||
func (*ExportMetricsServiceResponse) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_47e253a956287d04, []int{1}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ExportMetricsServiceResponse) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_ExportMetricsServiceResponse.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *ExportMetricsServiceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_ExportMetricsServiceResponse.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *ExportMetricsServiceResponse) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_ExportMetricsServiceResponse.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *ExportMetricsServiceResponse) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_ExportMetricsServiceResponse.Size(m)
|
|
||||||
}
|
|
||||||
func (m *ExportMetricsServiceResponse) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_ExportMetricsServiceResponse.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_ExportMetricsServiceResponse proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
proto.RegisterType((*ExportMetricsServiceRequest)(nil), "opencensus.proto.agent.metrics.v1.ExportMetricsServiceRequest")
|
|
||||||
proto.RegisterType((*ExportMetricsServiceResponse)(nil), "opencensus.proto.agent.metrics.v1.ExportMetricsServiceResponse")
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
proto.RegisterFile("opencensus/proto/agent/metrics/v1/metrics_service.proto", fileDescriptor_47e253a956287d04)
|
|
||||||
}
|
|
||||||
|
|
||||||
var fileDescriptor_47e253a956287d04 = []byte{
|
|
||||||
// 340 bytes of a gzipped FileDescriptorProto
|
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x92, 0xc1, 0x4a, 0xf3, 0x40,
|
|
||||||
0x14, 0x85, 0xff, 0xf9, 0x2b, 0x55, 0xa6, 0xe0, 0x62, 0xdc, 0x94, 0x2a, 0x52, 0xab, 0x48, 0x45,
|
|
||||||
0x32, 0x63, 0xea, 0x42, 0x10, 0x54, 0x28, 0xb8, 0x11, 0x94, 0x12, 0x77, 0x6e, 0xa4, 0x4d, 0x2f,
|
|
||||||
0x71, 0x16, 0x99, 0x1b, 0x67, 0x26, 0xc1, 0x57, 0x70, 0xe5, 0x3b, 0xf8, 0x5c, 0x3e, 0x8c, 0x24,
|
|
||||||
0x93, 0xb4, 0x94, 0x18, 0x0b, 0xee, 0x2e, 0x99, 0xf3, 0x9d, 0x9c, 0x33, 0x73, 0xe9, 0x05, 0x26,
|
|
||||||
0xa0, 0x42, 0x50, 0x26, 0x35, 0x22, 0xd1, 0x68, 0x51, 0x4c, 0x23, 0x50, 0x56, 0xc4, 0x60, 0xb5,
|
|
||||||
0x0c, 0x8d, 0xc8, 0xfc, 0x6a, 0x7c, 0x36, 0xa0, 0x33, 0x19, 0x02, 0x2f, 0x64, 0xec, 0x60, 0x09,
|
|
||||||
0xba, 0x2f, 0xbc, 0x00, 0x79, 0xa9, 0xe6, 0x99, 0xdf, 0xf3, 0x1a, 0xbc, 0x43, 0x8c, 0x63, 0x54,
|
|
||||||
0xb9, 0xb5, 0x9b, 0x1c, 0xdf, 0x3b, 0xa9, 0xc9, 0xeb, 0x21, 0x4a, 0xe9, 0x69, 0x4d, 0xaa, 0xc1,
|
|
||||||
0x60, 0xaa, 0x43, 0xc8, 0xb5, 0xd5, 0xec, 0xc4, 0x83, 0x2f, 0x42, 0x77, 0x6f, 0xdf, 0x12, 0xd4,
|
|
||||||
0xf6, 0xde, 0x99, 0x3c, 0xba, 0x22, 0x01, 0xbc, 0xa6, 0x60, 0x2c, 0xbb, 0xa4, 0x1b, 0x0a, 0xe7,
|
|
||||||
0xd0, 0x25, 0x7d, 0x32, 0xec, 0x8c, 0x8e, 0x79, 0x43, 0xb1, 0x32, 0x6b, 0xe6, 0xf3, 0x07, 0x9c,
|
|
||||||
0x43, 0x50, 0x30, 0xec, 0x8a, 0x6e, 0x96, 0xc9, 0xba, 0xff, 0xfb, 0xad, 0x61, 0x67, 0x74, 0x58,
|
|
||||||
0xc7, 0x97, 0x37, 0xc2, 0x5d, 0x80, 0xa0, 0x62, 0xd8, 0x98, 0x6e, 0x55, 0x61, 0xbb, 0xad, 0xa6,
|
|
||||||
0xdf, 0x2f, 0xea, 0x64, 0x3e, 0x0f, 0xca, 0x39, 0x58, 0x70, 0x83, 0x7d, 0xba, 0xf7, 0x73, 0x3b,
|
|
||||||
0x93, 0xa0, 0x32, 0x30, 0xfa, 0x24, 0x74, 0x7b, 0xf5, 0x88, 0x7d, 0x10, 0xda, 0x76, 0x0c, 0xbb,
|
|
||||||
0xe6, 0x6b, 0xdf, 0x91, 0xff, 0x72, 0x79, 0xbd, 0x9b, 0x3f, 0xf3, 0x2e, 0xde, 0xe0, 0xdf, 0x90,
|
|
||||||
0x9c, 0x91, 0xf1, 0x3b, 0xa1, 0x47, 0x12, 0xd7, 0x7b, 0x8d, 0x77, 0x56, 0x6d, 0x26, 0xb9, 0x6a,
|
|
||||||
0x42, 0x9e, 0xee, 0x22, 0x69, 0x5f, 0xd2, 0x59, 0xfe, 0x48, 0xc2, 0x19, 0x78, 0x52, 0x19, 0xab,
|
|
||||||
0xd3, 0x18, 0x94, 0x9d, 0x5a, 0x89, 0x4a, 0x2c, 0xbd, 0x3d, 0xb7, 0x32, 0x11, 0x28, 0x2f, 0xaa,
|
|
||||||
0xef, 0xfb, 0xac, 0x5d, 0x1c, 0x9f, 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, 0x16, 0x61, 0x3b, 0xc3,
|
|
||||||
0x1b, 0x03, 0x00, 0x00,
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
|
||||||
var _ context.Context
|
|
||||||
var _ grpc.ClientConn
|
|
||||||
|
|
||||||
// This is a compile-time assertion to ensure that this generated file
|
|
||||||
// is compatible with the grpc package it is being compiled against.
|
|
||||||
const _ = grpc.SupportPackageIsVersion4
|
|
||||||
|
|
||||||
// MetricsServiceClient is the client API for MetricsService service.
|
|
||||||
//
|
|
||||||
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
|
|
||||||
type MetricsServiceClient interface {
|
|
||||||
// For performance reasons, it is recommended to keep this RPC
|
|
||||||
// alive for the entire life of the application.
|
|
||||||
Export(ctx context.Context, opts ...grpc.CallOption) (MetricsService_ExportClient, error)
|
|
||||||
}
|
|
||||||
|
|
||||||
type metricsServiceClient struct {
|
|
||||||
cc *grpc.ClientConn
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewMetricsServiceClient(cc *grpc.ClientConn) MetricsServiceClient {
|
|
||||||
return &metricsServiceClient{cc}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *metricsServiceClient) Export(ctx context.Context, opts ...grpc.CallOption) (MetricsService_ExportClient, error) {
|
|
||||||
stream, err := c.cc.NewStream(ctx, &_MetricsService_serviceDesc.Streams[0], "/opencensus.proto.agent.metrics.v1.MetricsService/Export", opts...)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
x := &metricsServiceExportClient{stream}
|
|
||||||
return x, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type MetricsService_ExportClient interface {
|
|
||||||
Send(*ExportMetricsServiceRequest) error
|
|
||||||
Recv() (*ExportMetricsServiceResponse, error)
|
|
||||||
grpc.ClientStream
|
|
||||||
}
|
|
||||||
|
|
||||||
type metricsServiceExportClient struct {
|
|
||||||
grpc.ClientStream
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *metricsServiceExportClient) Send(m *ExportMetricsServiceRequest) error {
|
|
||||||
return x.ClientStream.SendMsg(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *metricsServiceExportClient) Recv() (*ExportMetricsServiceResponse, error) {
|
|
||||||
m := new(ExportMetricsServiceResponse)
|
|
||||||
if err := x.ClientStream.RecvMsg(m); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return m, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// MetricsServiceServer is the server API for MetricsService service.
|
|
||||||
type MetricsServiceServer interface {
|
|
||||||
// For performance reasons, it is recommended to keep this RPC
|
|
||||||
// alive for the entire life of the application.
|
|
||||||
Export(MetricsService_ExportServer) error
|
|
||||||
}
|
|
||||||
|
|
||||||
func RegisterMetricsServiceServer(s *grpc.Server, srv MetricsServiceServer) {
|
|
||||||
s.RegisterService(&_MetricsService_serviceDesc, srv)
|
|
||||||
}
|
|
||||||
|
|
||||||
func _MetricsService_Export_Handler(srv interface{}, stream grpc.ServerStream) error {
|
|
||||||
return srv.(MetricsServiceServer).Export(&metricsServiceExportServer{stream})
|
|
||||||
}
|
|
||||||
|
|
||||||
type MetricsService_ExportServer interface {
|
|
||||||
Send(*ExportMetricsServiceResponse) error
|
|
||||||
Recv() (*ExportMetricsServiceRequest, error)
|
|
||||||
grpc.ServerStream
|
|
||||||
}
|
|
||||||
|
|
||||||
type metricsServiceExportServer struct {
|
|
||||||
grpc.ServerStream
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *metricsServiceExportServer) Send(m *ExportMetricsServiceResponse) error {
|
|
||||||
return x.ServerStream.SendMsg(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *metricsServiceExportServer) Recv() (*ExportMetricsServiceRequest, error) {
|
|
||||||
m := new(ExportMetricsServiceRequest)
|
|
||||||
if err := x.ServerStream.RecvMsg(m); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return m, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var _MetricsService_serviceDesc = grpc.ServiceDesc{
|
|
||||||
ServiceName: "opencensus.proto.agent.metrics.v1.MetricsService",
|
|
||||||
HandlerType: (*MetricsServiceServer)(nil),
|
|
||||||
Methods: []grpc.MethodDesc{},
|
|
||||||
Streams: []grpc.StreamDesc{
|
|
||||||
{
|
|
||||||
StreamName: "Export",
|
|
||||||
Handler: _MetricsService_Export_Handler,
|
|
||||||
ServerStreams: true,
|
|
||||||
ClientStreams: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Metadata: "opencensus/proto/agent/metrics/v1/metrics_service.proto",
|
|
||||||
}
|
|
|
@ -1,443 +0,0 @@
|
||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
|
||||||
// source: opencensus/proto/agent/trace/v1/trace_service.proto
|
|
||||||
|
|
||||||
package v1
|
|
||||||
|
|
||||||
import (
|
|
||||||
context "context"
|
|
||||||
fmt "fmt"
|
|
||||||
v1 "github.com/census-instrumentation/opencensus-proto/gen-go/agent/common/v1"
|
|
||||||
v12 "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1"
|
|
||||||
v11 "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1"
|
|
||||||
proto "github.com/golang/protobuf/proto"
|
|
||||||
grpc "google.golang.org/grpc"
|
|
||||||
math "math"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
|
||||||
var _ = proto.Marshal
|
|
||||||
var _ = fmt.Errorf
|
|
||||||
var _ = math.Inf
|
|
||||||
|
|
||||||
// This is a compile-time assertion to ensure that this generated file
|
|
||||||
// is compatible with the proto package it is being compiled against.
|
|
||||||
// A compilation error at this line likely means your copy of the
|
|
||||||
// proto package needs to be updated.
|
|
||||||
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
|
|
||||||
|
|
||||||
type CurrentLibraryConfig struct {
|
|
||||||
// This is required only in the first message on the stream or if the
|
|
||||||
// previous sent CurrentLibraryConfig message has a different Node (e.g.
|
|
||||||
// when the same RPC is used to configure multiple Applications).
|
|
||||||
Node *v1.Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"`
|
|
||||||
// Current configuration.
|
|
||||||
Config *v11.TraceConfig `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CurrentLibraryConfig) Reset() { *m = CurrentLibraryConfig{} }
|
|
||||||
func (m *CurrentLibraryConfig) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*CurrentLibraryConfig) ProtoMessage() {}
|
|
||||||
func (*CurrentLibraryConfig) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_7027f99caf7ac6a5, []int{0}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CurrentLibraryConfig) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_CurrentLibraryConfig.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *CurrentLibraryConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_CurrentLibraryConfig.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *CurrentLibraryConfig) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_CurrentLibraryConfig.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *CurrentLibraryConfig) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_CurrentLibraryConfig.Size(m)
|
|
||||||
}
|
|
||||||
func (m *CurrentLibraryConfig) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_CurrentLibraryConfig.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_CurrentLibraryConfig proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *CurrentLibraryConfig) GetNode() *v1.Node {
|
|
||||||
if m != nil {
|
|
||||||
return m.Node
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CurrentLibraryConfig) GetConfig() *v11.TraceConfig {
|
|
||||||
if m != nil {
|
|
||||||
return m.Config
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type UpdatedLibraryConfig struct {
|
|
||||||
// This field is ignored when the RPC is used to configure only one Application.
|
|
||||||
// This is required only in the first message on the stream or if the
|
|
||||||
// previous sent UpdatedLibraryConfig message has a different Node.
|
|
||||||
Node *v1.Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"`
|
|
||||||
// Requested updated configuration.
|
|
||||||
Config *v11.TraceConfig `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *UpdatedLibraryConfig) Reset() { *m = UpdatedLibraryConfig{} }
|
|
||||||
func (m *UpdatedLibraryConfig) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*UpdatedLibraryConfig) ProtoMessage() {}
|
|
||||||
func (*UpdatedLibraryConfig) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_7027f99caf7ac6a5, []int{1}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *UpdatedLibraryConfig) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_UpdatedLibraryConfig.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *UpdatedLibraryConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_UpdatedLibraryConfig.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *UpdatedLibraryConfig) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_UpdatedLibraryConfig.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *UpdatedLibraryConfig) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_UpdatedLibraryConfig.Size(m)
|
|
||||||
}
|
|
||||||
func (m *UpdatedLibraryConfig) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_UpdatedLibraryConfig.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_UpdatedLibraryConfig proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *UpdatedLibraryConfig) GetNode() *v1.Node {
|
|
||||||
if m != nil {
|
|
||||||
return m.Node
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *UpdatedLibraryConfig) GetConfig() *v11.TraceConfig {
|
|
||||||
if m != nil {
|
|
||||||
return m.Config
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type ExportTraceServiceRequest struct {
|
|
||||||
// This is required only in the first message on the stream or if the
|
|
||||||
// previous sent ExportTraceServiceRequest message has a different Node (e.g.
|
|
||||||
// when the same RPC is used to send Spans from multiple Applications).
|
|
||||||
Node *v1.Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"`
|
|
||||||
// A list of Spans that belong to the last received Node.
|
|
||||||
Spans []*v11.Span `protobuf:"bytes,2,rep,name=spans,proto3" json:"spans,omitempty"`
|
|
||||||
// The resource for the spans in this message that do not have an explicit
|
|
||||||
// resource set.
|
|
||||||
// If unset, the most recently set resource in the RPC stream applies. It is
|
|
||||||
// valid to never be set within a stream, e.g. when no resource info is known.
|
|
||||||
Resource *v12.Resource `protobuf:"bytes,3,opt,name=resource,proto3" json:"resource,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ExportTraceServiceRequest) Reset() { *m = ExportTraceServiceRequest{} }
|
|
||||||
func (m *ExportTraceServiceRequest) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*ExportTraceServiceRequest) ProtoMessage() {}
|
|
||||||
func (*ExportTraceServiceRequest) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_7027f99caf7ac6a5, []int{2}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ExportTraceServiceRequest) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_ExportTraceServiceRequest.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *ExportTraceServiceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_ExportTraceServiceRequest.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *ExportTraceServiceRequest) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_ExportTraceServiceRequest.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *ExportTraceServiceRequest) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_ExportTraceServiceRequest.Size(m)
|
|
||||||
}
|
|
||||||
func (m *ExportTraceServiceRequest) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_ExportTraceServiceRequest.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_ExportTraceServiceRequest proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *ExportTraceServiceRequest) GetNode() *v1.Node {
|
|
||||||
if m != nil {
|
|
||||||
return m.Node
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ExportTraceServiceRequest) GetSpans() []*v11.Span {
|
|
||||||
if m != nil {
|
|
||||||
return m.Spans
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ExportTraceServiceRequest) GetResource() *v12.Resource {
|
|
||||||
if m != nil {
|
|
||||||
return m.Resource
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type ExportTraceServiceResponse struct {
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ExportTraceServiceResponse) Reset() { *m = ExportTraceServiceResponse{} }
|
|
||||||
func (m *ExportTraceServiceResponse) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*ExportTraceServiceResponse) ProtoMessage() {}
|
|
||||||
func (*ExportTraceServiceResponse) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_7027f99caf7ac6a5, []int{3}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ExportTraceServiceResponse) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_ExportTraceServiceResponse.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *ExportTraceServiceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_ExportTraceServiceResponse.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *ExportTraceServiceResponse) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_ExportTraceServiceResponse.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *ExportTraceServiceResponse) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_ExportTraceServiceResponse.Size(m)
|
|
||||||
}
|
|
||||||
func (m *ExportTraceServiceResponse) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_ExportTraceServiceResponse.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_ExportTraceServiceResponse proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
proto.RegisterType((*CurrentLibraryConfig)(nil), "opencensus.proto.agent.trace.v1.CurrentLibraryConfig")
|
|
||||||
proto.RegisterType((*UpdatedLibraryConfig)(nil), "opencensus.proto.agent.trace.v1.UpdatedLibraryConfig")
|
|
||||||
proto.RegisterType((*ExportTraceServiceRequest)(nil), "opencensus.proto.agent.trace.v1.ExportTraceServiceRequest")
|
|
||||||
proto.RegisterType((*ExportTraceServiceResponse)(nil), "opencensus.proto.agent.trace.v1.ExportTraceServiceResponse")
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
proto.RegisterFile("opencensus/proto/agent/trace/v1/trace_service.proto", fileDescriptor_7027f99caf7ac6a5)
|
|
||||||
}
|
|
||||||
|
|
||||||
var fileDescriptor_7027f99caf7ac6a5 = []byte{
|
|
||||||
// 423 bytes of a gzipped FileDescriptorProto
|
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x54, 0xbf, 0x6b, 0xdb, 0x40,
|
|
||||||
0x14, 0xee, 0xd9, 0xad, 0x28, 0xe7, 0x2e, 0x15, 0x1d, 0x54, 0x51, 0xb0, 0x11, 0xb4, 0x18, 0x5a,
|
|
||||||
0x9d, 0x2a, 0x1b, 0x2f, 0x2e, 0x74, 0xb0, 0x29, 0x74, 0x28, 0xc5, 0xc8, 0xed, 0x92, 0xc5, 0xc8,
|
|
||||||
0xd2, 0x8b, 0xa2, 0xc1, 0x77, 0xca, 0xdd, 0x49, 0x24, 0x90, 0x2d, 0x43, 0xf6, 0x0c, 0xf9, 0xc3,
|
|
||||||
0xf2, 0x17, 0x05, 0xdd, 0xc9, 0x3f, 0x12, 0x5b, 0x11, 0x24, 0x4b, 0xb6, 0x87, 0xde, 0xf7, 0x7d,
|
|
||||||
0xf7, 0xbd, 0x7b, 0xdf, 0x09, 0x0f, 0x59, 0x06, 0x34, 0x02, 0x2a, 0x72, 0xe1, 0x65, 0x9c, 0x49,
|
|
||||||
0xe6, 0x85, 0x09, 0x50, 0xe9, 0x49, 0x1e, 0x46, 0xe0, 0x15, 0xbe, 0x2e, 0x16, 0x02, 0x78, 0x91,
|
|
||||||
0x46, 0x40, 0x14, 0xc4, 0xec, 0x6e, 0x49, 0xfa, 0x0b, 0x51, 0x24, 0xa2, 0xb0, 0xa4, 0xf0, 0x6d,
|
|
||||||
0xb7, 0x46, 0x35, 0x62, 0xab, 0x15, 0xa3, 0xa5, 0xac, 0xae, 0x34, 0xdb, 0xfe, 0xba, 0x07, 0xe7,
|
|
||||||
0x20, 0x58, 0xce, 0xb5, 0x83, 0x75, 0x5d, 0x81, 0x3f, 0xef, 0x81, 0xef, 0x7b, 0xad, 0x60, 0xdf,
|
|
||||||
0x1a, 0x60, 0x8b, 0x88, 0xd1, 0xe3, 0x34, 0xd1, 0x68, 0xe7, 0x1a, 0xe1, 0x0f, 0xd3, 0x9c, 0x73,
|
|
||||||
0xa0, 0xf2, 0x4f, 0xba, 0xe4, 0x21, 0x3f, 0x9f, 0xaa, 0xb6, 0x39, 0xc6, 0xaf, 0x29, 0x8b, 0xc1,
|
|
||||||
0x42, 0x3d, 0xd4, 0xef, 0x0c, 0xbe, 0x90, 0x9a, 0xc9, 0xab, 0x71, 0x0a, 0x9f, 0xfc, 0x65, 0x31,
|
|
||||||
0x04, 0x8a, 0x63, 0xfe, 0xc4, 0x86, 0x3e, 0xc4, 0x6a, 0xd5, 0xb1, 0xd7, 0x37, 0x46, 0xfe, 0x95,
|
|
||||||
0x85, 0x3e, 0x33, 0xa8, 0x58, 0xca, 0xd4, 0xff, 0x2c, 0x0e, 0x25, 0xc4, 0x2f, 0xc7, 0xd4, 0x2d,
|
|
||||||
0xc2, 0x1f, 0x7f, 0x9d, 0x65, 0x8c, 0x4b, 0xd5, 0x9d, 0xeb, 0x60, 0x04, 0x70, 0x9a, 0x83, 0x90,
|
|
||||||
0xcf, 0x72, 0x36, 0xc2, 0x6f, 0x44, 0x16, 0x52, 0x61, 0xb5, 0x7a, 0xed, 0x7e, 0x67, 0xd0, 0x7d,
|
|
||||||
0xc4, 0xd8, 0x3c, 0x0b, 0x69, 0xa0, 0xd1, 0xe6, 0x04, 0xbf, 0x5d, 0x27, 0xc4, 0x6a, 0xd7, 0x1d,
|
|
||||||
0xbb, 0xc9, 0x50, 0xe1, 0x93, 0xa0, 0xaa, 0x83, 0x0d, 0xcf, 0xf9, 0x84, 0xed, 0x43, 0x33, 0x89,
|
|
||||||
0x8c, 0x51, 0x01, 0x83, 0x9b, 0x16, 0x7e, 0xb7, 0xdb, 0x30, 0x2f, 0xb0, 0x51, 0x6d, 0x62, 0x44,
|
|
||||||
0x1a, 0x9e, 0x02, 0x39, 0x94, 0x2a, 0xbb, 0x99, 0x76, 0x68, 0xef, 0xce, 0xab, 0x3e, 0xfa, 0x8e,
|
|
||||||
0xcc, 0x2b, 0x84, 0x0d, 0xed, 0xd6, 0x1c, 0x37, 0xea, 0xd4, 0xae, 0xca, 0xfe, 0xf1, 0x24, 0xae,
|
|
||||||
0xbe, 0x12, 0xed, 0x64, 0x72, 0x89, 0xb0, 0x93, 0xb2, 0x26, 0x9d, 0xc9, 0xfb, 0x5d, 0x89, 0x59,
|
|
||||||
0x89, 0x98, 0xa1, 0xa3, 0xdf, 0x49, 0x2a, 0x4f, 0xf2, 0x65, 0x19, 0x05, 0x4f, 0x93, 0xdd, 0x94,
|
|
||||||
0x0a, 0xc9, 0xf3, 0x15, 0x50, 0x19, 0xca, 0x94, 0x51, 0x6f, 0xab, 0xeb, 0xea, 0x17, 0x9c, 0x00,
|
|
||||||
0x75, 0x93, 0x87, 0x7f, 0xa8, 0xa5, 0xa1, 0x9a, 0xc3, 0xbb, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcf,
|
|
||||||
0x9c, 0x9b, 0xf7, 0xcb, 0x04, 0x00, 0x00,
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
|
||||||
var _ context.Context
|
|
||||||
var _ grpc.ClientConn
|
|
||||||
|
|
||||||
// This is a compile-time assertion to ensure that this generated file
|
|
||||||
// is compatible with the grpc package it is being compiled against.
|
|
||||||
const _ = grpc.SupportPackageIsVersion4
|
|
||||||
|
|
||||||
// TraceServiceClient is the client API for TraceService service.
|
|
||||||
//
|
|
||||||
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
|
|
||||||
type TraceServiceClient interface {
|
|
||||||
// After initialization, this RPC must be kept alive for the entire life of
|
|
||||||
// the application. The agent pushes configs down to applications via a
|
|
||||||
// stream.
|
|
||||||
Config(ctx context.Context, opts ...grpc.CallOption) (TraceService_ConfigClient, error)
|
|
||||||
// For performance reasons, it is recommended to keep this RPC
|
|
||||||
// alive for the entire life of the application.
|
|
||||||
Export(ctx context.Context, opts ...grpc.CallOption) (TraceService_ExportClient, error)
|
|
||||||
}
|
|
||||||
|
|
||||||
type traceServiceClient struct {
|
|
||||||
cc *grpc.ClientConn
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewTraceServiceClient(cc *grpc.ClientConn) TraceServiceClient {
|
|
||||||
return &traceServiceClient{cc}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *traceServiceClient) Config(ctx context.Context, opts ...grpc.CallOption) (TraceService_ConfigClient, error) {
|
|
||||||
stream, err := c.cc.NewStream(ctx, &_TraceService_serviceDesc.Streams[0], "/opencensus.proto.agent.trace.v1.TraceService/Config", opts...)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
x := &traceServiceConfigClient{stream}
|
|
||||||
return x, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type TraceService_ConfigClient interface {
|
|
||||||
Send(*CurrentLibraryConfig) error
|
|
||||||
Recv() (*UpdatedLibraryConfig, error)
|
|
||||||
grpc.ClientStream
|
|
||||||
}
|
|
||||||
|
|
||||||
type traceServiceConfigClient struct {
|
|
||||||
grpc.ClientStream
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *traceServiceConfigClient) Send(m *CurrentLibraryConfig) error {
|
|
||||||
return x.ClientStream.SendMsg(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *traceServiceConfigClient) Recv() (*UpdatedLibraryConfig, error) {
|
|
||||||
m := new(UpdatedLibraryConfig)
|
|
||||||
if err := x.ClientStream.RecvMsg(m); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return m, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *traceServiceClient) Export(ctx context.Context, opts ...grpc.CallOption) (TraceService_ExportClient, error) {
|
|
||||||
stream, err := c.cc.NewStream(ctx, &_TraceService_serviceDesc.Streams[1], "/opencensus.proto.agent.trace.v1.TraceService/Export", opts...)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
x := &traceServiceExportClient{stream}
|
|
||||||
return x, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type TraceService_ExportClient interface {
|
|
||||||
Send(*ExportTraceServiceRequest) error
|
|
||||||
Recv() (*ExportTraceServiceResponse, error)
|
|
||||||
grpc.ClientStream
|
|
||||||
}
|
|
||||||
|
|
||||||
type traceServiceExportClient struct {
|
|
||||||
grpc.ClientStream
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *traceServiceExportClient) Send(m *ExportTraceServiceRequest) error {
|
|
||||||
return x.ClientStream.SendMsg(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *traceServiceExportClient) Recv() (*ExportTraceServiceResponse, error) {
|
|
||||||
m := new(ExportTraceServiceResponse)
|
|
||||||
if err := x.ClientStream.RecvMsg(m); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return m, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// TraceServiceServer is the server API for TraceService service.
|
|
||||||
type TraceServiceServer interface {
|
|
||||||
// After initialization, this RPC must be kept alive for the entire life of
|
|
||||||
// the application. The agent pushes configs down to applications via a
|
|
||||||
// stream.
|
|
||||||
Config(TraceService_ConfigServer) error
|
|
||||||
// For performance reasons, it is recommended to keep this RPC
|
|
||||||
// alive for the entire life of the application.
|
|
||||||
Export(TraceService_ExportServer) error
|
|
||||||
}
|
|
||||||
|
|
||||||
func RegisterTraceServiceServer(s *grpc.Server, srv TraceServiceServer) {
|
|
||||||
s.RegisterService(&_TraceService_serviceDesc, srv)
|
|
||||||
}
|
|
||||||
|
|
||||||
func _TraceService_Config_Handler(srv interface{}, stream grpc.ServerStream) error {
|
|
||||||
return srv.(TraceServiceServer).Config(&traceServiceConfigServer{stream})
|
|
||||||
}
|
|
||||||
|
|
||||||
type TraceService_ConfigServer interface {
|
|
||||||
Send(*UpdatedLibraryConfig) error
|
|
||||||
Recv() (*CurrentLibraryConfig, error)
|
|
||||||
grpc.ServerStream
|
|
||||||
}
|
|
||||||
|
|
||||||
type traceServiceConfigServer struct {
|
|
||||||
grpc.ServerStream
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *traceServiceConfigServer) Send(m *UpdatedLibraryConfig) error {
|
|
||||||
return x.ServerStream.SendMsg(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *traceServiceConfigServer) Recv() (*CurrentLibraryConfig, error) {
|
|
||||||
m := new(CurrentLibraryConfig)
|
|
||||||
if err := x.ServerStream.RecvMsg(m); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return m, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func _TraceService_Export_Handler(srv interface{}, stream grpc.ServerStream) error {
|
|
||||||
return srv.(TraceServiceServer).Export(&traceServiceExportServer{stream})
|
|
||||||
}
|
|
||||||
|
|
||||||
type TraceService_ExportServer interface {
|
|
||||||
Send(*ExportTraceServiceResponse) error
|
|
||||||
Recv() (*ExportTraceServiceRequest, error)
|
|
||||||
grpc.ServerStream
|
|
||||||
}
|
|
||||||
|
|
||||||
type traceServiceExportServer struct {
|
|
||||||
grpc.ServerStream
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *traceServiceExportServer) Send(m *ExportTraceServiceResponse) error {
|
|
||||||
return x.ServerStream.SendMsg(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *traceServiceExportServer) Recv() (*ExportTraceServiceRequest, error) {
|
|
||||||
m := new(ExportTraceServiceRequest)
|
|
||||||
if err := x.ServerStream.RecvMsg(m); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return m, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var _TraceService_serviceDesc = grpc.ServiceDesc{
|
|
||||||
ServiceName: "opencensus.proto.agent.trace.v1.TraceService",
|
|
||||||
HandlerType: (*TraceServiceServer)(nil),
|
|
||||||
Methods: []grpc.MethodDesc{},
|
|
||||||
Streams: []grpc.StreamDesc{
|
|
||||||
{
|
|
||||||
StreamName: "Config",
|
|
||||||
Handler: _TraceService_Config_Handler,
|
|
||||||
ServerStreams: true,
|
|
||||||
ClientStreams: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
StreamName: "Export",
|
|
||||||
Handler: _TraceService_Export_Handler,
|
|
||||||
ServerStreams: true,
|
|
||||||
ClientStreams: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Metadata: "opencensus/proto/agent/trace/v1/trace_service.proto",
|
|
||||||
}
|
|
|
@ -1,154 +0,0 @@
|
||||||
// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
|
|
||||||
// source: opencensus/proto/agent/trace/v1/trace_service.proto
|
|
||||||
|
|
||||||
/*
|
|
||||||
Package v1 is a reverse proxy.
|
|
||||||
|
|
||||||
It translates gRPC into RESTful JSON APIs.
|
|
||||||
*/
|
|
||||||
package v1
|
|
||||||
|
|
||||||
import (
|
|
||||||
"io"
|
|
||||||
"net/http"
|
|
||||||
|
|
||||||
"github.com/golang/protobuf/proto"
|
|
||||||
"github.com/grpc-ecosystem/grpc-gateway/runtime"
|
|
||||||
"github.com/grpc-ecosystem/grpc-gateway/utilities"
|
|
||||||
"golang.org/x/net/context"
|
|
||||||
"google.golang.org/grpc"
|
|
||||||
"google.golang.org/grpc/codes"
|
|
||||||
"google.golang.org/grpc/grpclog"
|
|
||||||
"google.golang.org/grpc/status"
|
|
||||||
)
|
|
||||||
|
|
||||||
var _ codes.Code
|
|
||||||
var _ io.Reader
|
|
||||||
var _ status.Status
|
|
||||||
var _ = runtime.String
|
|
||||||
var _ = utilities.NewDoubleArray
|
|
||||||
|
|
||||||
func request_TraceService_Export_0(ctx context.Context, marshaler runtime.Marshaler, client TraceServiceClient, req *http.Request, pathParams map[string]string) (TraceService_ExportClient, runtime.ServerMetadata, error) {
|
|
||||||
var metadata runtime.ServerMetadata
|
|
||||||
stream, err := client.Export(ctx)
|
|
||||||
if err != nil {
|
|
||||||
grpclog.Infof("Failed to start streaming: %v", err)
|
|
||||||
return nil, metadata, err
|
|
||||||
}
|
|
||||||
newReader, berr := utilities.IOReaderFactory(req.Body)
|
|
||||||
if berr != nil {
|
|
||||||
return nil, metadata, berr
|
|
||||||
}
|
|
||||||
dec := marshaler.NewDecoder(newReader())
|
|
||||||
handleSend := func() error {
|
|
||||||
var protoReq ExportTraceServiceRequest
|
|
||||||
err := dec.Decode(&protoReq)
|
|
||||||
if err == io.EOF {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
grpclog.Infof("Failed to decode request: %v", err)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := stream.Send(&protoReq); err != nil {
|
|
||||||
grpclog.Infof("Failed to send request: %v", err)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
if err := handleSend(); err != nil {
|
|
||||||
if cerr := stream.CloseSend(); cerr != nil {
|
|
||||||
grpclog.Infof("Failed to terminate client stream: %v", cerr)
|
|
||||||
}
|
|
||||||
if err == io.EOF {
|
|
||||||
return stream, metadata, nil
|
|
||||||
}
|
|
||||||
return nil, metadata, err
|
|
||||||
}
|
|
||||||
go func() {
|
|
||||||
for {
|
|
||||||
if err := handleSend(); err != nil {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if err := stream.CloseSend(); err != nil {
|
|
||||||
grpclog.Infof("Failed to terminate client stream: %v", err)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
header, err := stream.Header()
|
|
||||||
if err != nil {
|
|
||||||
grpclog.Infof("Failed to get header from client: %v", err)
|
|
||||||
return nil, metadata, err
|
|
||||||
}
|
|
||||||
metadata.HeaderMD = header
|
|
||||||
return stream, metadata, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// RegisterTraceServiceHandlerFromEndpoint is same as RegisterTraceServiceHandler but
|
|
||||||
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
|
|
||||||
func RegisterTraceServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
|
|
||||||
conn, err := grpc.Dial(endpoint, opts...)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer func() {
|
|
||||||
if err != nil {
|
|
||||||
if cerr := conn.Close(); cerr != nil {
|
|
||||||
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
go func() {
|
|
||||||
<-ctx.Done()
|
|
||||||
if cerr := conn.Close(); cerr != nil {
|
|
||||||
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}()
|
|
||||||
|
|
||||||
return RegisterTraceServiceHandler(ctx, mux, conn)
|
|
||||||
}
|
|
||||||
|
|
||||||
// RegisterTraceServiceHandler registers the http handlers for service TraceService to "mux".
|
|
||||||
// The handlers forward requests to the grpc endpoint over "conn".
|
|
||||||
func RegisterTraceServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
|
|
||||||
return RegisterTraceServiceHandlerClient(ctx, mux, NewTraceServiceClient(conn))
|
|
||||||
}
|
|
||||||
|
|
||||||
// RegisterTraceServiceHandlerClient registers the http handlers for service TraceService
|
|
||||||
// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "TraceServiceClient".
|
|
||||||
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "TraceServiceClient"
|
|
||||||
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
|
|
||||||
// "TraceServiceClient" to call the correct interceptors.
|
|
||||||
func RegisterTraceServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client TraceServiceClient) error {
|
|
||||||
|
|
||||||
mux.Handle("POST", pattern_TraceService_Export_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
|
||||||
ctx, cancel := context.WithCancel(req.Context())
|
|
||||||
defer cancel()
|
|
||||||
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
|
|
||||||
rctx, err := runtime.AnnotateContext(ctx, mux, req)
|
|
||||||
if err != nil {
|
|
||||||
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
resp, md, err := request_TraceService_Export_0(rctx, inboundMarshaler, client, req, pathParams)
|
|
||||||
ctx = runtime.NewServerMetadataContext(ctx, md)
|
|
||||||
if err != nil {
|
|
||||||
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
forward_TraceService_Export_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
|
||||||
pattern_TraceService_Export_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "trace"}, ""))
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
forward_TraceService_Export_0 = runtime.ForwardResponseStream
|
|
||||||
)
|
|
1126
vendor/github.com/census-instrumentation/opencensus-proto/gen-go/metrics/v1/metrics.pb.go
generated
vendored
1126
vendor/github.com/census-instrumentation/opencensus-proto/gen-go/metrics/v1/metrics.pb.go
generated
vendored
File diff suppressed because it is too large
Load Diff
|
@ -1,99 +0,0 @@
|
||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
|
||||||
// source: opencensus/proto/resource/v1/resource.proto
|
|
||||||
|
|
||||||
package v1
|
|
||||||
|
|
||||||
import (
|
|
||||||
fmt "fmt"
|
|
||||||
proto "github.com/golang/protobuf/proto"
|
|
||||||
math "math"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
|
||||||
var _ = proto.Marshal
|
|
||||||
var _ = fmt.Errorf
|
|
||||||
var _ = math.Inf
|
|
||||||
|
|
||||||
// This is a compile-time assertion to ensure that this generated file
|
|
||||||
// is compatible with the proto package it is being compiled against.
|
|
||||||
// A compilation error at this line likely means your copy of the
|
|
||||||
// proto package needs to be updated.
|
|
||||||
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
|
|
||||||
|
|
||||||
// Resource information.
|
|
||||||
type Resource struct {
|
|
||||||
// Type identifier for the resource.
|
|
||||||
Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"`
|
|
||||||
// Set of labels that describe the resource.
|
|
||||||
Labels map[string]string `protobuf:"bytes,2,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Resource) Reset() { *m = Resource{} }
|
|
||||||
func (m *Resource) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*Resource) ProtoMessage() {}
|
|
||||||
func (*Resource) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_584700775a2fc762, []int{0}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Resource) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_Resource.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *Resource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_Resource.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *Resource) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_Resource.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *Resource) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_Resource.Size(m)
|
|
||||||
}
|
|
||||||
func (m *Resource) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_Resource.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_Resource proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *Resource) GetType() string {
|
|
||||||
if m != nil {
|
|
||||||
return m.Type
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Resource) GetLabels() map[string]string {
|
|
||||||
if m != nil {
|
|
||||||
return m.Labels
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
proto.RegisterType((*Resource)(nil), "opencensus.proto.resource.v1.Resource")
|
|
||||||
proto.RegisterMapType((map[string]string)(nil), "opencensus.proto.resource.v1.Resource.LabelsEntry")
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
proto.RegisterFile("opencensus/proto/resource/v1/resource.proto", fileDescriptor_584700775a2fc762)
|
|
||||||
}
|
|
||||||
|
|
||||||
var fileDescriptor_584700775a2fc762 = []byte{
|
|
||||||
// 234 bytes of a gzipped FileDescriptorProto
|
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0xce, 0x2f, 0x48, 0xcd,
|
|
||||||
0x4b, 0x4e, 0xcd, 0x2b, 0x2e, 0x2d, 0xd6, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0xd7, 0x2f, 0x4a, 0x2d,
|
|
||||||
0xce, 0x2f, 0x2d, 0x4a, 0x4e, 0xd5, 0x2f, 0x33, 0x84, 0xb3, 0xf5, 0xc0, 0x52, 0x42, 0x32, 0x08,
|
|
||||||
0xc5, 0x10, 0x11, 0x3d, 0xb8, 0x82, 0x32, 0x43, 0xa5, 0xa5, 0x8c, 0x5c, 0x1c, 0x41, 0x50, 0xbe,
|
|
||||||
0x90, 0x10, 0x17, 0x4b, 0x49, 0x65, 0x41, 0xaa, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0x67, 0x10, 0x98,
|
|
||||||
0x2d, 0xe4, 0xc5, 0xc5, 0x96, 0x93, 0x98, 0x94, 0x9a, 0x53, 0x2c, 0xc1, 0xa4, 0xc0, 0xac, 0xc1,
|
|
||||||
0x6d, 0x64, 0xa4, 0x87, 0xcf, 0x3c, 0x3d, 0x98, 0x59, 0x7a, 0x3e, 0x60, 0x4d, 0xae, 0x79, 0x25,
|
|
||||||
0x45, 0x95, 0x41, 0x50, 0x13, 0xa4, 0x2c, 0xb9, 0xb8, 0x91, 0x84, 0x85, 0x04, 0xb8, 0x98, 0xb3,
|
|
||||||
0x53, 0x2b, 0xa1, 0xb6, 0x81, 0x98, 0x42, 0x22, 0x5c, 0xac, 0x65, 0x89, 0x39, 0xa5, 0xa9, 0x12,
|
|
||||||
0x4c, 0x60, 0x31, 0x08, 0xc7, 0x8a, 0xc9, 0x82, 0xd1, 0xa9, 0x92, 0x4b, 0x3e, 0x33, 0x1f, 0xaf,
|
|
||||||
0xd5, 0x4e, 0xbc, 0x30, 0xbb, 0x03, 0x40, 0x52, 0x01, 0x8c, 0x51, 0xae, 0xe9, 0x99, 0x25, 0x19,
|
|
||||||
0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0x10, 0x5d, 0xba, 0x99, 0x79, 0xc5, 0x25, 0x45, 0xa5,
|
|
||||||
0xb9, 0xa9, 0x79, 0x25, 0x89, 0x25, 0x99, 0xf9, 0x79, 0xfa, 0x08, 0x03, 0x75, 0x21, 0x01, 0x99,
|
|
||||||
0x9e, 0x9a, 0xa7, 0x9b, 0x8e, 0x12, 0x9e, 0x49, 0x6c, 0x60, 0x19, 0x63, 0x40, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0x8e, 0x11, 0xaf, 0xda, 0x76, 0x01, 0x00, 0x00,
|
|
||||||
}
|
|
1543
vendor/github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1/trace.pb.go
generated
vendored
1543
vendor/github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1/trace.pb.go
generated
vendored
File diff suppressed because it is too large
Load Diff
358
vendor/github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1/trace_config.pb.go
generated
vendored
358
vendor/github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1/trace_config.pb.go
generated
vendored
|
@ -1,358 +0,0 @@
|
||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
|
||||||
// source: opencensus/proto/trace/v1/trace_config.proto
|
|
||||||
|
|
||||||
package v1
|
|
||||||
|
|
||||||
import (
|
|
||||||
fmt "fmt"
|
|
||||||
proto "github.com/golang/protobuf/proto"
|
|
||||||
math "math"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
|
||||||
var _ = proto.Marshal
|
|
||||||
var _ = fmt.Errorf
|
|
||||||
var _ = math.Inf
|
|
||||||
|
|
||||||
// This is a compile-time assertion to ensure that this generated file
|
|
||||||
// is compatible with the proto package it is being compiled against.
|
|
||||||
// A compilation error at this line likely means your copy of the
|
|
||||||
// proto package needs to be updated.
|
|
||||||
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
|
|
||||||
|
|
||||||
// How spans should be sampled:
|
|
||||||
// - Always off
|
|
||||||
// - Always on
|
|
||||||
// - Always follow the parent Span's decision (off if no parent).
|
|
||||||
type ConstantSampler_ConstantDecision int32
|
|
||||||
|
|
||||||
const (
|
|
||||||
ConstantSampler_ALWAYS_OFF ConstantSampler_ConstantDecision = 0
|
|
||||||
ConstantSampler_ALWAYS_ON ConstantSampler_ConstantDecision = 1
|
|
||||||
ConstantSampler_ALWAYS_PARENT ConstantSampler_ConstantDecision = 2
|
|
||||||
)
|
|
||||||
|
|
||||||
var ConstantSampler_ConstantDecision_name = map[int32]string{
|
|
||||||
0: "ALWAYS_OFF",
|
|
||||||
1: "ALWAYS_ON",
|
|
||||||
2: "ALWAYS_PARENT",
|
|
||||||
}
|
|
||||||
|
|
||||||
var ConstantSampler_ConstantDecision_value = map[string]int32{
|
|
||||||
"ALWAYS_OFF": 0,
|
|
||||||
"ALWAYS_ON": 1,
|
|
||||||
"ALWAYS_PARENT": 2,
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x ConstantSampler_ConstantDecision) String() string {
|
|
||||||
return proto.EnumName(ConstantSampler_ConstantDecision_name, int32(x))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ConstantSampler_ConstantDecision) EnumDescriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_5359209b41ff50c5, []int{2, 0}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Global configuration of the trace service. All fields must be specified, or
|
|
||||||
// the default (zero) values will be used for each type.
|
|
||||||
type TraceConfig struct {
|
|
||||||
// The global default sampler used to make decisions on span sampling.
|
|
||||||
//
|
|
||||||
// Types that are valid to be assigned to Sampler:
|
|
||||||
// *TraceConfig_ProbabilitySampler
|
|
||||||
// *TraceConfig_ConstantSampler
|
|
||||||
// *TraceConfig_RateLimitingSampler
|
|
||||||
Sampler isTraceConfig_Sampler `protobuf_oneof:"sampler"`
|
|
||||||
// The global default max number of attributes per span.
|
|
||||||
MaxNumberOfAttributes int64 `protobuf:"varint,4,opt,name=max_number_of_attributes,json=maxNumberOfAttributes,proto3" json:"max_number_of_attributes,omitempty"`
|
|
||||||
// The global default max number of annotation events per span.
|
|
||||||
MaxNumberOfAnnotations int64 `protobuf:"varint,5,opt,name=max_number_of_annotations,json=maxNumberOfAnnotations,proto3" json:"max_number_of_annotations,omitempty"`
|
|
||||||
// The global default max number of message events per span.
|
|
||||||
MaxNumberOfMessageEvents int64 `protobuf:"varint,6,opt,name=max_number_of_message_events,json=maxNumberOfMessageEvents,proto3" json:"max_number_of_message_events,omitempty"`
|
|
||||||
// The global default max number of link entries per span.
|
|
||||||
MaxNumberOfLinks int64 `protobuf:"varint,7,opt,name=max_number_of_links,json=maxNumberOfLinks,proto3" json:"max_number_of_links,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *TraceConfig) Reset() { *m = TraceConfig{} }
|
|
||||||
func (m *TraceConfig) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*TraceConfig) ProtoMessage() {}
|
|
||||||
func (*TraceConfig) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_5359209b41ff50c5, []int{0}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *TraceConfig) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_TraceConfig.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *TraceConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_TraceConfig.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *TraceConfig) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_TraceConfig.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *TraceConfig) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_TraceConfig.Size(m)
|
|
||||||
}
|
|
||||||
func (m *TraceConfig) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_TraceConfig.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_TraceConfig proto.InternalMessageInfo
|
|
||||||
|
|
||||||
type isTraceConfig_Sampler interface {
|
|
||||||
isTraceConfig_Sampler()
|
|
||||||
}
|
|
||||||
|
|
||||||
type TraceConfig_ProbabilitySampler struct {
|
|
||||||
ProbabilitySampler *ProbabilitySampler `protobuf:"bytes,1,opt,name=probability_sampler,json=probabilitySampler,proto3,oneof"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type TraceConfig_ConstantSampler struct {
|
|
||||||
ConstantSampler *ConstantSampler `protobuf:"bytes,2,opt,name=constant_sampler,json=constantSampler,proto3,oneof"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type TraceConfig_RateLimitingSampler struct {
|
|
||||||
RateLimitingSampler *RateLimitingSampler `protobuf:"bytes,3,opt,name=rate_limiting_sampler,json=rateLimitingSampler,proto3,oneof"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*TraceConfig_ProbabilitySampler) isTraceConfig_Sampler() {}
|
|
||||||
|
|
||||||
func (*TraceConfig_ConstantSampler) isTraceConfig_Sampler() {}
|
|
||||||
|
|
||||||
func (*TraceConfig_RateLimitingSampler) isTraceConfig_Sampler() {}
|
|
||||||
|
|
||||||
func (m *TraceConfig) GetSampler() isTraceConfig_Sampler {
|
|
||||||
if m != nil {
|
|
||||||
return m.Sampler
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *TraceConfig) GetProbabilitySampler() *ProbabilitySampler {
|
|
||||||
if x, ok := m.GetSampler().(*TraceConfig_ProbabilitySampler); ok {
|
|
||||||
return x.ProbabilitySampler
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *TraceConfig) GetConstantSampler() *ConstantSampler {
|
|
||||||
if x, ok := m.GetSampler().(*TraceConfig_ConstantSampler); ok {
|
|
||||||
return x.ConstantSampler
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *TraceConfig) GetRateLimitingSampler() *RateLimitingSampler {
|
|
||||||
if x, ok := m.GetSampler().(*TraceConfig_RateLimitingSampler); ok {
|
|
||||||
return x.RateLimitingSampler
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *TraceConfig) GetMaxNumberOfAttributes() int64 {
|
|
||||||
if m != nil {
|
|
||||||
return m.MaxNumberOfAttributes
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *TraceConfig) GetMaxNumberOfAnnotations() int64 {
|
|
||||||
if m != nil {
|
|
||||||
return m.MaxNumberOfAnnotations
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *TraceConfig) GetMaxNumberOfMessageEvents() int64 {
|
|
||||||
if m != nil {
|
|
||||||
return m.MaxNumberOfMessageEvents
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *TraceConfig) GetMaxNumberOfLinks() int64 {
|
|
||||||
if m != nil {
|
|
||||||
return m.MaxNumberOfLinks
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// XXX_OneofWrappers is for the internal use of the proto package.
|
|
||||||
func (*TraceConfig) XXX_OneofWrappers() []interface{} {
|
|
||||||
return []interface{}{
|
|
||||||
(*TraceConfig_ProbabilitySampler)(nil),
|
|
||||||
(*TraceConfig_ConstantSampler)(nil),
|
|
||||||
(*TraceConfig_RateLimitingSampler)(nil),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sampler that tries to uniformly sample traces with a given probability.
|
|
||||||
// The probability of sampling a trace is equal to that of the specified probability.
|
|
||||||
type ProbabilitySampler struct {
|
|
||||||
// The desired probability of sampling. Must be within [0.0, 1.0].
|
|
||||||
SamplingProbability float64 `protobuf:"fixed64,1,opt,name=samplingProbability,proto3" json:"samplingProbability,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ProbabilitySampler) Reset() { *m = ProbabilitySampler{} }
|
|
||||||
func (m *ProbabilitySampler) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*ProbabilitySampler) ProtoMessage() {}
|
|
||||||
func (*ProbabilitySampler) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_5359209b41ff50c5, []int{1}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ProbabilitySampler) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_ProbabilitySampler.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *ProbabilitySampler) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_ProbabilitySampler.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *ProbabilitySampler) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_ProbabilitySampler.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *ProbabilitySampler) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_ProbabilitySampler.Size(m)
|
|
||||||
}
|
|
||||||
func (m *ProbabilitySampler) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_ProbabilitySampler.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_ProbabilitySampler proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *ProbabilitySampler) GetSamplingProbability() float64 {
|
|
||||||
if m != nil {
|
|
||||||
return m.SamplingProbability
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sampler that always makes a constant decision on span sampling.
|
|
||||||
type ConstantSampler struct {
|
|
||||||
Decision ConstantSampler_ConstantDecision `protobuf:"varint,1,opt,name=decision,proto3,enum=opencensus.proto.trace.v1.ConstantSampler_ConstantDecision" json:"decision,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ConstantSampler) Reset() { *m = ConstantSampler{} }
|
|
||||||
func (m *ConstantSampler) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*ConstantSampler) ProtoMessage() {}
|
|
||||||
func (*ConstantSampler) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_5359209b41ff50c5, []int{2}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ConstantSampler) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_ConstantSampler.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *ConstantSampler) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_ConstantSampler.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *ConstantSampler) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_ConstantSampler.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *ConstantSampler) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_ConstantSampler.Size(m)
|
|
||||||
}
|
|
||||||
func (m *ConstantSampler) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_ConstantSampler.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_ConstantSampler proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *ConstantSampler) GetDecision() ConstantSampler_ConstantDecision {
|
|
||||||
if m != nil {
|
|
||||||
return m.Decision
|
|
||||||
}
|
|
||||||
return ConstantSampler_ALWAYS_OFF
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sampler that tries to sample with a rate per time window.
|
|
||||||
type RateLimitingSampler struct {
|
|
||||||
// Rate per second.
|
|
||||||
Qps int64 `protobuf:"varint,1,opt,name=qps,proto3" json:"qps,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *RateLimitingSampler) Reset() { *m = RateLimitingSampler{} }
|
|
||||||
func (m *RateLimitingSampler) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*RateLimitingSampler) ProtoMessage() {}
|
|
||||||
func (*RateLimitingSampler) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_5359209b41ff50c5, []int{3}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *RateLimitingSampler) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_RateLimitingSampler.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *RateLimitingSampler) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_RateLimitingSampler.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *RateLimitingSampler) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_RateLimitingSampler.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *RateLimitingSampler) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_RateLimitingSampler.Size(m)
|
|
||||||
}
|
|
||||||
func (m *RateLimitingSampler) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_RateLimitingSampler.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_RateLimitingSampler proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *RateLimitingSampler) GetQps() int64 {
|
|
||||||
if m != nil {
|
|
||||||
return m.Qps
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
proto.RegisterEnum("opencensus.proto.trace.v1.ConstantSampler_ConstantDecision", ConstantSampler_ConstantDecision_name, ConstantSampler_ConstantDecision_value)
|
|
||||||
proto.RegisterType((*TraceConfig)(nil), "opencensus.proto.trace.v1.TraceConfig")
|
|
||||||
proto.RegisterType((*ProbabilitySampler)(nil), "opencensus.proto.trace.v1.ProbabilitySampler")
|
|
||||||
proto.RegisterType((*ConstantSampler)(nil), "opencensus.proto.trace.v1.ConstantSampler")
|
|
||||||
proto.RegisterType((*RateLimitingSampler)(nil), "opencensus.proto.trace.v1.RateLimitingSampler")
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
proto.RegisterFile("opencensus/proto/trace/v1/trace_config.proto", fileDescriptor_5359209b41ff50c5)
|
|
||||||
}
|
|
||||||
|
|
||||||
var fileDescriptor_5359209b41ff50c5 = []byte{
|
|
||||||
// 486 bytes of a gzipped FileDescriptorProto
|
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xc1, 0x4e, 0xdb, 0x40,
|
|
||||||
0x10, 0x86, 0x31, 0xa1, 0x50, 0x06, 0x01, 0xee, 0x5a, 0x54, 0x46, 0xe2, 0x80, 0x7c, 0x29, 0xaa,
|
|
||||||
0x6a, 0xbb, 0xd0, 0x43, 0x55, 0x55, 0xaa, 0x94, 0x00, 0x51, 0x0f, 0x69, 0x88, 0x0c, 0x52, 0xd4,
|
|
||||||
0x5e, 0xdc, 0xb5, 0xd9, 0xb8, 0xab, 0xc6, 0xb3, 0xae, 0x77, 0x1d, 0xd1, 0x77, 0xe9, 0x43, 0xf4,
|
|
||||||
0x11, 0xab, 0xac, 0x5d, 0xdb, 0x49, 0x00, 0x71, 0xdb, 0xf9, 0xff, 0xf9, 0x7e, 0xaf, 0xbc, 0x33,
|
|
||||||
0xf0, 0x46, 0x64, 0x0c, 0x63, 0x86, 0xb2, 0x90, 0x7e, 0x96, 0x0b, 0x25, 0x7c, 0x95, 0xd3, 0x98,
|
|
||||||
0xf9, 0xb3, 0xd3, 0xf2, 0x10, 0xc6, 0x02, 0x27, 0x3c, 0xf1, 0xb4, 0x47, 0x0e, 0x9b, 0xee, 0x52,
|
|
||||||
0xf1, 0x74, 0x93, 0x37, 0x3b, 0x75, 0xfe, 0x6c, 0xc0, 0xce, 0xcd, 0xbc, 0x38, 0xd7, 0x00, 0xf9,
|
|
||||||
0x0e, 0x56, 0x96, 0x8b, 0x88, 0x46, 0x7c, 0xca, 0xd5, 0xef, 0x50, 0xd2, 0x34, 0x9b, 0xb2, 0xdc,
|
|
||||||
0x36, 0x8e, 0x8d, 0x93, 0x9d, 0x33, 0xd7, 0x7b, 0x30, 0xc8, 0x1b, 0x35, 0xd4, 0x75, 0x09, 0x7d,
|
|
||||||
0x5e, 0x0b, 0x48, 0xb6, 0xa2, 0x92, 0x31, 0x98, 0xb1, 0x40, 0xa9, 0x28, 0xaa, 0x3a, 0x7e, 0x5d,
|
|
||||||
0xc7, 0xbf, 0x7e, 0x24, 0xfe, 0xbc, 0x42, 0x9a, 0xec, 0xfd, 0x78, 0x51, 0x22, 0xb7, 0x70, 0x90,
|
|
||||||
0x53, 0xc5, 0xc2, 0x29, 0x4f, 0xb9, 0xe2, 0x98, 0xd4, 0xe9, 0x1d, 0x9d, 0xee, 0x3d, 0x92, 0x1e,
|
|
||||||
0x50, 0xc5, 0x06, 0x15, 0xd6, 0x7c, 0xc1, 0xca, 0x57, 0x65, 0xf2, 0x1e, 0xec, 0x94, 0xde, 0x85,
|
|
||||||
0x58, 0xa4, 0x11, 0xcb, 0x43, 0x31, 0x09, 0xa9, 0x52, 0x39, 0x8f, 0x0a, 0xc5, 0xa4, 0xbd, 0x71,
|
|
||||||
0x6c, 0x9c, 0x74, 0x82, 0x83, 0x94, 0xde, 0x0d, 0xb5, 0x7d, 0x35, 0xe9, 0xd6, 0x26, 0xf9, 0x00,
|
|
||||||
0x87, 0x4b, 0x20, 0xa2, 0x50, 0x54, 0x71, 0x81, 0xd2, 0x7e, 0xa6, 0xc9, 0x97, 0x6d, 0xb2, 0x71,
|
|
||||||
0xc9, 0x27, 0x38, 0x5a, 0x44, 0x53, 0x26, 0x25, 0x4d, 0x58, 0xc8, 0x66, 0x0c, 0x95, 0xb4, 0x37,
|
|
||||||
0x35, 0x6d, 0xb7, 0xe8, 0x2f, 0x65, 0xc3, 0xa5, 0xf6, 0x89, 0x0b, 0xd6, 0x22, 0x3f, 0xe5, 0xf8,
|
|
||||||
0x53, 0xda, 0x5b, 0x1a, 0x33, 0x5b, 0xd8, 0x60, 0xae, 0xf7, 0xb6, 0x61, 0xab, 0xfa, 0x75, 0x4e,
|
|
||||||
0x1f, 0xc8, 0xea, 0xc3, 0x92, 0xb7, 0x60, 0xe9, 0x06, 0x8e, 0x49, 0xcb, 0xd5, 0x43, 0x62, 0x04,
|
|
||||||
0xf7, 0x59, 0xce, 0x5f, 0x03, 0xf6, 0x97, 0x9e, 0x90, 0x8c, 0xe1, 0xf9, 0x2d, 0x8b, 0xb9, 0xe4,
|
|
||||||
0x02, 0x35, 0xba, 0x77, 0xf6, 0xf1, 0xe9, 0x03, 0x50, 0xd7, 0x17, 0x55, 0x44, 0x50, 0x87, 0x39,
|
|
||||||
0x17, 0x60, 0x2e, 0xbb, 0x64, 0x0f, 0xa0, 0x3b, 0x18, 0x77, 0xbf, 0x5e, 0x87, 0x57, 0xfd, 0xbe,
|
|
||||||
0xb9, 0x46, 0x76, 0x61, 0xfb, 0x7f, 0x3d, 0x34, 0x0d, 0xf2, 0x02, 0x76, 0xab, 0x72, 0xd4, 0x0d,
|
|
||||||
0x2e, 0x87, 0x37, 0xe6, 0xba, 0xf3, 0x0a, 0xac, 0x7b, 0xc6, 0x82, 0x98, 0xd0, 0xf9, 0x95, 0x49,
|
|
||||||
0x7d, 0xe1, 0x4e, 0x30, 0x3f, 0xf6, 0x66, 0x70, 0xc4, 0xc5, 0xc3, 0x37, 0xef, 0x99, 0xad, 0xfd,
|
|
||||||
0x1a, 0xcd, 0xad, 0x91, 0xf1, 0xad, 0x97, 0x70, 0xf5, 0xa3, 0x88, 0xbc, 0x58, 0xa4, 0x7e, 0x49,
|
|
||||||
0xb9, 0x1c, 0xa5, 0xca, 0x8b, 0x94, 0x61, 0xf9, 0xea, 0x7e, 0x13, 0xe8, 0x96, 0x1b, 0x9e, 0x30,
|
|
||||||
0x74, 0x93, 0x66, 0xd1, 0xa3, 0x4d, 0x2d, 0xbf, 0xfb, 0x17, 0x00, 0x00, 0xff, 0xff, 0x13, 0xe2,
|
|
||||||
0xd9, 0x56, 0x0c, 0x04, 0x00, 0x00,
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
117
vendor/github.com/golang/protobuf/protoc-gen-go/generator/internal/remap/remap.go
generated
vendored
117
vendor/github.com/golang/protobuf/protoc-gen-go/generator/internal/remap/remap.go
generated
vendored
|
@ -1,117 +0,0 @@
|
||||||
// Go support for Protocol Buffers - Google's data interchange format
|
|
||||||
//
|
|
||||||
// Copyright 2017 The Go Authors. All rights reserved.
|
|
||||||
// https://github.com/golang/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
// * Neither the name of Google Inc. nor the names of its
|
|
||||||
// contributors may be used to endorse or promote products derived from
|
|
||||||
// this software without specific prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
/*
|
|
||||||
Package remap handles tracking the locations of Go tokens in a source text
|
|
||||||
across a rewrite by the Go formatter.
|
|
||||||
*/
|
|
||||||
package remap
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"go/scanner"
|
|
||||||
"go/token"
|
|
||||||
)
|
|
||||||
|
|
||||||
// A Location represents a span of byte offsets in the source text.
|
|
||||||
type Location struct {
|
|
||||||
Pos, End int // End is exclusive
|
|
||||||
}
|
|
||||||
|
|
||||||
// A Map represents a mapping between token locations in an input source text
|
|
||||||
// and locations in the correspnding output text.
|
|
||||||
type Map map[Location]Location
|
|
||||||
|
|
||||||
// Find reports whether the specified span is recorded by m, and if so returns
|
|
||||||
// the new location it was mapped to. If the input span was not found, the
|
|
||||||
// returned location is the same as the input.
|
|
||||||
func (m Map) Find(pos, end int) (Location, bool) {
|
|
||||||
key := Location{
|
|
||||||
Pos: pos,
|
|
||||||
End: end,
|
|
||||||
}
|
|
||||||
if loc, ok := m[key]; ok {
|
|
||||||
return loc, true
|
|
||||||
}
|
|
||||||
return key, false
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m Map) add(opos, oend, npos, nend int) {
|
|
||||||
m[Location{Pos: opos, End: oend}] = Location{Pos: npos, End: nend}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Compute constructs a location mapping from input to output. An error is
|
|
||||||
// reported if any of the tokens of output cannot be mapped.
|
|
||||||
func Compute(input, output []byte) (Map, error) {
|
|
||||||
itok := tokenize(input)
|
|
||||||
otok := tokenize(output)
|
|
||||||
if len(itok) != len(otok) {
|
|
||||||
return nil, fmt.Errorf("wrong number of tokens, %d ≠ %d", len(itok), len(otok))
|
|
||||||
}
|
|
||||||
m := make(Map)
|
|
||||||
for i, ti := range itok {
|
|
||||||
to := otok[i]
|
|
||||||
if ti.Token != to.Token {
|
|
||||||
return nil, fmt.Errorf("token %d type mismatch: %s ≠ %s", i+1, ti, to)
|
|
||||||
}
|
|
||||||
m.add(ti.pos, ti.end, to.pos, to.end)
|
|
||||||
}
|
|
||||||
return m, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// tokinfo records the span and type of a source token.
|
|
||||||
type tokinfo struct {
|
|
||||||
pos, end int
|
|
||||||
token.Token
|
|
||||||
}
|
|
||||||
|
|
||||||
func tokenize(src []byte) []tokinfo {
|
|
||||||
fs := token.NewFileSet()
|
|
||||||
var s scanner.Scanner
|
|
||||||
s.Init(fs.AddFile("src", fs.Base(), len(src)), src, nil, scanner.ScanComments)
|
|
||||||
var info []tokinfo
|
|
||||||
for {
|
|
||||||
pos, next, lit := s.Scan()
|
|
||||||
switch next {
|
|
||||||
case token.SEMICOLON:
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
info = append(info, tokinfo{
|
|
||||||
pos: int(pos - 1),
|
|
||||||
end: int(pos + token.Pos(len(lit)) - 1),
|
|
||||||
Token: next,
|
|
||||||
})
|
|
||||||
if next == token.EOF {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return info
|
|
||||||
}
|
|
|
@ -1,369 +0,0 @@
|
||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
|
||||||
// source: google/protobuf/compiler/plugin.proto
|
|
||||||
|
|
||||||
/*
|
|
||||||
Package plugin_go is a generated protocol buffer package.
|
|
||||||
|
|
||||||
It is generated from these files:
|
|
||||||
google/protobuf/compiler/plugin.proto
|
|
||||||
|
|
||||||
It has these top-level messages:
|
|
||||||
Version
|
|
||||||
CodeGeneratorRequest
|
|
||||||
CodeGeneratorResponse
|
|
||||||
*/
|
|
||||||
package plugin_go
|
|
||||||
|
|
||||||
import proto "github.com/golang/protobuf/proto"
|
|
||||||
import fmt "fmt"
|
|
||||||
import math "math"
|
|
||||||
import google_protobuf "github.com/golang/protobuf/protoc-gen-go/descriptor"
|
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
|
||||||
var _ = proto.Marshal
|
|
||||||
var _ = fmt.Errorf
|
|
||||||
var _ = math.Inf
|
|
||||||
|
|
||||||
// This is a compile-time assertion to ensure that this generated file
|
|
||||||
// is compatible with the proto package it is being compiled against.
|
|
||||||
// A compilation error at this line likely means your copy of the
|
|
||||||
// proto package needs to be updated.
|
|
||||||
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
|
|
||||||
|
|
||||||
// The version number of protocol compiler.
|
|
||||||
type Version struct {
|
|
||||||
Major *int32 `protobuf:"varint,1,opt,name=major" json:"major,omitempty"`
|
|
||||||
Minor *int32 `protobuf:"varint,2,opt,name=minor" json:"minor,omitempty"`
|
|
||||||
Patch *int32 `protobuf:"varint,3,opt,name=patch" json:"patch,omitempty"`
|
|
||||||
// A suffix for alpha, beta or rc release, e.g., "alpha-1", "rc2". It should
|
|
||||||
// be empty for mainline stable releases.
|
|
||||||
Suffix *string `protobuf:"bytes,4,opt,name=suffix" json:"suffix,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Version) Reset() { *m = Version{} }
|
|
||||||
func (m *Version) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*Version) ProtoMessage() {}
|
|
||||||
func (*Version) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
|
|
||||||
func (m *Version) Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_Version.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *Version) Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_Version.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (dst *Version) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_Version.Merge(dst, src)
|
|
||||||
}
|
|
||||||
func (m *Version) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_Version.Size(m)
|
|
||||||
}
|
|
||||||
func (m *Version) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_Version.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_Version proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *Version) GetMajor() int32 {
|
|
||||||
if m != nil && m.Major != nil {
|
|
||||||
return *m.Major
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Version) GetMinor() int32 {
|
|
||||||
if m != nil && m.Minor != nil {
|
|
||||||
return *m.Minor
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Version) GetPatch() int32 {
|
|
||||||
if m != nil && m.Patch != nil {
|
|
||||||
return *m.Patch
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Version) GetSuffix() string {
|
|
||||||
if m != nil && m.Suffix != nil {
|
|
||||||
return *m.Suffix
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
// An encoded CodeGeneratorRequest is written to the plugin's stdin.
|
|
||||||
type CodeGeneratorRequest struct {
|
|
||||||
// The .proto files that were explicitly listed on the command-line. The
|
|
||||||
// code generator should generate code only for these files. Each file's
|
|
||||||
// descriptor will be included in proto_file, below.
|
|
||||||
FileToGenerate []string `protobuf:"bytes,1,rep,name=file_to_generate,json=fileToGenerate" json:"file_to_generate,omitempty"`
|
|
||||||
// The generator parameter passed on the command-line.
|
|
||||||
Parameter *string `protobuf:"bytes,2,opt,name=parameter" json:"parameter,omitempty"`
|
|
||||||
// FileDescriptorProtos for all files in files_to_generate and everything
|
|
||||||
// they import. The files will appear in topological order, so each file
|
|
||||||
// appears before any file that imports it.
|
|
||||||
//
|
|
||||||
// protoc guarantees that all proto_files will be written after
|
|
||||||
// the fields above, even though this is not technically guaranteed by the
|
|
||||||
// protobuf wire format. This theoretically could allow a plugin to stream
|
|
||||||
// in the FileDescriptorProtos and handle them one by one rather than read
|
|
||||||
// the entire set into memory at once. However, as of this writing, this
|
|
||||||
// is not similarly optimized on protoc's end -- it will store all fields in
|
|
||||||
// memory at once before sending them to the plugin.
|
|
||||||
//
|
|
||||||
// Type names of fields and extensions in the FileDescriptorProto are always
|
|
||||||
// fully qualified.
|
|
||||||
ProtoFile []*google_protobuf.FileDescriptorProto `protobuf:"bytes,15,rep,name=proto_file,json=protoFile" json:"proto_file,omitempty"`
|
|
||||||
// The version number of protocol compiler.
|
|
||||||
CompilerVersion *Version `protobuf:"bytes,3,opt,name=compiler_version,json=compilerVersion" json:"compiler_version,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CodeGeneratorRequest) Reset() { *m = CodeGeneratorRequest{} }
|
|
||||||
func (m *CodeGeneratorRequest) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*CodeGeneratorRequest) ProtoMessage() {}
|
|
||||||
func (*CodeGeneratorRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
|
|
||||||
func (m *CodeGeneratorRequest) Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_CodeGeneratorRequest.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *CodeGeneratorRequest) Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_CodeGeneratorRequest.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (dst *CodeGeneratorRequest) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_CodeGeneratorRequest.Merge(dst, src)
|
|
||||||
}
|
|
||||||
func (m *CodeGeneratorRequest) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_CodeGeneratorRequest.Size(m)
|
|
||||||
}
|
|
||||||
func (m *CodeGeneratorRequest) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_CodeGeneratorRequest.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_CodeGeneratorRequest proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *CodeGeneratorRequest) GetFileToGenerate() []string {
|
|
||||||
if m != nil {
|
|
||||||
return m.FileToGenerate
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CodeGeneratorRequest) GetParameter() string {
|
|
||||||
if m != nil && m.Parameter != nil {
|
|
||||||
return *m.Parameter
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CodeGeneratorRequest) GetProtoFile() []*google_protobuf.FileDescriptorProto {
|
|
||||||
if m != nil {
|
|
||||||
return m.ProtoFile
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CodeGeneratorRequest) GetCompilerVersion() *Version {
|
|
||||||
if m != nil {
|
|
||||||
return m.CompilerVersion
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// The plugin writes an encoded CodeGeneratorResponse to stdout.
|
|
||||||
type CodeGeneratorResponse struct {
|
|
||||||
// Error message. If non-empty, code generation failed. The plugin process
|
|
||||||
// should exit with status code zero even if it reports an error in this way.
|
|
||||||
//
|
|
||||||
// This should be used to indicate errors in .proto files which prevent the
|
|
||||||
// code generator from generating correct code. Errors which indicate a
|
|
||||||
// problem in protoc itself -- such as the input CodeGeneratorRequest being
|
|
||||||
// unparseable -- should be reported by writing a message to stderr and
|
|
||||||
// exiting with a non-zero status code.
|
|
||||||
Error *string `protobuf:"bytes,1,opt,name=error" json:"error,omitempty"`
|
|
||||||
File []*CodeGeneratorResponse_File `protobuf:"bytes,15,rep,name=file" json:"file,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CodeGeneratorResponse) Reset() { *m = CodeGeneratorResponse{} }
|
|
||||||
func (m *CodeGeneratorResponse) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*CodeGeneratorResponse) ProtoMessage() {}
|
|
||||||
func (*CodeGeneratorResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
|
|
||||||
func (m *CodeGeneratorResponse) Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_CodeGeneratorResponse.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *CodeGeneratorResponse) Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_CodeGeneratorResponse.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (dst *CodeGeneratorResponse) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_CodeGeneratorResponse.Merge(dst, src)
|
|
||||||
}
|
|
||||||
func (m *CodeGeneratorResponse) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_CodeGeneratorResponse.Size(m)
|
|
||||||
}
|
|
||||||
func (m *CodeGeneratorResponse) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_CodeGeneratorResponse.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_CodeGeneratorResponse proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *CodeGeneratorResponse) GetError() string {
|
|
||||||
if m != nil && m.Error != nil {
|
|
||||||
return *m.Error
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CodeGeneratorResponse) GetFile() []*CodeGeneratorResponse_File {
|
|
||||||
if m != nil {
|
|
||||||
return m.File
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Represents a single generated file.
|
|
||||||
type CodeGeneratorResponse_File struct {
|
|
||||||
// The file name, relative to the output directory. The name must not
|
|
||||||
// contain "." or ".." components and must be relative, not be absolute (so,
|
|
||||||
// the file cannot lie outside the output directory). "/" must be used as
|
|
||||||
// the path separator, not "\".
|
|
||||||
//
|
|
||||||
// If the name is omitted, the content will be appended to the previous
|
|
||||||
// file. This allows the generator to break large files into small chunks,
|
|
||||||
// and allows the generated text to be streamed back to protoc so that large
|
|
||||||
// files need not reside completely in memory at one time. Note that as of
|
|
||||||
// this writing protoc does not optimize for this -- it will read the entire
|
|
||||||
// CodeGeneratorResponse before writing files to disk.
|
|
||||||
Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
|
|
||||||
// If non-empty, indicates that the named file should already exist, and the
|
|
||||||
// content here is to be inserted into that file at a defined insertion
|
|
||||||
// point. This feature allows a code generator to extend the output
|
|
||||||
// produced by another code generator. The original generator may provide
|
|
||||||
// insertion points by placing special annotations in the file that look
|
|
||||||
// like:
|
|
||||||
// @@protoc_insertion_point(NAME)
|
|
||||||
// The annotation can have arbitrary text before and after it on the line,
|
|
||||||
// which allows it to be placed in a comment. NAME should be replaced with
|
|
||||||
// an identifier naming the point -- this is what other generators will use
|
|
||||||
// as the insertion_point. Code inserted at this point will be placed
|
|
||||||
// immediately above the line containing the insertion point (thus multiple
|
|
||||||
// insertions to the same point will come out in the order they were added).
|
|
||||||
// The double-@ is intended to make it unlikely that the generated code
|
|
||||||
// could contain things that look like insertion points by accident.
|
|
||||||
//
|
|
||||||
// For example, the C++ code generator places the following line in the
|
|
||||||
// .pb.h files that it generates:
|
|
||||||
// // @@protoc_insertion_point(namespace_scope)
|
|
||||||
// This line appears within the scope of the file's package namespace, but
|
|
||||||
// outside of any particular class. Another plugin can then specify the
|
|
||||||
// insertion_point "namespace_scope" to generate additional classes or
|
|
||||||
// other declarations that should be placed in this scope.
|
|
||||||
//
|
|
||||||
// Note that if the line containing the insertion point begins with
|
|
||||||
// whitespace, the same whitespace will be added to every line of the
|
|
||||||
// inserted text. This is useful for languages like Python, where
|
|
||||||
// indentation matters. In these languages, the insertion point comment
|
|
||||||
// should be indented the same amount as any inserted code will need to be
|
|
||||||
// in order to work correctly in that context.
|
|
||||||
//
|
|
||||||
// The code generator that generates the initial file and the one which
|
|
||||||
// inserts into it must both run as part of a single invocation of protoc.
|
|
||||||
// Code generators are executed in the order in which they appear on the
|
|
||||||
// command line.
|
|
||||||
//
|
|
||||||
// If |insertion_point| is present, |name| must also be present.
|
|
||||||
InsertionPoint *string `protobuf:"bytes,2,opt,name=insertion_point,json=insertionPoint" json:"insertion_point,omitempty"`
|
|
||||||
// The file contents.
|
|
||||||
Content *string `protobuf:"bytes,15,opt,name=content" json:"content,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CodeGeneratorResponse_File) Reset() { *m = CodeGeneratorResponse_File{} }
|
|
||||||
func (m *CodeGeneratorResponse_File) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*CodeGeneratorResponse_File) ProtoMessage() {}
|
|
||||||
func (*CodeGeneratorResponse_File) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} }
|
|
||||||
func (m *CodeGeneratorResponse_File) Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_CodeGeneratorResponse_File.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *CodeGeneratorResponse_File) Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_CodeGeneratorResponse_File.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (dst *CodeGeneratorResponse_File) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_CodeGeneratorResponse_File.Merge(dst, src)
|
|
||||||
}
|
|
||||||
func (m *CodeGeneratorResponse_File) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_CodeGeneratorResponse_File.Size(m)
|
|
||||||
}
|
|
||||||
func (m *CodeGeneratorResponse_File) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_CodeGeneratorResponse_File.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_CodeGeneratorResponse_File proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *CodeGeneratorResponse_File) GetName() string {
|
|
||||||
if m != nil && m.Name != nil {
|
|
||||||
return *m.Name
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CodeGeneratorResponse_File) GetInsertionPoint() string {
|
|
||||||
if m != nil && m.InsertionPoint != nil {
|
|
||||||
return *m.InsertionPoint
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CodeGeneratorResponse_File) GetContent() string {
|
|
||||||
if m != nil && m.Content != nil {
|
|
||||||
return *m.Content
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
proto.RegisterType((*Version)(nil), "google.protobuf.compiler.Version")
|
|
||||||
proto.RegisterType((*CodeGeneratorRequest)(nil), "google.protobuf.compiler.CodeGeneratorRequest")
|
|
||||||
proto.RegisterType((*CodeGeneratorResponse)(nil), "google.protobuf.compiler.CodeGeneratorResponse")
|
|
||||||
proto.RegisterType((*CodeGeneratorResponse_File)(nil), "google.protobuf.compiler.CodeGeneratorResponse.File")
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() { proto.RegisterFile("google/protobuf/compiler/plugin.proto", fileDescriptor0) }
|
|
||||||
|
|
||||||
var fileDescriptor0 = []byte{
|
|
||||||
// 417 bytes of a gzipped FileDescriptorProto
|
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xcf, 0x6a, 0x14, 0x41,
|
|
||||||
0x10, 0xc6, 0x19, 0x77, 0x63, 0x98, 0x8a, 0x64, 0x43, 0x13, 0xa5, 0x09, 0x39, 0x8c, 0x8b, 0xe2,
|
|
||||||
0x5c, 0x32, 0x0b, 0xc1, 0x8b, 0x78, 0x4b, 0x44, 0x3d, 0x78, 0x58, 0x1a, 0xf1, 0x20, 0xc8, 0x30,
|
|
||||||
0x99, 0xd4, 0x74, 0x5a, 0x66, 0xba, 0xc6, 0xee, 0x1e, 0xf1, 0x49, 0x7d, 0x0f, 0xdf, 0x40, 0xfa,
|
|
||||||
0xcf, 0x24, 0xb2, 0xb8, 0xa7, 0xee, 0xef, 0x57, 0xd5, 0xd5, 0x55, 0x1f, 0x05, 0x2f, 0x25, 0x91,
|
|
||||||
0xec, 0x71, 0x33, 0x1a, 0x72, 0x74, 0x33, 0x75, 0x9b, 0x96, 0x86, 0x51, 0xf5, 0x68, 0x36, 0x63,
|
|
||||||
0x3f, 0x49, 0xa5, 0xab, 0x10, 0x60, 0x3c, 0xa6, 0x55, 0x73, 0x5a, 0x35, 0xa7, 0x9d, 0x15, 0xbb,
|
|
||||||
0x05, 0x6e, 0xd1, 0xb6, 0x46, 0x8d, 0x8e, 0x4c, 0xcc, 0x5e, 0xb7, 0x70, 0xf8, 0x05, 0x8d, 0x55,
|
|
||||||
0xa4, 0xd9, 0x29, 0x1c, 0x0c, 0xcd, 0x77, 0x32, 0x3c, 0x2b, 0xb2, 0xf2, 0x40, 0x44, 0x11, 0xa8,
|
|
||||||
0xd2, 0x64, 0xf8, 0xa3, 0x44, 0xbd, 0xf0, 0x74, 0x6c, 0x5c, 0x7b, 0xc7, 0x17, 0x91, 0x06, 0xc1,
|
|
||||||
0x9e, 0xc1, 0x63, 0x3b, 0x75, 0x9d, 0xfa, 0xc5, 0x97, 0x45, 0x56, 0xe6, 0x22, 0xa9, 0xf5, 0x9f,
|
|
||||||
0x0c, 0x4e, 0xaf, 0xe9, 0x16, 0x3f, 0xa0, 0x46, 0xd3, 0x38, 0x32, 0x02, 0x7f, 0x4c, 0x68, 0x1d,
|
|
||||||
0x2b, 0xe1, 0xa4, 0x53, 0x3d, 0xd6, 0x8e, 0x6a, 0x19, 0x63, 0xc8, 0xb3, 0x62, 0x51, 0xe6, 0xe2,
|
|
||||||
0xd8, 0xf3, 0xcf, 0x94, 0x5e, 0x20, 0x3b, 0x87, 0x7c, 0x6c, 0x4c, 0x33, 0xa0, 0xc3, 0xd8, 0x4a,
|
|
||||||
0x2e, 0x1e, 0x00, 0xbb, 0x06, 0x08, 0xe3, 0xd4, 0xfe, 0x15, 0x5f, 0x15, 0x8b, 0xf2, 0xe8, 0xf2,
|
|
||||||
0x45, 0xb5, 0x6b, 0xcb, 0x7b, 0xd5, 0xe3, 0xbb, 0x7b, 0x03, 0xb6, 0x1e, 0x8b, 0x3c, 0x44, 0x7d,
|
|
||||||
0x84, 0x7d, 0x82, 0x93, 0xd9, 0xb8, 0xfa, 0x67, 0xf4, 0x24, 0x8c, 0x77, 0x74, 0xf9, 0xbc, 0xda,
|
|
||||||
0xe7, 0x70, 0x95, 0xcc, 0x13, 0xab, 0x99, 0x24, 0xb0, 0xfe, 0x9d, 0xc1, 0xd3, 0x9d, 0x99, 0xed,
|
|
||||||
0x48, 0xda, 0xa2, 0xf7, 0x0e, 0x8d, 0x49, 0x3e, 0xe7, 0x22, 0x0a, 0xf6, 0x11, 0x96, 0xff, 0x34,
|
|
||||||
0xff, 0x7a, 0xff, 0x8f, 0xff, 0x2d, 0x1a, 0x66, 0x13, 0xa1, 0xc2, 0xd9, 0x37, 0x58, 0x86, 0x79,
|
|
||||||
0x18, 0x2c, 0x75, 0x33, 0x60, 0xfa, 0x26, 0xdc, 0xd9, 0x2b, 0x58, 0x29, 0x6d, 0xd1, 0x38, 0x45,
|
|
||||||
0xba, 0x1e, 0x49, 0x69, 0x97, 0xcc, 0x3c, 0xbe, 0xc7, 0x5b, 0x4f, 0x19, 0x87, 0xc3, 0x96, 0xb4,
|
|
||||||
0x43, 0xed, 0xf8, 0x2a, 0x24, 0xcc, 0xf2, 0x4a, 0xc2, 0x79, 0x4b, 0xc3, 0xde, 0xfe, 0xae, 0x9e,
|
|
||||||
0x6c, 0xc3, 0x6e, 0x06, 0x7b, 0xed, 0xd7, 0x37, 0x52, 0xb9, 0xbb, 0xe9, 0xc6, 0x87, 0x37, 0x92,
|
|
||||||
0xfa, 0x46, 0xcb, 0x87, 0x65, 0x0c, 0x97, 0xf6, 0x42, 0xa2, 0xbe, 0x90, 0x94, 0x56, 0xfa, 0x6d,
|
|
||||||
0x3c, 0x6a, 0x49, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xf7, 0x15, 0x40, 0xc5, 0xfe, 0x02, 0x00,
|
|
||||||
0x00,
|
|
||||||
}
|
|
|
@ -1,83 +0,0 @@
|
||||||
// Code generated by protoc-gen-go.
|
|
||||||
// source: google/protobuf/compiler/plugin.proto
|
|
||||||
// DO NOT EDIT!
|
|
||||||
|
|
||||||
package google_protobuf_compiler
|
|
||||||
|
|
||||||
import proto "github.com/golang/protobuf/proto"
|
|
||||||
import "math"
|
|
||||||
import google_protobuf "github.com/golang/protobuf/protoc-gen-go/descriptor"
|
|
||||||
|
|
||||||
// Reference proto and math imports to suppress error if they are not otherwise used.
|
|
||||||
var _ = proto.GetString
|
|
||||||
var _ = math.Inf
|
|
||||||
|
|
||||||
type CodeGeneratorRequest struct {
|
|
||||||
FileToGenerate []string `protobuf:"bytes,1,rep,name=file_to_generate" json:"file_to_generate,omitempty"`
|
|
||||||
Parameter *string `protobuf:"bytes,2,opt,name=parameter" json:"parameter,omitempty"`
|
|
||||||
ProtoFile []*google_protobuf.FileDescriptorProto `protobuf:"bytes,15,rep,name=proto_file" json:"proto_file,omitempty"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *CodeGeneratorRequest) Reset() { *this = CodeGeneratorRequest{} }
|
|
||||||
func (this *CodeGeneratorRequest) String() string { return proto.CompactTextString(this) }
|
|
||||||
func (*CodeGeneratorRequest) ProtoMessage() {}
|
|
||||||
|
|
||||||
func (this *CodeGeneratorRequest) GetParameter() string {
|
|
||||||
if this != nil && this.Parameter != nil {
|
|
||||||
return *this.Parameter
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
type CodeGeneratorResponse struct {
|
|
||||||
Error *string `protobuf:"bytes,1,opt,name=error" json:"error,omitempty"`
|
|
||||||
File []*CodeGeneratorResponse_File `protobuf:"bytes,15,rep,name=file" json:"file,omitempty"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *CodeGeneratorResponse) Reset() { *this = CodeGeneratorResponse{} }
|
|
||||||
func (this *CodeGeneratorResponse) String() string { return proto.CompactTextString(this) }
|
|
||||||
func (*CodeGeneratorResponse) ProtoMessage() {}
|
|
||||||
|
|
||||||
func (this *CodeGeneratorResponse) GetError() string {
|
|
||||||
if this != nil && this.Error != nil {
|
|
||||||
return *this.Error
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
type CodeGeneratorResponse_File struct {
|
|
||||||
Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
|
|
||||||
InsertionPoint *string `protobuf:"bytes,2,opt,name=insertion_point" json:"insertion_point,omitempty"`
|
|
||||||
Content *string `protobuf:"bytes,15,opt,name=content" json:"content,omitempty"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *CodeGeneratorResponse_File) Reset() { *this = CodeGeneratorResponse_File{} }
|
|
||||||
func (this *CodeGeneratorResponse_File) String() string { return proto.CompactTextString(this) }
|
|
||||||
func (*CodeGeneratorResponse_File) ProtoMessage() {}
|
|
||||||
|
|
||||||
func (this *CodeGeneratorResponse_File) GetName() string {
|
|
||||||
if this != nil && this.Name != nil {
|
|
||||||
return *this.Name
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *CodeGeneratorResponse_File) GetInsertionPoint() string {
|
|
||||||
if this != nil && this.InsertionPoint != nil {
|
|
||||||
return *this.InsertionPoint
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *CodeGeneratorResponse_File) GetContent() string {
|
|
||||||
if this != nil && this.Content != nil {
|
|
||||||
return *this.Content
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
}
|
|
|
@ -1,167 +0,0 @@
|
||||||
// Protocol Buffers - Google's data interchange format
|
|
||||||
// Copyright 2008 Google Inc. All rights reserved.
|
|
||||||
// https://developers.google.com/protocol-buffers/
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
// * Neither the name of Google Inc. nor the names of its
|
|
||||||
// contributors may be used to endorse or promote products derived from
|
|
||||||
// this software without specific prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
// Author: kenton@google.com (Kenton Varda)
|
|
||||||
//
|
|
||||||
// WARNING: The plugin interface is currently EXPERIMENTAL and is subject to
|
|
||||||
// change.
|
|
||||||
//
|
|
||||||
// protoc (aka the Protocol Compiler) can be extended via plugins. A plugin is
|
|
||||||
// just a program that reads a CodeGeneratorRequest from stdin and writes a
|
|
||||||
// CodeGeneratorResponse to stdout.
|
|
||||||
//
|
|
||||||
// Plugins written using C++ can use google/protobuf/compiler/plugin.h instead
|
|
||||||
// of dealing with the raw protocol defined here.
|
|
||||||
//
|
|
||||||
// A plugin executable needs only to be placed somewhere in the path. The
|
|
||||||
// plugin should be named "protoc-gen-$NAME", and will then be used when the
|
|
||||||
// flag "--${NAME}_out" is passed to protoc.
|
|
||||||
|
|
||||||
syntax = "proto2";
|
|
||||||
package google.protobuf.compiler;
|
|
||||||
option java_package = "com.google.protobuf.compiler";
|
|
||||||
option java_outer_classname = "PluginProtos";
|
|
||||||
|
|
||||||
option go_package = "github.com/golang/protobuf/protoc-gen-go/plugin;plugin_go";
|
|
||||||
|
|
||||||
import "google/protobuf/descriptor.proto";
|
|
||||||
|
|
||||||
// The version number of protocol compiler.
|
|
||||||
message Version {
|
|
||||||
optional int32 major = 1;
|
|
||||||
optional int32 minor = 2;
|
|
||||||
optional int32 patch = 3;
|
|
||||||
// A suffix for alpha, beta or rc release, e.g., "alpha-1", "rc2". It should
|
|
||||||
// be empty for mainline stable releases.
|
|
||||||
optional string suffix = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
// An encoded CodeGeneratorRequest is written to the plugin's stdin.
|
|
||||||
message CodeGeneratorRequest {
|
|
||||||
// The .proto files that were explicitly listed on the command-line. The
|
|
||||||
// code generator should generate code only for these files. Each file's
|
|
||||||
// descriptor will be included in proto_file, below.
|
|
||||||
repeated string file_to_generate = 1;
|
|
||||||
|
|
||||||
// The generator parameter passed on the command-line.
|
|
||||||
optional string parameter = 2;
|
|
||||||
|
|
||||||
// FileDescriptorProtos for all files in files_to_generate and everything
|
|
||||||
// they import. The files will appear in topological order, so each file
|
|
||||||
// appears before any file that imports it.
|
|
||||||
//
|
|
||||||
// protoc guarantees that all proto_files will be written after
|
|
||||||
// the fields above, even though this is not technically guaranteed by the
|
|
||||||
// protobuf wire format. This theoretically could allow a plugin to stream
|
|
||||||
// in the FileDescriptorProtos and handle them one by one rather than read
|
|
||||||
// the entire set into memory at once. However, as of this writing, this
|
|
||||||
// is not similarly optimized on protoc's end -- it will store all fields in
|
|
||||||
// memory at once before sending them to the plugin.
|
|
||||||
//
|
|
||||||
// Type names of fields and extensions in the FileDescriptorProto are always
|
|
||||||
// fully qualified.
|
|
||||||
repeated FileDescriptorProto proto_file = 15;
|
|
||||||
|
|
||||||
// The version number of protocol compiler.
|
|
||||||
optional Version compiler_version = 3;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// The plugin writes an encoded CodeGeneratorResponse to stdout.
|
|
||||||
message CodeGeneratorResponse {
|
|
||||||
// Error message. If non-empty, code generation failed. The plugin process
|
|
||||||
// should exit with status code zero even if it reports an error in this way.
|
|
||||||
//
|
|
||||||
// This should be used to indicate errors in .proto files which prevent the
|
|
||||||
// code generator from generating correct code. Errors which indicate a
|
|
||||||
// problem in protoc itself -- such as the input CodeGeneratorRequest being
|
|
||||||
// unparseable -- should be reported by writing a message to stderr and
|
|
||||||
// exiting with a non-zero status code.
|
|
||||||
optional string error = 1;
|
|
||||||
|
|
||||||
// Represents a single generated file.
|
|
||||||
message File {
|
|
||||||
// The file name, relative to the output directory. The name must not
|
|
||||||
// contain "." or ".." components and must be relative, not be absolute (so,
|
|
||||||
// the file cannot lie outside the output directory). "/" must be used as
|
|
||||||
// the path separator, not "\".
|
|
||||||
//
|
|
||||||
// If the name is omitted, the content will be appended to the previous
|
|
||||||
// file. This allows the generator to break large files into small chunks,
|
|
||||||
// and allows the generated text to be streamed back to protoc so that large
|
|
||||||
// files need not reside completely in memory at one time. Note that as of
|
|
||||||
// this writing protoc does not optimize for this -- it will read the entire
|
|
||||||
// CodeGeneratorResponse before writing files to disk.
|
|
||||||
optional string name = 1;
|
|
||||||
|
|
||||||
// If non-empty, indicates that the named file should already exist, and the
|
|
||||||
// content here is to be inserted into that file at a defined insertion
|
|
||||||
// point. This feature allows a code generator to extend the output
|
|
||||||
// produced by another code generator. The original generator may provide
|
|
||||||
// insertion points by placing special annotations in the file that look
|
|
||||||
// like:
|
|
||||||
// @@protoc_insertion_point(NAME)
|
|
||||||
// The annotation can have arbitrary text before and after it on the line,
|
|
||||||
// which allows it to be placed in a comment. NAME should be replaced with
|
|
||||||
// an identifier naming the point -- this is what other generators will use
|
|
||||||
// as the insertion_point. Code inserted at this point will be placed
|
|
||||||
// immediately above the line containing the insertion point (thus multiple
|
|
||||||
// insertions to the same point will come out in the order they were added).
|
|
||||||
// The double-@ is intended to make it unlikely that the generated code
|
|
||||||
// could contain things that look like insertion points by accident.
|
|
||||||
//
|
|
||||||
// For example, the C++ code generator places the following line in the
|
|
||||||
// .pb.h files that it generates:
|
|
||||||
// // @@protoc_insertion_point(namespace_scope)
|
|
||||||
// This line appears within the scope of the file's package namespace, but
|
|
||||||
// outside of any particular class. Another plugin can then specify the
|
|
||||||
// insertion_point "namespace_scope" to generate additional classes or
|
|
||||||
// other declarations that should be placed in this scope.
|
|
||||||
//
|
|
||||||
// Note that if the line containing the insertion point begins with
|
|
||||||
// whitespace, the same whitespace will be added to every line of the
|
|
||||||
// inserted text. This is useful for languages like Python, where
|
|
||||||
// indentation matters. In these languages, the insertion point comment
|
|
||||||
// should be indented the same amount as any inserted code will need to be
|
|
||||||
// in order to work correctly in that context.
|
|
||||||
//
|
|
||||||
// The code generator that generates the initial file and the one which
|
|
||||||
// inserts into it must both run as part of a single invocation of protoc.
|
|
||||||
// Code generators are executed in the order in which they appear on the
|
|
||||||
// command line.
|
|
||||||
//
|
|
||||||
// If |insertion_point| is present, |name| must also be present.
|
|
||||||
optional string insertion_point = 2;
|
|
||||||
|
|
||||||
// The file contents.
|
|
||||||
optional string content = 15;
|
|
||||||
}
|
|
||||||
repeated File file = 15;
|
|
||||||
}
|
|
|
@ -1,336 +0,0 @@
|
||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
|
||||||
// source: google/protobuf/struct.proto
|
|
||||||
|
|
||||||
package structpb
|
|
||||||
|
|
||||||
import (
|
|
||||||
fmt "fmt"
|
|
||||||
proto "github.com/golang/protobuf/proto"
|
|
||||||
math "math"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
|
||||||
var _ = proto.Marshal
|
|
||||||
var _ = fmt.Errorf
|
|
||||||
var _ = math.Inf
|
|
||||||
|
|
||||||
// This is a compile-time assertion to ensure that this generated file
|
|
||||||
// is compatible with the proto package it is being compiled against.
|
|
||||||
// A compilation error at this line likely means your copy of the
|
|
||||||
// proto package needs to be updated.
|
|
||||||
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
|
|
||||||
|
|
||||||
// `NullValue` is a singleton enumeration to represent the null value for the
|
|
||||||
// `Value` type union.
|
|
||||||
//
|
|
||||||
// The JSON representation for `NullValue` is JSON `null`.
|
|
||||||
type NullValue int32
|
|
||||||
|
|
||||||
const (
|
|
||||||
// Null value.
|
|
||||||
NullValue_NULL_VALUE NullValue = 0
|
|
||||||
)
|
|
||||||
|
|
||||||
var NullValue_name = map[int32]string{
|
|
||||||
0: "NULL_VALUE",
|
|
||||||
}
|
|
||||||
|
|
||||||
var NullValue_value = map[string]int32{
|
|
||||||
"NULL_VALUE": 0,
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x NullValue) String() string {
|
|
||||||
return proto.EnumName(NullValue_name, int32(x))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (NullValue) EnumDescriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_df322afd6c9fb402, []int{0}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (NullValue) XXX_WellKnownType() string { return "NullValue" }
|
|
||||||
|
|
||||||
// `Struct` represents a structured data value, consisting of fields
|
|
||||||
// which map to dynamically typed values. In some languages, `Struct`
|
|
||||||
// might be supported by a native representation. For example, in
|
|
||||||
// scripting languages like JS a struct is represented as an
|
|
||||||
// object. The details of that representation are described together
|
|
||||||
// with the proto support for the language.
|
|
||||||
//
|
|
||||||
// The JSON representation for `Struct` is JSON object.
|
|
||||||
type Struct struct {
|
|
||||||
// Unordered map of dynamically typed values.
|
|
||||||
Fields map[string]*Value `protobuf:"bytes,1,rep,name=fields,proto3" json:"fields,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Struct) Reset() { *m = Struct{} }
|
|
||||||
func (m *Struct) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*Struct) ProtoMessage() {}
|
|
||||||
func (*Struct) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_df322afd6c9fb402, []int{0}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*Struct) XXX_WellKnownType() string { return "Struct" }
|
|
||||||
|
|
||||||
func (m *Struct) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_Struct.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *Struct) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_Struct.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *Struct) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_Struct.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *Struct) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_Struct.Size(m)
|
|
||||||
}
|
|
||||||
func (m *Struct) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_Struct.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_Struct proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *Struct) GetFields() map[string]*Value {
|
|
||||||
if m != nil {
|
|
||||||
return m.Fields
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// `Value` represents a dynamically typed value which can be either
|
|
||||||
// null, a number, a string, a boolean, a recursive struct value, or a
|
|
||||||
// list of values. A producer of value is expected to set one of that
|
|
||||||
// variants, absence of any variant indicates an error.
|
|
||||||
//
|
|
||||||
// The JSON representation for `Value` is JSON value.
|
|
||||||
type Value struct {
|
|
||||||
// The kind of value.
|
|
||||||
//
|
|
||||||
// Types that are valid to be assigned to Kind:
|
|
||||||
// *Value_NullValue
|
|
||||||
// *Value_NumberValue
|
|
||||||
// *Value_StringValue
|
|
||||||
// *Value_BoolValue
|
|
||||||
// *Value_StructValue
|
|
||||||
// *Value_ListValue
|
|
||||||
Kind isValue_Kind `protobuf_oneof:"kind"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Value) Reset() { *m = Value{} }
|
|
||||||
func (m *Value) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*Value) ProtoMessage() {}
|
|
||||||
func (*Value) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_df322afd6c9fb402, []int{1}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*Value) XXX_WellKnownType() string { return "Value" }
|
|
||||||
|
|
||||||
func (m *Value) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_Value.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *Value) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_Value.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *Value) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_Value.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *Value) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_Value.Size(m)
|
|
||||||
}
|
|
||||||
func (m *Value) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_Value.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_Value proto.InternalMessageInfo
|
|
||||||
|
|
||||||
type isValue_Kind interface {
|
|
||||||
isValue_Kind()
|
|
||||||
}
|
|
||||||
|
|
||||||
type Value_NullValue struct {
|
|
||||||
NullValue NullValue `protobuf:"varint,1,opt,name=null_value,json=nullValue,proto3,enum=google.protobuf.NullValue,oneof"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type Value_NumberValue struct {
|
|
||||||
NumberValue float64 `protobuf:"fixed64,2,opt,name=number_value,json=numberValue,proto3,oneof"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type Value_StringValue struct {
|
|
||||||
StringValue string `protobuf:"bytes,3,opt,name=string_value,json=stringValue,proto3,oneof"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type Value_BoolValue struct {
|
|
||||||
BoolValue bool `protobuf:"varint,4,opt,name=bool_value,json=boolValue,proto3,oneof"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type Value_StructValue struct {
|
|
||||||
StructValue *Struct `protobuf:"bytes,5,opt,name=struct_value,json=structValue,proto3,oneof"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type Value_ListValue struct {
|
|
||||||
ListValue *ListValue `protobuf:"bytes,6,opt,name=list_value,json=listValue,proto3,oneof"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*Value_NullValue) isValue_Kind() {}
|
|
||||||
|
|
||||||
func (*Value_NumberValue) isValue_Kind() {}
|
|
||||||
|
|
||||||
func (*Value_StringValue) isValue_Kind() {}
|
|
||||||
|
|
||||||
func (*Value_BoolValue) isValue_Kind() {}
|
|
||||||
|
|
||||||
func (*Value_StructValue) isValue_Kind() {}
|
|
||||||
|
|
||||||
func (*Value_ListValue) isValue_Kind() {}
|
|
||||||
|
|
||||||
func (m *Value) GetKind() isValue_Kind {
|
|
||||||
if m != nil {
|
|
||||||
return m.Kind
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Value) GetNullValue() NullValue {
|
|
||||||
if x, ok := m.GetKind().(*Value_NullValue); ok {
|
|
||||||
return x.NullValue
|
|
||||||
}
|
|
||||||
return NullValue_NULL_VALUE
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Value) GetNumberValue() float64 {
|
|
||||||
if x, ok := m.GetKind().(*Value_NumberValue); ok {
|
|
||||||
return x.NumberValue
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Value) GetStringValue() string {
|
|
||||||
if x, ok := m.GetKind().(*Value_StringValue); ok {
|
|
||||||
return x.StringValue
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Value) GetBoolValue() bool {
|
|
||||||
if x, ok := m.GetKind().(*Value_BoolValue); ok {
|
|
||||||
return x.BoolValue
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Value) GetStructValue() *Struct {
|
|
||||||
if x, ok := m.GetKind().(*Value_StructValue); ok {
|
|
||||||
return x.StructValue
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Value) GetListValue() *ListValue {
|
|
||||||
if x, ok := m.GetKind().(*Value_ListValue); ok {
|
|
||||||
return x.ListValue
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// XXX_OneofWrappers is for the internal use of the proto package.
|
|
||||||
func (*Value) XXX_OneofWrappers() []interface{} {
|
|
||||||
return []interface{}{
|
|
||||||
(*Value_NullValue)(nil),
|
|
||||||
(*Value_NumberValue)(nil),
|
|
||||||
(*Value_StringValue)(nil),
|
|
||||||
(*Value_BoolValue)(nil),
|
|
||||||
(*Value_StructValue)(nil),
|
|
||||||
(*Value_ListValue)(nil),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// `ListValue` is a wrapper around a repeated field of values.
|
|
||||||
//
|
|
||||||
// The JSON representation for `ListValue` is JSON array.
|
|
||||||
type ListValue struct {
|
|
||||||
// Repeated field of dynamically typed values.
|
|
||||||
Values []*Value `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ListValue) Reset() { *m = ListValue{} }
|
|
||||||
func (m *ListValue) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*ListValue) ProtoMessage() {}
|
|
||||||
func (*ListValue) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_df322afd6c9fb402, []int{2}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*ListValue) XXX_WellKnownType() string { return "ListValue" }
|
|
||||||
|
|
||||||
func (m *ListValue) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_ListValue.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *ListValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_ListValue.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *ListValue) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_ListValue.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *ListValue) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_ListValue.Size(m)
|
|
||||||
}
|
|
||||||
func (m *ListValue) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_ListValue.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_ListValue proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *ListValue) GetValues() []*Value {
|
|
||||||
if m != nil {
|
|
||||||
return m.Values
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
proto.RegisterEnum("google.protobuf.NullValue", NullValue_name, NullValue_value)
|
|
||||||
proto.RegisterType((*Struct)(nil), "google.protobuf.Struct")
|
|
||||||
proto.RegisterMapType((map[string]*Value)(nil), "google.protobuf.Struct.FieldsEntry")
|
|
||||||
proto.RegisterType((*Value)(nil), "google.protobuf.Value")
|
|
||||||
proto.RegisterType((*ListValue)(nil), "google.protobuf.ListValue")
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() { proto.RegisterFile("google/protobuf/struct.proto", fileDescriptor_df322afd6c9fb402) }
|
|
||||||
|
|
||||||
var fileDescriptor_df322afd6c9fb402 = []byte{
|
|
||||||
// 417 bytes of a gzipped FileDescriptorProto
|
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0x41, 0x8b, 0xd3, 0x40,
|
|
||||||
0x14, 0xc7, 0x3b, 0xc9, 0x36, 0x98, 0x17, 0x59, 0x97, 0x11, 0xb4, 0xac, 0xa2, 0xa1, 0x7b, 0x09,
|
|
||||||
0x22, 0x29, 0xd6, 0x8b, 0x18, 0x2f, 0x06, 0xd6, 0x5d, 0x30, 0x2c, 0x31, 0xba, 0x15, 0xbc, 0x94,
|
|
||||||
0x26, 0x4d, 0x63, 0xe8, 0x74, 0x26, 0x24, 0x33, 0x4a, 0x8f, 0x7e, 0x0b, 0xcf, 0x1e, 0x3d, 0xfa,
|
|
||||||
0xe9, 0x3c, 0xca, 0xcc, 0x24, 0xa9, 0xb4, 0xf4, 0x94, 0xbc, 0xf7, 0x7e, 0xef, 0x3f, 0xef, 0xff,
|
|
||||||
0x66, 0xe0, 0x71, 0xc1, 0x58, 0x41, 0xf2, 0x49, 0x55, 0x33, 0xce, 0x52, 0xb1, 0x9a, 0x34, 0xbc,
|
|
||||||
0x16, 0x19, 0xf7, 0x55, 0x8c, 0xef, 0xe9, 0xaa, 0xdf, 0x55, 0xc7, 0x3f, 0x11, 0x58, 0x1f, 0x15,
|
|
||||||
0x81, 0x03, 0xb0, 0x56, 0x65, 0x4e, 0x96, 0xcd, 0x08, 0xb9, 0xa6, 0xe7, 0x4c, 0x2f, 0xfc, 0x3d,
|
|
||||||
0xd8, 0xd7, 0xa0, 0xff, 0x4e, 0x51, 0x97, 0x94, 0xd7, 0xdb, 0xa4, 0x6d, 0x39, 0xff, 0x00, 0xce,
|
|
||||||
0x7f, 0x69, 0x7c, 0x06, 0xe6, 0x3a, 0xdf, 0x8e, 0x90, 0x8b, 0x3c, 0x3b, 0x91, 0xbf, 0xf8, 0x39,
|
|
||||||
0x0c, 0xbf, 0x2d, 0x88, 0xc8, 0x47, 0x86, 0x8b, 0x3c, 0x67, 0xfa, 0xe0, 0x40, 0x7c, 0x26, 0xab,
|
|
||||||
0x89, 0x86, 0x5e, 0x1b, 0xaf, 0xd0, 0xf8, 0x8f, 0x01, 0x43, 0x95, 0xc4, 0x01, 0x00, 0x15, 0x84,
|
|
||||||
0xcc, 0xb5, 0x80, 0x14, 0x3d, 0x9d, 0x9e, 0x1f, 0x08, 0xdc, 0x08, 0x42, 0x14, 0x7f, 0x3d, 0x48,
|
|
||||||
0x6c, 0xda, 0x05, 0xf8, 0x02, 0xee, 0x52, 0xb1, 0x49, 0xf3, 0x7a, 0xbe, 0x3b, 0x1f, 0x5d, 0x0f,
|
|
||||||
0x12, 0x47, 0x67, 0x7b, 0xa8, 0xe1, 0x75, 0x49, 0x8b, 0x16, 0x32, 0xe5, 0xe0, 0x12, 0xd2, 0x59,
|
|
||||||
0x0d, 0x3d, 0x05, 0x48, 0x19, 0xeb, 0xc6, 0x38, 0x71, 0x91, 0x77, 0x47, 0x1e, 0x25, 0x73, 0x1a,
|
|
||||||
0x78, 0xa3, 0x54, 0x44, 0xc6, 0x5b, 0x64, 0xa8, 0xac, 0x3e, 0x3c, 0xb2, 0xc7, 0x56, 0x5e, 0x64,
|
|
||||||
0xbc, 0x77, 0x49, 0xca, 0xa6, 0xeb, 0xb5, 0x54, 0xef, 0xa1, 0xcb, 0xa8, 0x6c, 0x78, 0xef, 0x92,
|
|
||||||
0x74, 0x41, 0x68, 0xc1, 0xc9, 0xba, 0xa4, 0xcb, 0x71, 0x00, 0x76, 0x4f, 0x60, 0x1f, 0x2c, 0x25,
|
|
||||||
0xd6, 0xdd, 0xe8, 0xb1, 0xa5, 0xb7, 0xd4, 0xb3, 0x47, 0x60, 0xf7, 0x4b, 0xc4, 0xa7, 0x00, 0x37,
|
|
||||||
0xb7, 0x51, 0x34, 0x9f, 0xbd, 0x8d, 0x6e, 0x2f, 0xcf, 0x06, 0xe1, 0x0f, 0x04, 0xf7, 0x33, 0xb6,
|
|
||||||
0xd9, 0x97, 0x08, 0x1d, 0xed, 0x26, 0x96, 0x71, 0x8c, 0xbe, 0xbc, 0x28, 0x4a, 0xfe, 0x55, 0xa4,
|
|
||||||
0x7e, 0xc6, 0x36, 0x93, 0x82, 0x91, 0x05, 0x2d, 0x76, 0x4f, 0xb1, 0xe2, 0xdb, 0x2a, 0x6f, 0xda,
|
|
||||||
0x17, 0x19, 0xe8, 0x4f, 0x95, 0xfe, 0x45, 0xe8, 0x97, 0x61, 0x5e, 0xc5, 0xe1, 0x6f, 0xe3, 0xc9,
|
|
||||||
0x95, 0x16, 0x8f, 0xbb, 0xf9, 0x3e, 0xe7, 0x84, 0xbc, 0xa7, 0xec, 0x3b, 0xfd, 0x24, 0x3b, 0x53,
|
|
||||||
0x4b, 0x49, 0xbd, 0xfc, 0x17, 0x00, 0x00, 0xff, 0xff, 0xe8, 0x1b, 0x59, 0xf8, 0xe5, 0x02, 0x00,
|
|
||||||
0x00,
|
|
||||||
}
|
|
|
@ -1,96 +0,0 @@
|
||||||
// Protocol Buffers - Google's data interchange format
|
|
||||||
// Copyright 2008 Google Inc. All rights reserved.
|
|
||||||
// https://developers.google.com/protocol-buffers/
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
// * Neither the name of Google Inc. nor the names of its
|
|
||||||
// contributors may be used to endorse or promote products derived from
|
|
||||||
// this software without specific prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package google.protobuf;
|
|
||||||
|
|
||||||
option csharp_namespace = "Google.Protobuf.WellKnownTypes";
|
|
||||||
option cc_enable_arenas = true;
|
|
||||||
option go_package = "github.com/golang/protobuf/ptypes/struct;structpb";
|
|
||||||
option java_package = "com.google.protobuf";
|
|
||||||
option java_outer_classname = "StructProto";
|
|
||||||
option java_multiple_files = true;
|
|
||||||
option objc_class_prefix = "GPB";
|
|
||||||
|
|
||||||
|
|
||||||
// `Struct` represents a structured data value, consisting of fields
|
|
||||||
// which map to dynamically typed values. In some languages, `Struct`
|
|
||||||
// might be supported by a native representation. For example, in
|
|
||||||
// scripting languages like JS a struct is represented as an
|
|
||||||
// object. The details of that representation are described together
|
|
||||||
// with the proto support for the language.
|
|
||||||
//
|
|
||||||
// The JSON representation for `Struct` is JSON object.
|
|
||||||
message Struct {
|
|
||||||
// Unordered map of dynamically typed values.
|
|
||||||
map<string, Value> fields = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// `Value` represents a dynamically typed value which can be either
|
|
||||||
// null, a number, a string, a boolean, a recursive struct value, or a
|
|
||||||
// list of values. A producer of value is expected to set one of that
|
|
||||||
// variants, absence of any variant indicates an error.
|
|
||||||
//
|
|
||||||
// The JSON representation for `Value` is JSON value.
|
|
||||||
message Value {
|
|
||||||
// The kind of value.
|
|
||||||
oneof kind {
|
|
||||||
// Represents a null value.
|
|
||||||
NullValue null_value = 1;
|
|
||||||
// Represents a double value.
|
|
||||||
double number_value = 2;
|
|
||||||
// Represents a string value.
|
|
||||||
string string_value = 3;
|
|
||||||
// Represents a boolean value.
|
|
||||||
bool bool_value = 4;
|
|
||||||
// Represents a structured value.
|
|
||||||
Struct struct_value = 5;
|
|
||||||
// Represents a repeated `Value`.
|
|
||||||
ListValue list_value = 6;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// `NullValue` is a singleton enumeration to represent the null value for the
|
|
||||||
// `Value` type union.
|
|
||||||
//
|
|
||||||
// The JSON representation for `NullValue` is JSON `null`.
|
|
||||||
enum NullValue {
|
|
||||||
// Null value.
|
|
||||||
NULL_VALUE = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// `ListValue` is a wrapper around a repeated field of values.
|
|
||||||
//
|
|
||||||
// The JSON representation for `ListValue` is JSON array.
|
|
||||||
message ListValue {
|
|
||||||
// Repeated field of dynamically typed values.
|
|
||||||
repeated Value values = 1;
|
|
||||||
}
|
|
|
@ -1,461 +0,0 @@
|
||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
|
||||||
// source: google/protobuf/wrappers.proto
|
|
||||||
|
|
||||||
package wrappers
|
|
||||||
|
|
||||||
import (
|
|
||||||
fmt "fmt"
|
|
||||||
proto "github.com/golang/protobuf/proto"
|
|
||||||
math "math"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
|
||||||
var _ = proto.Marshal
|
|
||||||
var _ = fmt.Errorf
|
|
||||||
var _ = math.Inf
|
|
||||||
|
|
||||||
// This is a compile-time assertion to ensure that this generated file
|
|
||||||
// is compatible with the proto package it is being compiled against.
|
|
||||||
// A compilation error at this line likely means your copy of the
|
|
||||||
// proto package needs to be updated.
|
|
||||||
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
|
|
||||||
|
|
||||||
// Wrapper message for `double`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `DoubleValue` is JSON number.
|
|
||||||
type DoubleValue struct {
|
|
||||||
// The double value.
|
|
||||||
Value float64 `protobuf:"fixed64,1,opt,name=value,proto3" json:"value,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *DoubleValue) Reset() { *m = DoubleValue{} }
|
|
||||||
func (m *DoubleValue) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*DoubleValue) ProtoMessage() {}
|
|
||||||
func (*DoubleValue) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_5377b62bda767935, []int{0}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*DoubleValue) XXX_WellKnownType() string { return "DoubleValue" }
|
|
||||||
|
|
||||||
func (m *DoubleValue) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_DoubleValue.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *DoubleValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_DoubleValue.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *DoubleValue) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_DoubleValue.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *DoubleValue) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_DoubleValue.Size(m)
|
|
||||||
}
|
|
||||||
func (m *DoubleValue) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_DoubleValue.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_DoubleValue proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *DoubleValue) GetValue() float64 {
|
|
||||||
if m != nil {
|
|
||||||
return m.Value
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapper message for `float`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `FloatValue` is JSON number.
|
|
||||||
type FloatValue struct {
|
|
||||||
// The float value.
|
|
||||||
Value float32 `protobuf:"fixed32,1,opt,name=value,proto3" json:"value,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *FloatValue) Reset() { *m = FloatValue{} }
|
|
||||||
func (m *FloatValue) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*FloatValue) ProtoMessage() {}
|
|
||||||
func (*FloatValue) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_5377b62bda767935, []int{1}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*FloatValue) XXX_WellKnownType() string { return "FloatValue" }
|
|
||||||
|
|
||||||
func (m *FloatValue) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_FloatValue.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *FloatValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_FloatValue.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *FloatValue) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_FloatValue.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *FloatValue) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_FloatValue.Size(m)
|
|
||||||
}
|
|
||||||
func (m *FloatValue) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_FloatValue.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_FloatValue proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *FloatValue) GetValue() float32 {
|
|
||||||
if m != nil {
|
|
||||||
return m.Value
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapper message for `int64`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `Int64Value` is JSON string.
|
|
||||||
type Int64Value struct {
|
|
||||||
// The int64 value.
|
|
||||||
Value int64 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Int64Value) Reset() { *m = Int64Value{} }
|
|
||||||
func (m *Int64Value) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*Int64Value) ProtoMessage() {}
|
|
||||||
func (*Int64Value) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_5377b62bda767935, []int{2}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*Int64Value) XXX_WellKnownType() string { return "Int64Value" }
|
|
||||||
|
|
||||||
func (m *Int64Value) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_Int64Value.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *Int64Value) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_Int64Value.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *Int64Value) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_Int64Value.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *Int64Value) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_Int64Value.Size(m)
|
|
||||||
}
|
|
||||||
func (m *Int64Value) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_Int64Value.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_Int64Value proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *Int64Value) GetValue() int64 {
|
|
||||||
if m != nil {
|
|
||||||
return m.Value
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapper message for `uint64`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `UInt64Value` is JSON string.
|
|
||||||
type UInt64Value struct {
|
|
||||||
// The uint64 value.
|
|
||||||
Value uint64 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *UInt64Value) Reset() { *m = UInt64Value{} }
|
|
||||||
func (m *UInt64Value) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*UInt64Value) ProtoMessage() {}
|
|
||||||
func (*UInt64Value) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_5377b62bda767935, []int{3}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*UInt64Value) XXX_WellKnownType() string { return "UInt64Value" }
|
|
||||||
|
|
||||||
func (m *UInt64Value) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_UInt64Value.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *UInt64Value) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_UInt64Value.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *UInt64Value) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_UInt64Value.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *UInt64Value) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_UInt64Value.Size(m)
|
|
||||||
}
|
|
||||||
func (m *UInt64Value) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_UInt64Value.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_UInt64Value proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *UInt64Value) GetValue() uint64 {
|
|
||||||
if m != nil {
|
|
||||||
return m.Value
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapper message for `int32`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `Int32Value` is JSON number.
|
|
||||||
type Int32Value struct {
|
|
||||||
// The int32 value.
|
|
||||||
Value int32 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Int32Value) Reset() { *m = Int32Value{} }
|
|
||||||
func (m *Int32Value) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*Int32Value) ProtoMessage() {}
|
|
||||||
func (*Int32Value) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_5377b62bda767935, []int{4}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*Int32Value) XXX_WellKnownType() string { return "Int32Value" }
|
|
||||||
|
|
||||||
func (m *Int32Value) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_Int32Value.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *Int32Value) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_Int32Value.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *Int32Value) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_Int32Value.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *Int32Value) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_Int32Value.Size(m)
|
|
||||||
}
|
|
||||||
func (m *Int32Value) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_Int32Value.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_Int32Value proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *Int32Value) GetValue() int32 {
|
|
||||||
if m != nil {
|
|
||||||
return m.Value
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapper message for `uint32`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `UInt32Value` is JSON number.
|
|
||||||
type UInt32Value struct {
|
|
||||||
// The uint32 value.
|
|
||||||
Value uint32 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *UInt32Value) Reset() { *m = UInt32Value{} }
|
|
||||||
func (m *UInt32Value) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*UInt32Value) ProtoMessage() {}
|
|
||||||
func (*UInt32Value) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_5377b62bda767935, []int{5}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*UInt32Value) XXX_WellKnownType() string { return "UInt32Value" }
|
|
||||||
|
|
||||||
func (m *UInt32Value) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_UInt32Value.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *UInt32Value) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_UInt32Value.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *UInt32Value) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_UInt32Value.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *UInt32Value) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_UInt32Value.Size(m)
|
|
||||||
}
|
|
||||||
func (m *UInt32Value) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_UInt32Value.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_UInt32Value proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *UInt32Value) GetValue() uint32 {
|
|
||||||
if m != nil {
|
|
||||||
return m.Value
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapper message for `bool`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `BoolValue` is JSON `true` and `false`.
|
|
||||||
type BoolValue struct {
|
|
||||||
// The bool value.
|
|
||||||
Value bool `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *BoolValue) Reset() { *m = BoolValue{} }
|
|
||||||
func (m *BoolValue) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*BoolValue) ProtoMessage() {}
|
|
||||||
func (*BoolValue) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_5377b62bda767935, []int{6}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*BoolValue) XXX_WellKnownType() string { return "BoolValue" }
|
|
||||||
|
|
||||||
func (m *BoolValue) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_BoolValue.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *BoolValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_BoolValue.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *BoolValue) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_BoolValue.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *BoolValue) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_BoolValue.Size(m)
|
|
||||||
}
|
|
||||||
func (m *BoolValue) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_BoolValue.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_BoolValue proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *BoolValue) GetValue() bool {
|
|
||||||
if m != nil {
|
|
||||||
return m.Value
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapper message for `string`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `StringValue` is JSON string.
|
|
||||||
type StringValue struct {
|
|
||||||
// The string value.
|
|
||||||
Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *StringValue) Reset() { *m = StringValue{} }
|
|
||||||
func (m *StringValue) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*StringValue) ProtoMessage() {}
|
|
||||||
func (*StringValue) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_5377b62bda767935, []int{7}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*StringValue) XXX_WellKnownType() string { return "StringValue" }
|
|
||||||
|
|
||||||
func (m *StringValue) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_StringValue.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *StringValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_StringValue.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *StringValue) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_StringValue.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *StringValue) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_StringValue.Size(m)
|
|
||||||
}
|
|
||||||
func (m *StringValue) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_StringValue.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_StringValue proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *StringValue) GetValue() string {
|
|
||||||
if m != nil {
|
|
||||||
return m.Value
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapper message for `bytes`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `BytesValue` is JSON string.
|
|
||||||
type BytesValue struct {
|
|
||||||
// The bytes value.
|
|
||||||
Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *BytesValue) Reset() { *m = BytesValue{} }
|
|
||||||
func (m *BytesValue) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*BytesValue) ProtoMessage() {}
|
|
||||||
func (*BytesValue) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_5377b62bda767935, []int{8}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*BytesValue) XXX_WellKnownType() string { return "BytesValue" }
|
|
||||||
|
|
||||||
func (m *BytesValue) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_BytesValue.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *BytesValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_BytesValue.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *BytesValue) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_BytesValue.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *BytesValue) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_BytesValue.Size(m)
|
|
||||||
}
|
|
||||||
func (m *BytesValue) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_BytesValue.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_BytesValue proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *BytesValue) GetValue() []byte {
|
|
||||||
if m != nil {
|
|
||||||
return m.Value
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
proto.RegisterType((*DoubleValue)(nil), "google.protobuf.DoubleValue")
|
|
||||||
proto.RegisterType((*FloatValue)(nil), "google.protobuf.FloatValue")
|
|
||||||
proto.RegisterType((*Int64Value)(nil), "google.protobuf.Int64Value")
|
|
||||||
proto.RegisterType((*UInt64Value)(nil), "google.protobuf.UInt64Value")
|
|
||||||
proto.RegisterType((*Int32Value)(nil), "google.protobuf.Int32Value")
|
|
||||||
proto.RegisterType((*UInt32Value)(nil), "google.protobuf.UInt32Value")
|
|
||||||
proto.RegisterType((*BoolValue)(nil), "google.protobuf.BoolValue")
|
|
||||||
proto.RegisterType((*StringValue)(nil), "google.protobuf.StringValue")
|
|
||||||
proto.RegisterType((*BytesValue)(nil), "google.protobuf.BytesValue")
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() { proto.RegisterFile("google/protobuf/wrappers.proto", fileDescriptor_5377b62bda767935) }
|
|
||||||
|
|
||||||
var fileDescriptor_5377b62bda767935 = []byte{
|
|
||||||
// 259 bytes of a gzipped FileDescriptorProto
|
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4b, 0xcf, 0xcf, 0x4f,
|
|
||||||
0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0x2f, 0x4a, 0x2c,
|
|
||||||
0x28, 0x48, 0x2d, 0x2a, 0xd6, 0x03, 0x8b, 0x08, 0xf1, 0x43, 0xe4, 0xf5, 0x60, 0xf2, 0x4a, 0xca,
|
|
||||||
0x5c, 0xdc, 0x2e, 0xf9, 0xa5, 0x49, 0x39, 0xa9, 0x61, 0x89, 0x39, 0xa5, 0xa9, 0x42, 0x22, 0x5c,
|
|
||||||
0xac, 0x65, 0x20, 0x86, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0x63, 0x10, 0x84, 0xa3, 0xa4, 0xc4, 0xc5,
|
|
||||||
0xe5, 0x96, 0x93, 0x9f, 0x58, 0x82, 0x45, 0x0d, 0x13, 0x92, 0x1a, 0xcf, 0xbc, 0x12, 0x33, 0x13,
|
|
||||||
0x2c, 0x6a, 0x98, 0x61, 0x6a, 0x94, 0xb9, 0xb8, 0x43, 0x71, 0x29, 0x62, 0x41, 0x35, 0xc8, 0xd8,
|
|
||||||
0x08, 0x8b, 0x1a, 0x56, 0x34, 0x83, 0xb0, 0x2a, 0xe2, 0x85, 0x29, 0x52, 0xe4, 0xe2, 0x74, 0xca,
|
|
||||||
0xcf, 0xcf, 0xc1, 0xa2, 0x84, 0x03, 0xc9, 0x9c, 0xe0, 0x92, 0xa2, 0xcc, 0xbc, 0x74, 0x2c, 0x8a,
|
|
||||||
0x38, 0x91, 0x1c, 0xe4, 0x54, 0x59, 0x92, 0x5a, 0x8c, 0x45, 0x0d, 0x0f, 0x54, 0x8d, 0x53, 0x0d,
|
|
||||||
0x97, 0x70, 0x72, 0x7e, 0xae, 0x1e, 0x5a, 0xe8, 0x3a, 0xf1, 0x86, 0x43, 0x83, 0x3f, 0x00, 0x24,
|
|
||||||
0x12, 0xc0, 0x18, 0xa5, 0x95, 0x9e, 0x59, 0x92, 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0xab, 0x9f,
|
|
||||||
0x9e, 0x9f, 0x93, 0x98, 0x97, 0x8e, 0x88, 0xaa, 0x82, 0x92, 0xca, 0x82, 0xd4, 0x62, 0x78, 0x8c,
|
|
||||||
0xfd, 0x60, 0x64, 0x5c, 0xc4, 0xc4, 0xec, 0x1e, 0xe0, 0xb4, 0x8a, 0x49, 0xce, 0x1d, 0x62, 0x6e,
|
|
||||||
0x00, 0x54, 0xa9, 0x5e, 0x78, 0x6a, 0x4e, 0x8e, 0x77, 0x5e, 0x7e, 0x79, 0x5e, 0x08, 0x48, 0x4b,
|
|
||||||
0x12, 0x1b, 0xd8, 0x0c, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x19, 0x6c, 0xb9, 0xb8, 0xfe,
|
|
||||||
0x01, 0x00, 0x00,
|
|
||||||
}
|
|
|
@ -1,118 +0,0 @@
|
||||||
// Protocol Buffers - Google's data interchange format
|
|
||||||
// Copyright 2008 Google Inc. All rights reserved.
|
|
||||||
// https://developers.google.com/protocol-buffers/
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
// * Neither the name of Google Inc. nor the names of its
|
|
||||||
// contributors may be used to endorse or promote products derived from
|
|
||||||
// this software without specific prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
// Wrappers for primitive (non-message) types. These types are useful
|
|
||||||
// for embedding primitives in the `google.protobuf.Any` type and for places
|
|
||||||
// where we need to distinguish between the absence of a primitive
|
|
||||||
// typed field and its default value.
|
|
||||||
|
|
||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package google.protobuf;
|
|
||||||
|
|
||||||
option csharp_namespace = "Google.Protobuf.WellKnownTypes";
|
|
||||||
option cc_enable_arenas = true;
|
|
||||||
option go_package = "github.com/golang/protobuf/ptypes/wrappers";
|
|
||||||
option java_package = "com.google.protobuf";
|
|
||||||
option java_outer_classname = "WrappersProto";
|
|
||||||
option java_multiple_files = true;
|
|
||||||
option objc_class_prefix = "GPB";
|
|
||||||
|
|
||||||
// Wrapper message for `double`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `DoubleValue` is JSON number.
|
|
||||||
message DoubleValue {
|
|
||||||
// The double value.
|
|
||||||
double value = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapper message for `float`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `FloatValue` is JSON number.
|
|
||||||
message FloatValue {
|
|
||||||
// The float value.
|
|
||||||
float value = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapper message for `int64`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `Int64Value` is JSON string.
|
|
||||||
message Int64Value {
|
|
||||||
// The int64 value.
|
|
||||||
int64 value = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapper message for `uint64`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `UInt64Value` is JSON string.
|
|
||||||
message UInt64Value {
|
|
||||||
// The uint64 value.
|
|
||||||
uint64 value = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapper message for `int32`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `Int32Value` is JSON number.
|
|
||||||
message Int32Value {
|
|
||||||
// The int32 value.
|
|
||||||
int32 value = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapper message for `uint32`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `UInt32Value` is JSON number.
|
|
||||||
message UInt32Value {
|
|
||||||
// The uint32 value.
|
|
||||||
uint32 value = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapper message for `bool`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `BoolValue` is JSON `true` and `false`.
|
|
||||||
message BoolValue {
|
|
||||||
// The bool value.
|
|
||||||
bool value = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapper message for `string`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `StringValue` is JSON string.
|
|
||||||
message StringValue {
|
|
||||||
// The string value.
|
|
||||||
string value = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapper message for `bytes`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `BytesValue` is JSON string.
|
|
||||||
message BytesValue {
|
|
||||||
// The bytes value.
|
|
||||||
bytes value = 1;
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
Copyright (c) 2015, Gengo, Inc.
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without modification,
|
|
||||||
are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer in the documentation
|
|
||||||
and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
* Neither the name of Gengo, Inc. nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from this
|
|
||||||
software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
||||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
@ -1,22 +0,0 @@
|
||||||
load("@io_bazel_rules_go//go:def.bzl", "go_library")
|
|
||||||
load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library")
|
|
||||||
|
|
||||||
package(default_visibility = ["//visibility:public"])
|
|
||||||
|
|
||||||
proto_library(
|
|
||||||
name = "internal_proto",
|
|
||||||
srcs = ["stream_chunk.proto"],
|
|
||||||
deps = ["@com_google_protobuf//:any_proto"],
|
|
||||||
)
|
|
||||||
|
|
||||||
go_proto_library(
|
|
||||||
name = "internal_go_proto",
|
|
||||||
importpath = "github.com/grpc-ecosystem/grpc-gateway/internal",
|
|
||||||
proto = ":internal_proto",
|
|
||||||
)
|
|
||||||
|
|
||||||
go_library(
|
|
||||||
name = "go_default_library",
|
|
||||||
embed = [":internal_go_proto"],
|
|
||||||
importpath = "github.com/grpc-ecosystem/grpc-gateway/internal",
|
|
||||||
)
|
|
|
@ -1,118 +0,0 @@
|
||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
|
||||||
// source: internal/stream_chunk.proto
|
|
||||||
|
|
||||||
package internal
|
|
||||||
|
|
||||||
import proto "github.com/golang/protobuf/proto"
|
|
||||||
import fmt "fmt"
|
|
||||||
import math "math"
|
|
||||||
import any "github.com/golang/protobuf/ptypes/any"
|
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
|
||||||
var _ = proto.Marshal
|
|
||||||
var _ = fmt.Errorf
|
|
||||||
var _ = math.Inf
|
|
||||||
|
|
||||||
// This is a compile-time assertion to ensure that this generated file
|
|
||||||
// is compatible with the proto package it is being compiled against.
|
|
||||||
// A compilation error at this line likely means your copy of the
|
|
||||||
// proto package needs to be updated.
|
|
||||||
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
|
|
||||||
|
|
||||||
// StreamError is a response type which is returned when
|
|
||||||
// streaming rpc returns an error.
|
|
||||||
type StreamError struct {
|
|
||||||
GrpcCode int32 `protobuf:"varint,1,opt,name=grpc_code,json=grpcCode,proto3" json:"grpc_code,omitempty"`
|
|
||||||
HttpCode int32 `protobuf:"varint,2,opt,name=http_code,json=httpCode,proto3" json:"http_code,omitempty"`
|
|
||||||
Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"`
|
|
||||||
HttpStatus string `protobuf:"bytes,4,opt,name=http_status,json=httpStatus,proto3" json:"http_status,omitempty"`
|
|
||||||
Details []*any.Any `protobuf:"bytes,5,rep,name=details,proto3" json:"details,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *StreamError) Reset() { *m = StreamError{} }
|
|
||||||
func (m *StreamError) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*StreamError) ProtoMessage() {}
|
|
||||||
func (*StreamError) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_stream_chunk_a2afb657504565d7, []int{0}
|
|
||||||
}
|
|
||||||
func (m *StreamError) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_StreamError.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *StreamError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_StreamError.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (dst *StreamError) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_StreamError.Merge(dst, src)
|
|
||||||
}
|
|
||||||
func (m *StreamError) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_StreamError.Size(m)
|
|
||||||
}
|
|
||||||
func (m *StreamError) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_StreamError.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_StreamError proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *StreamError) GetGrpcCode() int32 {
|
|
||||||
if m != nil {
|
|
||||||
return m.GrpcCode
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *StreamError) GetHttpCode() int32 {
|
|
||||||
if m != nil {
|
|
||||||
return m.HttpCode
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *StreamError) GetMessage() string {
|
|
||||||
if m != nil {
|
|
||||||
return m.Message
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *StreamError) GetHttpStatus() string {
|
|
||||||
if m != nil {
|
|
||||||
return m.HttpStatus
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *StreamError) GetDetails() []*any.Any {
|
|
||||||
if m != nil {
|
|
||||||
return m.Details
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
proto.RegisterType((*StreamError)(nil), "grpc.gateway.runtime.StreamError")
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
proto.RegisterFile("internal/stream_chunk.proto", fileDescriptor_stream_chunk_a2afb657504565d7)
|
|
||||||
}
|
|
||||||
|
|
||||||
var fileDescriptor_stream_chunk_a2afb657504565d7 = []byte{
|
|
||||||
// 223 bytes of a gzipped FileDescriptorProto
|
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x34, 0x90, 0x41, 0x4e, 0xc3, 0x30,
|
|
||||||
0x10, 0x45, 0x15, 0x4a, 0x69, 0x3b, 0xd9, 0x45, 0x5d, 0x18, 0xba, 0x20, 0x62, 0x95, 0x95, 0x23,
|
|
||||||
0xc1, 0x09, 0x00, 0x71, 0x81, 0x74, 0xc7, 0xa6, 0x9a, 0x26, 0x83, 0x13, 0x91, 0xd8, 0xd1, 0x78,
|
|
||||||
0x22, 0x94, 0x6b, 0x71, 0xc2, 0xca, 0x8e, 0xb2, 0xf4, 0x7b, 0x7f, 0xbe, 0xbe, 0x0c, 0xa7, 0xce,
|
|
||||||
0x0a, 0xb1, 0xc5, 0xbe, 0xf4, 0xc2, 0x84, 0xc3, 0xa5, 0x6e, 0x27, 0xfb, 0xab, 0x47, 0x76, 0xe2,
|
|
||||||
0xb2, 0xa3, 0xe1, 0xb1, 0xd6, 0x06, 0x85, 0xfe, 0x70, 0xd6, 0x3c, 0x59, 0xe9, 0x06, 0x7a, 0x7a,
|
|
||||||
0x34, 0xce, 0x99, 0x9e, 0xca, 0x98, 0xb9, 0x4e, 0x3f, 0x25, 0xda, 0x79, 0x39, 0x78, 0xf9, 0x4f,
|
|
||||||
0x20, 0x3d, 0xc7, 0x9e, 0x2f, 0x66, 0xc7, 0xd9, 0x09, 0x0e, 0xa1, 0xe2, 0x52, 0xbb, 0x86, 0x54,
|
|
||||||
0x92, 0x27, 0xc5, 0xb6, 0xda, 0x07, 0xf0, 0xe9, 0x1a, 0x0a, 0xb2, 0x15, 0x19, 0x17, 0x79, 0xb7,
|
|
||||||
0xc8, 0x00, 0xa2, 0x54, 0xb0, 0x1b, 0xc8, 0x7b, 0x34, 0xa4, 0x36, 0x79, 0x52, 0x1c, 0xaa, 0xf5,
|
|
||||||
0x99, 0x3d, 0x43, 0x1a, 0xcf, 0xbc, 0xa0, 0x4c, 0x5e, 0xdd, 0x47, 0x0b, 0x01, 0x9d, 0x23, 0xc9,
|
|
||||||
0x34, 0xec, 0x1a, 0x12, 0xec, 0x7a, 0xaf, 0xb6, 0xf9, 0xa6, 0x48, 0x5f, 0x8f, 0x7a, 0x59, 0xac,
|
|
||||||
0xd7, 0xc5, 0xfa, 0xdd, 0xce, 0xd5, 0x1a, 0xfa, 0x80, 0xef, 0xfd, 0xfa, 0x09, 0xd7, 0x87, 0x18,
|
|
||||||
0x79, 0xbb, 0x05, 0x00, 0x00, 0xff, 0xff, 0x0d, 0x7d, 0xa5, 0x18, 0x17, 0x01, 0x00, 0x00,
|
|
||||||
}
|
|
|
@ -1,15 +0,0 @@
|
||||||
syntax = "proto3";
|
|
||||||
package grpc.gateway.runtime;
|
|
||||||
option go_package = "internal";
|
|
||||||
|
|
||||||
import "google/protobuf/any.proto";
|
|
||||||
|
|
||||||
// StreamError is a response type which is returned when
|
|
||||||
// streaming rpc returns an error.
|
|
||||||
message StreamError {
|
|
||||||
int32 grpc_code = 1;
|
|
||||||
int32 http_code = 2;
|
|
||||||
string message = 3;
|
|
||||||
string http_status = 4;
|
|
||||||
repeated google.protobuf.Any details = 5;
|
|
||||||
}
|
|
|
@ -1,80 +0,0 @@
|
||||||
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
|
|
||||||
|
|
||||||
package(default_visibility = ["//visibility:public"])
|
|
||||||
|
|
||||||
go_library(
|
|
||||||
name = "go_default_library",
|
|
||||||
srcs = [
|
|
||||||
"context.go",
|
|
||||||
"convert.go",
|
|
||||||
"doc.go",
|
|
||||||
"errors.go",
|
|
||||||
"fieldmask.go",
|
|
||||||
"handler.go",
|
|
||||||
"marshal_json.go",
|
|
||||||
"marshal_jsonpb.go",
|
|
||||||
"marshal_proto.go",
|
|
||||||
"marshaler.go",
|
|
||||||
"marshaler_registry.go",
|
|
||||||
"mux.go",
|
|
||||||
"pattern.go",
|
|
||||||
"proto2_convert.go",
|
|
||||||
"proto_errors.go",
|
|
||||||
"query.go",
|
|
||||||
],
|
|
||||||
importpath = "github.com/grpc-ecosystem/grpc-gateway/runtime",
|
|
||||||
deps = [
|
|
||||||
"//internal:go_default_library",
|
|
||||||
"//utilities:go_default_library",
|
|
||||||
"@com_github_golang_protobuf//jsonpb:go_default_library_gen",
|
|
||||||
"@com_github_golang_protobuf//proto:go_default_library",
|
|
||||||
"@com_github_golang_protobuf//protoc-gen-go/generator:go_default_library_gen",
|
|
||||||
"@io_bazel_rules_go//proto/wkt:any_go_proto",
|
|
||||||
"@io_bazel_rules_go//proto/wkt:duration_go_proto",
|
|
||||||
"@io_bazel_rules_go//proto/wkt:field_mask_go_proto",
|
|
||||||
"@io_bazel_rules_go//proto/wkt:timestamp_go_proto",
|
|
||||||
"@io_bazel_rules_go//proto/wkt:wrappers_go_proto",
|
|
||||||
"@org_golang_google_grpc//codes:go_default_library",
|
|
||||||
"@org_golang_google_grpc//grpclog:go_default_library",
|
|
||||||
"@org_golang_google_grpc//metadata:go_default_library",
|
|
||||||
"@org_golang_google_grpc//status:go_default_library",
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
go_test(
|
|
||||||
name = "go_default_test",
|
|
||||||
size = "small",
|
|
||||||
srcs = [
|
|
||||||
"context_test.go",
|
|
||||||
"errors_test.go",
|
|
||||||
"fieldmask_test.go",
|
|
||||||
"handler_test.go",
|
|
||||||
"marshal_json_test.go",
|
|
||||||
"marshal_jsonpb_test.go",
|
|
||||||
"marshal_proto_test.go",
|
|
||||||
"marshaler_registry_test.go",
|
|
||||||
"mux_test.go",
|
|
||||||
"pattern_test.go",
|
|
||||||
"query_test.go",
|
|
||||||
],
|
|
||||||
embed = [":go_default_library"],
|
|
||||||
deps = [
|
|
||||||
"//examples/proto/examplepb:go_default_library",
|
|
||||||
"//internal:go_default_library",
|
|
||||||
"//utilities:go_default_library",
|
|
||||||
"@com_github_golang_protobuf//jsonpb:go_default_library_gen",
|
|
||||||
"@com_github_golang_protobuf//proto:go_default_library",
|
|
||||||
"@com_github_golang_protobuf//ptypes:go_default_library_gen",
|
|
||||||
"@go_googleapis//google/rpc:errdetails_go_proto",
|
|
||||||
"@io_bazel_rules_go//proto/wkt:duration_go_proto",
|
|
||||||
"@io_bazel_rules_go//proto/wkt:empty_go_proto",
|
|
||||||
"@io_bazel_rules_go//proto/wkt:field_mask_go_proto",
|
|
||||||
"@io_bazel_rules_go//proto/wkt:struct_go_proto",
|
|
||||||
"@io_bazel_rules_go//proto/wkt:timestamp_go_proto",
|
|
||||||
"@io_bazel_rules_go//proto/wkt:wrappers_go_proto",
|
|
||||||
"@org_golang_google_grpc//:go_default_library",
|
|
||||||
"@org_golang_google_grpc//codes:go_default_library",
|
|
||||||
"@org_golang_google_grpc//metadata:go_default_library",
|
|
||||||
"@org_golang_google_grpc//status:go_default_library",
|
|
||||||
],
|
|
||||||
)
|
|
|
@ -1,210 +0,0 @@
|
||||||
package runtime
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"encoding/base64"
|
|
||||||
"fmt"
|
|
||||||
"net"
|
|
||||||
"net/http"
|
|
||||||
"net/textproto"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"google.golang.org/grpc/codes"
|
|
||||||
"google.golang.org/grpc/grpclog"
|
|
||||||
"google.golang.org/grpc/metadata"
|
|
||||||
"google.golang.org/grpc/status"
|
|
||||||
)
|
|
||||||
|
|
||||||
// MetadataHeaderPrefix is the http prefix that represents custom metadata
|
|
||||||
// parameters to or from a gRPC call.
|
|
||||||
const MetadataHeaderPrefix = "Grpc-Metadata-"
|
|
||||||
|
|
||||||
// MetadataPrefix is prepended to permanent HTTP header keys (as specified
|
|
||||||
// by the IANA) when added to the gRPC context.
|
|
||||||
const MetadataPrefix = "grpcgateway-"
|
|
||||||
|
|
||||||
// MetadataTrailerPrefix is prepended to gRPC metadata as it is converted to
|
|
||||||
// HTTP headers in a response handled by grpc-gateway
|
|
||||||
const MetadataTrailerPrefix = "Grpc-Trailer-"
|
|
||||||
|
|
||||||
const metadataGrpcTimeout = "Grpc-Timeout"
|
|
||||||
const metadataHeaderBinarySuffix = "-Bin"
|
|
||||||
|
|
||||||
const xForwardedFor = "X-Forwarded-For"
|
|
||||||
const xForwardedHost = "X-Forwarded-Host"
|
|
||||||
|
|
||||||
var (
|
|
||||||
// DefaultContextTimeout is used for gRPC call context.WithTimeout whenever a Grpc-Timeout inbound
|
|
||||||
// header isn't present. If the value is 0 the sent `context` will not have a timeout.
|
|
||||||
DefaultContextTimeout = 0 * time.Second
|
|
||||||
)
|
|
||||||
|
|
||||||
func decodeBinHeader(v string) ([]byte, error) {
|
|
||||||
if len(v)%4 == 0 {
|
|
||||||
// Input was padded, or padding was not necessary.
|
|
||||||
return base64.StdEncoding.DecodeString(v)
|
|
||||||
}
|
|
||||||
return base64.RawStdEncoding.DecodeString(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
AnnotateContext adds context information such as metadata from the request.
|
|
||||||
|
|
||||||
At a minimum, the RemoteAddr is included in the fashion of "X-Forwarded-For",
|
|
||||||
except that the forwarded destination is not another HTTP service but rather
|
|
||||||
a gRPC service.
|
|
||||||
*/
|
|
||||||
func AnnotateContext(ctx context.Context, mux *ServeMux, req *http.Request) (context.Context, error) {
|
|
||||||
var pairs []string
|
|
||||||
timeout := DefaultContextTimeout
|
|
||||||
if tm := req.Header.Get(metadataGrpcTimeout); tm != "" {
|
|
||||||
var err error
|
|
||||||
timeout, err = timeoutDecode(tm)
|
|
||||||
if err != nil {
|
|
||||||
return nil, status.Errorf(codes.InvalidArgument, "invalid grpc-timeout: %s", tm)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for key, vals := range req.Header {
|
|
||||||
for _, val := range vals {
|
|
||||||
key = textproto.CanonicalMIMEHeaderKey(key)
|
|
||||||
// For backwards-compatibility, pass through 'authorization' header with no prefix.
|
|
||||||
if key == "Authorization" {
|
|
||||||
pairs = append(pairs, "authorization", val)
|
|
||||||
}
|
|
||||||
if h, ok := mux.incomingHeaderMatcher(key); ok {
|
|
||||||
// Handles "-bin" metadata in grpc, since grpc will do another base64
|
|
||||||
// encode before sending to server, we need to decode it first.
|
|
||||||
if strings.HasSuffix(key, metadataHeaderBinarySuffix) {
|
|
||||||
b, err := decodeBinHeader(val)
|
|
||||||
if err != nil {
|
|
||||||
return nil, status.Errorf(codes.InvalidArgument, "invalid binary header %s: %s", key, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
val = string(b)
|
|
||||||
}
|
|
||||||
pairs = append(pairs, h, val)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if host := req.Header.Get(xForwardedHost); host != "" {
|
|
||||||
pairs = append(pairs, strings.ToLower(xForwardedHost), host)
|
|
||||||
} else if req.Host != "" {
|
|
||||||
pairs = append(pairs, strings.ToLower(xForwardedHost), req.Host)
|
|
||||||
}
|
|
||||||
|
|
||||||
if addr := req.RemoteAddr; addr != "" {
|
|
||||||
if remoteIP, _, err := net.SplitHostPort(addr); err == nil {
|
|
||||||
if fwd := req.Header.Get(xForwardedFor); fwd == "" {
|
|
||||||
pairs = append(pairs, strings.ToLower(xForwardedFor), remoteIP)
|
|
||||||
} else {
|
|
||||||
pairs = append(pairs, strings.ToLower(xForwardedFor), fmt.Sprintf("%s, %s", fwd, remoteIP))
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
grpclog.Infof("invalid remote addr: %s", addr)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if timeout != 0 {
|
|
||||||
ctx, _ = context.WithTimeout(ctx, timeout)
|
|
||||||
}
|
|
||||||
if len(pairs) == 0 {
|
|
||||||
return ctx, nil
|
|
||||||
}
|
|
||||||
md := metadata.Pairs(pairs...)
|
|
||||||
for _, mda := range mux.metadataAnnotators {
|
|
||||||
md = metadata.Join(md, mda(ctx, req))
|
|
||||||
}
|
|
||||||
return metadata.NewOutgoingContext(ctx, md), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// ServerMetadata consists of metadata sent from gRPC server.
|
|
||||||
type ServerMetadata struct {
|
|
||||||
HeaderMD metadata.MD
|
|
||||||
TrailerMD metadata.MD
|
|
||||||
}
|
|
||||||
|
|
||||||
type serverMetadataKey struct{}
|
|
||||||
|
|
||||||
// NewServerMetadataContext creates a new context with ServerMetadata
|
|
||||||
func NewServerMetadataContext(ctx context.Context, md ServerMetadata) context.Context {
|
|
||||||
return context.WithValue(ctx, serverMetadataKey{}, md)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ServerMetadataFromContext returns the ServerMetadata in ctx
|
|
||||||
func ServerMetadataFromContext(ctx context.Context) (md ServerMetadata, ok bool) {
|
|
||||||
md, ok = ctx.Value(serverMetadataKey{}).(ServerMetadata)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func timeoutDecode(s string) (time.Duration, error) {
|
|
||||||
size := len(s)
|
|
||||||
if size < 2 {
|
|
||||||
return 0, fmt.Errorf("timeout string is too short: %q", s)
|
|
||||||
}
|
|
||||||
d, ok := timeoutUnitToDuration(s[size-1])
|
|
||||||
if !ok {
|
|
||||||
return 0, fmt.Errorf("timeout unit is not recognized: %q", s)
|
|
||||||
}
|
|
||||||
t, err := strconv.ParseInt(s[:size-1], 10, 64)
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
return d * time.Duration(t), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func timeoutUnitToDuration(u uint8) (d time.Duration, ok bool) {
|
|
||||||
switch u {
|
|
||||||
case 'H':
|
|
||||||
return time.Hour, true
|
|
||||||
case 'M':
|
|
||||||
return time.Minute, true
|
|
||||||
case 'S':
|
|
||||||
return time.Second, true
|
|
||||||
case 'm':
|
|
||||||
return time.Millisecond, true
|
|
||||||
case 'u':
|
|
||||||
return time.Microsecond, true
|
|
||||||
case 'n':
|
|
||||||
return time.Nanosecond, true
|
|
||||||
default:
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// isPermanentHTTPHeader checks whether hdr belongs to the list of
|
|
||||||
// permenant request headers maintained by IANA.
|
|
||||||
// http://www.iana.org/assignments/message-headers/message-headers.xml
|
|
||||||
func isPermanentHTTPHeader(hdr string) bool {
|
|
||||||
switch hdr {
|
|
||||||
case
|
|
||||||
"Accept",
|
|
||||||
"Accept-Charset",
|
|
||||||
"Accept-Language",
|
|
||||||
"Accept-Ranges",
|
|
||||||
"Authorization",
|
|
||||||
"Cache-Control",
|
|
||||||
"Content-Type",
|
|
||||||
"Cookie",
|
|
||||||
"Date",
|
|
||||||
"Expect",
|
|
||||||
"From",
|
|
||||||
"Host",
|
|
||||||
"If-Match",
|
|
||||||
"If-Modified-Since",
|
|
||||||
"If-None-Match",
|
|
||||||
"If-Schedule-Tag-Match",
|
|
||||||
"If-Unmodified-Since",
|
|
||||||
"Max-Forwards",
|
|
||||||
"Origin",
|
|
||||||
"Pragma",
|
|
||||||
"Referer",
|
|
||||||
"User-Agent",
|
|
||||||
"Via",
|
|
||||||
"Warning":
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
|
@ -1,312 +0,0 @@
|
||||||
package runtime
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/base64"
|
|
||||||
"fmt"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/golang/protobuf/jsonpb"
|
|
||||||
"github.com/golang/protobuf/ptypes/duration"
|
|
||||||
"github.com/golang/protobuf/ptypes/timestamp"
|
|
||||||
"github.com/golang/protobuf/ptypes/wrappers"
|
|
||||||
)
|
|
||||||
|
|
||||||
// String just returns the given string.
|
|
||||||
// It is just for compatibility to other types.
|
|
||||||
func String(val string) (string, error) {
|
|
||||||
return val, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// StringSlice converts 'val' where individual strings are separated by
|
|
||||||
// 'sep' into a string slice.
|
|
||||||
func StringSlice(val, sep string) ([]string, error) {
|
|
||||||
return strings.Split(val, sep), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bool converts the given string representation of a boolean value into bool.
|
|
||||||
func Bool(val string) (bool, error) {
|
|
||||||
return strconv.ParseBool(val)
|
|
||||||
}
|
|
||||||
|
|
||||||
// BoolSlice converts 'val' where individual booleans are separated by
|
|
||||||
// 'sep' into a bool slice.
|
|
||||||
func BoolSlice(val, sep string) ([]bool, error) {
|
|
||||||
s := strings.Split(val, sep)
|
|
||||||
values := make([]bool, len(s))
|
|
||||||
for i, v := range s {
|
|
||||||
value, err := Bool(v)
|
|
||||||
if err != nil {
|
|
||||||
return values, err
|
|
||||||
}
|
|
||||||
values[i] = value
|
|
||||||
}
|
|
||||||
return values, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Float64 converts the given string representation into representation of a floating point number into float64.
|
|
||||||
func Float64(val string) (float64, error) {
|
|
||||||
return strconv.ParseFloat(val, 64)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Float64Slice converts 'val' where individual floating point numbers are separated by
|
|
||||||
// 'sep' into a float64 slice.
|
|
||||||
func Float64Slice(val, sep string) ([]float64, error) {
|
|
||||||
s := strings.Split(val, sep)
|
|
||||||
values := make([]float64, len(s))
|
|
||||||
for i, v := range s {
|
|
||||||
value, err := Float64(v)
|
|
||||||
if err != nil {
|
|
||||||
return values, err
|
|
||||||
}
|
|
||||||
values[i] = value
|
|
||||||
}
|
|
||||||
return values, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Float32 converts the given string representation of a floating point number into float32.
|
|
||||||
func Float32(val string) (float32, error) {
|
|
||||||
f, err := strconv.ParseFloat(val, 32)
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
return float32(f), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Float32Slice converts 'val' where individual floating point numbers are separated by
|
|
||||||
// 'sep' into a float32 slice.
|
|
||||||
func Float32Slice(val, sep string) ([]float32, error) {
|
|
||||||
s := strings.Split(val, sep)
|
|
||||||
values := make([]float32, len(s))
|
|
||||||
for i, v := range s {
|
|
||||||
value, err := Float32(v)
|
|
||||||
if err != nil {
|
|
||||||
return values, err
|
|
||||||
}
|
|
||||||
values[i] = value
|
|
||||||
}
|
|
||||||
return values, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Int64 converts the given string representation of an integer into int64.
|
|
||||||
func Int64(val string) (int64, error) {
|
|
||||||
return strconv.ParseInt(val, 0, 64)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Int64Slice converts 'val' where individual integers are separated by
|
|
||||||
// 'sep' into a int64 slice.
|
|
||||||
func Int64Slice(val, sep string) ([]int64, error) {
|
|
||||||
s := strings.Split(val, sep)
|
|
||||||
values := make([]int64, len(s))
|
|
||||||
for i, v := range s {
|
|
||||||
value, err := Int64(v)
|
|
||||||
if err != nil {
|
|
||||||
return values, err
|
|
||||||
}
|
|
||||||
values[i] = value
|
|
||||||
}
|
|
||||||
return values, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Int32 converts the given string representation of an integer into int32.
|
|
||||||
func Int32(val string) (int32, error) {
|
|
||||||
i, err := strconv.ParseInt(val, 0, 32)
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
return int32(i), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Int32Slice converts 'val' where individual integers are separated by
|
|
||||||
// 'sep' into a int32 slice.
|
|
||||||
func Int32Slice(val, sep string) ([]int32, error) {
|
|
||||||
s := strings.Split(val, sep)
|
|
||||||
values := make([]int32, len(s))
|
|
||||||
for i, v := range s {
|
|
||||||
value, err := Int32(v)
|
|
||||||
if err != nil {
|
|
||||||
return values, err
|
|
||||||
}
|
|
||||||
values[i] = value
|
|
||||||
}
|
|
||||||
return values, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Uint64 converts the given string representation of an integer into uint64.
|
|
||||||
func Uint64(val string) (uint64, error) {
|
|
||||||
return strconv.ParseUint(val, 0, 64)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Uint64Slice converts 'val' where individual integers are separated by
|
|
||||||
// 'sep' into a uint64 slice.
|
|
||||||
func Uint64Slice(val, sep string) ([]uint64, error) {
|
|
||||||
s := strings.Split(val, sep)
|
|
||||||
values := make([]uint64, len(s))
|
|
||||||
for i, v := range s {
|
|
||||||
value, err := Uint64(v)
|
|
||||||
if err != nil {
|
|
||||||
return values, err
|
|
||||||
}
|
|
||||||
values[i] = value
|
|
||||||
}
|
|
||||||
return values, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Uint32 converts the given string representation of an integer into uint32.
|
|
||||||
func Uint32(val string) (uint32, error) {
|
|
||||||
i, err := strconv.ParseUint(val, 0, 32)
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
return uint32(i), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Uint32Slice converts 'val' where individual integers are separated by
|
|
||||||
// 'sep' into a uint32 slice.
|
|
||||||
func Uint32Slice(val, sep string) ([]uint32, error) {
|
|
||||||
s := strings.Split(val, sep)
|
|
||||||
values := make([]uint32, len(s))
|
|
||||||
for i, v := range s {
|
|
||||||
value, err := Uint32(v)
|
|
||||||
if err != nil {
|
|
||||||
return values, err
|
|
||||||
}
|
|
||||||
values[i] = value
|
|
||||||
}
|
|
||||||
return values, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bytes converts the given string representation of a byte sequence into a slice of bytes
|
|
||||||
// A bytes sequence is encoded in URL-safe base64 without padding
|
|
||||||
func Bytes(val string) ([]byte, error) {
|
|
||||||
b, err := base64.StdEncoding.DecodeString(val)
|
|
||||||
if err != nil {
|
|
||||||
b, err = base64.URLEncoding.DecodeString(val)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return b, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// BytesSlice converts 'val' where individual bytes sequences, encoded in URL-safe
|
|
||||||
// base64 without padding, are separated by 'sep' into a slice of bytes slices slice.
|
|
||||||
func BytesSlice(val, sep string) ([][]byte, error) {
|
|
||||||
s := strings.Split(val, sep)
|
|
||||||
values := make([][]byte, len(s))
|
|
||||||
for i, v := range s {
|
|
||||||
value, err := Bytes(v)
|
|
||||||
if err != nil {
|
|
||||||
return values, err
|
|
||||||
}
|
|
||||||
values[i] = value
|
|
||||||
}
|
|
||||||
return values, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Timestamp converts the given RFC3339 formatted string into a timestamp.Timestamp.
|
|
||||||
func Timestamp(val string) (*timestamp.Timestamp, error) {
|
|
||||||
var r *timestamp.Timestamp
|
|
||||||
err := jsonpb.UnmarshalString(val, r)
|
|
||||||
return r, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Duration converts the given string into a timestamp.Duration.
|
|
||||||
func Duration(val string) (*duration.Duration, error) {
|
|
||||||
var r *duration.Duration
|
|
||||||
err := jsonpb.UnmarshalString(val, r)
|
|
||||||
return r, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enum converts the given string into an int32 that should be type casted into the
|
|
||||||
// correct enum proto type.
|
|
||||||
func Enum(val string, enumValMap map[string]int32) (int32, error) {
|
|
||||||
e, ok := enumValMap[val]
|
|
||||||
if ok {
|
|
||||||
return e, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
i, err := Int32(val)
|
|
||||||
if err != nil {
|
|
||||||
return 0, fmt.Errorf("%s is not valid", val)
|
|
||||||
}
|
|
||||||
for _, v := range enumValMap {
|
|
||||||
if v == i {
|
|
||||||
return i, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0, fmt.Errorf("%s is not valid", val)
|
|
||||||
}
|
|
||||||
|
|
||||||
// EnumSlice converts 'val' where individual enums are separated by 'sep'
|
|
||||||
// into a int32 slice. Each individual int32 should be type casted into the
|
|
||||||
// correct enum proto type.
|
|
||||||
func EnumSlice(val, sep string, enumValMap map[string]int32) ([]int32, error) {
|
|
||||||
s := strings.Split(val, sep)
|
|
||||||
values := make([]int32, len(s))
|
|
||||||
for i, v := range s {
|
|
||||||
value, err := Enum(v, enumValMap)
|
|
||||||
if err != nil {
|
|
||||||
return values, err
|
|
||||||
}
|
|
||||||
values[i] = value
|
|
||||||
}
|
|
||||||
return values, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
Support fot google.protobuf.wrappers on top of primitive types
|
|
||||||
*/
|
|
||||||
|
|
||||||
// StringValue well-known type support as wrapper around string type
|
|
||||||
func StringValue(val string) (*wrappers.StringValue, error) {
|
|
||||||
return &wrappers.StringValue{Value: val}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// FloatValue well-known type support as wrapper around float32 type
|
|
||||||
func FloatValue(val string) (*wrappers.FloatValue, error) {
|
|
||||||
parsedVal, err := Float32(val)
|
|
||||||
return &wrappers.FloatValue{Value: parsedVal}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// DoubleValue well-known type support as wrapper around float64 type
|
|
||||||
func DoubleValue(val string) (*wrappers.DoubleValue, error) {
|
|
||||||
parsedVal, err := Float64(val)
|
|
||||||
return &wrappers.DoubleValue{Value: parsedVal}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// BoolValue well-known type support as wrapper around bool type
|
|
||||||
func BoolValue(val string) (*wrappers.BoolValue, error) {
|
|
||||||
parsedVal, err := Bool(val)
|
|
||||||
return &wrappers.BoolValue{Value: parsedVal}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Int32Value well-known type support as wrapper around int32 type
|
|
||||||
func Int32Value(val string) (*wrappers.Int32Value, error) {
|
|
||||||
parsedVal, err := Int32(val)
|
|
||||||
return &wrappers.Int32Value{Value: parsedVal}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// UInt32Value well-known type support as wrapper around uint32 type
|
|
||||||
func UInt32Value(val string) (*wrappers.UInt32Value, error) {
|
|
||||||
parsedVal, err := Uint32(val)
|
|
||||||
return &wrappers.UInt32Value{Value: parsedVal}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Int64Value well-known type support as wrapper around int64 type
|
|
||||||
func Int64Value(val string) (*wrappers.Int64Value, error) {
|
|
||||||
parsedVal, err := Int64(val)
|
|
||||||
return &wrappers.Int64Value{Value: parsedVal}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// UInt64Value well-known type support as wrapper around uint64 type
|
|
||||||
func UInt64Value(val string) (*wrappers.UInt64Value, error) {
|
|
||||||
parsedVal, err := Uint64(val)
|
|
||||||
return &wrappers.UInt64Value{Value: parsedVal}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// BytesValue well-known type support as wrapper around bytes[] type
|
|
||||||
func BytesValue(val string) (*wrappers.BytesValue, error) {
|
|
||||||
parsedVal, err := Bytes(val)
|
|
||||||
return &wrappers.BytesValue{Value: parsedVal}, err
|
|
||||||
}
|
|
|
@ -1,5 +0,0 @@
|
||||||
/*
|
|
||||||
Package runtime contains runtime helper functions used by
|
|
||||||
servers which protoc-gen-grpc-gateway generates.
|
|
||||||
*/
|
|
||||||
package runtime
|
|
|
@ -1,145 +0,0 @@
|
||||||
package runtime
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"io"
|
|
||||||
"net/http"
|
|
||||||
|
|
||||||
"github.com/golang/protobuf/proto"
|
|
||||||
"github.com/golang/protobuf/ptypes/any"
|
|
||||||
"google.golang.org/grpc/codes"
|
|
||||||
"google.golang.org/grpc/grpclog"
|
|
||||||
"google.golang.org/grpc/status"
|
|
||||||
)
|
|
||||||
|
|
||||||
// HTTPStatusFromCode converts a gRPC error code into the corresponding HTTP response status.
|
|
||||||
// See: https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto
|
|
||||||
func HTTPStatusFromCode(code codes.Code) int {
|
|
||||||
switch code {
|
|
||||||
case codes.OK:
|
|
||||||
return http.StatusOK
|
|
||||||
case codes.Canceled:
|
|
||||||
return http.StatusRequestTimeout
|
|
||||||
case codes.Unknown:
|
|
||||||
return http.StatusInternalServerError
|
|
||||||
case codes.InvalidArgument:
|
|
||||||
return http.StatusBadRequest
|
|
||||||
case codes.DeadlineExceeded:
|
|
||||||
return http.StatusGatewayTimeout
|
|
||||||
case codes.NotFound:
|
|
||||||
return http.StatusNotFound
|
|
||||||
case codes.AlreadyExists:
|
|
||||||
return http.StatusConflict
|
|
||||||
case codes.PermissionDenied:
|
|
||||||
return http.StatusForbidden
|
|
||||||
case codes.Unauthenticated:
|
|
||||||
return http.StatusUnauthorized
|
|
||||||
case codes.ResourceExhausted:
|
|
||||||
return http.StatusTooManyRequests
|
|
||||||
case codes.FailedPrecondition:
|
|
||||||
return http.StatusPreconditionFailed
|
|
||||||
case codes.Aborted:
|
|
||||||
return http.StatusConflict
|
|
||||||
case codes.OutOfRange:
|
|
||||||
return http.StatusBadRequest
|
|
||||||
case codes.Unimplemented:
|
|
||||||
return http.StatusNotImplemented
|
|
||||||
case codes.Internal:
|
|
||||||
return http.StatusInternalServerError
|
|
||||||
case codes.Unavailable:
|
|
||||||
return http.StatusServiceUnavailable
|
|
||||||
case codes.DataLoss:
|
|
||||||
return http.StatusInternalServerError
|
|
||||||
}
|
|
||||||
|
|
||||||
grpclog.Infof("Unknown gRPC error code: %v", code)
|
|
||||||
return http.StatusInternalServerError
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
|
||||||
// HTTPError replies to the request with the error.
|
|
||||||
// You can set a custom function to this variable to customize error format.
|
|
||||||
HTTPError = DefaultHTTPError
|
|
||||||
// OtherErrorHandler handles the following error used by the gateway: StatusMethodNotAllowed StatusNotFound and StatusBadRequest
|
|
||||||
OtherErrorHandler = DefaultOtherErrorHandler
|
|
||||||
)
|
|
||||||
|
|
||||||
type errorBody struct {
|
|
||||||
Error string `protobuf:"bytes,1,name=error" json:"error"`
|
|
||||||
// This is to make the error more compatible with users that expect errors to be Status objects:
|
|
||||||
// https://github.com/grpc/grpc/blob/master/src/proto/grpc/status/status.proto
|
|
||||||
// It should be the exact same message as the Error field.
|
|
||||||
Message string `protobuf:"bytes,1,name=message" json:"message"`
|
|
||||||
Code int32 `protobuf:"varint,2,name=code" json:"code"`
|
|
||||||
Details []*any.Any `protobuf:"bytes,3,rep,name=details" json:"details,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make this also conform to proto.Message for builtin JSONPb Marshaler
|
|
||||||
func (e *errorBody) Reset() { *e = errorBody{} }
|
|
||||||
func (e *errorBody) String() string { return proto.CompactTextString(e) }
|
|
||||||
func (*errorBody) ProtoMessage() {}
|
|
||||||
|
|
||||||
// DefaultHTTPError is the default implementation of HTTPError.
|
|
||||||
// If "err" is an error from gRPC system, the function replies with the status code mapped by HTTPStatusFromCode.
|
|
||||||
// If otherwise, it replies with http.StatusInternalServerError.
|
|
||||||
//
|
|
||||||
// The response body returned by this function is a JSON object,
|
|
||||||
// which contains a member whose key is "error" and whose value is err.Error().
|
|
||||||
func DefaultHTTPError(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, _ *http.Request, err error) {
|
|
||||||
const fallback = `{"error": "failed to marshal error message"}`
|
|
||||||
|
|
||||||
s, ok := status.FromError(err)
|
|
||||||
if !ok {
|
|
||||||
s = status.New(codes.Unknown, err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
w.Header().Del("Trailer")
|
|
||||||
|
|
||||||
contentType := marshaler.ContentType()
|
|
||||||
// Check marshaler on run time in order to keep backwards compatability
|
|
||||||
// An interface param needs to be added to the ContentType() function on
|
|
||||||
// the Marshal interface to be able to remove this check
|
|
||||||
if httpBodyMarshaler, ok := marshaler.(*HTTPBodyMarshaler); ok {
|
|
||||||
pb := s.Proto()
|
|
||||||
contentType = httpBodyMarshaler.ContentTypeFromMessage(pb)
|
|
||||||
}
|
|
||||||
w.Header().Set("Content-Type", contentType)
|
|
||||||
|
|
||||||
body := &errorBody{
|
|
||||||
Error: s.Message(),
|
|
||||||
Message: s.Message(),
|
|
||||||
Code: int32(s.Code()),
|
|
||||||
Details: s.Proto().GetDetails(),
|
|
||||||
}
|
|
||||||
|
|
||||||
buf, merr := marshaler.Marshal(body)
|
|
||||||
if merr != nil {
|
|
||||||
grpclog.Infof("Failed to marshal error message %q: %v", body, merr)
|
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
|
||||||
if _, err := io.WriteString(w, fallback); err != nil {
|
|
||||||
grpclog.Infof("Failed to write response: %v", err)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
md, ok := ServerMetadataFromContext(ctx)
|
|
||||||
if !ok {
|
|
||||||
grpclog.Infof("Failed to extract ServerMetadata from context")
|
|
||||||
}
|
|
||||||
|
|
||||||
handleForwardResponseServerMetadata(w, mux, md)
|
|
||||||
handleForwardResponseTrailerHeader(w, md)
|
|
||||||
st := HTTPStatusFromCode(s.Code())
|
|
||||||
w.WriteHeader(st)
|
|
||||||
if _, err := w.Write(buf); err != nil {
|
|
||||||
grpclog.Infof("Failed to write response: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
handleForwardResponseTrailer(w, md)
|
|
||||||
}
|
|
||||||
|
|
||||||
// DefaultOtherErrorHandler is the default implementation of OtherErrorHandler.
|
|
||||||
// It simply writes a string representation of the given error into "w".
|
|
||||||
func DefaultOtherErrorHandler(w http.ResponseWriter, _ *http.Request, msg string, code int) {
|
|
||||||
http.Error(w, msg, code)
|
|
||||||
}
|
|
|
@ -1,70 +0,0 @@
|
||||||
package runtime
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"io"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/golang/protobuf/protoc-gen-go/generator"
|
|
||||||
"google.golang.org/genproto/protobuf/field_mask"
|
|
||||||
)
|
|
||||||
|
|
||||||
// FieldMaskFromRequestBody creates a FieldMask printing all complete paths from the JSON body.
|
|
||||||
func FieldMaskFromRequestBody(r io.Reader) (*field_mask.FieldMask, error) {
|
|
||||||
fm := &field_mask.FieldMask{}
|
|
||||||
var root interface{}
|
|
||||||
if err := json.NewDecoder(r).Decode(&root); err != nil {
|
|
||||||
if err == io.EOF {
|
|
||||||
return fm, nil
|
|
||||||
}
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
queue := []fieldMaskPathItem{{node: root}}
|
|
||||||
for len(queue) > 0 {
|
|
||||||
// dequeue an item
|
|
||||||
item := queue[0]
|
|
||||||
queue = queue[1:]
|
|
||||||
|
|
||||||
if m, ok := item.node.(map[string]interface{}); ok {
|
|
||||||
// if the item is an object, then enqueue all of its children
|
|
||||||
for k, v := range m {
|
|
||||||
queue = append(queue, fieldMaskPathItem{path: append(item.path, generator.CamelCase(k)), node: v})
|
|
||||||
}
|
|
||||||
} else if len(item.path) > 0 {
|
|
||||||
// otherwise, it's a leaf node so print its path
|
|
||||||
fm.Paths = append(fm.Paths, strings.Join(item.path, "."))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return fm, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// fieldMaskPathItem stores a in-progress deconstruction of a path for a fieldmask
|
|
||||||
type fieldMaskPathItem struct {
|
|
||||||
// the list of prior fields leading up to node
|
|
||||||
path []string
|
|
||||||
|
|
||||||
// a generic decoded json object the current item to inspect for further path extraction
|
|
||||||
node interface{}
|
|
||||||
}
|
|
||||||
|
|
||||||
// CamelCaseFieldMask updates the given FieldMask by converting all of its paths to CamelCase, using the same heuristic
|
|
||||||
// that's used for naming protobuf fields in Go.
|
|
||||||
func CamelCaseFieldMask(mask *field_mask.FieldMask) {
|
|
||||||
if mask == nil || mask.Paths == nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var newPaths []string
|
|
||||||
for _, path := range mask.Paths {
|
|
||||||
lowerCasedParts := strings.Split(path, ".")
|
|
||||||
var camelCasedParts []string
|
|
||||||
for _, part := range lowerCasedParts {
|
|
||||||
camelCasedParts = append(camelCasedParts, generator.CamelCase(part))
|
|
||||||
}
|
|
||||||
newPaths = append(newPaths, strings.Join(camelCasedParts, "."))
|
|
||||||
}
|
|
||||||
|
|
||||||
mask.Paths = newPaths
|
|
||||||
}
|
|
|
@ -1,215 +0,0 @@
|
||||||
package runtime
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
"net/http"
|
|
||||||
"net/textproto"
|
|
||||||
|
|
||||||
"context"
|
|
||||||
"github.com/golang/protobuf/proto"
|
|
||||||
"github.com/golang/protobuf/ptypes/any"
|
|
||||||
"github.com/grpc-ecosystem/grpc-gateway/internal"
|
|
||||||
"google.golang.org/grpc/codes"
|
|
||||||
"google.golang.org/grpc/grpclog"
|
|
||||||
"google.golang.org/grpc/status"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ForwardResponseStream forwards the stream from gRPC server to REST client.
|
|
||||||
func ForwardResponseStream(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, req *http.Request, recv func() (proto.Message, error), opts ...func(context.Context, http.ResponseWriter, proto.Message) error) {
|
|
||||||
f, ok := w.(http.Flusher)
|
|
||||||
if !ok {
|
|
||||||
grpclog.Infof("Flush not supported in %T", w)
|
|
||||||
http.Error(w, "unexpected type of web server", http.StatusInternalServerError)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
md, ok := ServerMetadataFromContext(ctx)
|
|
||||||
if !ok {
|
|
||||||
grpclog.Infof("Failed to extract ServerMetadata from context")
|
|
||||||
http.Error(w, "unexpected error", http.StatusInternalServerError)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
handleForwardResponseServerMetadata(w, mux, md)
|
|
||||||
|
|
||||||
w.Header().Set("Transfer-Encoding", "chunked")
|
|
||||||
w.Header().Set("Content-Type", marshaler.ContentType())
|
|
||||||
if err := handleForwardResponseOptions(ctx, w, nil, opts); err != nil {
|
|
||||||
HTTPError(ctx, mux, marshaler, w, req, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var delimiter []byte
|
|
||||||
if d, ok := marshaler.(Delimited); ok {
|
|
||||||
delimiter = d.Delimiter()
|
|
||||||
} else {
|
|
||||||
delimiter = []byte("\n")
|
|
||||||
}
|
|
||||||
|
|
||||||
var wroteHeader bool
|
|
||||||
for {
|
|
||||||
resp, err := recv()
|
|
||||||
if err == io.EOF {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
handleForwardResponseStreamError(wroteHeader, marshaler, w, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := handleForwardResponseOptions(ctx, w, resp, opts); err != nil {
|
|
||||||
handleForwardResponseStreamError(wroteHeader, marshaler, w, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
buf, err := marshaler.Marshal(streamChunk(resp, nil))
|
|
||||||
if err != nil {
|
|
||||||
grpclog.Infof("Failed to marshal response chunk: %v", err)
|
|
||||||
handleForwardResponseStreamError(wroteHeader, marshaler, w, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if _, err = w.Write(buf); err != nil {
|
|
||||||
grpclog.Infof("Failed to send response chunk: %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
wroteHeader = true
|
|
||||||
if _, err = w.Write(delimiter); err != nil {
|
|
||||||
grpclog.Infof("Failed to send delimiter chunk: %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
f.Flush()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func handleForwardResponseServerMetadata(w http.ResponseWriter, mux *ServeMux, md ServerMetadata) {
|
|
||||||
for k, vs := range md.HeaderMD {
|
|
||||||
if h, ok := mux.outgoingHeaderMatcher(k); ok {
|
|
||||||
for _, v := range vs {
|
|
||||||
w.Header().Add(h, v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func handleForwardResponseTrailerHeader(w http.ResponseWriter, md ServerMetadata) {
|
|
||||||
for k := range md.TrailerMD {
|
|
||||||
tKey := textproto.CanonicalMIMEHeaderKey(fmt.Sprintf("%s%s", MetadataTrailerPrefix, k))
|
|
||||||
w.Header().Add("Trailer", tKey)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func handleForwardResponseTrailer(w http.ResponseWriter, md ServerMetadata) {
|
|
||||||
for k, vs := range md.TrailerMD {
|
|
||||||
tKey := fmt.Sprintf("%s%s", MetadataTrailerPrefix, k)
|
|
||||||
for _, v := range vs {
|
|
||||||
w.Header().Add(tKey, v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// responseBody interface contains method for getting field for marshaling to the response body
|
|
||||||
// this method is generated for response struct from the value of `response_body` in the `google.api.HttpRule`
|
|
||||||
type responseBody interface {
|
|
||||||
XXX_ResponseBody() interface{}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ForwardResponseMessage forwards the message "resp" from gRPC server to REST client.
|
|
||||||
func ForwardResponseMessage(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, req *http.Request, resp proto.Message, opts ...func(context.Context, http.ResponseWriter, proto.Message) error) {
|
|
||||||
md, ok := ServerMetadataFromContext(ctx)
|
|
||||||
if !ok {
|
|
||||||
grpclog.Infof("Failed to extract ServerMetadata from context")
|
|
||||||
}
|
|
||||||
|
|
||||||
handleForwardResponseServerMetadata(w, mux, md)
|
|
||||||
handleForwardResponseTrailerHeader(w, md)
|
|
||||||
|
|
||||||
contentType := marshaler.ContentType()
|
|
||||||
// Check marshaler on run time in order to keep backwards compatability
|
|
||||||
// An interface param needs to be added to the ContentType() function on
|
|
||||||
// the Marshal interface to be able to remove this check
|
|
||||||
if httpBodyMarshaler, ok := marshaler.(*HTTPBodyMarshaler); ok {
|
|
||||||
contentType = httpBodyMarshaler.ContentTypeFromMessage(resp)
|
|
||||||
}
|
|
||||||
w.Header().Set("Content-Type", contentType)
|
|
||||||
|
|
||||||
if err := handleForwardResponseOptions(ctx, w, resp, opts); err != nil {
|
|
||||||
HTTPError(ctx, mux, marshaler, w, req, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
var buf []byte
|
|
||||||
var err error
|
|
||||||
if rb, ok := resp.(responseBody); ok {
|
|
||||||
buf, err = marshaler.Marshal(rb.XXX_ResponseBody())
|
|
||||||
} else {
|
|
||||||
buf, err = marshaler.Marshal(resp)
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
grpclog.Infof("Marshal error: %v", err)
|
|
||||||
HTTPError(ctx, mux, marshaler, w, req, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, err = w.Write(buf); err != nil {
|
|
||||||
grpclog.Infof("Failed to write response: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
handleForwardResponseTrailer(w, md)
|
|
||||||
}
|
|
||||||
|
|
||||||
func handleForwardResponseOptions(ctx context.Context, w http.ResponseWriter, resp proto.Message, opts []func(context.Context, http.ResponseWriter, proto.Message) error) error {
|
|
||||||
if len(opts) == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
for _, opt := range opts {
|
|
||||||
if err := opt(ctx, w, resp); err != nil {
|
|
||||||
grpclog.Infof("Error handling ForwardResponseOptions: %v", err)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func handleForwardResponseStreamError(wroteHeader bool, marshaler Marshaler, w http.ResponseWriter, err error) {
|
|
||||||
buf, merr := marshaler.Marshal(streamChunk(nil, err))
|
|
||||||
if merr != nil {
|
|
||||||
grpclog.Infof("Failed to marshal an error: %v", merr)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if !wroteHeader {
|
|
||||||
s, ok := status.FromError(err)
|
|
||||||
if !ok {
|
|
||||||
s = status.New(codes.Unknown, err.Error())
|
|
||||||
}
|
|
||||||
w.WriteHeader(HTTPStatusFromCode(s.Code()))
|
|
||||||
}
|
|
||||||
if _, werr := w.Write(buf); werr != nil {
|
|
||||||
grpclog.Infof("Failed to notify error to client: %v", werr)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func streamChunk(result proto.Message, err error) map[string]proto.Message {
|
|
||||||
if err != nil {
|
|
||||||
grpcCode := codes.Unknown
|
|
||||||
grpcMessage := err.Error()
|
|
||||||
var grpcDetails []*any.Any
|
|
||||||
if s, ok := status.FromError(err); ok {
|
|
||||||
grpcCode = s.Code()
|
|
||||||
grpcMessage = s.Message()
|
|
||||||
grpcDetails = s.Proto().GetDetails()
|
|
||||||
}
|
|
||||||
httpCode := HTTPStatusFromCode(grpcCode)
|
|
||||||
return map[string]proto.Message{
|
|
||||||
"error": &internal.StreamError{
|
|
||||||
GrpcCode: int32(grpcCode),
|
|
||||||
HttpCode: int32(httpCode),
|
|
||||||
Message: grpcMessage,
|
|
||||||
HttpStatus: http.StatusText(httpCode),
|
|
||||||
Details: grpcDetails,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if result == nil {
|
|
||||||
return streamChunk(nil, fmt.Errorf("empty response"))
|
|
||||||
}
|
|
||||||
return map[string]proto.Message{"result": result}
|
|
||||||
}
|
|
43
vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/marshal_httpbodyproto.go
generated
vendored
43
vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/marshal_httpbodyproto.go
generated
vendored
|
@ -1,43 +0,0 @@
|
||||||
package runtime
|
|
||||||
|
|
||||||
import (
|
|
||||||
"google.golang.org/genproto/googleapis/api/httpbody"
|
|
||||||
)
|
|
||||||
|
|
||||||
// SetHTTPBodyMarshaler overwrite the default marshaler with the HTTPBodyMarshaler
|
|
||||||
func SetHTTPBodyMarshaler(serveMux *ServeMux) {
|
|
||||||
serveMux.marshalers.mimeMap[MIMEWildcard] = &HTTPBodyMarshaler{
|
|
||||||
Marshaler: &JSONPb{OrigName: true},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// HTTPBodyMarshaler is a Marshaler which supports marshaling of a
|
|
||||||
// google.api.HttpBody message as the full response body if it is
|
|
||||||
// the actual message used as the response. If not, then this will
|
|
||||||
// simply fallback to the Marshaler specified as its default Marshaler.
|
|
||||||
type HTTPBodyMarshaler struct {
|
|
||||||
Marshaler
|
|
||||||
}
|
|
||||||
|
|
||||||
// ContentType implementation to keep backwards compatability with marshal interface
|
|
||||||
func (h *HTTPBodyMarshaler) ContentType() string {
|
|
||||||
return h.ContentTypeFromMessage(nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ContentTypeFromMessage in case v is a google.api.HttpBody message it returns
|
|
||||||
// its specified content type otherwise fall back to the default Marshaler.
|
|
||||||
func (h *HTTPBodyMarshaler) ContentTypeFromMessage(v interface{}) string {
|
|
||||||
if httpBody, ok := v.(*httpbody.HttpBody); ok {
|
|
||||||
return httpBody.GetContentType()
|
|
||||||
}
|
|
||||||
return h.Marshaler.ContentType()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Marshal marshals "v" by returning the body bytes if v is a
|
|
||||||
// google.api.HttpBody message, otherwise it falls back to the default Marshaler.
|
|
||||||
func (h *HTTPBodyMarshaler) Marshal(v interface{}) ([]byte, error) {
|
|
||||||
if httpBody, ok := v.(*httpbody.HttpBody); ok {
|
|
||||||
return httpBody.Data, nil
|
|
||||||
}
|
|
||||||
return h.Marshaler.Marshal(v)
|
|
||||||
}
|
|
|
@ -1,45 +0,0 @@
|
||||||
package runtime
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"io"
|
|
||||||
)
|
|
||||||
|
|
||||||
// JSONBuiltin is a Marshaler which marshals/unmarshals into/from JSON
|
|
||||||
// with the standard "encoding/json" package of Golang.
|
|
||||||
// Although it is generally faster for simple proto messages than JSONPb,
|
|
||||||
// it does not support advanced features of protobuf, e.g. map, oneof, ....
|
|
||||||
//
|
|
||||||
// The NewEncoder and NewDecoder types return *json.Encoder and
|
|
||||||
// *json.Decoder respectively.
|
|
||||||
type JSONBuiltin struct{}
|
|
||||||
|
|
||||||
// ContentType always Returns "application/json".
|
|
||||||
func (*JSONBuiltin) ContentType() string {
|
|
||||||
return "application/json"
|
|
||||||
}
|
|
||||||
|
|
||||||
// Marshal marshals "v" into JSON
|
|
||||||
func (j *JSONBuiltin) Marshal(v interface{}) ([]byte, error) {
|
|
||||||
return json.Marshal(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unmarshal unmarshals JSON data into "v".
|
|
||||||
func (j *JSONBuiltin) Unmarshal(data []byte, v interface{}) error {
|
|
||||||
return json.Unmarshal(data, v)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewDecoder returns a Decoder which reads JSON stream from "r".
|
|
||||||
func (j *JSONBuiltin) NewDecoder(r io.Reader) Decoder {
|
|
||||||
return json.NewDecoder(r)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewEncoder returns an Encoder which writes JSON stream into "w".
|
|
||||||
func (j *JSONBuiltin) NewEncoder(w io.Writer) Encoder {
|
|
||||||
return json.NewEncoder(w)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delimiter for newline encoded JSON streams.
|
|
||||||
func (j *JSONBuiltin) Delimiter() []byte {
|
|
||||||
return []byte("\n")
|
|
||||||
}
|
|
|
@ -1,242 +0,0 @@
|
||||||
package runtime
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
"reflect"
|
|
||||||
|
|
||||||
"github.com/golang/protobuf/jsonpb"
|
|
||||||
"github.com/golang/protobuf/proto"
|
|
||||||
)
|
|
||||||
|
|
||||||
// JSONPb is a Marshaler which marshals/unmarshals into/from JSON
|
|
||||||
// with the "github.com/golang/protobuf/jsonpb".
|
|
||||||
// It supports fully functionality of protobuf unlike JSONBuiltin.
|
|
||||||
//
|
|
||||||
// The NewDecoder method returns a DecoderWrapper, so the underlying
|
|
||||||
// *json.Decoder methods can be used.
|
|
||||||
type JSONPb jsonpb.Marshaler
|
|
||||||
|
|
||||||
// ContentType always returns "application/json".
|
|
||||||
func (*JSONPb) ContentType() string {
|
|
||||||
return "application/json"
|
|
||||||
}
|
|
||||||
|
|
||||||
// Marshal marshals "v" into JSON.
|
|
||||||
func (j *JSONPb) Marshal(v interface{}) ([]byte, error) {
|
|
||||||
if _, ok := v.(proto.Message); !ok {
|
|
||||||
return j.marshalNonProtoField(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
var buf bytes.Buffer
|
|
||||||
if err := j.marshalTo(&buf, v); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return buf.Bytes(), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (j *JSONPb) marshalTo(w io.Writer, v interface{}) error {
|
|
||||||
p, ok := v.(proto.Message)
|
|
||||||
if !ok {
|
|
||||||
buf, err := j.marshalNonProtoField(v)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
_, err = w.Write(buf)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return (*jsonpb.Marshaler)(j).Marshal(w, p)
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
|
||||||
// protoMessageType is stored to prevent constant lookup of the same type at runtime.
|
|
||||||
protoMessageType = reflect.TypeOf((*proto.Message)(nil)).Elem()
|
|
||||||
)
|
|
||||||
|
|
||||||
// marshalNonProto marshals a non-message field of a protobuf message.
|
|
||||||
// This function does not correctly marshals arbitrary data structure into JSON,
|
|
||||||
// but it is only capable of marshaling non-message field values of protobuf,
|
|
||||||
// i.e. primitive types, enums; pointers to primitives or enums; maps from
|
|
||||||
// integer/string types to primitives/enums/pointers to messages.
|
|
||||||
func (j *JSONPb) marshalNonProtoField(v interface{}) ([]byte, error) {
|
|
||||||
if v == nil {
|
|
||||||
return []byte("null"), nil
|
|
||||||
}
|
|
||||||
rv := reflect.ValueOf(v)
|
|
||||||
for rv.Kind() == reflect.Ptr {
|
|
||||||
if rv.IsNil() {
|
|
||||||
return []byte("null"), nil
|
|
||||||
}
|
|
||||||
rv = rv.Elem()
|
|
||||||
}
|
|
||||||
|
|
||||||
if rv.Kind() == reflect.Slice {
|
|
||||||
if rv.IsNil() {
|
|
||||||
if j.EmitDefaults {
|
|
||||||
return []byte("[]"), nil
|
|
||||||
}
|
|
||||||
return []byte("null"), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if rv.Type().Elem().Implements(protoMessageType) {
|
|
||||||
var buf bytes.Buffer
|
|
||||||
err := buf.WriteByte('[')
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
for i := 0; i < rv.Len(); i++ {
|
|
||||||
if i != 0 {
|
|
||||||
err = buf.WriteByte(',')
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if err = (*jsonpb.Marshaler)(j).Marshal(&buf, rv.Index(i).Interface().(proto.Message)); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
err = buf.WriteByte(']')
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return buf.Bytes(), nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if rv.Kind() == reflect.Map {
|
|
||||||
m := make(map[string]*json.RawMessage)
|
|
||||||
for _, k := range rv.MapKeys() {
|
|
||||||
buf, err := j.Marshal(rv.MapIndex(k).Interface())
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
m[fmt.Sprintf("%v", k.Interface())] = (*json.RawMessage)(&buf)
|
|
||||||
}
|
|
||||||
if j.Indent != "" {
|
|
||||||
return json.MarshalIndent(m, "", j.Indent)
|
|
||||||
}
|
|
||||||
return json.Marshal(m)
|
|
||||||
}
|
|
||||||
if enum, ok := rv.Interface().(protoEnum); ok && !j.EnumsAsInts {
|
|
||||||
return json.Marshal(enum.String())
|
|
||||||
}
|
|
||||||
return json.Marshal(rv.Interface())
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unmarshal unmarshals JSON "data" into "v"
|
|
||||||
func (j *JSONPb) Unmarshal(data []byte, v interface{}) error {
|
|
||||||
return unmarshalJSONPb(data, v)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewDecoder returns a Decoder which reads JSON stream from "r".
|
|
||||||
func (j *JSONPb) NewDecoder(r io.Reader) Decoder {
|
|
||||||
d := json.NewDecoder(r)
|
|
||||||
return DecoderWrapper{Decoder: d}
|
|
||||||
}
|
|
||||||
|
|
||||||
// DecoderWrapper is a wrapper around a *json.Decoder that adds
|
|
||||||
// support for protos to the Decode method.
|
|
||||||
type DecoderWrapper struct {
|
|
||||||
*json.Decoder
|
|
||||||
}
|
|
||||||
|
|
||||||
// Decode wraps the embedded decoder's Decode method to support
|
|
||||||
// protos using a jsonpb.Unmarshaler.
|
|
||||||
func (d DecoderWrapper) Decode(v interface{}) error {
|
|
||||||
return decodeJSONPb(d.Decoder, v)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewEncoder returns an Encoder which writes JSON stream into "w".
|
|
||||||
func (j *JSONPb) NewEncoder(w io.Writer) Encoder {
|
|
||||||
return EncoderFunc(func(v interface{}) error { return j.marshalTo(w, v) })
|
|
||||||
}
|
|
||||||
|
|
||||||
func unmarshalJSONPb(data []byte, v interface{}) error {
|
|
||||||
d := json.NewDecoder(bytes.NewReader(data))
|
|
||||||
return decodeJSONPb(d, v)
|
|
||||||
}
|
|
||||||
|
|
||||||
func decodeJSONPb(d *json.Decoder, v interface{}) error {
|
|
||||||
p, ok := v.(proto.Message)
|
|
||||||
if !ok {
|
|
||||||
return decodeNonProtoField(d, v)
|
|
||||||
}
|
|
||||||
unmarshaler := &jsonpb.Unmarshaler{AllowUnknownFields: true}
|
|
||||||
return unmarshaler.UnmarshalNext(d, p)
|
|
||||||
}
|
|
||||||
|
|
||||||
func decodeNonProtoField(d *json.Decoder, v interface{}) error {
|
|
||||||
rv := reflect.ValueOf(v)
|
|
||||||
if rv.Kind() != reflect.Ptr {
|
|
||||||
return fmt.Errorf("%T is not a pointer", v)
|
|
||||||
}
|
|
||||||
for rv.Kind() == reflect.Ptr {
|
|
||||||
if rv.IsNil() {
|
|
||||||
rv.Set(reflect.New(rv.Type().Elem()))
|
|
||||||
}
|
|
||||||
if rv.Type().ConvertibleTo(typeProtoMessage) {
|
|
||||||
unmarshaler := &jsonpb.Unmarshaler{AllowUnknownFields: true}
|
|
||||||
return unmarshaler.UnmarshalNext(d, rv.Interface().(proto.Message))
|
|
||||||
}
|
|
||||||
rv = rv.Elem()
|
|
||||||
}
|
|
||||||
if rv.Kind() == reflect.Map {
|
|
||||||
if rv.IsNil() {
|
|
||||||
rv.Set(reflect.MakeMap(rv.Type()))
|
|
||||||
}
|
|
||||||
conv, ok := convFromType[rv.Type().Key().Kind()]
|
|
||||||
if !ok {
|
|
||||||
return fmt.Errorf("unsupported type of map field key: %v", rv.Type().Key())
|
|
||||||
}
|
|
||||||
|
|
||||||
m := make(map[string]*json.RawMessage)
|
|
||||||
if err := d.Decode(&m); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
for k, v := range m {
|
|
||||||
result := conv.Call([]reflect.Value{reflect.ValueOf(k)})
|
|
||||||
if err := result[1].Interface(); err != nil {
|
|
||||||
return err.(error)
|
|
||||||
}
|
|
||||||
bk := result[0]
|
|
||||||
bv := reflect.New(rv.Type().Elem())
|
|
||||||
if err := unmarshalJSONPb([]byte(*v), bv.Interface()); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
rv.SetMapIndex(bk, bv.Elem())
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
if _, ok := rv.Interface().(protoEnum); ok {
|
|
||||||
var repr interface{}
|
|
||||||
if err := d.Decode(&repr); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
switch repr.(type) {
|
|
||||||
case string:
|
|
||||||
// TODO(yugui) Should use proto.StructProperties?
|
|
||||||
return fmt.Errorf("unmarshaling of symbolic enum %q not supported: %T", repr, rv.Interface())
|
|
||||||
case float64:
|
|
||||||
rv.Set(reflect.ValueOf(int32(repr.(float64))).Convert(rv.Type()))
|
|
||||||
return nil
|
|
||||||
default:
|
|
||||||
return fmt.Errorf("cannot assign %#v into Go type %T", repr, rv.Interface())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return d.Decode(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
type protoEnum interface {
|
|
||||||
fmt.Stringer
|
|
||||||
EnumDescriptor() ([]byte, []int)
|
|
||||||
}
|
|
||||||
|
|
||||||
var typeProtoMessage = reflect.TypeOf((*proto.Message)(nil)).Elem()
|
|
||||||
|
|
||||||
// Delimiter for newline encoded JSON streams.
|
|
||||||
func (j *JSONPb) Delimiter() []byte {
|
|
||||||
return []byte("\n")
|
|
||||||
}
|
|
|
@ -1,62 +0,0 @@
|
||||||
package runtime
|
|
||||||
|
|
||||||
import (
|
|
||||||
"io"
|
|
||||||
|
|
||||||
"errors"
|
|
||||||
"github.com/golang/protobuf/proto"
|
|
||||||
"io/ioutil"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ProtoMarshaller is a Marshaller which marshals/unmarshals into/from serialize proto bytes
|
|
||||||
type ProtoMarshaller struct{}
|
|
||||||
|
|
||||||
// ContentType always returns "application/octet-stream".
|
|
||||||
func (*ProtoMarshaller) ContentType() string {
|
|
||||||
return "application/octet-stream"
|
|
||||||
}
|
|
||||||
|
|
||||||
// Marshal marshals "value" into Proto
|
|
||||||
func (*ProtoMarshaller) Marshal(value interface{}) ([]byte, error) {
|
|
||||||
message, ok := value.(proto.Message)
|
|
||||||
if !ok {
|
|
||||||
return nil, errors.New("unable to marshal non proto field")
|
|
||||||
}
|
|
||||||
return proto.Marshal(message)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unmarshal unmarshals proto "data" into "value"
|
|
||||||
func (*ProtoMarshaller) Unmarshal(data []byte, value interface{}) error {
|
|
||||||
message, ok := value.(proto.Message)
|
|
||||||
if !ok {
|
|
||||||
return errors.New("unable to unmarshal non proto field")
|
|
||||||
}
|
|
||||||
return proto.Unmarshal(data, message)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewDecoder returns a Decoder which reads proto stream from "reader".
|
|
||||||
func (marshaller *ProtoMarshaller) NewDecoder(reader io.Reader) Decoder {
|
|
||||||
return DecoderFunc(func(value interface{}) error {
|
|
||||||
buffer, err := ioutil.ReadAll(reader)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return marshaller.Unmarshal(buffer, value)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewEncoder returns an Encoder which writes proto stream into "writer".
|
|
||||||
func (marshaller *ProtoMarshaller) NewEncoder(writer io.Writer) Encoder {
|
|
||||||
return EncoderFunc(func(value interface{}) error {
|
|
||||||
buffer, err := marshaller.Marshal(value)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
_, err = writer.Write(buffer)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
}
|
|
|
@ -1,48 +0,0 @@
|
||||||
package runtime
|
|
||||||
|
|
||||||
import (
|
|
||||||
"io"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Marshaler defines a conversion between byte sequence and gRPC payloads / fields.
|
|
||||||
type Marshaler interface {
|
|
||||||
// Marshal marshals "v" into byte sequence.
|
|
||||||
Marshal(v interface{}) ([]byte, error)
|
|
||||||
// Unmarshal unmarshals "data" into "v".
|
|
||||||
// "v" must be a pointer value.
|
|
||||||
Unmarshal(data []byte, v interface{}) error
|
|
||||||
// NewDecoder returns a Decoder which reads byte sequence from "r".
|
|
||||||
NewDecoder(r io.Reader) Decoder
|
|
||||||
// NewEncoder returns an Encoder which writes bytes sequence into "w".
|
|
||||||
NewEncoder(w io.Writer) Encoder
|
|
||||||
// ContentType returns the Content-Type which this marshaler is responsible for.
|
|
||||||
ContentType() string
|
|
||||||
}
|
|
||||||
|
|
||||||
// Decoder decodes a byte sequence
|
|
||||||
type Decoder interface {
|
|
||||||
Decode(v interface{}) error
|
|
||||||
}
|
|
||||||
|
|
||||||
// Encoder encodes gRPC payloads / fields into byte sequence.
|
|
||||||
type Encoder interface {
|
|
||||||
Encode(v interface{}) error
|
|
||||||
}
|
|
||||||
|
|
||||||
// DecoderFunc adapts an decoder function into Decoder.
|
|
||||||
type DecoderFunc func(v interface{}) error
|
|
||||||
|
|
||||||
// Decode delegates invocations to the underlying function itself.
|
|
||||||
func (f DecoderFunc) Decode(v interface{}) error { return f(v) }
|
|
||||||
|
|
||||||
// EncoderFunc adapts an encoder function into Encoder
|
|
||||||
type EncoderFunc func(v interface{}) error
|
|
||||||
|
|
||||||
// Encode delegates invocations to the underlying function itself.
|
|
||||||
func (f EncoderFunc) Encode(v interface{}) error { return f(v) }
|
|
||||||
|
|
||||||
// Delimited defines the streaming delimiter.
|
|
||||||
type Delimited interface {
|
|
||||||
// Delimiter returns the record seperator for the stream.
|
|
||||||
Delimiter() []byte
|
|
||||||
}
|
|
|
@ -1,91 +0,0 @@
|
||||||
package runtime
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"net/http"
|
|
||||||
)
|
|
||||||
|
|
||||||
// MIMEWildcard is the fallback MIME type used for requests which do not match
|
|
||||||
// a registered MIME type.
|
|
||||||
const MIMEWildcard = "*"
|
|
||||||
|
|
||||||
var (
|
|
||||||
acceptHeader = http.CanonicalHeaderKey("Accept")
|
|
||||||
contentTypeHeader = http.CanonicalHeaderKey("Content-Type")
|
|
||||||
|
|
||||||
defaultMarshaler = &JSONPb{OrigName: true}
|
|
||||||
)
|
|
||||||
|
|
||||||
// MarshalerForRequest returns the inbound/outbound marshalers for this request.
|
|
||||||
// It checks the registry on the ServeMux for the MIME type set by the Content-Type header.
|
|
||||||
// If it isn't set (or the request Content-Type is empty), checks for "*".
|
|
||||||
// If there are multiple Content-Type headers set, choose the first one that it can
|
|
||||||
// exactly match in the registry.
|
|
||||||
// Otherwise, it follows the above logic for "*"/InboundMarshaler/OutboundMarshaler.
|
|
||||||
func MarshalerForRequest(mux *ServeMux, r *http.Request) (inbound Marshaler, outbound Marshaler) {
|
|
||||||
for _, acceptVal := range r.Header[acceptHeader] {
|
|
||||||
if m, ok := mux.marshalers.mimeMap[acceptVal]; ok {
|
|
||||||
outbound = m
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, contentTypeVal := range r.Header[contentTypeHeader] {
|
|
||||||
if m, ok := mux.marshalers.mimeMap[contentTypeVal]; ok {
|
|
||||||
inbound = m
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if inbound == nil {
|
|
||||||
inbound = mux.marshalers.mimeMap[MIMEWildcard]
|
|
||||||
}
|
|
||||||
if outbound == nil {
|
|
||||||
outbound = inbound
|
|
||||||
}
|
|
||||||
|
|
||||||
return inbound, outbound
|
|
||||||
}
|
|
||||||
|
|
||||||
// marshalerRegistry is a mapping from MIME types to Marshalers.
|
|
||||||
type marshalerRegistry struct {
|
|
||||||
mimeMap map[string]Marshaler
|
|
||||||
}
|
|
||||||
|
|
||||||
// add adds a marshaler for a case-sensitive MIME type string ("*" to match any
|
|
||||||
// MIME type).
|
|
||||||
func (m marshalerRegistry) add(mime string, marshaler Marshaler) error {
|
|
||||||
if len(mime) == 0 {
|
|
||||||
return errors.New("empty MIME type")
|
|
||||||
}
|
|
||||||
|
|
||||||
m.mimeMap[mime] = marshaler
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// makeMarshalerMIMERegistry returns a new registry of marshalers.
|
|
||||||
// It allows for a mapping of case-sensitive Content-Type MIME type string to runtime.Marshaler interfaces.
|
|
||||||
//
|
|
||||||
// For example, you could allow the client to specify the use of the runtime.JSONPb marshaler
|
|
||||||
// with a "application/jsonpb" Content-Type and the use of the runtime.JSONBuiltin marshaler
|
|
||||||
// with a "application/json" Content-Type.
|
|
||||||
// "*" can be used to match any Content-Type.
|
|
||||||
// This can be attached to a ServerMux with the marshaler option.
|
|
||||||
func makeMarshalerMIMERegistry() marshalerRegistry {
|
|
||||||
return marshalerRegistry{
|
|
||||||
mimeMap: map[string]Marshaler{
|
|
||||||
MIMEWildcard: defaultMarshaler,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithMarshalerOption returns a ServeMuxOption which associates inbound and outbound
|
|
||||||
// Marshalers to a MIME type in mux.
|
|
||||||
func WithMarshalerOption(mime string, marshaler Marshaler) ServeMuxOption {
|
|
||||||
return func(mux *ServeMux) {
|
|
||||||
if err := mux.marshalers.add(mime, marshaler); err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,268 +0,0 @@
|
||||||
package runtime
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
"net/http"
|
|
||||||
"net/textproto"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/golang/protobuf/proto"
|
|
||||||
"google.golang.org/grpc/codes"
|
|
||||||
"google.golang.org/grpc/metadata"
|
|
||||||
"google.golang.org/grpc/status"
|
|
||||||
)
|
|
||||||
|
|
||||||
// A HandlerFunc handles a specific pair of path pattern and HTTP method.
|
|
||||||
type HandlerFunc func(w http.ResponseWriter, r *http.Request, pathParams map[string]string)
|
|
||||||
|
|
||||||
// ServeMux is a request multiplexer for grpc-gateway.
|
|
||||||
// It matches http requests to patterns and invokes the corresponding handler.
|
|
||||||
type ServeMux struct {
|
|
||||||
// handlers maps HTTP method to a list of handlers.
|
|
||||||
handlers map[string][]handler
|
|
||||||
forwardResponseOptions []func(context.Context, http.ResponseWriter, proto.Message) error
|
|
||||||
marshalers marshalerRegistry
|
|
||||||
incomingHeaderMatcher HeaderMatcherFunc
|
|
||||||
outgoingHeaderMatcher HeaderMatcherFunc
|
|
||||||
metadataAnnotators []func(context.Context, *http.Request) metadata.MD
|
|
||||||
protoErrorHandler ProtoErrorHandlerFunc
|
|
||||||
disablePathLengthFallback bool
|
|
||||||
}
|
|
||||||
|
|
||||||
// ServeMuxOption is an option that can be given to a ServeMux on construction.
|
|
||||||
type ServeMuxOption func(*ServeMux)
|
|
||||||
|
|
||||||
// WithForwardResponseOption returns a ServeMuxOption representing the forwardResponseOption.
|
|
||||||
//
|
|
||||||
// forwardResponseOption is an option that will be called on the relevant context.Context,
|
|
||||||
// http.ResponseWriter, and proto.Message before every forwarded response.
|
|
||||||
//
|
|
||||||
// The message may be nil in the case where just a header is being sent.
|
|
||||||
func WithForwardResponseOption(forwardResponseOption func(context.Context, http.ResponseWriter, proto.Message) error) ServeMuxOption {
|
|
||||||
return func(serveMux *ServeMux) {
|
|
||||||
serveMux.forwardResponseOptions = append(serveMux.forwardResponseOptions, forwardResponseOption)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// HeaderMatcherFunc checks whether a header key should be forwarded to/from gRPC context.
|
|
||||||
type HeaderMatcherFunc func(string) (string, bool)
|
|
||||||
|
|
||||||
// DefaultHeaderMatcher is used to pass http request headers to/from gRPC context. This adds permanent HTTP header
|
|
||||||
// keys (as specified by the IANA) to gRPC context with grpcgateway- prefix. HTTP headers that start with
|
|
||||||
// 'Grpc-Metadata-' are mapped to gRPC metadata after removing prefix 'Grpc-Metadata-'.
|
|
||||||
func DefaultHeaderMatcher(key string) (string, bool) {
|
|
||||||
key = textproto.CanonicalMIMEHeaderKey(key)
|
|
||||||
if isPermanentHTTPHeader(key) {
|
|
||||||
return MetadataPrefix + key, true
|
|
||||||
} else if strings.HasPrefix(key, MetadataHeaderPrefix) {
|
|
||||||
return key[len(MetadataHeaderPrefix):], true
|
|
||||||
}
|
|
||||||
return "", false
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithIncomingHeaderMatcher returns a ServeMuxOption representing a headerMatcher for incoming request to gateway.
|
|
||||||
//
|
|
||||||
// This matcher will be called with each header in http.Request. If matcher returns true, that header will be
|
|
||||||
// passed to gRPC context. To transform the header before passing to gRPC context, matcher should return modified header.
|
|
||||||
func WithIncomingHeaderMatcher(fn HeaderMatcherFunc) ServeMuxOption {
|
|
||||||
return func(mux *ServeMux) {
|
|
||||||
mux.incomingHeaderMatcher = fn
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithOutgoingHeaderMatcher returns a ServeMuxOption representing a headerMatcher for outgoing response from gateway.
|
|
||||||
//
|
|
||||||
// This matcher will be called with each header in response header metadata. If matcher returns true, that header will be
|
|
||||||
// passed to http response returned from gateway. To transform the header before passing to response,
|
|
||||||
// matcher should return modified header.
|
|
||||||
func WithOutgoingHeaderMatcher(fn HeaderMatcherFunc) ServeMuxOption {
|
|
||||||
return func(mux *ServeMux) {
|
|
||||||
mux.outgoingHeaderMatcher = fn
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithMetadata returns a ServeMuxOption for passing metadata to a gRPC context.
|
|
||||||
//
|
|
||||||
// This can be used by services that need to read from http.Request and modify gRPC context. A common use case
|
|
||||||
// is reading token from cookie and adding it in gRPC context.
|
|
||||||
func WithMetadata(annotator func(context.Context, *http.Request) metadata.MD) ServeMuxOption {
|
|
||||||
return func(serveMux *ServeMux) {
|
|
||||||
serveMux.metadataAnnotators = append(serveMux.metadataAnnotators, annotator)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithProtoErrorHandler returns a ServeMuxOption for passing metadata to a gRPC context.
|
|
||||||
//
|
|
||||||
// This can be used to handle an error as general proto message defined by gRPC.
|
|
||||||
// The response including body and status is not backward compatible with the default error handler.
|
|
||||||
// When this option is used, HTTPError and OtherErrorHandler are overwritten on initialization.
|
|
||||||
func WithProtoErrorHandler(fn ProtoErrorHandlerFunc) ServeMuxOption {
|
|
||||||
return func(serveMux *ServeMux) {
|
|
||||||
serveMux.protoErrorHandler = fn
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithDisablePathLengthFallback returns a ServeMuxOption for disable path length fallback.
|
|
||||||
func WithDisablePathLengthFallback() ServeMuxOption {
|
|
||||||
return func(serveMux *ServeMux) {
|
|
||||||
serveMux.disablePathLengthFallback = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewServeMux returns a new ServeMux whose internal mapping is empty.
|
|
||||||
func NewServeMux(opts ...ServeMuxOption) *ServeMux {
|
|
||||||
serveMux := &ServeMux{
|
|
||||||
handlers: make(map[string][]handler),
|
|
||||||
forwardResponseOptions: make([]func(context.Context, http.ResponseWriter, proto.Message) error, 0),
|
|
||||||
marshalers: makeMarshalerMIMERegistry(),
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, opt := range opts {
|
|
||||||
opt(serveMux)
|
|
||||||
}
|
|
||||||
|
|
||||||
if serveMux.protoErrorHandler != nil {
|
|
||||||
HTTPError = serveMux.protoErrorHandler
|
|
||||||
// OtherErrorHandler is no longer used when protoErrorHandler is set.
|
|
||||||
// Overwritten by a special error handler to return Unknown.
|
|
||||||
OtherErrorHandler = func(w http.ResponseWriter, r *http.Request, _ string, _ int) {
|
|
||||||
ctx := context.Background()
|
|
||||||
_, outboundMarshaler := MarshalerForRequest(serveMux, r)
|
|
||||||
sterr := status.Error(codes.Unknown, "unexpected use of OtherErrorHandler")
|
|
||||||
serveMux.protoErrorHandler(ctx, serveMux, outboundMarshaler, w, r, sterr)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if serveMux.incomingHeaderMatcher == nil {
|
|
||||||
serveMux.incomingHeaderMatcher = DefaultHeaderMatcher
|
|
||||||
}
|
|
||||||
|
|
||||||
if serveMux.outgoingHeaderMatcher == nil {
|
|
||||||
serveMux.outgoingHeaderMatcher = func(key string) (string, bool) {
|
|
||||||
return fmt.Sprintf("%s%s", MetadataHeaderPrefix, key), true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return serveMux
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle associates "h" to the pair of HTTP method and path pattern.
|
|
||||||
func (s *ServeMux) Handle(meth string, pat Pattern, h HandlerFunc) {
|
|
||||||
s.handlers[meth] = append(s.handlers[meth], handler{pat: pat, h: h})
|
|
||||||
}
|
|
||||||
|
|
||||||
// ServeHTTP dispatches the request to the first handler whose pattern matches to r.Method and r.Path.
|
|
||||||
func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|
||||||
ctx := r.Context()
|
|
||||||
|
|
||||||
path := r.URL.Path
|
|
||||||
if !strings.HasPrefix(path, "/") {
|
|
||||||
if s.protoErrorHandler != nil {
|
|
||||||
_, outboundMarshaler := MarshalerForRequest(s, r)
|
|
||||||
sterr := status.Error(codes.InvalidArgument, http.StatusText(http.StatusBadRequest))
|
|
||||||
s.protoErrorHandler(ctx, s, outboundMarshaler, w, r, sterr)
|
|
||||||
} else {
|
|
||||||
OtherErrorHandler(w, r, http.StatusText(http.StatusBadRequest), http.StatusBadRequest)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
components := strings.Split(path[1:], "/")
|
|
||||||
l := len(components)
|
|
||||||
var verb string
|
|
||||||
if idx := strings.LastIndex(components[l-1], ":"); idx == 0 {
|
|
||||||
if s.protoErrorHandler != nil {
|
|
||||||
_, outboundMarshaler := MarshalerForRequest(s, r)
|
|
||||||
sterr := status.Error(codes.Unimplemented, http.StatusText(http.StatusNotImplemented))
|
|
||||||
s.protoErrorHandler(ctx, s, outboundMarshaler, w, r, sterr)
|
|
||||||
} else {
|
|
||||||
OtherErrorHandler(w, r, http.StatusText(http.StatusNotFound), http.StatusNotFound)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
} else if idx > 0 {
|
|
||||||
c := components[l-1]
|
|
||||||
components[l-1], verb = c[:idx], c[idx+1:]
|
|
||||||
}
|
|
||||||
|
|
||||||
if override := r.Header.Get("X-HTTP-Method-Override"); override != "" && s.isPathLengthFallback(r) {
|
|
||||||
r.Method = strings.ToUpper(override)
|
|
||||||
if err := r.ParseForm(); err != nil {
|
|
||||||
if s.protoErrorHandler != nil {
|
|
||||||
_, outboundMarshaler := MarshalerForRequest(s, r)
|
|
||||||
sterr := status.Error(codes.InvalidArgument, err.Error())
|
|
||||||
s.protoErrorHandler(ctx, s, outboundMarshaler, w, r, sterr)
|
|
||||||
} else {
|
|
||||||
OtherErrorHandler(w, r, err.Error(), http.StatusBadRequest)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, h := range s.handlers[r.Method] {
|
|
||||||
pathParams, err := h.pat.Match(components, verb)
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
h.h(w, r, pathParams)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// lookup other methods to handle fallback from GET to POST and
|
|
||||||
// to determine if it is MethodNotAllowed or NotFound.
|
|
||||||
for m, handlers := range s.handlers {
|
|
||||||
if m == r.Method {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
for _, h := range handlers {
|
|
||||||
pathParams, err := h.pat.Match(components, verb)
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
// X-HTTP-Method-Override is optional. Always allow fallback to POST.
|
|
||||||
if s.isPathLengthFallback(r) {
|
|
||||||
if err := r.ParseForm(); err != nil {
|
|
||||||
if s.protoErrorHandler != nil {
|
|
||||||
_, outboundMarshaler := MarshalerForRequest(s, r)
|
|
||||||
sterr := status.Error(codes.InvalidArgument, err.Error())
|
|
||||||
s.protoErrorHandler(ctx, s, outboundMarshaler, w, r, sterr)
|
|
||||||
} else {
|
|
||||||
OtherErrorHandler(w, r, err.Error(), http.StatusBadRequest)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
h.h(w, r, pathParams)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if s.protoErrorHandler != nil {
|
|
||||||
_, outboundMarshaler := MarshalerForRequest(s, r)
|
|
||||||
sterr := status.Error(codes.Unimplemented, http.StatusText(http.StatusMethodNotAllowed))
|
|
||||||
s.protoErrorHandler(ctx, s, outboundMarshaler, w, r, sterr)
|
|
||||||
} else {
|
|
||||||
OtherErrorHandler(w, r, http.StatusText(http.StatusMethodNotAllowed), http.StatusMethodNotAllowed)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if s.protoErrorHandler != nil {
|
|
||||||
_, outboundMarshaler := MarshalerForRequest(s, r)
|
|
||||||
sterr := status.Error(codes.Unimplemented, http.StatusText(http.StatusNotImplemented))
|
|
||||||
s.protoErrorHandler(ctx, s, outboundMarshaler, w, r, sterr)
|
|
||||||
} else {
|
|
||||||
OtherErrorHandler(w, r, http.StatusText(http.StatusNotFound), http.StatusNotFound)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetForwardResponseOptions returns the ForwardResponseOptions associated with this ServeMux.
|
|
||||||
func (s *ServeMux) GetForwardResponseOptions() []func(context.Context, http.ResponseWriter, proto.Message) error {
|
|
||||||
return s.forwardResponseOptions
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *ServeMux) isPathLengthFallback(r *http.Request) bool {
|
|
||||||
return !s.disablePathLengthFallback && r.Method == "POST" && r.Header.Get("Content-Type") == "application/x-www-form-urlencoded"
|
|
||||||
}
|
|
||||||
|
|
||||||
type handler struct {
|
|
||||||
pat Pattern
|
|
||||||
h HandlerFunc
|
|
||||||
}
|
|
|
@ -1,227 +0,0 @@
|
||||||
package runtime
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/grpc-ecosystem/grpc-gateway/utilities"
|
|
||||||
"google.golang.org/grpc/grpclog"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
// ErrNotMatch indicates that the given HTTP request path does not match to the pattern.
|
|
||||||
ErrNotMatch = errors.New("not match to the path pattern")
|
|
||||||
// ErrInvalidPattern indicates that the given definition of Pattern is not valid.
|
|
||||||
ErrInvalidPattern = errors.New("invalid pattern")
|
|
||||||
)
|
|
||||||
|
|
||||||
type op struct {
|
|
||||||
code utilities.OpCode
|
|
||||||
operand int
|
|
||||||
}
|
|
||||||
|
|
||||||
// Pattern is a template pattern of http request paths defined in github.com/googleapis/googleapis/google/api/http.proto.
|
|
||||||
type Pattern struct {
|
|
||||||
// ops is a list of operations
|
|
||||||
ops []op
|
|
||||||
// pool is a constant pool indexed by the operands or vars.
|
|
||||||
pool []string
|
|
||||||
// vars is a list of variables names to be bound by this pattern
|
|
||||||
vars []string
|
|
||||||
// stacksize is the max depth of the stack
|
|
||||||
stacksize int
|
|
||||||
// tailLen is the length of the fixed-size segments after a deep wildcard
|
|
||||||
tailLen int
|
|
||||||
// verb is the VERB part of the path pattern. It is empty if the pattern does not have VERB part.
|
|
||||||
verb string
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewPattern returns a new Pattern from the given definition values.
|
|
||||||
// "ops" is a sequence of op codes. "pool" is a constant pool.
|
|
||||||
// "verb" is the verb part of the pattern. It is empty if the pattern does not have the part.
|
|
||||||
// "version" must be 1 for now.
|
|
||||||
// It returns an error if the given definition is invalid.
|
|
||||||
func NewPattern(version int, ops []int, pool []string, verb string) (Pattern, error) {
|
|
||||||
if version != 1 {
|
|
||||||
grpclog.Infof("unsupported version: %d", version)
|
|
||||||
return Pattern{}, ErrInvalidPattern
|
|
||||||
}
|
|
||||||
|
|
||||||
l := len(ops)
|
|
||||||
if l%2 != 0 {
|
|
||||||
grpclog.Infof("odd number of ops codes: %d", l)
|
|
||||||
return Pattern{}, ErrInvalidPattern
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
|
||||||
typedOps []op
|
|
||||||
stack, maxstack int
|
|
||||||
tailLen int
|
|
||||||
pushMSeen bool
|
|
||||||
vars []string
|
|
||||||
)
|
|
||||||
for i := 0; i < l; i += 2 {
|
|
||||||
op := op{code: utilities.OpCode(ops[i]), operand: ops[i+1]}
|
|
||||||
switch op.code {
|
|
||||||
case utilities.OpNop:
|
|
||||||
continue
|
|
||||||
case utilities.OpPush:
|
|
||||||
if pushMSeen {
|
|
||||||
tailLen++
|
|
||||||
}
|
|
||||||
stack++
|
|
||||||
case utilities.OpPushM:
|
|
||||||
if pushMSeen {
|
|
||||||
grpclog.Infof("pushM appears twice")
|
|
||||||
return Pattern{}, ErrInvalidPattern
|
|
||||||
}
|
|
||||||
pushMSeen = true
|
|
||||||
stack++
|
|
||||||
case utilities.OpLitPush:
|
|
||||||
if op.operand < 0 || len(pool) <= op.operand {
|
|
||||||
grpclog.Infof("negative literal index: %d", op.operand)
|
|
||||||
return Pattern{}, ErrInvalidPattern
|
|
||||||
}
|
|
||||||
if pushMSeen {
|
|
||||||
tailLen++
|
|
||||||
}
|
|
||||||
stack++
|
|
||||||
case utilities.OpConcatN:
|
|
||||||
if op.operand <= 0 {
|
|
||||||
grpclog.Infof("negative concat size: %d", op.operand)
|
|
||||||
return Pattern{}, ErrInvalidPattern
|
|
||||||
}
|
|
||||||
stack -= op.operand
|
|
||||||
if stack < 0 {
|
|
||||||
grpclog.Print("stack underflow")
|
|
||||||
return Pattern{}, ErrInvalidPattern
|
|
||||||
}
|
|
||||||
stack++
|
|
||||||
case utilities.OpCapture:
|
|
||||||
if op.operand < 0 || len(pool) <= op.operand {
|
|
||||||
grpclog.Infof("variable name index out of bound: %d", op.operand)
|
|
||||||
return Pattern{}, ErrInvalidPattern
|
|
||||||
}
|
|
||||||
v := pool[op.operand]
|
|
||||||
op.operand = len(vars)
|
|
||||||
vars = append(vars, v)
|
|
||||||
stack--
|
|
||||||
if stack < 0 {
|
|
||||||
grpclog.Infof("stack underflow")
|
|
||||||
return Pattern{}, ErrInvalidPattern
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
grpclog.Infof("invalid opcode: %d", op.code)
|
|
||||||
return Pattern{}, ErrInvalidPattern
|
|
||||||
}
|
|
||||||
|
|
||||||
if maxstack < stack {
|
|
||||||
maxstack = stack
|
|
||||||
}
|
|
||||||
typedOps = append(typedOps, op)
|
|
||||||
}
|
|
||||||
return Pattern{
|
|
||||||
ops: typedOps,
|
|
||||||
pool: pool,
|
|
||||||
vars: vars,
|
|
||||||
stacksize: maxstack,
|
|
||||||
tailLen: tailLen,
|
|
||||||
verb: verb,
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// MustPattern is a helper function which makes it easier to call NewPattern in variable initialization.
|
|
||||||
func MustPattern(p Pattern, err error) Pattern {
|
|
||||||
if err != nil {
|
|
||||||
grpclog.Fatalf("Pattern initialization failed: %v", err)
|
|
||||||
}
|
|
||||||
return p
|
|
||||||
}
|
|
||||||
|
|
||||||
// Match examines components if it matches to the Pattern.
|
|
||||||
// If it matches, the function returns a mapping from field paths to their captured values.
|
|
||||||
// If otherwise, the function returns an error.
|
|
||||||
func (p Pattern) Match(components []string, verb string) (map[string]string, error) {
|
|
||||||
if p.verb != verb {
|
|
||||||
return nil, ErrNotMatch
|
|
||||||
}
|
|
||||||
|
|
||||||
var pos int
|
|
||||||
stack := make([]string, 0, p.stacksize)
|
|
||||||
captured := make([]string, len(p.vars))
|
|
||||||
l := len(components)
|
|
||||||
for _, op := range p.ops {
|
|
||||||
switch op.code {
|
|
||||||
case utilities.OpNop:
|
|
||||||
continue
|
|
||||||
case utilities.OpPush, utilities.OpLitPush:
|
|
||||||
if pos >= l {
|
|
||||||
return nil, ErrNotMatch
|
|
||||||
}
|
|
||||||
c := components[pos]
|
|
||||||
if op.code == utilities.OpLitPush {
|
|
||||||
if lit := p.pool[op.operand]; c != lit {
|
|
||||||
return nil, ErrNotMatch
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stack = append(stack, c)
|
|
||||||
pos++
|
|
||||||
case utilities.OpPushM:
|
|
||||||
end := len(components)
|
|
||||||
if end < pos+p.tailLen {
|
|
||||||
return nil, ErrNotMatch
|
|
||||||
}
|
|
||||||
end -= p.tailLen
|
|
||||||
stack = append(stack, strings.Join(components[pos:end], "/"))
|
|
||||||
pos = end
|
|
||||||
case utilities.OpConcatN:
|
|
||||||
n := op.operand
|
|
||||||
l := len(stack) - n
|
|
||||||
stack = append(stack[:l], strings.Join(stack[l:], "/"))
|
|
||||||
case utilities.OpCapture:
|
|
||||||
n := len(stack) - 1
|
|
||||||
captured[op.operand] = stack[n]
|
|
||||||
stack = stack[:n]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if pos < l {
|
|
||||||
return nil, ErrNotMatch
|
|
||||||
}
|
|
||||||
bindings := make(map[string]string)
|
|
||||||
for i, val := range captured {
|
|
||||||
bindings[p.vars[i]] = val
|
|
||||||
}
|
|
||||||
return bindings, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Verb returns the verb part of the Pattern.
|
|
||||||
func (p Pattern) Verb() string { return p.verb }
|
|
||||||
|
|
||||||
func (p Pattern) String() string {
|
|
||||||
var stack []string
|
|
||||||
for _, op := range p.ops {
|
|
||||||
switch op.code {
|
|
||||||
case utilities.OpNop:
|
|
||||||
continue
|
|
||||||
case utilities.OpPush:
|
|
||||||
stack = append(stack, "*")
|
|
||||||
case utilities.OpLitPush:
|
|
||||||
stack = append(stack, p.pool[op.operand])
|
|
||||||
case utilities.OpPushM:
|
|
||||||
stack = append(stack, "**")
|
|
||||||
case utilities.OpConcatN:
|
|
||||||
n := op.operand
|
|
||||||
l := len(stack) - n
|
|
||||||
stack = append(stack[:l], strings.Join(stack[l:], "/"))
|
|
||||||
case utilities.OpCapture:
|
|
||||||
n := len(stack) - 1
|
|
||||||
stack[n] = fmt.Sprintf("{%s=%s}", p.vars[op.operand], stack[n])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
segs := strings.Join(stack, "/")
|
|
||||||
if p.verb != "" {
|
|
||||||
return fmt.Sprintf("/%s:%s", segs, p.verb)
|
|
||||||
}
|
|
||||||
return "/" + segs
|
|
||||||
}
|
|
|
@ -1,80 +0,0 @@
|
||||||
package runtime
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/golang/protobuf/proto"
|
|
||||||
)
|
|
||||||
|
|
||||||
// StringP returns a pointer to a string whose pointee is same as the given string value.
|
|
||||||
func StringP(val string) (*string, error) {
|
|
||||||
return proto.String(val), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// BoolP parses the given string representation of a boolean value,
|
|
||||||
// and returns a pointer to a bool whose value is same as the parsed value.
|
|
||||||
func BoolP(val string) (*bool, error) {
|
|
||||||
b, err := Bool(val)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return proto.Bool(b), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Float64P parses the given string representation of a floating point number,
|
|
||||||
// and returns a pointer to a float64 whose value is same as the parsed number.
|
|
||||||
func Float64P(val string) (*float64, error) {
|
|
||||||
f, err := Float64(val)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return proto.Float64(f), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Float32P parses the given string representation of a floating point number,
|
|
||||||
// and returns a pointer to a float32 whose value is same as the parsed number.
|
|
||||||
func Float32P(val string) (*float32, error) {
|
|
||||||
f, err := Float32(val)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return proto.Float32(f), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Int64P parses the given string representation of an integer
|
|
||||||
// and returns a pointer to a int64 whose value is same as the parsed integer.
|
|
||||||
func Int64P(val string) (*int64, error) {
|
|
||||||
i, err := Int64(val)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return proto.Int64(i), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Int32P parses the given string representation of an integer
|
|
||||||
// and returns a pointer to a int32 whose value is same as the parsed integer.
|
|
||||||
func Int32P(val string) (*int32, error) {
|
|
||||||
i, err := Int32(val)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return proto.Int32(i), err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Uint64P parses the given string representation of an integer
|
|
||||||
// and returns a pointer to a uint64 whose value is same as the parsed integer.
|
|
||||||
func Uint64P(val string) (*uint64, error) {
|
|
||||||
i, err := Uint64(val)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return proto.Uint64(i), err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Uint32P parses the given string representation of an integer
|
|
||||||
// and returns a pointer to a uint32 whose value is same as the parsed integer.
|
|
||||||
func Uint32P(val string) (*uint32, error) {
|
|
||||||
i, err := Uint32(val)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return proto.Uint32(i), err
|
|
||||||
}
|
|
|
@ -1,70 +0,0 @@
|
||||||
package runtime
|
|
||||||
|
|
||||||
import (
|
|
||||||
"io"
|
|
||||||
"net/http"
|
|
||||||
|
|
||||||
"context"
|
|
||||||
"google.golang.org/grpc/codes"
|
|
||||||
"google.golang.org/grpc/grpclog"
|
|
||||||
"google.golang.org/grpc/status"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ProtoErrorHandlerFunc handles the error as a gRPC error generated via status package and replies to the request.
|
|
||||||
type ProtoErrorHandlerFunc func(context.Context, *ServeMux, Marshaler, http.ResponseWriter, *http.Request, error)
|
|
||||||
|
|
||||||
var _ ProtoErrorHandlerFunc = DefaultHTTPProtoErrorHandler
|
|
||||||
|
|
||||||
// DefaultHTTPProtoErrorHandler is an implementation of HTTPError.
|
|
||||||
// If "err" is an error from gRPC system, the function replies with the status code mapped by HTTPStatusFromCode.
|
|
||||||
// If otherwise, it replies with http.StatusInternalServerError.
|
|
||||||
//
|
|
||||||
// The response body returned by this function is a Status message marshaled by a Marshaler.
|
|
||||||
//
|
|
||||||
// Do not set this function to HTTPError variable directly, use WithProtoErrorHandler option instead.
|
|
||||||
func DefaultHTTPProtoErrorHandler(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, _ *http.Request, err error) {
|
|
||||||
// return Internal when Marshal failed
|
|
||||||
const fallback = `{"code": 13, "message": "failed to marshal error message"}`
|
|
||||||
|
|
||||||
s, ok := status.FromError(err)
|
|
||||||
if !ok {
|
|
||||||
s = status.New(codes.Unknown, err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
w.Header().Del("Trailer")
|
|
||||||
|
|
||||||
contentType := marshaler.ContentType()
|
|
||||||
// Check marshaler on run time in order to keep backwards compatability
|
|
||||||
// An interface param needs to be added to the ContentType() function on
|
|
||||||
// the Marshal interface to be able to remove this check
|
|
||||||
if httpBodyMarshaler, ok := marshaler.(*HTTPBodyMarshaler); ok {
|
|
||||||
pb := s.Proto()
|
|
||||||
contentType = httpBodyMarshaler.ContentTypeFromMessage(pb)
|
|
||||||
}
|
|
||||||
w.Header().Set("Content-Type", contentType)
|
|
||||||
|
|
||||||
buf, merr := marshaler.Marshal(s.Proto())
|
|
||||||
if merr != nil {
|
|
||||||
grpclog.Infof("Failed to marshal error message %q: %v", s.Proto(), merr)
|
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
|
||||||
if _, err := io.WriteString(w, fallback); err != nil {
|
|
||||||
grpclog.Infof("Failed to write response: %v", err)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
md, ok := ServerMetadataFromContext(ctx)
|
|
||||||
if !ok {
|
|
||||||
grpclog.Infof("Failed to extract ServerMetadata from context")
|
|
||||||
}
|
|
||||||
|
|
||||||
handleForwardResponseServerMetadata(w, mux, md)
|
|
||||||
handleForwardResponseTrailerHeader(w, md)
|
|
||||||
st := HTTPStatusFromCode(s.Code())
|
|
||||||
w.WriteHeader(st)
|
|
||||||
if _, err := w.Write(buf); err != nil {
|
|
||||||
grpclog.Infof("Failed to write response: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
handleForwardResponseTrailer(w, md)
|
|
||||||
}
|
|
|
@ -1,392 +0,0 @@
|
||||||
package runtime
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/base64"
|
|
||||||
"fmt"
|
|
||||||
"net/url"
|
|
||||||
"reflect"
|
|
||||||
"regexp"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/golang/protobuf/proto"
|
|
||||||
"github.com/grpc-ecosystem/grpc-gateway/utilities"
|
|
||||||
"google.golang.org/grpc/grpclog"
|
|
||||||
)
|
|
||||||
|
|
||||||
// PopulateQueryParameters populates "values" into "msg".
|
|
||||||
// A value is ignored if its key starts with one of the elements in "filter".
|
|
||||||
func PopulateQueryParameters(msg proto.Message, values url.Values, filter *utilities.DoubleArray) error {
|
|
||||||
for key, values := range values {
|
|
||||||
re, err := regexp.Compile("^(.*)\\[(.*)\\]$")
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
match := re.FindStringSubmatch(key)
|
|
||||||
if len(match) == 3 {
|
|
||||||
key = match[1]
|
|
||||||
values = append([]string{match[2]}, values...)
|
|
||||||
}
|
|
||||||
fieldPath := strings.Split(key, ".")
|
|
||||||
if filter.HasCommonPrefix(fieldPath) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if err := populateFieldValueFromPath(msg, fieldPath, values); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// PopulateFieldFromPath sets a value in a nested Protobuf structure.
|
|
||||||
// It instantiates missing protobuf fields as it goes.
|
|
||||||
func PopulateFieldFromPath(msg proto.Message, fieldPathString string, value string) error {
|
|
||||||
fieldPath := strings.Split(fieldPathString, ".")
|
|
||||||
return populateFieldValueFromPath(msg, fieldPath, []string{value})
|
|
||||||
}
|
|
||||||
|
|
||||||
func populateFieldValueFromPath(msg proto.Message, fieldPath []string, values []string) error {
|
|
||||||
m := reflect.ValueOf(msg)
|
|
||||||
if m.Kind() != reflect.Ptr {
|
|
||||||
return fmt.Errorf("unexpected type %T: %v", msg, msg)
|
|
||||||
}
|
|
||||||
var props *proto.Properties
|
|
||||||
m = m.Elem()
|
|
||||||
for i, fieldName := range fieldPath {
|
|
||||||
isLast := i == len(fieldPath)-1
|
|
||||||
if !isLast && m.Kind() != reflect.Struct {
|
|
||||||
return fmt.Errorf("non-aggregate type in the mid of path: %s", strings.Join(fieldPath, "."))
|
|
||||||
}
|
|
||||||
var f reflect.Value
|
|
||||||
var err error
|
|
||||||
f, props, err = fieldByProtoName(m, fieldName)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
} else if !f.IsValid() {
|
|
||||||
grpclog.Infof("field not found in %T: %s", msg, strings.Join(fieldPath, "."))
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
switch f.Kind() {
|
|
||||||
case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64, reflect.String, reflect.Uint32, reflect.Uint64:
|
|
||||||
if !isLast {
|
|
||||||
return fmt.Errorf("unexpected nested field %s in %s", fieldPath[i+1], strings.Join(fieldPath[:i+1], "."))
|
|
||||||
}
|
|
||||||
m = f
|
|
||||||
case reflect.Slice:
|
|
||||||
if !isLast {
|
|
||||||
return fmt.Errorf("unexpected repeated field in %s", strings.Join(fieldPath, "."))
|
|
||||||
}
|
|
||||||
// Handle []byte
|
|
||||||
if f.Type().Elem().Kind() == reflect.Uint8 {
|
|
||||||
m = f
|
|
||||||
break
|
|
||||||
}
|
|
||||||
return populateRepeatedField(f, values, props)
|
|
||||||
case reflect.Ptr:
|
|
||||||
if f.IsNil() {
|
|
||||||
m = reflect.New(f.Type().Elem())
|
|
||||||
f.Set(m.Convert(f.Type()))
|
|
||||||
}
|
|
||||||
m = f.Elem()
|
|
||||||
continue
|
|
||||||
case reflect.Struct:
|
|
||||||
m = f
|
|
||||||
continue
|
|
||||||
case reflect.Map:
|
|
||||||
if !isLast {
|
|
||||||
return fmt.Errorf("unexpected nested field %s in %s", fieldPath[i+1], strings.Join(fieldPath[:i+1], "."))
|
|
||||||
}
|
|
||||||
return populateMapField(f, values, props)
|
|
||||||
default:
|
|
||||||
return fmt.Errorf("unexpected type %s in %T", f.Type(), msg)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
switch len(values) {
|
|
||||||
case 0:
|
|
||||||
return fmt.Errorf("no value of field: %s", strings.Join(fieldPath, "."))
|
|
||||||
case 1:
|
|
||||||
default:
|
|
||||||
grpclog.Infof("too many field values: %s", strings.Join(fieldPath, "."))
|
|
||||||
}
|
|
||||||
return populateField(m, values[0], props)
|
|
||||||
}
|
|
||||||
|
|
||||||
// fieldByProtoName looks up a field whose corresponding protobuf field name is "name".
|
|
||||||
// "m" must be a struct value. It returns zero reflect.Value if no such field found.
|
|
||||||
func fieldByProtoName(m reflect.Value, name string) (reflect.Value, *proto.Properties, error) {
|
|
||||||
props := proto.GetProperties(m.Type())
|
|
||||||
|
|
||||||
// look up field name in oneof map
|
|
||||||
if op, ok := props.OneofTypes[name]; ok {
|
|
||||||
v := reflect.New(op.Type.Elem())
|
|
||||||
field := m.Field(op.Field)
|
|
||||||
if !field.IsNil() {
|
|
||||||
return reflect.Value{}, nil, fmt.Errorf("field already set for %s oneof", props.Prop[op.Field].OrigName)
|
|
||||||
}
|
|
||||||
field.Set(v)
|
|
||||||
return v.Elem().Field(0), op.Prop, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, p := range props.Prop {
|
|
||||||
if p.OrigName == name {
|
|
||||||
return m.FieldByName(p.Name), p, nil
|
|
||||||
}
|
|
||||||
if p.JSONName == name {
|
|
||||||
return m.FieldByName(p.Name), p, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return reflect.Value{}, nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func populateMapField(f reflect.Value, values []string, props *proto.Properties) error {
|
|
||||||
if len(values) != 2 {
|
|
||||||
return fmt.Errorf("more than one value provided for key %s in map %s", values[0], props.Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
key, value := values[0], values[1]
|
|
||||||
keyType := f.Type().Key()
|
|
||||||
valueType := f.Type().Elem()
|
|
||||||
if f.IsNil() {
|
|
||||||
f.Set(reflect.MakeMap(f.Type()))
|
|
||||||
}
|
|
||||||
|
|
||||||
keyConv, ok := convFromType[keyType.Kind()]
|
|
||||||
if !ok {
|
|
||||||
return fmt.Errorf("unsupported key type %s in map %s", keyType, props.Name)
|
|
||||||
}
|
|
||||||
valueConv, ok := convFromType[valueType.Kind()]
|
|
||||||
if !ok {
|
|
||||||
return fmt.Errorf("unsupported value type %s in map %s", valueType, props.Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
keyV := keyConv.Call([]reflect.Value{reflect.ValueOf(key)})
|
|
||||||
if err := keyV[1].Interface(); err != nil {
|
|
||||||
return err.(error)
|
|
||||||
}
|
|
||||||
valueV := valueConv.Call([]reflect.Value{reflect.ValueOf(value)})
|
|
||||||
if err := valueV[1].Interface(); err != nil {
|
|
||||||
return err.(error)
|
|
||||||
}
|
|
||||||
|
|
||||||
f.SetMapIndex(keyV[0].Convert(keyType), valueV[0].Convert(valueType))
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func populateRepeatedField(f reflect.Value, values []string, props *proto.Properties) error {
|
|
||||||
elemType := f.Type().Elem()
|
|
||||||
|
|
||||||
// is the destination field a slice of an enumeration type?
|
|
||||||
if enumValMap := proto.EnumValueMap(props.Enum); enumValMap != nil {
|
|
||||||
return populateFieldEnumRepeated(f, values, enumValMap)
|
|
||||||
}
|
|
||||||
|
|
||||||
conv, ok := convFromType[elemType.Kind()]
|
|
||||||
if !ok {
|
|
||||||
return fmt.Errorf("unsupported field type %s", elemType)
|
|
||||||
}
|
|
||||||
f.Set(reflect.MakeSlice(f.Type(), len(values), len(values)).Convert(f.Type()))
|
|
||||||
for i, v := range values {
|
|
||||||
result := conv.Call([]reflect.Value{reflect.ValueOf(v)})
|
|
||||||
if err := result[1].Interface(); err != nil {
|
|
||||||
return err.(error)
|
|
||||||
}
|
|
||||||
f.Index(i).Set(result[0].Convert(f.Index(i).Type()))
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func populateField(f reflect.Value, value string, props *proto.Properties) error {
|
|
||||||
i := f.Addr().Interface()
|
|
||||||
|
|
||||||
// Handle protobuf well known types
|
|
||||||
type wkt interface {
|
|
||||||
XXX_WellKnownType() string
|
|
||||||
}
|
|
||||||
if wkt, ok := i.(wkt); ok {
|
|
||||||
switch wkt.XXX_WellKnownType() {
|
|
||||||
case "Timestamp":
|
|
||||||
if value == "null" {
|
|
||||||
f.Field(0).SetInt(0)
|
|
||||||
f.Field(1).SetInt(0)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
t, err := time.Parse(time.RFC3339Nano, value)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("bad Timestamp: %v", err)
|
|
||||||
}
|
|
||||||
f.Field(0).SetInt(int64(t.Unix()))
|
|
||||||
f.Field(1).SetInt(int64(t.Nanosecond()))
|
|
||||||
return nil
|
|
||||||
case "Duration":
|
|
||||||
if value == "null" {
|
|
||||||
f.Field(0).SetInt(0)
|
|
||||||
f.Field(1).SetInt(0)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
d, err := time.ParseDuration(value)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("bad Duration: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
ns := d.Nanoseconds()
|
|
||||||
s := ns / 1e9
|
|
||||||
ns %= 1e9
|
|
||||||
f.Field(0).SetInt(s)
|
|
||||||
f.Field(1).SetInt(ns)
|
|
||||||
return nil
|
|
||||||
case "DoubleValue":
|
|
||||||
fallthrough
|
|
||||||
case "FloatValue":
|
|
||||||
float64Val, err := strconv.ParseFloat(value, 64)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("bad DoubleValue: %s", value)
|
|
||||||
}
|
|
||||||
f.Field(0).SetFloat(float64Val)
|
|
||||||
return nil
|
|
||||||
case "Int64Value":
|
|
||||||
fallthrough
|
|
||||||
case "Int32Value":
|
|
||||||
int64Val, err := strconv.ParseInt(value, 10, 64)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("bad DoubleValue: %s", value)
|
|
||||||
}
|
|
||||||
f.Field(0).SetInt(int64Val)
|
|
||||||
return nil
|
|
||||||
case "UInt64Value":
|
|
||||||
fallthrough
|
|
||||||
case "UInt32Value":
|
|
||||||
uint64Val, err := strconv.ParseUint(value, 10, 64)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("bad DoubleValue: %s", value)
|
|
||||||
}
|
|
||||||
f.Field(0).SetUint(uint64Val)
|
|
||||||
return nil
|
|
||||||
case "BoolValue":
|
|
||||||
if value == "true" {
|
|
||||||
f.Field(0).SetBool(true)
|
|
||||||
} else if value == "false" {
|
|
||||||
f.Field(0).SetBool(false)
|
|
||||||
} else {
|
|
||||||
return fmt.Errorf("bad BoolValue: %s", value)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
case "StringValue":
|
|
||||||
f.Field(0).SetString(value)
|
|
||||||
return nil
|
|
||||||
case "BytesValue":
|
|
||||||
bytesVal, err := base64.StdEncoding.DecodeString(value)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("bad BytesValue: %s", value)
|
|
||||||
}
|
|
||||||
f.Field(0).SetBytes(bytesVal)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle google well known types
|
|
||||||
if gwkt, ok := i.(proto.Message); ok {
|
|
||||||
switch proto.MessageName(gwkt) {
|
|
||||||
case "google.protobuf.FieldMask":
|
|
||||||
p := f.Field(0)
|
|
||||||
for _, v := range strings.Split(value, ",") {
|
|
||||||
if v != "" {
|
|
||||||
p.Set(reflect.Append(p, reflect.ValueOf(v)))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle Time and Duration stdlib types
|
|
||||||
switch t := i.(type) {
|
|
||||||
case *time.Time:
|
|
||||||
pt, err := time.Parse(time.RFC3339Nano, value)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("bad Timestamp: %v", err)
|
|
||||||
}
|
|
||||||
*t = pt
|
|
||||||
return nil
|
|
||||||
case *time.Duration:
|
|
||||||
d, err := time.ParseDuration(value)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("bad Duration: %v", err)
|
|
||||||
}
|
|
||||||
*t = d
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// is the destination field an enumeration type?
|
|
||||||
if enumValMap := proto.EnumValueMap(props.Enum); enumValMap != nil {
|
|
||||||
return populateFieldEnum(f, value, enumValMap)
|
|
||||||
}
|
|
||||||
|
|
||||||
conv, ok := convFromType[f.Kind()]
|
|
||||||
if !ok {
|
|
||||||
return fmt.Errorf("field type %T is not supported in query parameters", i)
|
|
||||||
}
|
|
||||||
result := conv.Call([]reflect.Value{reflect.ValueOf(value)})
|
|
||||||
if err := result[1].Interface(); err != nil {
|
|
||||||
return err.(error)
|
|
||||||
}
|
|
||||||
f.Set(result[0].Convert(f.Type()))
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func convertEnum(value string, t reflect.Type, enumValMap map[string]int32) (reflect.Value, error) {
|
|
||||||
// see if it's an enumeration string
|
|
||||||
if enumVal, ok := enumValMap[value]; ok {
|
|
||||||
return reflect.ValueOf(enumVal).Convert(t), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// check for an integer that matches an enumeration value
|
|
||||||
eVal, err := strconv.Atoi(value)
|
|
||||||
if err != nil {
|
|
||||||
return reflect.Value{}, fmt.Errorf("%s is not a valid %s", value, t)
|
|
||||||
}
|
|
||||||
for _, v := range enumValMap {
|
|
||||||
if v == int32(eVal) {
|
|
||||||
return reflect.ValueOf(eVal).Convert(t), nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return reflect.Value{}, fmt.Errorf("%s is not a valid %s", value, t)
|
|
||||||
}
|
|
||||||
|
|
||||||
func populateFieldEnum(f reflect.Value, value string, enumValMap map[string]int32) error {
|
|
||||||
cval, err := convertEnum(value, f.Type(), enumValMap)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
f.Set(cval)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func populateFieldEnumRepeated(f reflect.Value, values []string, enumValMap map[string]int32) error {
|
|
||||||
elemType := f.Type().Elem()
|
|
||||||
f.Set(reflect.MakeSlice(f.Type(), len(values), len(values)).Convert(f.Type()))
|
|
||||||
for i, v := range values {
|
|
||||||
result, err := convertEnum(v, elemType, enumValMap)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
f.Index(i).Set(result)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
|
||||||
convFromType = map[reflect.Kind]reflect.Value{
|
|
||||||
reflect.String: reflect.ValueOf(String),
|
|
||||||
reflect.Bool: reflect.ValueOf(Bool),
|
|
||||||
reflect.Float64: reflect.ValueOf(Float64),
|
|
||||||
reflect.Float32: reflect.ValueOf(Float32),
|
|
||||||
reflect.Int64: reflect.ValueOf(Int64),
|
|
||||||
reflect.Int32: reflect.ValueOf(Int32),
|
|
||||||
reflect.Uint64: reflect.ValueOf(Uint64),
|
|
||||||
reflect.Uint32: reflect.ValueOf(Uint32),
|
|
||||||
reflect.Slice: reflect.ValueOf(Bytes),
|
|
||||||
}
|
|
||||||
)
|
|
|
@ -1,21 +0,0 @@
|
||||||
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
|
|
||||||
|
|
||||||
package(default_visibility = ["//visibility:public"])
|
|
||||||
|
|
||||||
go_library(
|
|
||||||
name = "go_default_library",
|
|
||||||
srcs = [
|
|
||||||
"doc.go",
|
|
||||||
"pattern.go",
|
|
||||||
"readerfactory.go",
|
|
||||||
"trie.go",
|
|
||||||
],
|
|
||||||
importpath = "github.com/grpc-ecosystem/grpc-gateway/utilities",
|
|
||||||
)
|
|
||||||
|
|
||||||
go_test(
|
|
||||||
name = "go_default_test",
|
|
||||||
size = "small",
|
|
||||||
srcs = ["trie_test.go"],
|
|
||||||
embed = [":go_default_library"],
|
|
||||||
)
|
|
|
@ -1,2 +0,0 @@
|
||||||
// Package utilities provides members for internal use in grpc-gateway.
|
|
||||||
package utilities
|
|
|
@ -1,22 +0,0 @@
|
||||||
package utilities
|
|
||||||
|
|
||||||
// An OpCode is a opcode of compiled path patterns.
|
|
||||||
type OpCode int
|
|
||||||
|
|
||||||
// These constants are the valid values of OpCode.
|
|
||||||
const (
|
|
||||||
// OpNop does nothing
|
|
||||||
OpNop = OpCode(iota)
|
|
||||||
// OpPush pushes a component to stack
|
|
||||||
OpPush
|
|
||||||
// OpLitPush pushes a component to stack if it matches to the literal
|
|
||||||
OpLitPush
|
|
||||||
// OpPushM concatenates the remaining components and pushes it to stack
|
|
||||||
OpPushM
|
|
||||||
// OpConcatN pops N items from stack, concatenates them and pushes it back to stack
|
|
||||||
OpConcatN
|
|
||||||
// OpCapture pops an item and binds it to the variable
|
|
||||||
OpCapture
|
|
||||||
// OpEnd is the least positive invalid opcode.
|
|
||||||
OpEnd
|
|
||||||
)
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue