diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 1dcfe5e413b5..753272cd66bf 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -30,7 +30,6 @@ exporter/alibabacloudlogserviceexporter/ @open-telemetry/collector-c exporter/awscloudwatchlogsexporter/ @open-telemetry/collector-contrib-approvers @boostchicken exporter/awsemfexporter/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @shaochengwang @mxiamxia exporter/awskinesisexporter/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @MovieStoreGuy -exporter/awsprometheusremotewriteexporter/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @alolita exporter/awsxrayexporter/ @open-telemetry/collector-contrib-approvers @willarmiros exporter/azuremonitorexporter/ @open-telemetry/collector-contrib-approvers @pcwiese exporter/carbonexporter/ @open-telemetry/collector-contrib-approvers @pjanotti @@ -38,14 +37,12 @@ exporter/clickhouseexporter/ @open-telemetry/collector-c exporter/coralogixexporter/ @open-telemetry/collector-contrib-approvers @oded-dd @ofirshmuel exporter/datadogexporter/ @open-telemetry/collector-contrib-approvers @KSerrania @mx-psi @gbbr @knusbaum @amenasria @dineshg13 exporter/dynatraceexporter/ @open-telemetry/collector-contrib-approvers @dyladan @arminru -exporter/elasticexporter/ @open-telemetry/collector-contrib-approvers @axw @simitt @jalvz exporter/elasticsearchexporter/ @open-telemetry/collector-contrib-approvers @urso @faec @blakerouse exporter/f5cloudexporter/ @open-telemetry/collector-contrib-approvers @gramidt exporter/fileexporter/ @open-telemetry/collector-contrib-approvers @pmm-sumo exporter/googlecloudexporter/ @open-telemetry/collector-contrib-approvers @aabmass @dashpole @jsuereth @punya @tbarker25 @damemi exporter/googlemanagedprometheusexporter/ @open-telemetry/collector-contrib-approvers @aabmass @dashpole @jsuereth @punya @tbarker25 @damemi exporter/googlecloudpubsubexporter/ @open-telemetry/collector-contrib-approvers @alexvanboxel -exporter/honeycombexporter/ @open-telemetry/collector-contrib-approvers @lizthegrey @MikeGoldsmith exporter/humioexporter/ @open-telemetry/collector-contrib-approvers @xitric exporter/influxdbexporter/ @open-telemetry/collector-contrib-approvers @jacobmarble exporter/jaegerexporter/ @open-telemetry/collector-contrib-approvers @jpkrohling diff --git a/.github/dependabot.yml b/.github/dependabot.yml index d3acb2a52ec9..5eff6aa3cfe4 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -14,6 +14,10 @@ updates: directory: "/" schedule: interval: "weekly" + - package-ecosystem: "gomod" + directory: "/cmd/chloggen" + schedule: + interval: "weekly" - package-ecosystem: "gomod" directory: "/cmd/configschema" schedule: @@ -22,6 +26,10 @@ updates: directory: "/cmd/mdatagen" schedule: interval: "weekly" + - package-ecosystem: "gomod" + directory: "/cmd/telemetrygen" + schedule: + interval: "weekly" - package-ecosystem: "gomod" directory: "/cmd/tracegen" schedule: @@ -50,10 +58,6 @@ updates: directory: "/exporter/awskinesisexporter" schedule: interval: "weekly" - - package-ecosystem: "gomod" - directory: "/exporter/awsprometheusremotewriteexporter" - schedule: - interval: "weekly" - package-ecosystem: "gomod" directory: "/exporter/awsxrayexporter" schedule: @@ -82,10 +86,6 @@ updates: directory: "/exporter/dynatraceexporter" schedule: interval: "weekly" - - package-ecosystem: "gomod" - directory: "/exporter/elasticexporter" - schedule: - interval: "weekly" - package-ecosystem: "gomod" directory: "/exporter/elasticsearchexporter" schedule: @@ -107,7 +107,7 @@ updates: schedule: interval: "weekly" - package-ecosystem: "gomod" - directory: "/exporter/honeycombexporter" + directory: "/exporter/googlemanagedprometheusexporter" schedule: interval: "weekly" - package-ecosystem: "gomod" @@ -142,6 +142,10 @@ updates: directory: "/exporter/lokiexporter" schedule: interval: "weekly" + - package-ecosystem: "gomod" + directory: "/exporter/mezmoexporter" + schedule: + interval: "weekly" - package-ecosystem: "gomod" directory: "/exporter/opencensusexporter" schedule: @@ -158,6 +162,10 @@ updates: directory: "/exporter/prometheusremotewriteexporter" schedule: interval: "weekly" + - package-ecosystem: "gomod" + directory: "/exporter/pulsarexporter" + schedule: + interval: "weekly" - package-ecosystem: "gomod" directory: "/exporter/sapmexporter" schedule: @@ -214,6 +222,10 @@ updates: directory: "/extension/fluentbitextension" schedule: interval: "weekly" + - package-ecosystem: "gomod" + directory: "/extension/headerssetter" + schedule: + interval: "weekly" - package-ecosystem: "gomod" directory: "/extension/healthcheckextension" schedule: @@ -262,6 +274,10 @@ updates: directory: "/extension/pprofextension" schedule: interval: "weekly" + - package-ecosystem: "gomod" + directory: "/extension/sigv4authextension" + schedule: + interval: "weekly" - package-ecosystem: "gomod" directory: "/extension/storage" schedule: @@ -330,6 +346,10 @@ updates: directory: "/internal/kubelet" schedule: interval: "weekly" + - package-ecosystem: "gomod" + directory: "/internal/metadataproviders" + schedule: + interval: "weekly" - package-ecosystem: "gomod" directory: "/internal/scrapertest" schedule: @@ -366,6 +386,10 @@ updates: directory: "/pkg/stanza" schedule: interval: "weekly" + - package-ecosystem: "gomod" + directory: "/pkg/telemetryquerylanguage" + schedule: + interval: "weekly" - package-ecosystem: "gomod" directory: "/pkg/translator/jaeger" schedule: @@ -390,6 +414,10 @@ updates: directory: "/pkg/translator/zipkin" schedule: interval: "weekly" + - package-ecosystem: "gomod" + directory: "/pkg/winperfcounters" + schedule: + interval: "weekly" - package-ecosystem: "gomod" directory: "/processor/attributesprocessor" schedule: @@ -418,6 +446,10 @@ updates: directory: "/processor/k8sattributesprocessor" schedule: interval: "weekly" + - package-ecosystem: "gomod" + directory: "/processor/logstransformprocessor" + schedule: + interval: "weekly" - package-ecosystem: "gomod" directory: "/processor/metricsgenerationprocessor" schedule: @@ -446,6 +478,10 @@ updates: directory: "/processor/routingprocessor" schedule: interval: "weekly" + - package-ecosystem: "gomod" + directory: "/processor/schemaprocessor" + schedule: + interval: "weekly" - package-ecosystem: "gomod" directory: "/processor/spanmetricsprocessor" schedule: @@ -462,6 +498,14 @@ updates: directory: "/processor/transformprocessor" schedule: interval: "weekly" + - package-ecosystem: "gomod" + directory: "/receiver/activedirectorydsreceiver" + schedule: + interval: "weekly" + - package-ecosystem: "gomod" + directory: "/receiver/aerospikereceiver" + schedule: + interval: "weekly" - package-ecosystem: "gomod" directory: "/receiver/apachereceiver" schedule: @@ -482,10 +526,22 @@ updates: directory: "/receiver/awsxrayreceiver" schedule: interval: "weekly" + - package-ecosystem: "gomod" + directory: "/receiver/azureeventhubreceiver" + schedule: + interval: "weekly" + - package-ecosystem: "gomod" + directory: "/receiver/bigipreceiver" + schedule: + interval: "weekly" - package-ecosystem: "gomod" directory: "/receiver/carbonreceiver" schedule: interval: "weekly" + - package-ecosystem: "gomod" + directory: "/receiver/chronyreceiver" + schedule: + interval: "weekly" - package-ecosystem: "gomod" directory: "/receiver/cloudfoundryreceiver" schedule: @@ -510,10 +566,18 @@ updates: directory: "/receiver/elasticsearchreceiver" schedule: interval: "weekly" + - package-ecosystem: "gomod" + directory: "/receiver/expvarreceiver" + schedule: + interval: "weekly" - package-ecosystem: "gomod" directory: "/receiver/filelogreceiver" schedule: interval: "weekly" + - package-ecosystem: "gomod" + directory: "/receiver/flinkmetricsreceiver" + schedule: + interval: "weekly" - package-ecosystem: "gomod" directory: "/receiver/fluentforwardreceiver" schedule: @@ -530,6 +594,10 @@ updates: directory: "/receiver/hostmetricsreceiver" schedule: interval: "weekly" + - package-ecosystem: "gomod" + directory: "/receiver/iisreceiver" + schedule: + interval: "weekly" - package-ecosystem: "gomod" directory: "/receiver/influxdbreceiver" schedule: @@ -586,10 +654,18 @@ updates: directory: "/receiver/nginxreceiver" schedule: interval: "weekly" + - package-ecosystem: "gomod" + directory: "/receiver/nsxtreceiver" + schedule: + interval: "weekly" - package-ecosystem: "gomod" directory: "/receiver/opencensusreceiver" schedule: interval: "weekly" + - package-ecosystem: "gomod" + directory: "/receiver/otlpjsonfilereceiver" + schedule: + interval: "weekly" - package-ecosystem: "gomod" directory: "/receiver/podmanreceiver" schedule: @@ -618,6 +694,14 @@ updates: directory: "/receiver/redisreceiver" schedule: interval: "weekly" + - package-ecosystem: "gomod" + directory: "/receiver/riakreceiver" + schedule: + interval: "weekly" + - package-ecosystem: "gomod" + directory: "/receiver/saphanareceiver" + schedule: + interval: "weekly" - package-ecosystem: "gomod" directory: "/receiver/sapmreceiver" schedule: @@ -634,6 +718,10 @@ updates: directory: "/receiver/simpleprometheusreceiver/examples/federation/prom-counter" schedule: interval: "weekly" + - package-ecosystem: "gomod" + directory: "/receiver/skywalkingreceiver" + schedule: + interval: "weekly" - package-ecosystem: "gomod" directory: "/receiver/solacereceiver" schedule: @@ -642,6 +730,14 @@ updates: directory: "/receiver/splunkhecreceiver" schedule: interval: "weekly" + - package-ecosystem: "gomod" + directory: "/receiver/sqlqueryreceiver" + schedule: + interval: "weekly" + - package-ecosystem: "gomod" + directory: "/receiver/sqlserverreceiver" + schedule: + interval: "weekly" - package-ecosystem: "gomod" directory: "/receiver/statsdreceiver" schedule: @@ -658,10 +754,18 @@ updates: directory: "/receiver/udplogreceiver" schedule: interval: "weekly" + - package-ecosystem: "gomod" + directory: "/receiver/vcenterreceiver" + schedule: + interval: "weekly" - package-ecosystem: "gomod" directory: "/receiver/wavefrontreceiver" schedule: interval: "weekly" + - package-ecosystem: "gomod" + directory: "/receiver/windowseventlogreceiver" + schedule: + interval: "weekly" - package-ecosystem: "gomod" directory: "/receiver/windowsperfcountersreceiver" schedule: diff --git a/cmd/configschema/go.mod b/cmd/configschema/go.mod index b3fa9f30fade..e1c49cfa69e2 100644 --- a/cmd/configschema/go.mod +++ b/cmd/configschema/go.mod @@ -141,9 +141,6 @@ require ( github.com/envoyproxy/protoc-gen-validate v0.6.7 // indirect github.com/euank/go-kmsg-parser v2.0.0+incompatible // indirect github.com/facebook/time v0.0.0-20220713225404-f7a0d7702d50 // indirect - github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a // indirect - github.com/facebookgo/limitgroup v0.0.0-20150612190941-6abd8d71ec01 // indirect - github.com/facebookgo/muster v0.0.0-20150708232844-fd3d7953fd52 // indirect github.com/fatih/color v1.13.0 // indirect github.com/felixge/httpsnoop v1.0.3 // indirect github.com/form3tech-oss/jwt-go v3.2.5+incompatible // indirect @@ -211,7 +208,6 @@ require ( github.com/hashicorp/nomad/api v0.0.0-20220718181929-9457a13c7ccf // indirect github.com/hashicorp/serf v0.9.7 // indirect github.com/hetznercloud/hcloud-go v1.35.0 // indirect - github.com/honeycombio/libhoney-go v1.16.0 // indirect github.com/iancoleman/strcase v0.2.0 // indirect github.com/imdario/mergo v0.3.12 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect @@ -282,7 +278,6 @@ require ( github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awscloudwatchlogsexporter v0.57.2 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsemfexporter v0.57.2 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awskinesisexporter v0.57.2 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsprometheusremotewriteexporter v0.57.2 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter v0.57.2 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter v0.57.2 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/exporter/carbonexporter v0.57.2 // indirect @@ -290,14 +285,12 @@ require ( github.com/open-telemetry/opentelemetry-collector-contrib/exporter/coralogixexporter v0.57.2 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter v0.57.2 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/exporter/dynatraceexporter v0.57.2 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter v0.57.2 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter v0.57.2 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/exporter/f5cloudexporter v0.57.2 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter v0.57.2 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudexporter v0.57.2 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudpubsubexporter v0.57.2 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlemanagedprometheusexporter v0.57.2 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/honeycombexporter v0.57.2 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/exporter/humioexporter v0.57.2 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/exporter/influxdbexporter v0.57.2 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/exporter/jaegerexporter v0.57.2 // indirect @@ -482,7 +475,6 @@ require ( github.com/prometheus/prometheus v0.37.0 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/rs/cors v1.8.2 // indirect - github.com/santhosh-tekuri/jsonschema v1.2.4 // indirect github.com/scaleway/scaleway-sdk-go v1.0.0-beta.9 // indirect github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646 // indirect github.com/secure-systems-lab/go-securesystemslib v0.3.1 // indirect @@ -524,8 +516,6 @@ require ( github.com/vincent-petithory/dataurl v1.0.0 // indirect github.com/vishvananda/netlink v1.1.1-0.20210330154013-f5de75959ad5 // indirect github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f // indirect - github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect - github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect github.com/vmware/go-vmware-nsxt v0.0.0-20220328155605-f49a14c1ef5f // indirect github.com/vmware/govmomi v0.28.0 // indirect github.com/vultr/govultr/v2 v2.17.2 // indirect @@ -536,8 +526,6 @@ require ( github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect - go.elastic.co/apm v1.15.0 // indirect - go.elastic.co/fastjson v1.1.0 // indirect go.etcd.io/bbolt v1.3.6 // indirect go.mongodb.org/atlas v0.16.0 // indirect go.mongodb.org/mongo-driver v1.10.1 // indirect @@ -568,7 +556,6 @@ require ( google.golang.org/genproto v0.0.0-20220706185917-7780775163c4 // indirect google.golang.org/grpc v1.48.0 // indirect google.golang.org/protobuf v1.28.1 // indirect - gopkg.in/alexcesaro/statsd.v2 v2.0.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/ini.v1 v1.66.4 // indirect gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect @@ -639,8 +626,6 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsem replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awskinesisexporter => ../../exporter/awskinesisexporter -replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsprometheusremotewriteexporter => ../../exporter/awsprometheusremotewriteexporter - replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter => ../../exporter/awsxrayexporter replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter => ../../exporter/azuremonitorexporter @@ -655,8 +640,6 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datad replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/dynatraceexporter => ../../exporter/dynatraceexporter -replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter => ../../exporter/elasticexporter - replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter => ../../exporter/elasticsearchexporter replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/f5cloudexporter => ../../exporter/f5cloudexporter @@ -669,8 +652,6 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googl replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudpubsubexporter => ../../exporter/googlecloudpubsubexporter -replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/honeycombexporter => ../../exporter/honeycombexporter - replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/humioexporter => ../../exporter/humioexporter replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/influxdbexporter => ../../exporter/influxdbexporter diff --git a/cmd/configschema/go.sum b/cmd/configschema/go.sum index 812f3dfbd51c..475260cd38e8 100644 --- a/cmd/configschema/go.sum +++ b/cmd/configschema/go.sum @@ -275,7 +275,6 @@ github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmV github.com/armon/go-metrics v0.3.10 h1:FR+drcQStOe+32sYyJYyZ7FIdgoGGBnwLl+flodp8Uo= github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= @@ -611,14 +610,8 @@ github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFP github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/elastic/go-elasticsearch/v7 v7.17.1 h1:49mHcHx7lpCL8cW1aioEwSEVKQF3s+Igi4Ye/QTWwmk= github.com/elastic/go-elasticsearch/v7 v7.17.1/go.mod h1:OJ4wdbtDNk5g503kvlHLyErCgQwwzmDtaFC4XyOxXA4= -github.com/elastic/go-licenser v0.3.1 h1:RmRukU/JUmts+rpexAw0Fvt2ly7VVu6mw8z4HrEzObU= -github.com/elastic/go-licenser v0.3.1/go.mod h1:D8eNQk70FOCVBl3smCGQt/lv7meBeQno2eI1S5apiHQ= github.com/elastic/go-structform v0.0.10 h1:oy08o/Ih2hHTkNcRY/1HhaYvIp5z6t8si8gnCJPDo1w= github.com/elastic/go-structform v0.0.10/go.mod h1:CZWf9aIRYY5SuKSmOhtXScE5uQiLZNqAFnwKR4OrIM4= -github.com/elastic/go-sysinfo v1.1.1 h1:ZVlaLDyhVkDfjwPGU55CQRCRolNpc7P0BbyhhQZQmMI= -github.com/elastic/go-sysinfo v1.1.1/go.mod h1:i1ZYdU10oLNfRzq4vq62BEwD2fH8KaWh6eh0ikPT9F0= -github.com/elastic/go-windows v1.0.0 h1:qLURgZFkkrYyTTkvYpsZIgf83AUsdIHfvlJaqaZ7aSY= -github.com/elastic/go-windows v1.0.0/go.mod h1:TsU0Nrp7/y3+VwE82FoZF8gC/XFg/Elz6CcloAxnPgU= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= @@ -645,20 +638,10 @@ github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/facebook/time v0.0.0-20220713225404-f7a0d7702d50 h1:3fALCgsB+zI8Bxlv4ph4lCgt1CEQHIdU5sWxbkaMkuc= github.com/facebook/time v0.0.0-20220713225404-f7a0d7702d50/go.mod h1:IQmM+Ezbn5X7gpDO0IjKU5RmW9xT1a19dLp+NbivoXE= -github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a h1:yDWHCSQ40h88yih2JAcL6Ls/kVkSE8GFACTGVnMPruw= -github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a/go.mod h1:7Ga40egUymuWXxAe151lTNnCv97MddSOVsjpPPkityA= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= -github.com/facebookgo/limitgroup v0.0.0-20150612190941-6abd8d71ec01 h1:IeaD1VDVBPlx3viJT9Md8if8IxxJnO+x0JCGb054heg= -github.com/facebookgo/limitgroup v0.0.0-20150612190941-6abd8d71ec01/go.mod h1:ypD5nozFk9vcGw1ATYefw6jHe/jZP++Z15/+VTMcWhc= -github.com/facebookgo/muster v0.0.0-20150708232844-fd3d7953fd52 h1:a4DFiKFJiDRGFD1qIcqGLX/WlUMD9dyLSLDt+9QZgt8= -github.com/facebookgo/muster v0.0.0-20150708232844-fd3d7953fd52/go.mod h1:yIquW87NGRw1FU5p5lEkpnt/QxoH5uPAOUlOVkAUuMg= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= github.com/facebookgo/stackerr v0.0.0-20150612192056-c2fcf88613f4 h1:fP04zlkPjAGpsduG7xN3rRkxjAqkJaIQnnkNYYw/pAk= github.com/facebookgo/stackerr v0.0.0-20150612192056-c2fcf88613f4/go.mod h1:SBHk9aNQtiw4R4bEuzHjVmZikkUKCnO1v3lPQ21HZGk= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= @@ -1054,8 +1037,6 @@ github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKe github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/hetznercloud/hcloud-go v1.35.0 h1:sduXOrWM0/sJXwBty7EQd7+RXEJh5+CsAGQmHshChFg= github.com/hetznercloud/hcloud-go v1.35.0/go.mod h1:mepQwR6va27S3UQthaEPGS86jtzSY9xWL1e9dyxXpgA= -github.com/honeycombio/libhoney-go v1.16.0 h1:kPpqoz6vbOzgp7jC6SR7SkNj7rua7rgxvznI6M3KdHc= -github.com/honeycombio/libhoney-go v1.16.0/go.mod h1:izP4fbREuZ3vqC4HlCAmPrcPT9gxyxejRjGtCYpmBn0= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/iancoleman/strcase v0.2.0 h1:05I4QRnGpI0m37iZQRuskXh+w77mr6Z41lwQzuHLwW0= @@ -1141,8 +1122,6 @@ github.com/jaegertracing/jaeger v1.37.0 h1:/EY0n/IUFT/NozEM78bzW2Lm2dPoKuIF/9c9U github.com/jaegertracing/jaeger v1.37.0/go.mod h1:2tPPMcktsOFhmsiyxoYnUE0QAlP4UC6DEsC2jdllt5g= github.com/jawher/mow.cli v1.0.4/go.mod h1:5hQj2V8g+qYmLUVWqu4Wuja1pI57M83EChYLVZ0sMKk= github.com/jawher/mow.cli v1.2.0/go.mod h1:y+pcA3jBAdo/GIZx/0rFjw/K2bVEODP9rfZOfaiq8Ko= -github.com/jcchavezs/porto v0.1.0 h1:Xmxxn25zQMmgE7/yHYmh19KcItG81hIwfbEEFnd6w/Q= -github.com/jcchavezs/porto v0.1.0/go.mod h1:fESH0gzDHiutHRdX2hv27ojnOVFco37hg1W6E9EZF4A= github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8= github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= github.com/jcmturner/dnsutils/v2 v2.0.0 h1:lltnkeZGL0wILNvrNiVCR6Ro5PGU/SeBvVO/8c/iPbo= @@ -1155,7 +1134,6 @@ github.com/jcmturner/gokrb5/v8 v8.4.2 h1:6ZIM6b/JJN0X8UM43ZOM6Z4SJzla+a/u7scXFJz github.com/jcmturner/gokrb5/v8 v8.4.2/go.mod h1:sb+Xq/fTY5yktf/VxLsE3wlfPqQjp0aWNYyvBVK62bc= github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY= github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= @@ -1166,8 +1144,6 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGw github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= -github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901 h1:rp+c0RAYOWj8l6qbCUTSiRLG/iKnW3K3/QfPPuSsBt4= -github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901/go.mod h1:Z86h9688Y0wesXCyonoVr47MasHilkuLMqGhRZ4Hpak= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= @@ -1210,7 +1186,6 @@ github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYs github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.13.1/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.7/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/klauspost/compress v1.15.8/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY= github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= @@ -1582,7 +1557,6 @@ github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190425082905-87a4384529e0/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.0-20190522114515-bc1a522cf7b1/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= @@ -1628,8 +1602,6 @@ github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiB github.com/samuel/go-zookeeper v0.0.0-20190810000440-0ceca61e4d75/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/sanity-io/litter v1.2.0/go.mod h1:JF6pZUFgu2Q0sBZ+HSV35P8TVPI1TTzEwyu9FXAw2W4= -github.com/santhosh-tekuri/jsonschema v1.2.4 h1:hNhW8e7t+H1vgY+1QeEQpveR6D4+OwKPXCfD2aieJis= -github.com/santhosh-tekuri/jsonschema v1.2.4/go.mod h1:TEAUOeZSmIxTTuHatJzrvARHiuO9LYd+cIxzgEHCQI4= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/scaleway/scaleway-sdk-go v1.0.0-beta.9 h1:0roa6gXKgyta64uqh52AQG3wzZXH21unn+ltzQSXML0= github.com/scaleway/scaleway-sdk-go v1.0.0-beta.9/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg= @@ -1814,11 +1786,7 @@ github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1 github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f h1:p4VB7kIXpOQvVn1ZaTIVp+3vuYAXFe3OJEvjbUYJLaA= github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= github.com/vmihailenco/msgpack/v4 v4.3.12 h1:07s4sz9IReOgdikxLTKNbBdqDMLsjPKXwvCazn8G65U= -github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU= -github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= github.com/vmihailenco/tagparser v0.1.2 h1:gnjoVuB/kljJ5wICEEOpx98oXMWPLj22G67Vbd1qPqc= -github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= -github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/vmware/go-vmware-nsxt v0.0.0-20220328155605-f49a14c1ef5f h1:NbC9yOr5At92seXK+kOr2TzU3mIWzcJOVzZasGSuwoU= github.com/vmware/go-vmware-nsxt v0.0.0-20220328155605-f49a14c1ef5f/go.mod h1:VEqcmf4Sp7gPB7z05QGyKVmn6xWppr7Nz8cVNvyC80o= github.com/vmware/govmomi v0.28.0 h1:VgeQ/Rvz79U9G8QIKLdgpsN9AndHJL+5iMJLgYIrBGI= @@ -1859,10 +1827,6 @@ github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPS github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= github.com/zorkian/go-datadog-api v2.30.0+incompatible h1:R4ryGocppDqZZbnNc5EDR8xGWF/z/MxzWnqTUijDQes= -go.elastic.co/apm v1.15.0 h1:uPk2g/whK7c7XiZyz/YCUnAUBNPiyNeE3ARX3G6Gx7Q= -go.elastic.co/apm v1.15.0/go.mod h1:dylGv2HKR0tiCV+wliJz1KHtDyuD8SPe69oV7VyK6WY= -go.elastic.co/fastjson v1.1.0 h1:3MrGBWWVIxe/xvsbpghtkFoPciPhOCmjsR/HfwEeQR4= -go.elastic.co/fastjson v1.1.0/go.mod h1:boNGISWMjQsUPy/t6yqt2/1Wx4YNPSe+mZjlyw9vKKI= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= @@ -2196,7 +2160,6 @@ golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191025021431-6c3a3bfe00ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2382,7 +2345,6 @@ golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjs golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= @@ -2645,8 +2607,6 @@ google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175 google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/alexcesaro/statsd.v2 v2.0.0 h1:FXkZSCZIH17vLCO5sO2UucTHsH9pc+17F6pl3JVCwMc= -gopkg.in/alexcesaro/statsd.v2 v2.0.0/go.mod h1:i0ubccKGzBVNBpdGV5MocxyA/XlLUJzA7SLonnE4drU= gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -2709,8 +2669,6 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -howett.net/plist v0.0.0-20181124034731-591f970eefbb h1:jhnBjNi9UFpfpl8YZhA9CrOqpnJdvzuiHsl/dnxl11M= -howett.net/plist v0.0.0-20181124034731-591f970eefbb/go.mod h1:vMygbs4qMhSZSc4lCUl2OEE+rDiIIJAIdR4m7MiMcm0= k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= diff --git a/exporter/awsprometheusremotewriteexporter/Makefile b/exporter/awsprometheusremotewriteexporter/Makefile deleted file mode 100644 index ded7a36092dc..000000000000 --- a/exporter/awsprometheusremotewriteexporter/Makefile +++ /dev/null @@ -1 +0,0 @@ -include ../../Makefile.Common diff --git a/exporter/awsprometheusremotewriteexporter/README.md b/exporter/awsprometheusremotewriteexporter/README.md deleted file mode 100644 index 3b6916e662a6..000000000000 --- a/exporter/awsprometheusremotewriteexporter/README.md +++ /dev/null @@ -1,91 +0,0 @@ -## DEPRECATION NOTICE - -| Status | | -| ------------------------ | ------------ | -| Stability | [deprecated] | -| Supported pipeline types | metrics | -| Distributions | [contrib] | - - -The AWS Prometheus Remote Write Exporter will be removed at some point after `v0.49.0`. Users who want to send metrics to Amazon Managed Service -for Prometheus will need to instead use the [Prometheus Remote Write Exporter](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/exporter/prometheusremotewriteexporter/README.md) along with the [Sigv4 Authenticator Extension](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/extension/sigv4authextension/README.md) -to achieve the same result. - -# AWS Prometheus Remote Write Exporter - -AWS Prometheus Remote Write Exporter sends metrics in remote write format to -[Amazon Managed Service for Prometheus](https://aws.amazon.com/prometheus/). -The exporter uses AWS Signature Version 4 signing process for authentication -and uses credentials from the -[default credential chain](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials). - -Note: This exporter is similar to [Prometheus remote write exporter](../prometheusremotewriteexporter) -and it only adds SigV4 support to it. - -Similar to the Prometheus remote write exporter, the exporter checks the -temporality and the type of each incoming metric -and only exports the following combination: - -- Int64 or Double type with any temporality -- MonotonicInt64, MonotonicDouble, Histogram, or Summary with only Cumulative temporality. - -## Configuration - -The following settings are required: - -- `endpoint`: protocol:host:port to which the exporter is going to send traces or metrics, using the HTTP/HTTPS protocol. - -The following settings can be optionally configured: - -- `namespace`: prefix attached to each exported metric name. -- `headers`: additional headers attached to each HTTP request. If `X-Prometheus-Remote-Write-Version` is set by user, its value must be `0.1.0` -- `tls`: - - `insecure` (default = false): whether to enable client transport security for the exporter's connection. - - `ca_file`: path to the CA cert. For a client this verifies the server certificate. Should only be used if `insecure` is set to true. - - `cert_file`: path to the TLS cert to use for TLS required connections. Should only be used if `insecure` is set to true. - - `key_file`: path to the TLS key to use for TLS required connections. Should only be used if `insecure` is set to true. -- `timeout` (default = 5s): How long to wait until the connection is close. -- `read_buffer_size` (default = 0): ReadBufferSize for HTTP client. -- `write_buffer_size` (default = 512 * 1024): WriteBufferSize for HTTP client. -- `aws_auth`: specify if each request should be signed with AWS Sig v4. The following settings must be configured: - - `region`: region of the AWS service being exported to. - - `role_arn`: Amazon Resource Name of the role to assume. - -### Examples - -Simplest configuration: - -```yaml -exporters: - awsprometheusremotewrite: - endpoint: "https://aps-workspaces.us-east-1.amazonaws.com/workspaces/ws-XXX/api/v1/remote_write" -``` - -All configurations: - -```yaml -exporters: - awsprometheusremotewrite: - namespace: "test-space" - retry_on_failure: - enabled: true - initial_interval: 10s - max_interval: 60s - max_elapsed_time: 10m - endpoint: "https://aps-workspaces.us-east-1.amazonaws.com/workspaces/ws-XXX/api/v1/remote_write" - aws_auth: - region: "us-east-1" # need to match workspace region - service: "aps" - role_arn: "arn:aws:iam::123456789012:role/aws-service-role/access" - ca_file: "/var/lib/mycert.pem" - write_buffer_size: 524288 - external_labels: - key1: value1 - key2: value2 -``` - -The full list of settings exposed for this exporter are documented [here](./config.go) -with detailed sample configurations [here](./testdata/config.yaml). - -[deprecated]:https://github.com/open-telemetry/opentelemetry-collector#deprecated -[contrib]:https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib \ No newline at end of file diff --git a/exporter/awsprometheusremotewriteexporter/auth.go b/exporter/awsprometheusremotewriteexporter/auth.go deleted file mode 100644 index 4de0c7219c43..000000000000 --- a/exporter/awsprometheusremotewriteexporter/auth.go +++ /dev/null @@ -1,171 +0,0 @@ -// Copyright The OpenTelemetry 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 awsprometheusremotewriteexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsprometheusremotewriteexporter" - -import ( - "bytes" - "errors" - "fmt" - "io" - "net/http" - "net/url" - "strconv" - "strings" - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/credentials" - "github.com/aws/aws-sdk-go/aws/credentials/stscreds" - "github.com/aws/aws-sdk-go/aws/session" - v4 "github.com/aws/aws-sdk-go/aws/signer/v4" -) - -const defaultAMPSigV4Service = "aps" - -var errNilRequest = errors.New("sigv4: unable to sign nil *http.Request") - -// signingRoundTripper is a Custom RoundTripper that performs AWS Sig V4. -type signingRoundTripper struct { - transport http.RoundTripper - signer *v4.Signer - region string - service string - runtimeInfo string -} - -func (si *signingRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { - if req == nil { - return nil, errNilRequest - } - - body := io.ReadSeeker(nil) - if req.GetBody != nil { - reqBody, err := req.GetBody() - if err != nil { - return nil, err - } - - content, err := io.ReadAll(reqBody) - reqBody.Close() - if err != nil { - return nil, err - } - body = bytes.NewReader(content) - } - - // Clone request to ensure thread safety. - req2 := cloneRequest(req) - - // Add the runtime information to the User-Agent header of the request - ua := req2.Header.Get("User-Agent") - if len(ua) > 0 { - ua = ua + " " + si.runtimeInfo - } else { - ua = si.runtimeInfo - } - req2.Header.Set("User-Agent", ua) - - // Sign the request - _, err := si.signer.Sign(req2, body, si.service, si.region, time.Now()) - if err != nil { - return nil, fmt.Errorf("error signing the request: %w", err) - } - - // Send the request to Prometheus Remote Write Backend. - resp, err := si.transport.RoundTrip(req2) - if err != nil { - return nil, err - } - - return resp, err -} - -func newSigningRoundTripper(cfg *Config, next http.RoundTripper, runtimeInfo string) (http.RoundTripper, error) { - auth := cfg.AuthConfig - if auth.Region == "" { - region, err := parseEndpointRegion(cfg.Config.HTTPClientSettings.Endpoint) - if err != nil { - return next, err - } - auth.Region = region - } - if auth.Service == "" { - auth.Service = defaultAMPSigV4Service - } - - creds, err := getCredsFromConfig(auth) - if err != nil { - return next, err - } - return newSigningRoundTripperWithCredentials(auth, creds, next, runtimeInfo) -} - -func getCredsFromConfig(auth AuthConfig) (*credentials.Credentials, error) { - sess, err := session.NewSessionWithOptions(session.Options{ - Config: aws.Config{Region: aws.String(auth.Region)}, - }) - if err != nil { - return nil, err - } - if auth.RoleArn != "" { - // Get credentials from an assumeRole API call. - return stscreds.NewCredentials(sess, auth.RoleArn, func(p *stscreds.AssumeRoleProvider) { - p.RoleSessionName = "aws-otel-collector-" + strconv.FormatInt(time.Now().Unix(), 10) - }), nil - } - // Get Credentials, either from ./aws or from environmental variables. - return sess.Config.Credentials, nil -} - -func parseEndpointRegion(endpoint string) (region string, err error) { - // Example: https://aps-workspaces.us-east-1.amazonaws.com/workspaces/ws-XXX/api/v1/remote_write - const nDomains = 3 - u, err := url.Parse(endpoint) - if err != nil { - return "", err - } - p := strings.SplitN(u.Host, ".", nDomains) - if len(p) < nDomains { - return "", fmt.Errorf("invalid endpoint: %q", endpoint) - } - return p[1], nil -} - -func newSigningRoundTripperWithCredentials(auth AuthConfig, creds *credentials.Credentials, next http.RoundTripper, runtimeInfo string) (http.RoundTripper, error) { - if creds == nil { - return nil, errors.New("no AWS credentials exist") - } - signer := v4.NewSigner(creds) - rt := signingRoundTripper{ - transport: next, - signer: signer, - region: auth.Region, - service: auth.Service, - runtimeInfo: runtimeInfo, - } - return &rt, nil -} - -func cloneRequest(r *http.Request) *http.Request { - // shallow copy of the struct - r2 := new(http.Request) - *r2 = *r - // deep copy of the Header - r2.Header = make(http.Header, len(r.Header)) - for k, s := range r.Header { - r2.Header[k] = append([]string(nil), s...) - } - return r2 -} diff --git a/exporter/awsprometheusremotewriteexporter/auth_test.go b/exporter/awsprometheusremotewriteexporter/auth_test.go deleted file mode 100644 index d9b3c96ab1ed..000000000000 --- a/exporter/awsprometheusremotewriteexporter/auth_test.go +++ /dev/null @@ -1,376 +0,0 @@ -// Copyright The OpenTelemetry 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 awsprometheusremotewriteexporter - -import ( - "errors" - "fmt" - "io" - "net/http" - "net/http/httptest" - "net/url" - "runtime" - "strings" - "sync" - "testing" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/credentials" - v4 "github.com/aws/aws-sdk-go/aws/signer/v4" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/component/componenttest" - "go.opentelemetry.io/collector/config/confighttp" - "go.opentelemetry.io/collector/config/configtls" -) - -var sdkInformation = fmt.Sprintf("%s/%s (%s; %s; %s)", aws.SDKName, aws.SDKVersion, runtime.Version(), runtime.GOOS, runtime.GOARCH) - -func TestRequestSignature(t *testing.T) { - // Some form of AWS credentials must be set up for tests to succeed - awsCreds := fetchMockCredentials() - authConfig := AuthConfig{Region: "region", Service: "service"} - - server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - _, err := v4.GetSignedRequestSignature(r) - assert.NoError(t, err) - assert.Equal(t, sdkInformation, r.Header.Get("User-Agent")) - w.WriteHeader(200) - })) - defer server.Close() - - serverURL, err := url.Parse(server.URL) - assert.NoError(t, err) - - setting := confighttp.HTTPClientSettings{ - Endpoint: serverURL.String(), - TLSSetting: configtls.TLSClientSetting{}, - ReadBufferSize: 0, - WriteBufferSize: 0, - Timeout: 0, - CustomRoundTripper: func(next http.RoundTripper) (http.RoundTripper, error) { - return newSigningRoundTripperWithCredentials(authConfig, awsCreds, next, sdkInformation) - }, - } - client, _ := setting.ToClient(componenttest.NewNopHost(), componenttest.NewNopTelemetrySettings()) - req, err := http.NewRequest("POST", setting.Endpoint, strings.NewReader("a=1&b=2")) - assert.NoError(t, err) - _, err = client.Do(req) - assert.NoError(t, err) -} - -func TestRequestSignatureEmptyBody(t *testing.T) { - // Some form of AWS credentials must be set up for tests to succeed - awsCreds := fetchMockCredentials() - authConfig := AuthConfig{Region: "region", Service: "service"} - - server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - _, err := v4.GetSignedRequestSignature(r) - assert.NoError(t, err) - assert.Equal(t, sdkInformation, r.Header.Get("User-Agent")) - w.WriteHeader(200) - })) - defer server.Close() - - serverURL, err := url.Parse(server.URL) - assert.NoError(t, err) - - setting := confighttp.HTTPClientSettings{ - Endpoint: serverURL.String(), - TLSSetting: configtls.TLSClientSetting{}, - ReadBufferSize: 0, - WriteBufferSize: 0, - Timeout: 0, - CustomRoundTripper: func(next http.RoundTripper) (http.RoundTripper, error) { - return newSigningRoundTripperWithCredentials(authConfig, awsCreds, next, sdkInformation) - }, - } - client, _ := setting.ToClient(componenttest.NewNopHost(), componenttest.NewNopTelemetrySettings()) - req, err := http.NewRequest("GET", setting.Endpoint, nil) - assert.NoError(t, err) - _, err = client.Do(req) - assert.NoError(t, err) -} - -type checkCloser struct { - io.Reader - mu sync.Mutex - closed bool -} - -func (cc *checkCloser) Close() error { - cc.mu.Lock() - cc.closed = true - cc.mu.Unlock() - return nil -} - -func TestLeakingBody(t *testing.T) { - // Some form of AWS credentials must be set up for tests to succeed - awsCreds := fetchMockCredentials() - authConfig := AuthConfig{Region: "region", Service: "service"} - - server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - _, err := v4.GetSignedRequestSignature(r) - assert.NoError(t, err) - assert.Equal(t, sdkInformation, r.Header.Get("User-Agent")) - w.WriteHeader(200) - })) - defer server.Close() - - serverURL, err := url.Parse(server.URL) - assert.NoError(t, err) - - setting := confighttp.HTTPClientSettings{ - Endpoint: serverURL.String(), - TLSSetting: configtls.TLSClientSetting{}, - ReadBufferSize: 0, - WriteBufferSize: 0, - Timeout: 0, - CustomRoundTripper: func(next http.RoundTripper) (http.RoundTripper, error) { - return newSigningRoundTripperWithCredentials(authConfig, awsCreds, next, sdkInformation) - }, - } - client, _ := setting.ToClient(componenttest.NewNopHost(), componenttest.NewNopTelemetrySettings()) - checker := &checkCloser{Reader: strings.NewReader("a=1&b=2")} - req, err := http.NewRequest("POST", setting.Endpoint, checker) - assert.NoError(t, err) - req.GetBody = func() (io.ReadCloser, error) { - checker.Reader = strings.NewReader("a=1&b=2") - return checker, nil - } - _, err = client.Do(req) - assert.NoError(t, err) - assert.True(t, checker.closed) -} - -func TestGetCredsFromConfig(t *testing.T) { - tests := []struct { - name string - authConfig AuthConfig - }{ - { - "success_case_without_role", - AuthConfig{Region: "region", Service: "service"}, - }, - { - "success_case_with_role", - AuthConfig{Region: "region", Service: "service", RoleArn: "arn:aws:iam::123456789012:role/IAMRole"}, - }, - } - // run tests - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - creds, err := getCredsFromConfig(tt.authConfig) - require.NoError(t, err, "Failed getCredsFromConfig") - require.NotNil(t, creds) - }) - } -} - -type ErrorRoundTripper struct{} - -func (ert *ErrorRoundTripper) RoundTrip(r *http.Request) (*http.Response, error) { - return nil, errors.New("error") -} - -func TestRoundTrip(t *testing.T) { - // Some form of AWS credentials must be set up for tests to succeed - awsCreds := fetchMockCredentials() - - defaultRoundTripper := (http.RoundTripper)(http.DefaultTransport.(*http.Transport).Clone()) - errorRoundTripper := &ErrorRoundTripper{} - - tests := []struct { - name string - rt http.RoundTripper - shouldError bool - authConfig AuthConfig - }{ - { - "valid_round_tripper", - defaultRoundTripper, - false, - AuthConfig{Region: "region", Service: "service"}, - }, - { - "round_tripper_error", - errorRoundTripper, - true, - AuthConfig{Region: "region", Service: "service", RoleArn: "arn:aws:iam::123456789012:role/IAMRole"}, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - _, err := v4.GetSignedRequestSignature(r) - assert.NoError(t, err) - assert.Equal(t, sdkInformation, r.Header.Get("User-Agent")) - w.WriteHeader(200) - })) - defer server.Close() - serverURL, _ := url.Parse(server.URL) - authConfig := AuthConfig{Region: "region", Service: "service"} - rt, err := newSigningRoundTripperWithCredentials(authConfig, awsCreds, tt.rt, sdkInformation) - assert.NoError(t, err) - req, err := http.NewRequest("POST", serverURL.String(), strings.NewReader("")) - assert.NoError(t, err) - res, err := rt.RoundTrip(req) - if tt.shouldError { - assert.Nil(t, res) - assert.Error(t, err) - return - } - assert.NoError(t, err) - assert.Equal(t, res.StatusCode, 200) - }) - } -} - -func TestCreateSigningRoundTripperWithCredentials(t *testing.T) { - defaultRoundTripper := (http.RoundTripper)(http.DefaultTransport.(*http.Transport).Clone()) - - // Some form of AWS credentials must be set up for tests to succeed - awsCreds := fetchMockCredentials() - - tests := []struct { - name string - creds *credentials.Credentials - roundTripper http.RoundTripper - authConfig AuthConfig - authApplied bool - returnError bool - }{ - { - "success_case", - awsCreds, - defaultRoundTripper, - AuthConfig{Region: "region", Service: "service"}, - true, - false, - }, - { - "success_case_no_auth_applied", - awsCreds, - defaultRoundTripper, - AuthConfig{Region: "", Service: ""}, - false, - false, - }, - { - "no_credentials_provided_error", - nil, - defaultRoundTripper, - AuthConfig{Region: "region", Service: "service"}, - true, - true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - rtp, err := newSigningRoundTripperWithCredentials(tt.authConfig, tt.creds, tt.roundTripper, sdkInformation) - if tt.returnError { - assert.Error(t, err) - return - } - assert.NoError(t, err) - if tt.authApplied { - sRtp := rtp.(*signingRoundTripper) - assert.Equal(t, sRtp.transport, tt.roundTripper) - assert.Equal(t, tt.authConfig.Service, sRtp.service) - } - }) - } -} - -func TestCloneRequest(t *testing.T) { - req1, err := http.NewRequest("GET", "https://example.com", nil) - assert.NoError(t, err) - - req2, err := http.NewRequest("GET", "https://example.com", nil) - assert.NoError(t, err) - req2.Header.Add("Header1", "val1") - - tests := []struct { - name string - request *http.Request - headers http.Header - }{ - { - "no_headers", - req1, - http.Header{}, - }, - { - "headers", - req2, - http.Header{"Header1": []string{"val1"}}, - }, - } - // run tests - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - r2 := cloneRequest(tt.request) - assert.EqualValues(t, tt.request.Header, r2.Header) - }) - } -} - -func TestParseEndpointRegion(t *testing.T) { - tests := []struct { - name string - endpoint string - wantRegion string - wantErr bool - }{ - { - name: "empty", - endpoint: "", - wantErr: true, - }, - { - name: "invalid", - endpoint: "https://aps-workspaces.us-east-1", - wantErr: true, - }, - { - name: "valid", - endpoint: "https://aps-workspaces.us-east-1.amazonaws.com/workspaces/ws-XXX/api/v1/remote_write", - wantRegion: "us-east-1", - wantErr: false, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - gotRegion, err := parseEndpointRegion(tt.endpoint) - if (err != nil) != tt.wantErr { - t.Errorf("parseEndpointRegion() error = %v, wantErr %v", err, tt.wantErr) - return - } - if gotRegion != tt.wantRegion { - t.Errorf("parseEndpointRegion() = %v, want %v", gotRegion, tt.wantRegion) - } - }) - } -} - -func fetchMockCredentials() *credentials.Credentials { - return credentials.NewStaticCredentials( - "MOCK_AWS_ACCESS_KEY", - "MOCK_AWS_SECRET_ACCESS_KEY", - "MOCK_TOKEN", - ) -} diff --git a/exporter/awsprometheusremotewriteexporter/config.go b/exporter/awsprometheusremotewriteexporter/config.go deleted file mode 100644 index 14df169ed248..000000000000 --- a/exporter/awsprometheusremotewriteexporter/config.go +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright The OpenTelemetry 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 awsprometheusremotewriteexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsprometheusremotewriteexporter" - -import ( - prw "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter" -) - -// Config defines configuration for Remote Write exporter. -type Config struct { - // Config represents the Prometheus Remote Write Exporter configuration. - prw.Config `mapstructure:",squash"` - - // AuthConfig represents the AWS SigV4 configuration options. - AuthConfig AuthConfig `mapstructure:"aws_auth"` -} - -// AuthConfig defines AWS authentication configurations for SigningRoundTripper. -type AuthConfig struct { - // Region is the AWS region for AWS SigV4. - Region string `mapstructure:"region"` - - // Service is the AWS service for AWS SigV4, this is by default "aps". Optional. - Service string `mapstructure:"service"` - - // Amazon Resource Name (ARN) of a role to assume. Optional. - RoleArn string `mapstructure:"role_arn"` -} diff --git a/exporter/awsprometheusremotewriteexporter/config_test.go b/exporter/awsprometheusremotewriteexporter/config_test.go deleted file mode 100644 index 1a387b749942..000000000000 --- a/exporter/awsprometheusremotewriteexporter/config_test.go +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright The OpenTelemetry 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 awsprometheusremotewriteexporter - -import ( - "path/filepath" - "testing" - "time" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/component/componenttest" - "go.opentelemetry.io/collector/config" - "go.opentelemetry.io/collector/config/confighttp" - "go.opentelemetry.io/collector/config/configtls" - "go.opentelemetry.io/collector/exporter/exporterhelper" - "go.opentelemetry.io/collector/service/servicetest" - - prw "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter" -) - -// TestLoadConfig checks whether yaml configuration can be loaded correctly. -func TestLoadConfig(t *testing.T) { - factories, err := componenttest.NopFactories() - assert.NoError(t, err) - - factory := NewFactory() - factories.Exporters[typeStr] = factory - cfg, err := servicetest.LoadConfigAndValidate(filepath.Join("testdata", "config.yaml"), factories) - - require.NoError(t, err) - require.NotNil(t, cfg) - - // From the default configurations -- checks if a correct exporter is instantiated - e0 := cfg.Exporters[config.NewComponentID(typeStr)] - cfgDefault := factory.CreateDefaultConfig() - // testing function equality is not supported in Go hence these will be ignored for this test - cfgDefault.(*Config).HTTPClientSettings.CustomRoundTripper = nil - e0.(*Config).HTTPClientSettings.CustomRoundTripper = nil - assert.Equal(t, e0, cfgDefault) - - // checks if the correct Config struct can be instantiated from testdata/config.yaml - e1 := cfg.Exporters[config.NewComponentIDWithName(typeStr, "2")] - cfgComplete := &Config{ - Config: prw.Config{ - ExporterSettings: config.NewExporterSettings(config.NewComponentIDWithName(typeStr, "2")), - TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(), - RetrySettings: exporterhelper.RetrySettings{ - Enabled: true, - InitialInterval: 10 * time.Second, - MaxInterval: 1 * time.Minute, - MaxElapsedTime: 10 * time.Minute, - }, - RemoteWriteQueue: prw.RemoteWriteQueue{ - Enabled: true, - QueueSize: 10000, - NumConsumers: 5, - }, - Namespace: "test-space", - ExternalLabels: map[string]string{"key1": "value1", "key2": "value2"}, - HTTPClientSettings: confighttp.HTTPClientSettings{ - Endpoint: "https://aps-workspaces.us-east-1.amazonaws.com/workspaces/ws-XXX/api/v1/remote_write", - TLSSetting: configtls.TLSClientSetting{ - TLSSetting: configtls.TLSSetting{ - CAFile: "/var/lib/mycert.pem", - }, - Insecure: false, - }, - ReadBufferSize: 0, - WriteBufferSize: 512 * 1024, - Timeout: 5 * time.Second, - Headers: map[string]string{ - "Prometheus-Remote-Write-Version": "0.1.0", - "X-Scope-OrgID": "234"}, - }, - }, - AuthConfig: AuthConfig{ - Region: "us-west-2", - Service: "service-name", - RoleArn: "arn:aws:iam::123456789012:role/IAMRole", - }, - } - // testing function equality is not supported in Go hence these will be ignored for this test - cfgComplete.HTTPClientSettings.CustomRoundTripper = nil - e1.(*Config).HTTPClientSettings.CustomRoundTripper = nil - assert.Equal(t, cfgComplete, e1) -} diff --git a/exporter/awsprometheusremotewriteexporter/factory.go b/exporter/awsprometheusremotewriteexporter/factory.go deleted file mode 100644 index b2218e9f912e..000000000000 --- a/exporter/awsprometheusremotewriteexporter/factory.go +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright The OpenTelemetry 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 awsprometheusremotewriteexporter provides a Prometheus Remote Write Exporter with AWS Sigv4 authentication -package awsprometheusremotewriteexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsprometheusremotewriteexporter" - -import ( - "context" - "fmt" - "net/http" - "os" - "runtime" - "strings" - - "github.com/aws/aws-sdk-go/aws" - "go.opentelemetry.io/collector/component" - "go.opentelemetry.io/collector/config" - - prw "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter" -) - -const typeStr = "awsprometheusremotewrite" // The value of "type" key in configuration. - -type awsFactory struct { - component.ExporterFactory -} - -// NewFactory returns a factory of the AWS Prometheus Remote Write exporter that can be registered to the Collector. -func NewFactory() component.ExporterFactory { - return &awsFactory{ExporterFactory: prw.NewFactory()} -} - -func (af *awsFactory) Type() config.Type { - return typeStr -} - -func (af *awsFactory) CreateMetricsExporter(ctx context.Context, params component.ExporterCreateSettings, - cfg config.Exporter) (component.MetricsExporter, error) { - params.Logger.Warn("Deprecation notice: The AWS PRW Exporter will be removed in the near future, see the README and the CHANGELOG for more information.") - return af.ExporterFactory.CreateMetricsExporter(ctx, params, &cfg.(*Config).Config) -} - -func (af *awsFactory) CreateDefaultConfig() config.Exporter { - cfg := &Config{ - Config: *af.ExporterFactory.CreateDefaultConfig().(*prw.Config), - AuthConfig: AuthConfig{ - Region: "", - Service: defaultAMPSigV4Service, - RoleArn: "", - }, - } - - cfg.ExporterSettings = config.NewExporterSettings(config.NewComponentID(typeStr)) - cfg.HTTPClientSettings.CustomRoundTripper = func(next http.RoundTripper) (http.RoundTripper, error) { - extras := []string{runtime.Version(), runtime.GOOS, runtime.GOARCH} - if v := os.Getenv("AWS_EXECUTION_ENV"); v != "" { - extras = append(extras, v) - } - runtimeInfo := fmt.Sprintf("%s/%s (%s)", aws.SDKName, aws.SDKVersion, strings.Join(extras, "; ")) - return newSigningRoundTripper(cfg, next, runtimeInfo) - } - - return cfg -} diff --git a/exporter/awsprometheusremotewriteexporter/factory_test.go b/exporter/awsprometheusremotewriteexporter/factory_test.go deleted file mode 100644 index 517380dad7be..000000000000 --- a/exporter/awsprometheusremotewriteexporter/factory_test.go +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright The OpenTelemetry 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 awsprometheusremotewriteexporter - -import ( - "context" - "testing" - - "github.com/stretchr/testify/assert" - "go.opentelemetry.io/collector/component" - "go.opentelemetry.io/collector/component/componenttest" - "go.opentelemetry.io/collector/config" - "go.opentelemetry.io/collector/config/confighttp" - "go.opentelemetry.io/collector/config/configtest" - "go.opentelemetry.io/collector/config/configtls" -) - -func TestType(t *testing.T) { - af := NewFactory() - assert.Equal(t, af.Type(), config.Type(typeStr)) -} - -// Tests whether the default Exporter factory can instantiate a properly interfaced Exporter with default conditions -func TestCreateDefaultConfig(t *testing.T) { - af := NewFactory() - cfg := af.CreateDefaultConfig() - assert.NotNil(t, cfg, "failed to create default config") - assert.NoError(t, configtest.CheckConfigStruct(cfg)) -} - -// Tests whether a correct Metrics Exporter from the default Config parameters -func TestCreateMetricsExporter(t *testing.T) { - af := NewFactory() - validConfigWithAuth := af.CreateDefaultConfig().(*Config) - validConfigWithAuth.AuthConfig = AuthConfig{Region: "region", Service: "service"} - - // Some form of AWS credentials chain required to test valid auth case - // This is a set of mock credentials strictly for testing purposes. Users - // should not set their credentials like this in production. - t.Setenv("AWS_ACCESS_KEY", "mock_value") - t.Setenv("AWS_SECRET_ACCESS_KEY", "mock_value2") - - invalidConfigWithAuth := af.CreateDefaultConfig().(*Config) - invalidConfigWithAuth.AuthConfig = AuthConfig{Region: "", Service: "service"} - - invalidConfig := af.CreateDefaultConfig().(*Config) - invalidConfig.HTTPClientSettings = confighttp.HTTPClientSettings{} - - invalidTLSConfig := af.CreateDefaultConfig().(*Config) - invalidTLSConfig.HTTPClientSettings.TLSSetting = configtls.TLSClientSetting{ - TLSSetting: configtls.TLSSetting{ - CAFile: "non-existent file", - CertFile: "", - KeyFile: "", - }, - Insecure: false, - ServerName: "", - } - - tests := []struct { - name string - cfg config.Exporter - params component.ExporterCreateSettings - returnErrorOnCreate bool - returnErrorOnStart bool - }{ - { - name: "success_case_with_auth", - cfg: validConfigWithAuth, - params: componenttest.NewNopExporterCreateSettings(), - returnErrorOnCreate: false, - }, - { - name: "invalid_config_case", - cfg: invalidConfig, - params: componenttest.NewNopExporterCreateSettings(), - returnErrorOnCreate: true, - }, - { - name: "invalid_tls_config_case", - cfg: invalidTLSConfig, - params: componenttest.NewNopExporterCreateSettings(), - returnErrorOnStart: true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - exp, err := af.CreateMetricsExporter(context.Background(), tt.params, tt.cfg) - if tt.returnErrorOnCreate { - assert.Error(t, err) - return - } - assert.NoError(t, err) - assert.NotNil(t, exp) - err = exp.Start(context.Background(), componenttest.NewNopHost()) - if tt.returnErrorOnStart { - assert.Error(t, err) - return - } - assert.NoError(t, err) - assert.NoError(t, exp.Shutdown(context.Background())) - }) - } -} diff --git a/exporter/awsprometheusremotewriteexporter/go.mod b/exporter/awsprometheusremotewriteexporter/go.mod deleted file mode 100644 index c2699342ee9c..000000000000 --- a/exporter/awsprometheusremotewriteexporter/go.mod +++ /dev/null @@ -1,75 +0,0 @@ -// Deprecated: awsprometheusremotewrite exporter is deprecated and will be removed in future versions. -module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsprometheusremotewriteexporter - -go 1.18 - -require ( - github.com/aws/aws-sdk-go v1.44.72 - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.57.2 - github.com/stretchr/testify v1.8.0 - go.opentelemetry.io/collector v0.58.0 -) - -require ( - github.com/cenkalti/backoff/v4 v4.1.3 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/felixge/httpsnoop v1.0.3 // indirect - github.com/fsnotify/fsnotify v1.5.4 // indirect - github.com/go-logr/logr v1.2.3 // indirect - github.com/go-logr/stdr v1.2.2 // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/protobuf v1.5.2 // indirect - github.com/golang/snappy v0.0.4 // indirect - github.com/hashicorp/errwrap v1.1.0 // indirect - github.com/hashicorp/go-multierror v1.1.1 // indirect - github.com/jmespath/go-jmespath v0.4.0 // indirect - github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.15.9 // indirect - github.com/knadh/koanf v1.4.2 // indirect - github.com/mitchellh/copystructure v1.2.0 // indirect - github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/mitchellh/reflectwalk v1.0.2 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.57.2 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.57.2 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite v0.57.2 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/common v0.37.0 // indirect - github.com/prometheus/prometheus v0.37.0 // indirect - github.com/rs/cors v1.8.2 // indirect - github.com/tidwall/gjson v1.10.2 // indirect - github.com/tidwall/match v1.1.1 // indirect - github.com/tidwall/pretty v1.2.0 // indirect - github.com/tidwall/tinylru v1.1.0 // indirect - github.com/tidwall/wal v1.1.7 // indirect - go.opencensus.io v0.23.0 // indirect - go.opentelemetry.io/collector/pdata v0.58.0 // indirect - go.opentelemetry.io/collector/semconv v0.58.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.34.0 // indirect - go.opentelemetry.io/otel v1.9.0 // indirect - go.opentelemetry.io/otel/metric v0.31.0 // indirect - go.opentelemetry.io/otel/trace v1.9.0 // indirect - go.uber.org/atomic v1.9.0 // indirect - go.uber.org/multierr v1.8.0 // indirect - go.uber.org/zap v1.22.0 // indirect - golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e // indirect - golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b // indirect - golang.org/x/text v0.3.7 // indirect - google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03 // indirect - google.golang.org/grpc v1.48.0 // indirect - google.golang.org/protobuf v1.28.1 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect -) - -replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter => ../prometheusremotewriteexporter - -replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal => ../../internal/coreinternal - -replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/common => ../../internal/common - -replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry => ../../pkg/resourcetotelemetry - -replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus => ../../pkg/translator/prometheus - -replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite => ../../pkg/translator/prometheusremotewrite diff --git a/exporter/awsprometheusremotewriteexporter/go.sum b/exporter/awsprometheusremotewriteexporter/go.sum deleted file mode 100644 index 4dcce3ecf1b6..000000000000 --- a/exporter/awsprometheusremotewriteexporter/go.sum +++ /dev/null @@ -1,686 +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= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/aws/aws-sdk-go v1.44.72 h1:i7J5XT7pjBjtl1OrdIhiQHzsG89wkZCcM1HhyK++3DI= -github.com/aws/aws-sdk-go v1.44.72/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= -github.com/aws/aws-sdk-go-v2 v1.9.2/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= -github.com/aws/aws-sdk-go-v2/config v1.8.3/go.mod h1:4AEiLtAb8kLs7vgw2ZV3p2VZ1+hBavOc84hqxVNpCyw= -github.com/aws/aws-sdk-go-v2/credentials v1.4.3/go.mod h1:FNNC6nQZQUuyhq5aE5c7ata8o9e4ECGmS4lAXC7o1mQ= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.6.0/go.mod h1:gqlclDEZp4aqJOancXK6TN24aKhT0W0Ae9MHk3wzTMM= -github.com/aws/aws-sdk-go-v2/internal/ini v1.2.4/go.mod h1:ZcBrrI3zBKlhGFNYWvju0I3TR93I7YIgAfy82Fh4lcQ= -github.com/aws/aws-sdk-go-v2/service/appconfig v1.4.2/go.mod h1:FZ3HkCe+b10uFZZkFdvf98LHW21k49W8o8J366lqVKY= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.3.2/go.mod h1:72HRZDLMtmVQiLG2tLfQcaWLCssELvGl+Zf2WVxMmR8= -github.com/aws/aws-sdk-go-v2/service/sso v1.4.2/go.mod h1:NBvT9R1MEF+Ud6ApJKM0G+IkPchKS7p7c2YPKwHmBOk= -github.com/aws/aws-sdk-go-v2/service/sts v1.7.2/go.mod h1:8EzeIqfWt2wWT4rJVu3f21TfrhJ8AEMzVybRNSb/b4g= -github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= -github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= -github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= -github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= -github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= -github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY= -github.com/hashicorp/go-retryablehttp v0.5.4/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/vault/api v1.0.4/go.mod h1:gDcqh3WGcR1cpF5AJz/B1UFheUEneMoIospckxBxk6Q= -github.com/hashicorp/vault/sdk v0.1.13/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M= -github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= -github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY= -github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= -github.com/knadh/koanf v1.4.2 h1:2itp+cdC6miId4pO4Jw7c/3eiYD26Z/Sz3ATJMwHxIs= -github.com/knadh/koanf v1.4.2/go.mod h1:4NCo0q4pmU398vF9vq2jStF9MWQZ8JEDcDMHlDCr4h0= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/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/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -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/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= -github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= -github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= -github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= -github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/npillmayer/nestext v0.1.3/go.mod h1:h2lrijH8jpicr25dFY+oAJLyzlya6jhnuG+zWp9L0Uk= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pelletier/go-toml v1.7.0 h1:7utD74fnzVc/cpcyy8sjrlFr5vYpypUixARcHIMIGuI= -github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= -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/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= -github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/prometheus v0.37.0 h1:LgnE+97wnUK/qcmk5oHIqieJEKwhZtaSidyKpUyeats= -github.com/prometheus/prometheus v0.37.0/go.mod h1:egARUgz+K93zwqsVIAneFlLZefyGOON44WyAp4Xqbbk= -github.com/rhnvrm/simples3 v0.6.1/go.mod h1:Y+3vYm2V7Y4VijFoJHHTrja6OgPrJ2cBti8dPGkC3sA= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= -github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= -github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/tidwall/gjson v1.10.2 h1:APbLGOM0rrEkd8WBw9C24nllro4ajFuJu0Sc9hRz8Bo= -github.com/tidwall/gjson v1.10.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= -github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= -github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tidwall/tinylru v1.1.0 h1:XY6IUfzVTU9rpwdhKUF6nQdChgCdGjkMfLzbWyiau6I= -github.com/tidwall/tinylru v1.1.0/go.mod h1:3+bX+TJ2baOLMWTnlyNWHh4QMnFyARg2TLTQ6OFbzw8= -github.com/tidwall/wal v1.1.7 h1:emc1TRjIVsdKKSnpwGBAcsAGg0767SvUk8+ygx7Bb+4= -github.com/tidwall/wal v1.1.7/go.mod h1:r6lR1j27W9EPalgHiB7zLJDYu3mzW5BQP5KrzBpYY/E= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/collector v0.58.0 h1:ofl5qa+vTV69PC9NaZKQjE7MP/49iclDKRppl00WgZg= -go.opentelemetry.io/collector v0.58.0/go.mod h1:U3TE477WDi3CYhmE7JGinnpIg8qMH1KCBkRmk3BxKyw= -go.opentelemetry.io/collector/pdata v0.58.0 h1:SKWw4vjd6ZjCuvsCvEzqwBaxvov4YbXnnXkc9C4xMqM= -go.opentelemetry.io/collector/pdata v0.58.0/go.mod h1:iMv7Pz+hRthi30rkYkwLVusxQ94GU4pPJgFq7gjGcBk= -go.opentelemetry.io/collector/semconv v0.58.0 h1:wk9KXVnt8IRdNzD9mmdW3d1M/IJ3HyLp1Lz2ZY1fBCM= -go.opentelemetry.io/collector/semconv v0.58.0/go.mod h1:aRkHuJ/OshtDFYluKEtnG5nkKTsy1HZuvZVHmakx+Vo= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.34.0 h1:9NkMW03wwEzPtP/KciZ4Ozu/Uz5ZA7kfqXJIObnrjGU= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.34.0/go.mod h1:548ZsYzmT4PL4zWKRd8q/N4z0Wxzn/ZxUE+lkEpwWQA= -go.opentelemetry.io/otel v1.9.0 h1:8WZNQFIB2a71LnANS9JeyidJKKGOOremcUtb/OtHISw= -go.opentelemetry.io/otel v1.9.0/go.mod h1:np4EoPGzoPs3O67xUVNoPPcmSvsfOxNlNA4F4AC+0Eo= -go.opentelemetry.io/otel/metric v0.31.0 h1:6SiklT+gfWAwWUR0meEMxQBtihpiEs4c+vL9spDTqUs= -go.opentelemetry.io/otel/metric v0.31.0/go.mod h1:ohmwj9KTSIeBnDBm/ZwH2PSZxZzoOaG2xZeekTRzL5A= -go.opentelemetry.io/otel/sdk v1.9.0 h1:LNXp1vrr83fNXTHgU8eO89mhzxb/bbWAsHG6fNf3qWo= -go.opentelemetry.io/otel/trace v1.9.0 h1:oZaCNJUjWcg60VXWee8lJKlqhPbXAPB51URuR47pQYc= -go.opentelemetry.io/otel/trace v1.9.0/go.mod h1:2737Q0MuG8q1uILYm2YYVkAyLtOofiTNGg6VODnOiPo= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/zap v1.22.0 h1:Zcye5DUgBloQ9BaT4qc9BnjOFog5TvBSAGkJ3Nf70c0= -go.uber.org/zap v1.22.0/go.mod h1:H4siCOZOrAolnUPJEkfaSjDqyP+BDS0DdDWzwcgt3+U= -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-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -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/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -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-20181114220301-adae6a3d119a/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-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e h1:TsQ7F31D3bUCLeqPT0u+yjp1guoArKaNKmCr22PYgTQ= -golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -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/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -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/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -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-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b h1:2n253B2r0pYSmEV+UNCQoPfU/FiaizQEK5Gu4Bq4JE8= -golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/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-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -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/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03 h1:W70HjnmXFJm+8RNjOpIDYW2nKsSi/af0VvIZUtYkwuU= -google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.48.0 h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w= -google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= -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/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/exporter/awsprometheusremotewriteexporter/testdata/config.yaml b/exporter/awsprometheusremotewriteexporter/testdata/config.yaml deleted file mode 100644 index 0f0e40f11ad2..000000000000 --- a/exporter/awsprometheusremotewriteexporter/testdata/config.yaml +++ /dev/null @@ -1,35 +0,0 @@ -receivers: - nop: - -processors: - nop: - -exporters: - awsprometheusremotewrite: - awsprometheusremotewrite/2: - namespace: "test-space" - retry_on_failure: - enabled: true - initial_interval: 10s - max_interval: 60s - max_elapsed_time: 10m - endpoint: "https://aps-workspaces.us-east-1.amazonaws.com/workspaces/ws-XXX/api/v1/remote_write" - tls: - ca_file: "/var/lib/mycert.pem" - write_buffer_size: 524288 - headers: - Prometheus-Remote-Write-Version: "0.1.0" - X-Scope-OrgID: 234 - aws_auth: - region: "us-west-2" - service: "service-name" - role_arn: "arn:aws:iam::123456789012:role/IAMRole" - external_labels: - key1: value1 - key2: value2 -service: - pipelines: - metrics: - receivers: [nop] - processors: [nop] - exporters: [awsprometheusremotewrite] diff --git a/exporter/elasticexporter/Makefile b/exporter/elasticexporter/Makefile deleted file mode 100644 index c1496226e590..000000000000 --- a/exporter/elasticexporter/Makefile +++ /dev/null @@ -1 +0,0 @@ -include ../../Makefile.Common \ No newline at end of file diff --git a/exporter/elasticexporter/README.md b/exporter/elasticexporter/README.md deleted file mode 100644 index 94174e07fdf7..000000000000 --- a/exporter/elasticexporter/README.md +++ /dev/null @@ -1,148 +0,0 @@ -# Elastic native support for OpenTelemetry -# Deprecated Elastic Exporter - -| Status | | -| ------------------------ |-----------------| -| Stability | [deprecated] | -| Supported pipeline types | traces, metrics | -| Distributions | [contrib] | - -ℹ️ This exporter has been deprecated due to Elastic APM Server supporting native OTLP ingestion since version 7.13. This means you can use an [OTLP exporter](https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter/otlpexporter) to send data to Elastic APM Server, instead of the OpenTelemetry Collector Exporter for Elastic. **The `otlp` exporter is the recommended way to integrate the OpenTelemetry Collector to Elastic.** - -For more details, see the [Elastic documentation to integrate with OpenTelemetry](https://www.elastic.co/guide/en/apm/get-started/current/open-telemetry-elastic.html). - -## Sample configurations - -### Sample configuration using an Elastic APM Secret Token - -When authenticating with an [Elastic APM Secret Token](https://www.elastic.co/guide/en/apm/server/current/secret-token.html), define an `Authorization: "Bearer xxx"` header on the OTLP exporter: - -```yaml -... -exporters: - otlp/elastic: - endpoint: "xxx.elastic-cloud.com:443" - headers: - Authorization: "Bearer your-apm-secret-token" -service: - pipelines: - metrics: - receivers: - - otlp - processors: - - batch - exporters: - - otlp/elastic - traces: - receivers: - - otlp - processors: - - batch - exporters: - - otlp/elastic -``` - -### Sample configuration using an Elastic API Key - -When authenticating with an [Elastic API Key](https://www.elastic.co/guide/en/apm/server/current/api-key.html), define an `Authorization: "ApiKey xxx"` header on the OTLP exporter: - -```yaml -exporters: - otlp/elastic: - endpoint: "xxx.elastic-cloud.com:443" - headers: - Authorization: "ApiKey your-api-key" -... -``` - -### Sample configuration for an insecure setup disabling TLS and authentication - -```yaml -exporters: - otlp/elastic: - endpoint: "localhost:8200" - tls: - insecure: true -``` - -## Migration - -ℹ️ The native support of OpenTelemetry by Elastic doesn't remove the architectural benefits of using the OpenTelemetry Collector in observability architectures. -The OpenTelemetry Collector continues to add high availability, scalability, retries, live reconfiguration (like with sampling), data enrichment, ingestion of various protocols such as Jaeger or Zipkin, etc. - -To migrate from the legacy OpenTelemetry Collector exporter for Elastic to the native support of OpenTelemetry in Elastic, replace the OpenTelemetry Collector's `elastic` exporter with an `otlp` exporter. - -Sample migration: - -```yaml -... -exporters: - - ## REMOVE THE DEFINITION OF THE `ELASTIC` EXPORTER - # elastic: - # apm_server_url: "https://elasticapm.example.com" - # secret_token: "hunter2" - - ## INTRODUCE THE DEFINITION OF AN `OTLP` EXPORTER (SAME ELASTIC HOST, SAME AUTHENTICATION TOKEN OR KEY, DON'T FORGET TO SPECIFY THE LISTEN PORT) - otlp/elastic: - endpoint: "xxx.elastic-cloud.com:443" - headers: - Authorization: "Bearer hunter2" -service: - pipelines: - metrics: - receivers: - - otlp - processors: - - batch - exporters: - - ## REMOVE THE `ELASTIC` EXPORTER - # - elastic - - ## ADD THE `OTLP` EXPORTER - - otlp/elastic - traces: - receivers: - - otlp - processors: - - batch - exporters: - - ## REMOVE THE `ELASTIC` EXPORTER - # - elastic - - ## ADD THE `OTLP` EXPORTER - - otlp/elastic -``` - - -# Legacy OpenTelemetry Collector Exporter for Elastic - - -This exporter supports sending OpenTelemetry data to [Elastic Observability](https://www.elastic.co/observability). - -Complete documentation is available on [Elastic.co](https://www.elastic.co/guide/en/apm/get-started/current/open-telemetry-elastic.html). - -### Configuration options - -- `apm_server_url` (required): Elastic APM Server URL. -- `api_key` (optional): credential for API Key authorization, if enabled in Elastic APM Server. -- `secret_token` (optional): credential for Secret Token authorization, if enabled in Elastic APM Server. -- `tls:` - - `ca_file` (optional): root Certificate Authority (CA) certificate, for verifying the server's identity, if TLS is enabled. - - `cert_file` (optional): client TLS certificate. - - `key_file` (optional): client TLS key. - - `insecure` (optional): disable verification of the server's identity, if TLS is enabled. - -### Example - -```yaml -exporters: - elastic: - apm_server_url: "https://elasticapm.example.com" - secret_token: "hunter2" -``` - -[deprecated]:https://github.com/open-telemetry/opentelemetry-collector#deprecated -[contrib]:https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib \ No newline at end of file diff --git a/exporter/elasticexporter/config.go b/exporter/elasticexporter/config.go deleted file mode 100644 index d51d78aff207..000000000000 --- a/exporter/elasticexporter/config.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2020, OpenTelemetry 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 elasticexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter" - -import ( - "errors" - - "go.opentelemetry.io/collector/config" - "go.opentelemetry.io/collector/config/configtls" -) - -// Config defines configuration for Elastic APM exporter. -type Config struct { - config.ExporterSettings `mapstructure:",squash"` - configtls.TLSClientSetting `mapstructure:"tls,omitempty"` - - // APMServerURLs holds the APM Server URL. - // - // This is required. - APMServerURL string `mapstructure:"apm_server_url"` - - // APIKey holds an optional API Key for authorization. - // - // https://www.elastic.co/guide/en/apm/server/7.7/api-key-settings.html - APIKey string `mapstructure:"api_key"` - - // SecretToken holds the optional secret token for authorization. - // - // https://www.elastic.co/guide/en/apm/server/7.7/secret-token.html - SecretToken string `mapstructure:"secret_token"` -} - -// Validate validates the configuration. -func (cfg Config) Validate() error { - if cfg.APMServerURL == "" { - return errors.New("APMServerURL must be specified") - } - return nil -} diff --git a/exporter/elasticexporter/config_test.go b/exporter/elasticexporter/config_test.go deleted file mode 100644 index fbced956128b..000000000000 --- a/exporter/elasticexporter/config_test.go +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2020, OpenTelemetry 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 elasticexporter - -import ( - "context" - "fmt" - "net/http" - "net/http/httptest" - "path/filepath" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/component/componenttest" - "go.opentelemetry.io/collector/config" - "go.opentelemetry.io/collector/pdata/ptrace" - "go.opentelemetry.io/collector/service/servicetest" -) - -func TestLoadConfig(t *testing.T) { - factories, err := componenttest.NopFactories() - require.NoError(t, err) - - factory := NewFactory() - factories.Exporters[typeStr] = factory - cfg, err := servicetest.LoadConfigAndValidate(filepath.Join("testdata", "config.yaml"), factories) - require.NoError(t, err) - require.NotNil(t, cfg) - - assert.Equal(t, len(cfg.Exporters), 2) - - defaultCfg := factory.CreateDefaultConfig() - defaultCfg.(*Config).APMServerURL = "https://elastic.example.com" - r0 := cfg.Exporters[config.NewComponentID(typeStr)] - assert.Equal(t, r0, defaultCfg) - - r1 := cfg.Exporters[config.NewComponentIDWithName(typeStr, "customname")] - assert.Equal(t, r1, &Config{ - ExporterSettings: config.NewExporterSettings(config.NewComponentIDWithName(typeStr, "customname")), - APMServerURL: "https://elastic.example.com", - APIKey: "RTNxMjlXNEJt", - SecretToken: "hunter2", - }) -} - -func TestConfigValidate(t *testing.T) { - factory := NewFactory() - cfg := factory.CreateDefaultConfig().(*Config) - params := componenttest.NewNopExporterCreateSettings() - - _, err := factory.CreateTracesExporter(context.Background(), params, cfg) - require.Error(t, err) - assert.EqualError(t, err, "cannot configure Elastic APM trace exporter: invalid config: APMServerURL must be specified") - - _, err = factory.CreateMetricsExporter(context.Background(), params, cfg) - require.Error(t, err) - assert.EqualError(t, err, "cannot configure Elastic APM metrics exporter: invalid config: APMServerURL must be specified") - - cfg.APMServerURL = "foo" - _, err = factory.CreateTracesExporter(context.Background(), params, cfg) - assert.NoError(t, err) - _, err = factory.CreateMetricsExporter(context.Background(), params, cfg) - assert.NoError(t, err) -} - -func TestConfigAuth(t *testing.T) { - testAuth(t, "", "hunter2", "Bearer hunter2") - testAuth(t, "hunter2", "", "ApiKey hunter2") -} - -func testAuth(t *testing.T, apiKey, secretToken, expectedAuthorization string) { - factory := NewFactory() - params := componenttest.NewNopExporterCreateSettings() - cfg := factory.CreateDefaultConfig().(*Config) - cfg.APIKey = apiKey - cfg.SecretToken = secretToken - - srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - auth := r.Header.Get("Authorization") - if auth != expectedAuthorization { - w.WriteHeader(http.StatusUnauthorized) - fmt.Fprintf(w, "Expected Authorization=%s, got %s\n", expectedAuthorization, auth) - } - })) - defer srv.Close() - cfg.APMServerURL = srv.URL - - te, err := factory.CreateTracesExporter(context.Background(), params, cfg) - assert.NoError(t, err) - assert.NotNil(t, te, "failed to create trace exporter") - - traces := ptrace.NewTraces() - span := traces.ResourceSpans().AppendEmpty().ScopeSpans().AppendEmpty().Spans().AppendEmpty() - span.SetName("foobar") - assert.NoError(t, te.ConsumeTraces(context.Background(), traces)) -} diff --git a/exporter/elasticexporter/exporter.go b/exporter/elasticexporter/exporter.go deleted file mode 100644 index aae6118a7a12..000000000000 --- a/exporter/elasticexporter/exporter.go +++ /dev/null @@ -1,203 +0,0 @@ -// Copyright 2020, OpenTelemetry 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 elasticexporter contains an opentelemetry-collector exporter -// for Elastic APM. -package elasticexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter" - -import ( - "bytes" - "compress/zlib" - "context" - "fmt" - "net/http" - "net/url" - - "go.elastic.co/apm/transport" - "go.elastic.co/fastjson" - "go.opentelemetry.io/collector/component" - "go.opentelemetry.io/collector/config" - "go.opentelemetry.io/collector/exporter/exporterhelper" - "go.opentelemetry.io/collector/pdata/pmetric" - "go.opentelemetry.io/collector/pdata/ptrace" - "go.uber.org/multierr" - "go.uber.org/zap" - - "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter/internal/translator/elastic" -) - -func newElasticTracesExporter( - set component.ExporterCreateSettings, - cfg config.Exporter, -) (component.TracesExporter, error) { - exporter, err := newElasticExporter(cfg.(*Config), set.Logger) - if err != nil { - return nil, fmt.Errorf("cannot configure Elastic APM trace exporter: %w", err) - } - return exporterhelper.NewTracesExporterWithContext(context.TODO(), set, cfg, func(ctx context.Context, traces ptrace.Traces) error { - var errs error - resourceSpansSlice := traces.ResourceSpans() - for i := 0; i < resourceSpansSlice.Len(); i++ { - resourceSpans := resourceSpansSlice.At(i) - _, err = exporter.ExportResourceSpans(ctx, resourceSpans) - errs = multierr.Append(errs, err) - } - return errs - }) -} - -func newElasticMetricsExporter( - set component.ExporterCreateSettings, - cfg config.Exporter, -) (component.MetricsExporter, error) { - exporter, err := newElasticExporter(cfg.(*Config), set.Logger) - if err != nil { - return nil, fmt.Errorf("cannot configure Elastic APM metrics exporter: %w", err) - } - return exporterhelper.NewMetricsExporterWithContext(context.TODO(), set, cfg, func(ctx context.Context, input pmetric.Metrics) error { - var errs error - resourceMetricsSlice := input.ResourceMetrics() - for i := 0; i < resourceMetricsSlice.Len(); i++ { - resourceMetrics := resourceMetricsSlice.At(i) - _, err = exporter.ExportResourceMetrics(ctx, resourceMetrics) - errs = multierr.Append(errs, err) - } - return errs - }) -} - -type elasticExporter struct { - transport transport.Transport - logger *zap.Logger -} - -func newElasticExporter(config *Config, logger *zap.Logger) (*elasticExporter, error) { - if err := config.Validate(); err != nil { - return nil, fmt.Errorf("invalid config: %w", err) - } - transport, err := newTransport(config) - if err != nil { - return nil, err - } - return &elasticExporter{transport: transport, logger: logger}, nil -} - -func newTransport(config *Config) (transport.Transport, error) { - transport, err := transport.NewHTTPTransport() - if err != nil { - return nil, fmt.Errorf("error creating HTTP transport: %w", err) - } - tlsConfig, err := config.LoadTLSConfig() - if err != nil { - return nil, err - } - httpTransport := transport.Client.Transport.(*http.Transport) - httpTransport.TLSClientConfig = tlsConfig - - url, err := url.Parse(config.APMServerURL) - if err != nil { - return nil, err - } - transport.SetServerURL(url) - - if config.APIKey != "" { - transport.SetAPIKey(config.APIKey) - } else if config.SecretToken != "" { - transport.SetSecretToken(config.SecretToken) - } - - transport.SetUserAgent("opentelemetry-collector") - return transport, nil -} - -// ExportResourceSpans exports OTLP trace data to Elastic APM Server, -// returning the number of spans that were dropped along with any errors. -func (e *elasticExporter) ExportResourceSpans(ctx context.Context, rs ptrace.ResourceSpans) (int, error) { - var w fastjson.Writer - if err := elastic.EncodeResourceMetadata(rs.Resource(), &w); err != nil { - return rs.ScopeSpans().Len(), err - } - - var errs []error - var count int - scopeSpansSlice := rs.ScopeSpans() - for i := 0; i < scopeSpansSlice.Len(); i++ { - scopeSpans := scopeSpansSlice.At(i) - scope := scopeSpans.Scope() - spanSlice := scopeSpans.Spans() - for i := 0; i < spanSlice.Len(); i++ { - count++ - span := spanSlice.At(i) - before := w.Size() - if err := elastic.EncodeSpan(span, scope, rs.Resource(), &w); err != nil { - w.Rewind(before) - errs = append(errs, err) - } - } - } - if err := e.sendEvents(ctx, &w); err != nil { - return count, err - } - return len(errs), multierr.Combine(errs...) -} - -// ExportResourceMetrics exports OTLP metrics to Elastic APM Server, -// returning the number of metrics that were dropped along with any errors. -func (e *elasticExporter) ExportResourceMetrics(ctx context.Context, rm pmetric.ResourceMetrics) (int, error) { - var w fastjson.Writer - if err := elastic.EncodeResourceMetadata(rm.Resource(), &w); err != nil { - return rm.ScopeMetrics().Len(), err - } - var errs error - var totalDropped int - scopeMetricsSlice := rm.ScopeMetrics() - for i := 0; i < scopeMetricsSlice.Len(); i++ { - scopeMetrics := scopeMetricsSlice.At(i) - scope := scopeMetrics.Scope() - metrics := scopeMetrics.Metrics() - before := w.Size() - dropped, err := elastic.EncodeMetrics(metrics, scope, &w) - if err != nil { - w.Rewind(before) - errs = multierr.Append(errs, err) - } - totalDropped += dropped - } - if err := e.sendEvents(ctx, &w); err != nil { - return totalDropped, err - } - return totalDropped, errs -} - -func (e *elasticExporter) sendEvents(ctx context.Context, w *fastjson.Writer) error { - e.logger.Debug("sending events", zap.ByteString("events", w.Bytes())) - - var buf bytes.Buffer - zw, err := zlib.NewWriterLevel(&buf, zlib.DefaultCompression) - if err != nil { - return err - } - if _, err := zw.Write(w.Bytes()); err != nil { - return err - } - if err := zw.Close(); err != nil { - return err - } - if err := e.transport.SendStream(ctx, &buf); err != nil { - // TODO(axw) check response for number of accepted items, - // and take that into account in the result. - return err - } - return nil -} diff --git a/exporter/elasticexporter/exporter_test.go b/exporter/elasticexporter/exporter_test.go deleted file mode 100644 index 746f6d38c02d..000000000000 --- a/exporter/elasticexporter/exporter_test.go +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright 2020, OpenTelemetry 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 elasticexporter - -import ( - "context" - "encoding/pem" - "net/http" - "net/http/httptest" - "os" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "go.elastic.co/apm/transport/transporttest" - "go.opentelemetry.io/collector/obsreport/obsreporttest" - "go.opentelemetry.io/collector/pdata/pmetric" - "go.opentelemetry.io/collector/pdata/ptrace" -) - -func TestTracesExporter(t *testing.T) { - tt, err := obsreporttest.SetupTelemetry() - require.NoError(t, err) - defer func() { - require.NoError(t, tt.Shutdown(context.Background())) - }() - - factory := NewFactory() - recorder, cfg := newRecorder(t) - te, err := factory.CreateTracesExporter(context.Background(), tt.ToExporterCreateSettings(), cfg) - assert.NoError(t, err) - assert.NotNil(t, te, "failed to create trace exporter") - - traces := ptrace.NewTraces() - resourceSpans := traces.ResourceSpans() - span := resourceSpans.AppendEmpty().ScopeSpans().AppendEmpty().Spans().AppendEmpty() - span.SetName("foobar") - - err = te.ConsumeTraces(context.Background(), traces) - assert.NoError(t, err) - assert.NoError(t, obsreporttest.CheckExporterTraces(tt, cfg.ID(), 1, 0)) - - payloads := recorder.Payloads() - require.Len(t, payloads.Transactions, 1) - assert.Equal(t, "foobar", payloads.Transactions[0].Name) - - assert.NoError(t, te.Shutdown(context.Background())) -} - -func TestMetricsExporter(t *testing.T) { - tt, err := obsreporttest.SetupTelemetry() - require.NoError(t, err) - defer func() { - require.NoError(t, tt.Shutdown(context.Background())) - }() - - factory := NewFactory() - recorder, cfg := newRecorder(t) - me, err := factory.CreateMetricsExporter(context.Background(), tt.ToExporterCreateSettings(), cfg) - assert.NoError(t, err) - assert.NotNil(t, me, "failed to create metrics exporter") - - err = me.ConsumeMetrics(context.Background(), sampleMetrics()) - assert.NoError(t, err) - - payloads := recorder.Payloads() - require.Len(t, payloads.Metrics, 2) - assert.Contains(t, payloads.Metrics[0].Samples, "foobar") - assert.NoError(t, obsreporttest.CheckExporterMetrics(tt, cfg.ID(), 2, 0)) - - assert.NoError(t, me.Shutdown(context.Background())) -} - -func TestMetricsExporterSendError(t *testing.T) { - tt, err := obsreporttest.SetupTelemetry() - require.NoError(t, err) - defer func() { - require.NoError(t, tt.Shutdown(context.Background())) - }() - - factory := NewFactory() - cfg := factory.CreateDefaultConfig() - eCfg := cfg.(*Config) - eCfg.APMServerURL = "http://testing.invalid" - - me, err := factory.CreateMetricsExporter(context.Background(), tt.ToExporterCreateSettings(), cfg) - assert.NoError(t, err) - assert.NotNil(t, me, "failed to create metrics exporter") - - err = me.ConsumeMetrics(context.Background(), sampleMetrics()) - assert.Error(t, err) - assert.NoError(t, obsreporttest.CheckExporterMetrics(tt, cfg.ID(), 0, 2)) - - assert.NoError(t, me.Shutdown(context.Background())) -} - -func sampleMetrics() pmetric.Metrics { - metrics := pmetric.NewMetrics() - resourceMetrics := metrics.ResourceMetrics() - resourceMetrics.EnsureCapacity(2) - for i := 0; i < 2; i++ { - metric := resourceMetrics.AppendEmpty().ScopeMetrics().AppendEmpty().Metrics().AppendEmpty() - metric.SetName("foobar") - metric.SetDataType(pmetric.MetricDataTypeGauge) - metric.Gauge().DataPoints().AppendEmpty().SetDoubleVal(123) - } - return metrics -} - -// newRecorder returns a go.elastic.co/apm/transport/transporrtest.RecorderTransport, -// and an exporter config that sends to an HTTP server that will record events in the -// Elastic APM format. -func newRecorder(t *testing.T) (*transporttest.RecorderTransport, *Config) { - var recorder transporttest.RecorderTransport - srv := httptest.NewTLSServer(http.HandlerFunc( - func(w http.ResponseWriter, r *http.Request) { - if r.URL.Path != "/intake/v2/events" { - http.Error(w, "unknown path", http.StatusNotFound) - return - } - if err := recorder.SendStream(r.Context(), r.Body); err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } - }), - ) - t.Cleanup(srv.Close) - - // Write the server's self-signed certificate to a file to test the exporter's TLS config. - certfile, err := os.CreateTemp("", "otel-elastic-cacert") - require.NoError(t, err) - t.Cleanup(func() { os.Remove(certfile.Name()) }) - err = pem.Encode(certfile, &pem.Block{ - Type: "CERTIFICATE", - Bytes: srv.TLS.Certificates[0].Certificate[0], - }) - require.NoError(t, err) - - factory := NewFactory() - cfg := factory.CreateDefaultConfig() - eCfg := cfg.(*Config) - eCfg.TLSClientSetting.CAFile = certfile.Name() - eCfg.APMServerURL = srv.URL - return &recorder, eCfg -} diff --git a/exporter/elasticexporter/factory.go b/exporter/elasticexporter/factory.go deleted file mode 100644 index d28176eb1a83..000000000000 --- a/exporter/elasticexporter/factory.go +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2020, OpenTelemetry 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 elasticexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter" - -import ( - "context" - "sync" - - "go.opentelemetry.io/collector/component" - "go.opentelemetry.io/collector/config" - "go.uber.org/zap" -) - -const ( - // The value of "type" key in configuration. - typeStr = "elastic" - // The stability level of the exporter. - stability = component.StabilityLevelDeprecated -) - -var once sync.Once - -// NewFactory creates a factory for Elastic exporter. -func NewFactory() component.ExporterFactory { - return component.NewExporterFactory( - typeStr, - createDefaultConfig, - component.WithTracesExporter(createTracesExporter, stability), - component.WithMetricsExporter(createMetricsExporter, stability), - ) -} - -func createDefaultConfig() config.Exporter { - return &Config{ - ExporterSettings: config.NewExporterSettings(config.NewComponentID(typeStr)), - } -} - -func logDeprecation(logger *zap.Logger) { - once.Do(func() { - logger.Warn("elastic exporter is deprecated and will be removed in future versions.") - }) -} - -func createTracesExporter( - ctx context.Context, - params component.ExporterCreateSettings, - cfg config.Exporter, -) (component.TracesExporter, error) { - logDeprecation(params.Logger) - return newElasticTracesExporter(params, cfg) -} - -func createMetricsExporter( - ctx context.Context, - params component.ExporterCreateSettings, - cfg config.Exporter, -) (component.MetricsExporter, error) { - logDeprecation(params.Logger) - return newElasticMetricsExporter(params, cfg) -} diff --git a/exporter/elasticexporter/factory_test.go b/exporter/elasticexporter/factory_test.go deleted file mode 100644 index ac59678eb117..000000000000 --- a/exporter/elasticexporter/factory_test.go +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2020, OpenTelemetry 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 elasticexporter - -import ( - "context" - "testing" - - "github.com/stretchr/testify/assert" - "go.opentelemetry.io/collector/component/componenttest" - "go.opentelemetry.io/collector/config/configtest" -) - -func TestCreateDefaultConfig(t *testing.T) { - factory := NewFactory() - cfg := factory.CreateDefaultConfig() - assert.NotNil(t, cfg, "failed to create default config") - assert.NoError(t, configtest.CheckConfigStruct(cfg)) -} - -func TestCreateExporter(t *testing.T) { - factory := NewFactory() - cfg := factory.CreateDefaultConfig() - eCfg := cfg.(*Config) - eCfg.APMServerURL = "http://testing.invalid" - - te, err := factory.CreateTracesExporter( - context.Background(), - componenttest.NewNopExporterCreateSettings(), - eCfg, - ) - assert.NoError(t, err) - assert.NotNil(t, te, "failed to create trace exporter") - - me, err := factory.CreateMetricsExporter( - context.Background(), - componenttest.NewNopExporterCreateSettings(), - eCfg, - ) - assert.NoError(t, err) - assert.NotNil(t, me, "failed to create metrics exporter") -} diff --git a/exporter/elasticexporter/go.mod b/exporter/elasticexporter/go.mod deleted file mode 100644 index 50fd8d9b6e9b..000000000000 --- a/exporter/elasticexporter/go.mod +++ /dev/null @@ -1,64 +0,0 @@ -// Deprecated: elasticexporter exporter is deprecated and will be removed in future versions. -module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter - -go 1.18 - -require ( - github.com/stretchr/testify v1.8.0 - go.elastic.co/apm v1.15.0 - go.elastic.co/fastjson v1.1.0 - go.opentelemetry.io/collector v0.58.0 - go.opentelemetry.io/collector/pdata v0.58.0 - go.opentelemetry.io/collector/semconv v0.58.0 - go.uber.org/multierr v1.8.0 - go.uber.org/zap v1.22.0 -) - -require ( - github.com/armon/go-radix v1.0.0 // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/elastic/go-licenser v0.3.1 // indirect - github.com/elastic/go-sysinfo v1.1.1 // indirect - github.com/elastic/go-windows v1.0.0 // indirect - github.com/fsnotify/fsnotify v1.5.4 // indirect - github.com/go-logr/logr v1.2.3 // indirect - github.com/go-logr/stdr v1.2.2 // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/protobuf v1.5.2 // indirect - github.com/google/go-cmp v0.5.8 // indirect - github.com/jcchavezs/porto v0.1.0 // indirect - github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901 // indirect - github.com/json-iterator/go v1.1.12 // indirect - github.com/knadh/koanf v1.4.2 // indirect - github.com/kr/pretty v0.3.0 // indirect - github.com/mitchellh/copystructure v1.2.0 // indirect - github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/mitchellh/reflectwalk v1.0.2 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/pelletier/go-toml v1.9.4 // indirect - github.com/pkg/errors v0.9.1 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/procfs v0.7.3 // indirect - github.com/santhosh-tekuri/jsonschema v1.2.4 // indirect - go.opencensus.io v0.23.0 // indirect - go.opentelemetry.io/otel v1.9.0 // indirect - go.opentelemetry.io/otel/metric v0.31.0 // indirect - go.opentelemetry.io/otel/sdk v1.9.0 // indirect - go.opentelemetry.io/otel/trace v1.9.0 // indirect - go.uber.org/atomic v1.9.0 // indirect - golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect - golang.org/x/mod v0.5.1 // indirect - golang.org/x/net v0.0.0-20220225172249-27dd8689420f // indirect - golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect - golang.org/x/text v0.3.7 // indirect - golang.org/x/tools v0.1.9 // indirect - golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect - google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa // indirect - google.golang.org/grpc v1.48.0 // indirect - google.golang.org/protobuf v1.28.1 // indirect - gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect - howett.net/plist v0.0.0-20181124034731-591f970eefbb // indirect -) diff --git a/exporter/elasticexporter/go.sum b/exporter/elasticexporter/go.sum deleted file mode 100644 index 9c3a110f1c17..000000000000 --- a/exporter/elasticexporter/go.sum +++ /dev/null @@ -1,376 +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/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= -github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/aws/aws-sdk-go-v2 v1.9.2/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= -github.com/aws/aws-sdk-go-v2/config v1.8.3/go.mod h1:4AEiLtAb8kLs7vgw2ZV3p2VZ1+hBavOc84hqxVNpCyw= -github.com/aws/aws-sdk-go-v2/credentials v1.4.3/go.mod h1:FNNC6nQZQUuyhq5aE5c7ata8o9e4ECGmS4lAXC7o1mQ= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.6.0/go.mod h1:gqlclDEZp4aqJOancXK6TN24aKhT0W0Ae9MHk3wzTMM= -github.com/aws/aws-sdk-go-v2/internal/ini v1.2.4/go.mod h1:ZcBrrI3zBKlhGFNYWvju0I3TR93I7YIgAfy82Fh4lcQ= -github.com/aws/aws-sdk-go-v2/service/appconfig v1.4.2/go.mod h1:FZ3HkCe+b10uFZZkFdvf98LHW21k49W8o8J366lqVKY= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.3.2/go.mod h1:72HRZDLMtmVQiLG2tLfQcaWLCssELvGl+Zf2WVxMmR8= -github.com/aws/aws-sdk-go-v2/service/sso v1.4.2/go.mod h1:NBvT9R1MEF+Ud6ApJKM0G+IkPchKS7p7c2YPKwHmBOk= -github.com/aws/aws-sdk-go-v2/service/sts v1.7.2/go.mod h1:8EzeIqfWt2wWT4rJVu3f21TfrhJ8AEMzVybRNSb/b4g= -github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= -github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/elastic/go-licenser v0.3.1 h1:RmRukU/JUmts+rpexAw0Fvt2ly7VVu6mw8z4HrEzObU= -github.com/elastic/go-licenser v0.3.1/go.mod h1:D8eNQk70FOCVBl3smCGQt/lv7meBeQno2eI1S5apiHQ= -github.com/elastic/go-sysinfo v1.1.1 h1:ZVlaLDyhVkDfjwPGU55CQRCRolNpc7P0BbyhhQZQmMI= -github.com/elastic/go-sysinfo v1.1.1/go.mod h1:i1ZYdU10oLNfRzq4vq62BEwD2fH8KaWh6eh0ikPT9F0= -github.com/elastic/go-windows v1.0.0 h1:qLURgZFkkrYyTTkvYpsZIgf83AUsdIHfvlJaqaZ7aSY= -github.com/elastic/go-windows v1.0.0/go.mod h1:TsU0Nrp7/y3+VwE82FoZF8gC/XFg/Elz6CcloAxnPgU= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= -github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= -github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -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/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= -github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY= -github.com/hashicorp/go-retryablehttp v0.5.4/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/vault/api v1.0.4/go.mod h1:gDcqh3WGcR1cpF5AJz/B1UFheUEneMoIospckxBxk6Q= -github.com/hashicorp/vault/sdk v0.1.13/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M= -github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/jcchavezs/porto v0.1.0 h1:Xmxxn25zQMmgE7/yHYmh19KcItG81hIwfbEEFnd6w/Q= -github.com/jcchavezs/porto v0.1.0/go.mod h1:fESH0gzDHiutHRdX2hv27ojnOVFco37hg1W6E9EZF4A= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901 h1:rp+c0RAYOWj8l6qbCUTSiRLG/iKnW3K3/QfPPuSsBt4= -github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901/go.mod h1:Z86h9688Y0wesXCyonoVr47MasHilkuLMqGhRZ4Hpak= -github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= -github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= -github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/knadh/koanf v1.4.2 h1:2itp+cdC6miId4pO4Jw7c/3eiYD26Z/Sz3ATJMwHxIs= -github.com/knadh/koanf v1.4.2/go.mod h1:4NCo0q4pmU398vF9vq2jStF9MWQZ8JEDcDMHlDCr4h0= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= -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/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= -github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= -github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= -github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= -github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/npillmayer/nestext v0.1.3/go.mod h1:h2lrijH8jpicr25dFY+oAJLyzlya6jhnuG+zWp9L0Uk= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= -github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= -github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -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/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/procfs v0.0.0-20190425082905-87a4384529e0/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/rhnvrm/simples3 v0.6.1/go.mod h1:Y+3vYm2V7Y4VijFoJHHTrja6OgPrJ2cBti8dPGkC3sA= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= -github.com/santhosh-tekuri/jsonschema v1.2.4 h1:hNhW8e7t+H1vgY+1QeEQpveR6D4+OwKPXCfD2aieJis= -github.com/santhosh-tekuri/jsonschema v1.2.4/go.mod h1:TEAUOeZSmIxTTuHatJzrvARHiuO9LYd+cIxzgEHCQI4= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -go.elastic.co/apm v1.15.0 h1:uPk2g/whK7c7XiZyz/YCUnAUBNPiyNeE3ARX3G6Gx7Q= -go.elastic.co/apm v1.15.0/go.mod h1:dylGv2HKR0tiCV+wliJz1KHtDyuD8SPe69oV7VyK6WY= -go.elastic.co/fastjson v1.1.0 h1:3MrGBWWVIxe/xvsbpghtkFoPciPhOCmjsR/HfwEeQR4= -go.elastic.co/fastjson v1.1.0/go.mod h1:boNGISWMjQsUPy/t6yqt2/1Wx4YNPSe+mZjlyw9vKKI= -go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/collector v0.58.0 h1:ofl5qa+vTV69PC9NaZKQjE7MP/49iclDKRppl00WgZg= -go.opentelemetry.io/collector v0.58.0/go.mod h1:U3TE477WDi3CYhmE7JGinnpIg8qMH1KCBkRmk3BxKyw= -go.opentelemetry.io/collector/pdata v0.58.0 h1:SKWw4vjd6ZjCuvsCvEzqwBaxvov4YbXnnXkc9C4xMqM= -go.opentelemetry.io/collector/pdata v0.58.0/go.mod h1:iMv7Pz+hRthi30rkYkwLVusxQ94GU4pPJgFq7gjGcBk= -go.opentelemetry.io/collector/semconv v0.58.0 h1:wk9KXVnt8IRdNzD9mmdW3d1M/IJ3HyLp1Lz2ZY1fBCM= -go.opentelemetry.io/collector/semconv v0.58.0/go.mod h1:aRkHuJ/OshtDFYluKEtnG5nkKTsy1HZuvZVHmakx+Vo= -go.opentelemetry.io/otel v1.9.0 h1:8WZNQFIB2a71LnANS9JeyidJKKGOOremcUtb/OtHISw= -go.opentelemetry.io/otel v1.9.0/go.mod h1:np4EoPGzoPs3O67xUVNoPPcmSvsfOxNlNA4F4AC+0Eo= -go.opentelemetry.io/otel/metric v0.31.0 h1:6SiklT+gfWAwWUR0meEMxQBtihpiEs4c+vL9spDTqUs= -go.opentelemetry.io/otel/metric v0.31.0/go.mod h1:ohmwj9KTSIeBnDBm/ZwH2PSZxZzoOaG2xZeekTRzL5A= -go.opentelemetry.io/otel/sdk v1.9.0 h1:LNXp1vrr83fNXTHgU8eO89mhzxb/bbWAsHG6fNf3qWo= -go.opentelemetry.io/otel/sdk v1.9.0/go.mod h1:AEZc8nt5bd2F7BC24J5R0mrjYnpEgYHyTcM/vrSple4= -go.opentelemetry.io/otel/trace v1.9.0 h1:oZaCNJUjWcg60VXWee8lJKlqhPbXAPB51URuR47pQYc= -go.opentelemetry.io/otel/trace v1.9.0/go.mod h1:2737Q0MuG8q1uILYm2YYVkAyLtOofiTNGg6VODnOiPo= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/zap v1.22.0 h1:Zcye5DUgBloQ9BaT4qc9BnjOFog5TvBSAGkJ3Nf70c0= -go.uber.org/zap v1.22.0/go.mod h1:H4siCOZOrAolnUPJEkfaSjDqyP+BDS0DdDWzwcgt3+U= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -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-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.1 h1:OJxoQ/rynoF0dcCdI7cLPktw/hR2cueqYfjm43oqK38= -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -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-20190108225652-1e06a53dbb7e/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/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/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/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191025021431-6c3a3bfe00ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/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-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.9 h1:j9KsMiaP1c3B0OTQGth0/k+miLGTgLsAFUCrF2vLcF8= -golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -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-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa h1:I0YcKz0I7OAhddo7ya8kMnvprhcWM045PmkBdMO9zN0= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.48.0 h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w= -google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= -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/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -howett.net/plist v0.0.0-20181124034731-591f970eefbb h1:jhnBjNi9UFpfpl8YZhA9CrOqpnJdvzuiHsl/dnxl11M= -howett.net/plist v0.0.0-20181124034731-591f970eefbb/go.mod h1:vMygbs4qMhSZSc4lCUl2OEE+rDiIIJAIdR4m7MiMcm0= diff --git a/exporter/elasticexporter/internal/translator/elastic/exceptions.go b/exporter/elasticexporter/internal/translator/elastic/exceptions.go deleted file mode 100644 index c7d4270905c2..000000000000 --- a/exporter/elasticexporter/internal/translator/elastic/exceptions.go +++ /dev/null @@ -1,203 +0,0 @@ -// Copyright 2020, OpenTelemetry 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 elastic // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter/internal/translator/elastic" - -import ( - "bufio" - "fmt" - "regexp" - "strconv" - "strings" - "time" - - "go.elastic.co/apm/model" - "go.elastic.co/fastjson" -) - -var ( - javaStacktraceAtRegexp = regexp.MustCompile(`at (.*)\(([^:]*)(?::([0-9]+))?\)`) - javaStacktraceMoreRegexp = regexp.MustCompile(`\.\.\. ([0-9]+) more`) -) - -func encodeExceptionSpanEvent( - timestamp time.Time, - exceptionType, exceptionMessage, exceptionStacktrace string, - exceptionEscaped bool, - traceID model.TraceID, spanID model.SpanID, - language string, - w *fastjson.Writer, -) error { - if exceptionMessage == "" { - exceptionMessage = "[EMPTY]" - } - exceptionError := model.Error{ - Timestamp: model.Time(timestamp), - TraceID: traceID, - ParentID: spanID, - Exception: model.Exception{ - Message: exceptionMessage, - Type: exceptionType, - Handled: !exceptionEscaped, - }, - } - if exceptionStacktrace != "" { - if err := setExceptionStacktrace(exceptionStacktrace, language, &exceptionError.Exception); err != nil { - // Couldn't parse stacktrace, just add it as an attribute to the - // exception so the user can still access it. - exceptionError.Exception.Stacktrace = nil - exceptionError.Exception.Cause = nil - exceptionError.Exception.Attributes = map[string]interface{}{ - "stacktrace": exceptionStacktrace, - } - } - } - w.RawString(`{"error":`) - if err := exceptionError.MarshalFastJSON(w); err != nil { - return err - } - w.RawString("}\n") - return nil -} - -func setExceptionStacktrace(s, language string, out *model.Exception) error { - if language == "java" { - return setJavaExceptionStacktrace(s, out) - } - return fmt.Errorf("parsing %q stacktraces not implemented", language) -} - -func setJavaExceptionStacktrace(s string, out *model.Exception) error { - const ( - causedByPrefix = "Caused by: " - suppressedPrefix = "Suppressed: " - ) - - type Exception struct { - *model.Exception - enclosing *model.Exception - indent int - } - first := true - current := Exception{out, nil, 0} - stack := []Exception{} - scanner := bufio.NewScanner(strings.NewReader(s)) - for scanner.Scan() { - if first { - // Ignore the first line, we only care about the locations. - first = false - continue - } - var indent int - line := scanner.Text() - if i := strings.IndexFunc(line, isNotTab); i > 0 { - line = line[i:] - indent = i - } - for indent < current.indent { - n := len(stack) - current, stack = stack[n-1], stack[:n-1] - } - switch { - case strings.HasPrefix(line, "at "): - if err := parseJavaStacktraceFrame(line, current.Exception); err != nil { - return err - } - case strings.HasPrefix(line, "..."): - // "... N more" lines indicate that the last N frames from the enclosing - // exception's stacktrace are common to this exception. - if current.enclosing == nil { - return fmt.Errorf("no enclosing exception preceding line %q", line) - } - submatch := javaStacktraceMoreRegexp.FindStringSubmatch(line) - if submatch == nil { - return fmt.Errorf("failed to parse stacktrace line %q", line) - } - if n, err := strconv.Atoi(submatch[1]); err == nil { - enclosing := current.enclosing - if len(enclosing.Stacktrace) < n { - return fmt.Errorf( - "enclosing exception stacktrace has %d frames, cannot satisfy %q", - len(enclosing.Stacktrace), line, - ) - } - m := len(enclosing.Stacktrace) - current.Stacktrace = append(current.Stacktrace, enclosing.Stacktrace[m-n:]...) - } - case strings.HasPrefix(line, causedByPrefix): - // "Caused by:" lines are at the same level of indentation - // as the enclosing exception. - current.Cause = make([]model.Exception, 1) - current.enclosing = current.Exception - current.Exception = ¤t.Cause[0] - current.Exception.Handled = current.enclosing.Handled - current.Message = line[len(causedByPrefix):] - case strings.HasPrefix(line, suppressedPrefix): - // Suppressed exceptions have no place in the Elastic APM - // model, so they are ignored. - // - // Unlike "Caused by:", "Suppressed:" lines are indented within their - // enclosing exception; we just account for the indentation here. - stack = append(stack, current) - current.enclosing = current.Exception - current.Exception = &model.Exception{} - current.indent = indent - default: - return fmt.Errorf("unexpected line %q", line) - } - } - return scanner.Err() -} - -func parseJavaStacktraceFrame(s string, out *model.Exception) error { - submatch := javaStacktraceAtRegexp.FindStringSubmatch(s) - if submatch == nil { - return fmt.Errorf("failed to parse stacktrace line %q", s) - } - var module string - function := submatch[1] - if slash := strings.IndexRune(function, '/'); slash >= 0 { - // We could have either: - // - "class_loader/module/class.method" - // - "module/class.method" - module, function = function[:slash], function[slash+1:] - if slash := strings.IndexRune(function, '/'); slash >= 0 { - module, function = function[:slash], function[slash+1:] - } - } - var classname string - if dot := strings.LastIndexByte(function, '.'); dot > 0 { - // Split into classname and method. - classname, function = function[:dot], function[dot+1:] - } - file := submatch[2] - var line int - if submatch[3] != "" { - if n, err := strconv.Atoi(submatch[3]); err == nil { - line = n - } - } - out.Stacktrace = append(out.Stacktrace, model.StacktraceFrame{ - Module: module, - Classname: classname, - Function: function, - File: file, - Line: line, - }) - return nil -} - -func isNotTab(r rune) bool { - return r != '\t' -} diff --git a/exporter/elasticexporter/internal/translator/elastic/exceptions_test.go b/exporter/elasticexporter/internal/translator/elastic/exceptions_test.go deleted file mode 100644 index c8765b598924..000000000000 --- a/exporter/elasticexporter/internal/translator/elastic/exceptions_test.go +++ /dev/null @@ -1,310 +0,0 @@ -// Copyright 2020, OpenTelemetry 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 elastic_test - -import ( - "testing" - "time" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "go.elastic.co/apm/model" - "go.elastic.co/apm/transport/transporttest" - "go.elastic.co/fastjson" - "go.opentelemetry.io/collector/pdata/pcommon" - "go.opentelemetry.io/collector/pdata/ptrace" - conventions "go.opentelemetry.io/collector/semconv/v1.6.1" - - "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter/internal/translator/elastic" -) - -func TestEncodeSpanEventsNonExceptions(t *testing.T) { - nonExceptionEvent := ptrace.NewSpanEvent() - nonExceptionEvent.SetName("not_exception") - - incompleteExceptionEvent := ptrace.NewSpanEvent() - incompleteExceptionEvent.SetName("exception") - // At least one of exception.message and exception.type is required. - incompleteExceptionEvent.Attributes().InsertString(conventions.AttributeExceptionStacktrace, "stacktrace") - - _, errors := encodeSpanEvents(t, "java", nonExceptionEvent, incompleteExceptionEvent) - require.Empty(t, errors) -} - -func TestEncodeSpanEventsJavaExceptions(t *testing.T) { - timestamp := time.Unix(123, 0).UTC() - - exceptionEvent1 := ptrace.NewSpanEvent() - exceptionEvent1.SetTimestamp(pcommon.NewTimestampFromTime(timestamp)) - exceptionEvent1.SetName("exception") - exceptionEvent1.Attributes().InsertString("exception.type", "java.net.ConnectException.OSError") - exceptionEvent1.Attributes().InsertString("exception.message", "Division by zero") - exceptionEvent1.Attributes().InsertBool("exception.escaped", true) - exceptionEvent1.Attributes().InsertString("exception.stacktrace", ` - Exception in thread "main" java.lang.RuntimeException: Test exception - at com.example.GenerateTrace.methodB(GenerateTrace.java:13) - at com.example.GenerateTrace.methodA(GenerateTrace.java:9) - at com.example.GenerateTrace.main(GenerateTrace.java:5) - at com.foo.loader/foo@9.0/com.foo.Main.run(Main.java) - at com.foo.loader//com.foo.bar.App.run(App.java:12) - at java.base/java.lang.Thread.run(Unknown Source) -`[1:]) - exceptionEvent2 := ptrace.NewSpanEvent() - exceptionEvent2.SetTimestamp(pcommon.NewTimestampFromTime(timestamp)) - exceptionEvent2.SetName("exception") - exceptionEvent2.Attributes().InsertString("exception.type", "HighLevelException") - exceptionEvent2.Attributes().InsertString("exception.message", "MidLevelException: LowLevelException") - exceptionEvent2.Attributes().InsertString("exception.stacktrace", ` - HighLevelException: MidLevelException: LowLevelException - at Junk.a(Junk.java:13) - at Junk.main(Junk.java:4) - Caused by: MidLevelException: LowLevelException - at Junk.c(Junk.java:23) - at Junk.b(Junk.java:17) - at Junk.a(Junk.java:11) - ... 1 more - Suppressed: java.lang.ArithmeticException: / by zero - at Junk.c(Junk.java:25) - ... 3 more - Caused by: LowLevelException - at Junk.e(Junk.java:37) - at Junk.d(Junk.java:34) - at Junk.c(Junk.java:21) - ... 3 more`[1:]) - - transaction, errors := encodeSpanEvents(t, "java", exceptionEvent1, exceptionEvent2) - assert.Equal(t, []model.Error{{ - TraceID: transaction.TraceID, - ParentID: transaction.ID, - Timestamp: model.Time(timestamp), - Exception: model.Exception{ - Type: "java.net.ConnectException.OSError", - Message: "Division by zero", - Handled: false, - Stacktrace: []model.StacktraceFrame{{ - Classname: "com.example.GenerateTrace", - Function: "methodB", - File: "GenerateTrace.java", - Line: 13, - }, { - Classname: "com.example.GenerateTrace", - Function: "methodA", - File: "GenerateTrace.java", - Line: 9, - }, { - Classname: "com.example.GenerateTrace", - Function: "main", - File: "GenerateTrace.java", - Line: 5, - }, { - Module: "foo@9.0", - Classname: "com.foo.Main", - Function: "run", - File: "Main.java", - }, { - Classname: "com.foo.bar.App", - Function: "run", - File: "App.java", - Line: 12, - }, { - Module: "java.base", - Classname: "java.lang.Thread", - Function: "run", - File: "Unknown Source", - }}, - }, - }, { - TraceID: transaction.TraceID, - ParentID: transaction.ID, - Timestamp: model.Time(timestamp), - Exception: model.Exception{ - Type: "HighLevelException", - Message: "MidLevelException: LowLevelException", - Handled: true, - Stacktrace: []model.StacktraceFrame{{ - Classname: "Junk", - Function: "a", - File: "Junk.java", - Line: 13, - }, { - Classname: "Junk", - Function: "main", - File: "Junk.java", - Line: 4, - }}, - Cause: []model.Exception{{ - Message: "MidLevelException: LowLevelException", - Handled: true, - Stacktrace: []model.StacktraceFrame{{ - Classname: "Junk", - Function: "c", - File: "Junk.java", - Line: 23, - }, { - Classname: "Junk", - Function: "b", - File: "Junk.java", - Line: 17, - }, { - Classname: "Junk", - Function: "a", - File: "Junk.java", - Line: 11, - }, { - Classname: "Junk", - Function: "main", - File: "Junk.java", - Line: 4, - }}, - Cause: []model.Exception{{ - Message: "LowLevelException", - Handled: true, - Stacktrace: []model.StacktraceFrame{{ - Classname: "Junk", - Function: "e", - File: "Junk.java", - Line: 37, - }, { - Classname: "Junk", - Function: "d", - File: "Junk.java", - Line: 34, - }, { - Classname: "Junk", - Function: "c", - File: "Junk.java", - Line: 21, - }, { - Classname: "Junk", - Function: "b", - File: "Junk.java", - Line: 17, - }, { - Classname: "Junk", - Function: "a", - File: "Junk.java", - Line: 11, - }, { - Classname: "Junk", - Function: "main", - File: "Junk.java", - Line: 4, - }}, - }}, - }}, - }, - }}, errors) -} - -func TestEncodeSpanEventsJavaExceptionsUnparsedStacktrace(t *testing.T) { - stacktraces := []string{ - // Unexpected prefix. - "abc\ndef", - - // "... N more" with no preceding exception. - "abc\n... 1 more", - - // "... N more" where N is greater than the number of stack - // frames in the enclosing exception. - `ignored message - at Class.method(Class.java:1) -Caused by: something else - at Class.method(Class.java:2) - ... 2 more`, - - // "... N more" where N is not a sequence of digits. - `abc - at Class.method(Class.java:1) -Caused by: whatever - at Class.method(Class.java:2) - ... lots more`, - - // "at " where is invalid. - `abc - at the movies`, - } - - var events []ptrace.SpanEvent - for _, stacktrace := range stacktraces { - event := ptrace.NewSpanEvent() - event.SetName("exception") - event.Attributes().InsertString("exception.type", "ExceptionType") - event.Attributes().InsertString("exception.stacktrace", stacktrace) - events = append(events, event) - } - - _, errors := encodeSpanEvents(t, "java", events...) - require.Len(t, errors, len(stacktraces)) - - for i, e := range errors { - assert.Empty(t, e.Exception.Stacktrace) - assert.Equal(t, map[string]interface{}{"stacktrace": stacktraces[i]}, e.Exception.Attributes) - } -} - -func TestEncodeSpanEventsNonJavaExceptions(t *testing.T) { - timestamp := time.Unix(123, 0).UTC() - - exceptionEvent := ptrace.NewSpanEvent() - exceptionEvent.SetTimestamp(pcommon.NewTimestampFromTime(timestamp)) - exceptionEvent.SetName("exception") - exceptionEvent.Attributes().InsertString("exception.type", "the_type") - exceptionEvent.Attributes().InsertString("exception.message", "the_message") - exceptionEvent.Attributes().InsertString("exception.stacktrace", "the_stacktrace") - - // For languages where we do not explicitly parse the stacktrace, - // the raw stacktrace is stored as an attribute on the exception. - transaction, errors := encodeSpanEvents(t, "COBOL", exceptionEvent) - require.Len(t, errors, 1) - - assert.Equal(t, model.Error{ - TraceID: transaction.TraceID, - ParentID: transaction.ID, - Timestamp: model.Time(timestamp), - Exception: model.Exception{ - Type: "the_type", - Message: "the_message", - Handled: true, - Attributes: map[string]interface{}{ - "stacktrace": "the_stacktrace", - }, - }, - }, errors[0]) -} - -func encodeSpanEvents(t *testing.T, language string, events ...ptrace.SpanEvent) (model.Transaction, []model.Error) { - traceID := model.TraceID{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16} - transactionID := model.SpanID{1, 1, 1, 1, 1, 1, 1, 1} - - span := ptrace.NewSpan() - span.SetTraceID(pcommon.NewTraceID(traceID)) - span.SetSpanID(pcommon.NewSpanID(transactionID)) - for _, event := range events { - tgt := span.Events().AppendEmpty() - event.CopyTo(tgt) - } - - var w fastjson.Writer - var recorder transporttest.RecorderTransport - resource := pcommon.NewResource() - resource.Attributes().InsertString(conventions.AttributeTelemetrySDKLanguage, language) - assert.NoError(t, elastic.EncodeResourceMetadata(resource, &w)) - assert.NoError(t, elastic.EncodeSpan(span, pcommon.NewInstrumentationScope(), resource, &w)) - sendStream(t, &w, &recorder) - - payloads := recorder.Payloads() - require.Len(t, payloads.Transactions, 1) - return payloads.Transactions[0], payloads.Errors -} diff --git a/exporter/elasticexporter/internal/translator/elastic/metadata.go b/exporter/elasticexporter/internal/translator/elastic/metadata.go deleted file mode 100644 index 520860204ac2..000000000000 --- a/exporter/elasticexporter/internal/translator/elastic/metadata.go +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright 2020, OpenTelemetry 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 elastic contains an OTLP exporter for Elastic APM. -package elastic // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter/internal/translator/elastic" - -import ( - "fmt" - - "go.elastic.co/apm/model" - "go.elastic.co/fastjson" - "go.opentelemetry.io/collector/pdata/pcommon" - conventions "go.opentelemetry.io/collector/semconv/v1.6.1" -) - -// EncodeResourceMetadata encodes a metadata line from resource, writing to w. -func EncodeResourceMetadata(resource pcommon.Resource, w *fastjson.Writer) (err error) { - var agent model.Agent - var service model.Service - var serviceNode model.ServiceNode - var serviceLanguage model.Language - var system model.System - var k8s model.Kubernetes - var k8sPod model.KubernetesPod - var labels model.IfaceMap - - resource.Attributes().Range(func(k string, v pcommon.Value) bool { - switch k { - case conventions.AttributeServiceName: - service.Name = cleanServiceName(v.StringVal()) - case conventions.AttributeServiceVersion: - service.Version = truncate(v.StringVal()) - case conventions.AttributeServiceInstanceID: - serviceNode.ConfiguredName = truncate(v.StringVal()) - service.Node = &serviceNode - case conventions.AttributeDeploymentEnvironment: - service.Environment = truncate(v.StringVal()) - - case conventions.AttributeTelemetrySDKName: - agent.Name = truncate(v.StringVal()) - case conventions.AttributeTelemetrySDKLanguage: - serviceLanguage.Name = truncate(v.StringVal()) - service.Language = &serviceLanguage - case conventions.AttributeTelemetrySDKVersion: - agent.Version = truncate(v.StringVal()) - - case conventions.AttributeK8SNamespaceName: - k8s.Namespace = truncate(v.StringVal()) - system.Kubernetes = &k8s - case conventions.AttributeK8SPodName: - k8sPod.Name = truncate(v.StringVal()) - k8s.Pod = &k8sPod - system.Kubernetes = &k8s - case conventions.AttributeK8SPodUID: - k8sPod.UID = truncate(v.StringVal()) - k8s.Pod = &k8sPod - system.Kubernetes = &k8s - - case conventions.AttributeHostName: - system.Hostname = truncate(v.StringVal()) - - default: - labels = append(labels, model.IfaceMapItem{ - Key: cleanLabelKey(k), - Value: ifaceAttributeValue(v), - }) - } - return true - }) - - if service.Name == "" { - // service.name is a required field. - service.Name = "unknown" - } - if agent.Name == "" { - // service.agent.name is a required field. - agent.Name = "otlp" - } - if agent.Version == "" { - // service.agent.version is a required field. - agent.Version = "unknown" - } - if serviceLanguage.Name != "" { - agent.Name = fmt.Sprintf("%s/%s", agent.Name, serviceLanguage.Name) - } - service.Agent = &agent - - w.RawString(`{"metadata":{`) - w.RawString(`"service":`) - if err := service.MarshalFastJSON(w); err != nil { - return err - } - if system != (model.System{}) { - w.RawString(`,"system":`) - if err := system.MarshalFastJSON(w); err != nil { - return err - } - } - if len(labels) > 0 { - w.RawString(`,"labels":`) - if err := labels.MarshalFastJSON(w); err != nil { - return err - } - } - w.RawString("}}\n") - return nil -} diff --git a/exporter/elasticexporter/internal/translator/elastic/metadata_test.go b/exporter/elasticexporter/internal/translator/elastic/metadata_test.go deleted file mode 100644 index 5d5ab870555b..000000000000 --- a/exporter/elasticexporter/internal/translator/elastic/metadata_test.go +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright 2020, OpenTelemetry 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 elastic_test - -import ( - "testing" - - "github.com/stretchr/testify/assert" - "go.elastic.co/apm/model" - "go.elastic.co/apm/transport/transporttest" - "go.elastic.co/fastjson" - "go.opentelemetry.io/collector/pdata/pcommon" - conventions "go.opentelemetry.io/collector/semconv/v1.6.1" - - "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter/internal/translator/elastic" -) - -func TestMetadataDefaults(t *testing.T) { - out := metadataWithResource(t, pcommon.NewResource()) - assert.Equal(t, metadata{ - service: model.Service{ - Name: "unknown", - Agent: &model.Agent{ - Name: "otlp", - Version: "unknown", - }, - }, - }, out) -} - -func TestMetadataServiceName(t *testing.T) { - resource := resourceFromAttributesMap(map[string]interface{}{ - "service.name": "foo", - }) - out := metadataWithResource(t, resource) - assert.Equal(t, "foo", out.service.Name) -} - -func TestMetadataServiceVersion(t *testing.T) { - resource := resourceFromAttributesMap(map[string]interface{}{ - "service.version": "1.2.3", - }) - out := metadataWithResource(t, resource) - assert.Equal(t, "1.2.3", out.service.Version) -} - -func TestMetadataServiceInstance(t *testing.T) { - resource := resourceFromAttributesMap(map[string]interface{}{ - "service.instance.id": "foo-1", - }) - out := metadataWithResource(t, resource) - assert.Equal(t, &model.ServiceNode{ - ConfiguredName: "foo-1", - }, out.service.Node) -} - -func TestMetadataServiceEnvironment(t *testing.T) { - resource := resourceFromAttributesMap(map[string]interface{}{ - "deployment.environment": "foo", - }) - out := metadataWithResource(t, resource) - assert.Equal(t, "foo", out.service.Environment) -} - -func TestMetadataSystemHostname(t *testing.T) { - resource := resourceFromAttributesMap(map[string]interface{}{ - "host.name": "foo", - }) - out := metadataWithResource(t, resource) - assert.Equal(t, "foo", out.system.Hostname) -} - -func TestMetadataServiceLanguageName(t *testing.T) { - resource := resourceFromAttributesMap(map[string]interface{}{ - "telemetry.sdk.language": "java", - }) - out := metadataWithResource(t, resource) - assert.Equal(t, "java", out.service.Language.Name) - assert.Equal(t, "otlp/java", out.service.Agent.Name) -} - -func TestMetadataAgentName(t *testing.T) { - resource := resourceFromAttributesMap(map[string]interface{}{ - "telemetry.sdk.name": "foo", - "telemetry.sdk.version": "bar", - }) - out := metadataWithResource(t, resource) - assert.Equal(t, &model.Agent{ - Name: "foo", - Version: "bar", - }, out.service.Agent) -} - -func TestMetadataLabels(t *testing.T) { - resource := resourceFromAttributesMap(map[string]interface{}{ - "string": "abc", - "int": 123, - "double": 123.456, - "bool": true, - // well known resource label, not carried across - conventions.AttributeServiceVersion: "...", - }) - out := metadataWithResource(t, resource) - assert.Equal(t, model.IfaceMap{ - {Key: "bool", Value: true}, - {Key: "double", Value: 123.456}, - {Key: "int", Value: 123.0}, - {Key: "string", Value: "abc"}, - }, out.labels) -} - -func TestMetadataKubernetes(t *testing.T) { - resource := resourceFromAttributesMap(map[string]interface{}{ - "k8s.namespace.name": "namespace_name", - "k8s.pod.name": "pod_name", - "k8s.pod.uid": "pod_uid", - }) - out := metadataWithResource(t, resource) - assert.Equal(t, &model.Kubernetes{ - Namespace: "namespace_name", - Pod: &model.KubernetesPod{ - Name: "pod_name", - UID: "pod_uid", - }, - }, out.system.Kubernetes) -} - -func resourceFromAttributesMap(attrs map[string]interface{}) pcommon.Resource { - resource := pcommon.NewResource() - pcommon.NewMapFromRaw(attrs).CopyTo(resource.Attributes()) - return resource -} - -func metadataWithResource(t *testing.T, resource pcommon.Resource) metadata { - var out metadata - var recorder transporttest.RecorderTransport - var w fastjson.Writer - assert.NoError(t, elastic.EncodeResourceMetadata(resource, &w)) - sendStream(t, &w, &recorder) - out.system, out.process, out.service, out.labels = recorder.Metadata() - return out -} - -type metadata struct { - system model.System - process model.Process - service model.Service - labels model.IfaceMap -} diff --git a/exporter/elasticexporter/internal/translator/elastic/metrics.go b/exporter/elasticexporter/internal/translator/elastic/metrics.go deleted file mode 100644 index 0afeb8f392aa..000000000000 --- a/exporter/elasticexporter/internal/translator/elastic/metrics.go +++ /dev/null @@ -1,165 +0,0 @@ -// Copyright 2020, OpenTelemetry 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 elastic contains an opentelemetry-collector exporter -// for Elastic APM. -package elastic // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter/internal/translator/elastic" - -import ( - "sort" - "strings" - "time" - - "go.elastic.co/apm/model" - "go.elastic.co/fastjson" - "go.opentelemetry.io/collector/pdata/pcommon" - "go.opentelemetry.io/collector/pdata/pmetric" -) - -// EncodeMetrics encodes an OpenTelemetry metrics slice, and instrumentation -// library information, as one or more metricset lines, writing to w. -// -// TODO(axw) otlpLibrary is currently not used. We should consider recording -// it as metadata. -func EncodeMetrics(otlpMetrics pmetric.MetricSlice, otlpLibrary pcommon.InstrumentationScope, w *fastjson.Writer) (dropped int, _ error) { - var metricsets metricsets - for i := 0; i < otlpMetrics.Len(); i++ { - metric := otlpMetrics.At(i) - - name := metric.Name() - switch metric.DataType() { - case pmetric.MetricDataTypeGauge: - doubleGauge := metric.Gauge() - dps := doubleGauge.DataPoints() - for i := 0; i < dps.Len(); i++ { - dp := dps.At(i) - var val float64 - switch dp.ValueType() { - case pmetric.NumberDataPointValueTypeDouble: - val = dp.DoubleVal() - case pmetric.NumberDataPointValueTypeInt: - val = float64(dp.IntVal()) - } - metricsets.upsert(model.Metrics{ - Timestamp: asTime(dp.Timestamp()), - Labels: asStringMap(dp.Attributes()), - Samples: map[string]model.Metric{name: { - Value: val, - }}, - }) - } - case pmetric.MetricDataTypeSum: - doubleSum := metric.Sum() - dps := doubleSum.DataPoints() - for i := 0; i < dps.Len(); i++ { - dp := dps.At(i) - var val float64 - switch dp.ValueType() { - case pmetric.NumberDataPointValueTypeDouble: - val = dp.DoubleVal() - case pmetric.NumberDataPointValueTypeInt: - val = float64(dp.IntVal()) - } - metricsets.upsert(model.Metrics{ - Timestamp: asTime(dp.Timestamp()), - Labels: asStringMap(dp.Attributes()), - Samples: map[string]model.Metric{name: { - Value: val, - }}, - }) - } - case pmetric.MetricDataTypeHistogram: - // TODO(axw) requires https://github.com/elastic/apm-server/issues/3195 - doubleHistogram := metric.Histogram() - dropped += doubleHistogram.DataPoints().Len() - default: - // Unknown type, so just increment dropped by 1 as a best effort. - dropped++ - } - } - for _, metricset := range metricsets { - w.RawString(`{"metricset":`) - if err := metricset.MarshalFastJSON(w); err != nil { - return dropped, err - } - w.RawString("}\n") - } - return dropped, nil -} - -func asTime(in pcommon.Timestamp) model.Time { - return model.Time(time.Unix(0, int64(in))) -} - -func asStringMap(in pcommon.Map) model.StringMap { - var out model.StringMap - in.Sort() - in.Range(func(k string, v pcommon.Value) bool { - out = append(out, model.StringMapItem{ - Key: k, - Value: v.AsString(), - }) - return true - }) - return out -} - -type metricsets []model.Metrics - -func (ms *metricsets) upsert(m model.Metrics) { - i := ms.search(m) - if i < len(*ms) && compareMetricsets((*ms)[i], m) == 0 { - existing := (*ms)[i] - for k, v := range m.Samples { - existing.Samples[k] = v - } - } else { - head := (*ms)[:i] - tail := append([]model.Metrics{m}, (*ms)[i:]...) - head = append(head, tail...) - *ms = head - } -} - -func (ms *metricsets) search(m model.Metrics) int { - return sort.Search(len(*ms), func(i int) bool { - return compareMetricsets((*ms)[i], m) >= 0 - }) -} - -func compareMetricsets(a, b model.Metrics) int { - atime, btime := time.Time(a.Timestamp), time.Time(b.Timestamp) - if atime.Before(btime) { - return -1 - } else if atime.After(btime) { - return 1 - } - n := len(a.Labels) - len(b.Labels) - switch { - case n < 0: - return -1 - case n > 0: - return 1 - } - for i, la := range a.Labels { - lb := b.Labels[i] - if n := strings.Compare(la.Key, lb.Key); n != 0 { - return n - } - if n := strings.Compare(la.Value, lb.Value); n != 0 { - return n - } - } - return 0 -} diff --git a/exporter/elasticexporter/internal/translator/elastic/metrics_test.go b/exporter/elasticexporter/internal/translator/elastic/metrics_test.go deleted file mode 100644 index ce9c4f786346..000000000000 --- a/exporter/elasticexporter/internal/translator/elastic/metrics_test.go +++ /dev/null @@ -1,168 +0,0 @@ -// Copyright 2020, OpenTelemetry 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 elastic_test - -import ( - "testing" - "time" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "go.elastic.co/apm/model" - "go.elastic.co/apm/transport/transporttest" - "go.elastic.co/fastjson" - "go.opentelemetry.io/collector/pdata/pcommon" - "go.opentelemetry.io/collector/pdata/pmetric" - - "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter/internal/translator/elastic" -) - -func TestEncodeMetrics(t *testing.T) { - var w fastjson.Writer - var recorder transporttest.RecorderTransport - assert.NoError(t, elastic.EncodeResourceMetadata(pcommon.NewResource(), &w)) - - scopeMetrics := pmetric.NewScopeMetrics() - metrics := scopeMetrics.Metrics() - appendMetric := func(name string, dataType pmetric.MetricDataType) pmetric.Metric { - metric := metrics.AppendEmpty() - metric.SetName(name) - metric.SetDataType(dataType) - return metric - } - - timestamp0 := time.Unix(123, 0).UTC() - timestamp1 := time.Unix(456, 0).UTC() - - var expectDropped int - - metric := appendMetric("int_gauge_metric", pmetric.MetricDataTypeGauge) - intGauge := metric.Gauge() - intGauge.DataPoints().EnsureCapacity(4) - idp := intGauge.DataPoints().AppendEmpty() - idp.SetTimestamp(pcommon.NewTimestampFromTime(timestamp0)) - idp.SetIntVal(1) - idp = intGauge.DataPoints().AppendEmpty() - idp.SetTimestamp(pcommon.NewTimestampFromTime(timestamp1)) - idp.SetIntVal(2) - idp.Attributes().InsertString("k", "v") - idp = intGauge.DataPoints().AppendEmpty() - idp.SetTimestamp(pcommon.NewTimestampFromTime(timestamp1)) - idp.SetIntVal(3) - idp = intGauge.DataPoints().AppendEmpty() - idp.SetTimestamp(pcommon.NewTimestampFromTime(timestamp1)) - idp.SetIntVal(4) - idp.Attributes().InsertString("k", "v2") - - metric = appendMetric("double_gauge_metric", pmetric.MetricDataTypeGauge) - doubleGauge := metric.Gauge() - doubleGauge.DataPoints().EnsureCapacity(4) - ddp := doubleGauge.DataPoints().AppendEmpty() - ddp.SetTimestamp(pcommon.NewTimestampFromTime(timestamp0)) - ddp.SetDoubleVal(5) - ddp = doubleGauge.DataPoints().AppendEmpty() - ddp.SetTimestamp(pcommon.NewTimestampFromTime(timestamp1)) - ddp.SetDoubleVal(6) - ddp.Attributes().InsertString("k", "v") - ddp = doubleGauge.DataPoints().AppendEmpty() - ddp.SetTimestamp(pcommon.NewTimestampFromTime(timestamp1)) - ddp.SetDoubleVal(7) - ddp = doubleGauge.DataPoints().AppendEmpty() - ddp.SetTimestamp(pcommon.NewTimestampFromTime(timestamp1)) - ddp.SetDoubleVal(8) - ddp.Attributes().InsertString("k", "v2") - - metric = appendMetric("int_sum_metric", pmetric.MetricDataTypeSum) - intSum := metric.Sum() - intSum.DataPoints().EnsureCapacity(3) - is := intSum.DataPoints().AppendEmpty() - is.SetTimestamp(pcommon.NewTimestampFromTime(timestamp0)) - is.SetIntVal(9) - is = intSum.DataPoints().AppendEmpty() - is.SetTimestamp(pcommon.NewTimestampFromTime(timestamp1)) - is.SetIntVal(10) - is.Attributes().InsertString("k", "v") - is = intSum.DataPoints().AppendEmpty() - is.SetTimestamp(pcommon.NewTimestampFromTime(timestamp1)) - is.SetIntVal(11) - is.Attributes().InsertString("k2", "v") - - metric = appendMetric("double_sum_metric", pmetric.MetricDataTypeSum) - doubleSum := metric.Sum() - doubleSum.DataPoints().EnsureCapacity(3) - ds := doubleSum.DataPoints().AppendEmpty() - ds.SetTimestamp(pcommon.NewTimestampFromTime(timestamp0)) - ds.SetDoubleVal(12) - ds = doubleSum.DataPoints().AppendEmpty() - ds.SetTimestamp(pcommon.NewTimestampFromTime(timestamp1)) - ds.SetDoubleVal(13) - ds.Attributes().InsertString("k", "v") - ds = doubleSum.DataPoints().AppendEmpty() - ds.SetTimestamp(pcommon.NewTimestampFromTime(timestamp1)) - ds.SetDoubleVal(14) - ds.Attributes().InsertString("k2", "v") - - // Histograms are currently not supported, and will be ignored. - metric = appendMetric("double_histogram_metric", pmetric.MetricDataTypeHistogram) - metric.Histogram().DataPoints().AppendEmpty() - expectDropped++ - - dropped, err := elastic.EncodeMetrics(metrics, scopeMetrics.Scope(), &w) - require.NoError(t, err) - assert.Equal(t, expectDropped, dropped) - sendStream(t, &w, &recorder) - - payloads := recorder.Payloads() - assert.Equal(t, []model.Metrics{{ - Timestamp: model.Time(timestamp0), - Samples: map[string]model.Metric{ - "double_gauge_metric": {Value: 5}, - "double_sum_metric": {Value: 12}, - "int_gauge_metric": {Value: 1}, - "int_sum_metric": {Value: 9}, - }, - }, { - Timestamp: model.Time(timestamp1), - Samples: map[string]model.Metric{ - "double_gauge_metric": {Value: 7}, - "int_gauge_metric": {Value: 3}, - }, - }, { - Timestamp: model.Time(timestamp1), - Labels: model.StringMap{{Key: "k", Value: "v"}}, - Samples: map[string]model.Metric{ - "double_gauge_metric": {Value: 6}, - "double_sum_metric": {Value: 13}, - "int_gauge_metric": {Value: 2}, - "int_sum_metric": {Value: 10}, - }, - }, { - Timestamp: model.Time(timestamp1), - Labels: model.StringMap{{Key: "k", Value: "v2"}}, - Samples: map[string]model.Metric{ - "double_gauge_metric": {Value: 8}, - "int_gauge_metric": {Value: 4}, - }, - }, { - Timestamp: model.Time(timestamp1), - Labels: model.StringMap{{Key: "k2", Value: "v"}}, - Samples: map[string]model.Metric{ - "double_sum_metric": {Value: 14}, - "int_sum_metric": {Value: 11}, - }, - }}, payloads.Metrics) - - assert.Empty(t, payloads.Errors) -} diff --git a/exporter/elasticexporter/internal/translator/elastic/traces.go b/exporter/elasticexporter/internal/translator/elastic/traces.go deleted file mode 100644 index 3d1fac7a1f59..000000000000 --- a/exporter/elasticexporter/internal/translator/elastic/traces.go +++ /dev/null @@ -1,631 +0,0 @@ -// Copyright 2020, OpenTelemetry 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 elastic contains an opentelemetry-collector exporter -// for Elastic APM. -package elastic // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter/internal/translator/elastic" - -import ( - "fmt" - "net" - "net/url" - "strconv" - "time" - - "go.elastic.co/apm/model" - "go.elastic.co/fastjson" - "go.opentelemetry.io/collector/pdata/pcommon" - "go.opentelemetry.io/collector/pdata/ptrace" - conventions "go.opentelemetry.io/collector/semconv/v1.6.1" -) - -// EncodeSpan encodes an OpenTelemetry span, and instrumentation library information, -// as a transaction or span line, writing to w. -// -// otlpResource is used for language-specific translations, such as parsing stacktraces. -// -// TODO(axw) otlpLibrary is currently not used. We should consider recording it as metadata. -func EncodeSpan( - otlpSpan ptrace.Span, - otlpLibrary pcommon.InstrumentationScope, - otlpResource pcommon.Resource, - w *fastjson.Writer, -) error { - spanID := model.SpanID(otlpSpan.SpanID().Bytes()) - traceID := model.TraceID(otlpSpan.TraceID().Bytes()) - parentID := model.SpanID(otlpSpan.ParentSpanID().Bytes()) - root := parentID == model.SpanID{} - - startTime := time.Unix(0, int64(otlpSpan.StartTimestamp())).UTC() - endTime := time.Unix(0, int64(otlpSpan.EndTimestamp())).UTC() - durationMillis := endTime.Sub(startTime).Seconds() * 1000 - - name := truncate(otlpSpan.Name()) - var transactionContext transactionContext - if root || otlpSpan.Kind() == ptrace.SpanKindServer { - transaction := model.Transaction{ - ID: spanID, - TraceID: traceID, - ParentID: parentID, - Name: name, - Timestamp: model.Time(startTime), - Duration: durationMillis, - } - if err := setTransactionProperties( - otlpSpan, otlpLibrary, - &transaction, &transactionContext, - ); err != nil { - return err - } - transaction.Context = transactionContext.modelContext() - w.RawString(`{"transaction":`) - if err := transaction.MarshalFastJSON(w); err != nil { - return err - } - w.RawString("}\n") - } else { - span := model.Span{ - ID: spanID, - TraceID: traceID, - ParentID: parentID, - Timestamp: model.Time(startTime), - Duration: durationMillis, - Name: name, - } - if err := setSpanProperties(otlpSpan, &span); err != nil { - return err - } - w.RawString(`{"span":`) - if err := span.MarshalFastJSON(w); err != nil { - return err - } - w.RawString("}\n") - } - return encodeSpanEvents(otlpSpan.Events(), otlpResource, traceID, spanID, w) -} - -func setTransactionProperties( - otlpSpan ptrace.Span, - otlpLibrary pcommon.InstrumentationScope, - tx *model.Transaction, context *transactionContext, -) error { - var ( - netHostName string - netHostPort int - netPeerIP string - netPeerPort int - ) - - otlpSpan.Attributes().Range(func(k string, v pcommon.Value) bool { - var storeTag bool - switch k { - // http.* - case conventions.AttributeHTTPMethod: - context.setHTTPMethod(v.StringVal()) - case conventions.AttributeHTTPURL: - if err := context.setHTTPURL(v.StringVal()); err != nil { - // Invalid http.url recorded by instrumentation, - // record it as a label instead of in well-defined - // url fields. - storeTag = true - } - case conventions.AttributeHTTPTarget: - if err := context.setHTTPURL(v.StringVal()); err != nil { - // Invalid http.target recorded by instrumentation, - // record it as a label instead of in well-defined - // url fields. - storeTag = true - } - case conventions.AttributeHTTPHost: - context.setHTTPHost(v.StringVal()) - case conventions.AttributeHTTPScheme: - context.setHTTPScheme(v.StringVal()) - case conventions.AttributeHTTPStatusCode: - context.setHTTPStatusCode(int(v.IntVal())) - case conventions.AttributeHTTPFlavor: - context.setHTTPVersion(v.StringVal()) - case conventions.AttributeHTTPServerName: - context.setHTTPHostname(v.StringVal()) - case conventions.AttributeHTTPClientIP: - context.setHTTPRequestHeader("X-Forwarded-For", v.StringVal()) - case conventions.AttributeHTTPUserAgent: - context.setHTTPRequestHeader("User-Agent", v.StringVal()) - case "http.remote_addr": - // NOTE(axw) this is non-standard, sent by opentelemetry-go's othttp. - // It's semantically equivalent to net.peer.ip+port. Standard attributes - // take precedence. - stringValue := v.StringVal() - ip, port, err := net.SplitHostPort(stringValue) - if err != nil { - ip = stringValue - } - if net.ParseIP(ip) != nil { - if netPeerIP == "" { - netPeerIP = ip - } - if netPeerPort == 0 { - netPeerPort, _ = strconv.Atoi(port) - } - } - - // net.* - case conventions.AttributeNetPeerIP: - netPeerIP = v.StringVal() - case conventions.AttributeNetPeerPort: - netPeerPort = int(v.IntVal()) - case conventions.AttributeNetHostName: - netHostName = v.StringVal() - case conventions.AttributeNetHostPort: - netHostPort = int(v.IntVal()) - - // other: record as a tag - default: - storeTag = true - } - if storeTag { - context.model.Tags = append(context.model.Tags, model.IfaceMapItem{ - Key: cleanLabelKey(k), - Value: ifaceAttributeValue(v), - }) - } - return true - }) - - context.setFramework(otlpLibrary.Name(), otlpLibrary.Version()) - - status := otlpSpan.Status() - tx.Outcome = spanStatusOutcome(status) - switch status.Code() { - case ptrace.StatusCodeOk: - tx.Result = "OK" - case ptrace.StatusCodeError: - tx.Result = "Error" - } - - tx.Type = "unknown" - if context.model.Request != nil { - tx.Type = "request" - if context.model.Request.URL.Protocol == "" { - // A bit presumptuous, but OpenTelemetry clients - // are expected to send the scheme; this is just - // a failsafe. - context.model.Request.URL.Protocol = "http" - } - if context.model.Request.URL.Hostname == "" { - context.model.Request.URL.Hostname = netHostName - } - if context.model.Request.URL.Port == "" && netHostPort > 0 { - context.model.Request.URL.Port = strconv.Itoa(netHostPort) - } - if netPeerIP != "" { - remoteAddr := netPeerIP - if netPeerPort > 0 { - remoteAddr = net.JoinHostPort(remoteAddr, strconv.Itoa(netPeerPort)) - } - context.setHTTPRemoteAddr(remoteAddr) - } - } - return nil -} - -func setSpanProperties(otlpSpan ptrace.Span, span *model.Span) error { - var ( - context spanContext - netPeerName string - netPeerIP string - netPeerPort int - ) - - otlpSpan.Attributes().Range(func(k string, v pcommon.Value) bool { - var storeTag bool - switch k { - // http.* - case conventions.AttributeHTTPURL: - if err := context.setHTTPURL(v.StringVal()); err != nil { - // Invalid http.url recorded by instrumentation, - // record it as a label instead of in well-defined - // url fields. - storeTag = true - } - case conventions.AttributeHTTPTarget: - if err := context.setHTTPURL(v.StringVal()); err != nil { - // Invalid http.target recorded by instrumentation, - // record it as a label instead of in well-defined - // url fields. - storeTag = true - } - case conventions.AttributeHTTPHost: - context.setHTTPHost(v.StringVal()) - case conventions.AttributeHTTPScheme: - context.setHTTPScheme(v.StringVal()) - case conventions.AttributeHTTPStatusCode: - context.setHTTPStatusCode(int(v.IntVal())) - - // net.* - case conventions.AttributeNetPeerName: - netPeerName = v.StringVal() - case conventions.AttributeNetPeerIP: - netPeerIP = v.StringVal() - case conventions.AttributeNetPeerPort: - netPeerPort = int(v.IntVal()) - - // db.* - case conventions.AttributeDBSystem: - context.setDatabaseType(v.StringVal()) - case conventions.AttributeDBName: - context.setDatabaseInstance(v.StringVal()) - case conventions.AttributeDBStatement: - context.setDatabaseStatement(v.StringVal()) - case conventions.AttributeDBUser: - context.setDatabaseUser(v.StringVal()) - - // other: record as a tag - default: - storeTag = true - } - if storeTag { - context.model.Tags = append(context.model.Tags, model.IfaceMapItem{ - Key: cleanLabelKey(k), - Value: ifaceAttributeValue(v), - }) - } - return true - }) - - destPort := netPeerPort - destAddr := netPeerName - if destAddr == "" { - destAddr = netPeerIP - } - - span.Type = "app" - if context.model.HTTP != nil { - span.Type = "external" - span.Subtype = "http" - if context.http.URL != nil { - if context.http.URL.Scheme == "" { - // A bit presumptuous, but OpenTelemetry clients - // are expected to send the scheme; this is just - // a failsafe. - context.http.URL.Scheme = "http" - } - - if context.http.URL.Host != "" { - // Set destination.{address,port} from http.url.host. - destAddr = context.http.URL.Hostname() - if portString := context.http.URL.Port(); portString != "" { - destPort, _ = strconv.Atoi(context.http.URL.Port()) - } else { - destPort = schemeDefaultPort(context.http.URL.Scheme) - } - } else if destAddr != "" { - // Set http.url.host from net.peer.* - host := destAddr - if destPort > 0 { - port := strconv.Itoa(destPort) - host = net.JoinHostPort(destAddr, port) - } - context.http.URL.Host = host - if destPort == 0 { - // Set destPort after setting http.url.host, so that - // we don't include the default port there. - destPort = schemeDefaultPort(context.http.URL.Scheme) - } - } - - // See https://github.com/elastic/apm/issues/180 for rules about setting - // destination.service.* for external HTTP requests. - destinationServiceURL := url.URL{Scheme: context.http.URL.Scheme, Host: context.http.URL.Host} - destinationServiceResource := destinationServiceURL.Host - if destPort != 0 && destPort == schemeDefaultPort(context.http.URL.Scheme) { - if destinationServiceURL.Port() != "" { - destinationServiceURL.Host = destinationServiceURL.Hostname() - } else { - destinationServiceResource = fmt.Sprintf("%s:%d", destinationServiceResource, destPort) - } - } - context.setDestinationService(destinationServiceURL.String(), destinationServiceResource) - } - } - if context.model.Database != nil { - span.Type = "db" - span.Subtype = context.model.Database.Type - if span.Subtype != "" { - // For database requests, we currently just identify the - // destination service by db.system. - context.setDestinationService(span.Subtype, span.Subtype) - } - } - if destAddr != "" { - context.setDestinationAddress(destAddr, destPort) - } - if context.model.Destination != nil && context.model.Destination.Service != nil { - context.model.Destination.Service.Type = span.Type - } - span.Context = context.modelContext() - span.Outcome = spanStatusOutcome(otlpSpan.Status()) - return nil -} - -func encodeSpanEvents( - events ptrace.SpanEventSlice, - resource pcommon.Resource, - traceID model.TraceID, spanID model.SpanID, - w *fastjson.Writer, -) error { - // Translate exception span events to errors. - // - // TODO(axw) we don't currently support sending arbitrary events - // to Elastic APM Server. If/when we do, we should also transmit - // otlpSpan.TimeEvents. When there's a convention specified for - // error events, we could send those. - var language string - if v, ok := resource.Attributes().Get(conventions.AttributeTelemetrySDKLanguage); ok { - language = v.StringVal() - } - for i := 0; i < events.Len(); i++ { - event := events.At(i) - if event.Name() != "exception" { - // `The name of the event MUST be "exception"` - continue - } - var exceptionEscaped bool - var exceptionMessage, exceptionStacktrace, exceptionType string - event.Attributes().Range(func(k string, v pcommon.Value) bool { - switch k { - case conventions.AttributeExceptionMessage: - exceptionMessage = v.StringVal() - case conventions.AttributeExceptionStacktrace: - exceptionStacktrace = v.StringVal() - case conventions.AttributeExceptionType: - exceptionType = v.StringVal() - case "exception.escaped": - exceptionEscaped = v.BoolVal() - } - return true - }) - if exceptionMessage == "" && exceptionType == "" { - // `At least one of the following sets of attributes is required: - // - exception.type - // - exception.message` - continue - } - if err := encodeExceptionSpanEvent( - time.Unix(0, int64(event.Timestamp())).UTC(), - exceptionType, exceptionMessage, exceptionStacktrace, - exceptionEscaped, traceID, spanID, language, w, - ); err != nil { - return err - } - } - return nil -} - -type transactionContext struct { - model model.Context - service model.Service - serviceFramework model.Framework - request model.Request - requestSocket model.RequestSocket - response model.Response -} - -func (c *transactionContext) modelContext() *model.Context { - switch { - case c.model.Request != nil: - case c.model.Response != nil: - case c.model.Service != nil: - case c.model.User != nil: - case len(c.model.Tags) != 0: - default: - return nil - } - return &c.model -} - -func (c *transactionContext) setFramework(name, version string) { - if name == "" { - return - } - c.serviceFramework.Name = truncate(name) - c.serviceFramework.Version = truncate(version) - c.service.Framework = &c.serviceFramework - c.model.Service = &c.service -} - -func (c *transactionContext) setHTTPMethod(method string) { - c.request.Method = truncate(method) - c.model.Request = &c.request -} - -func (c *transactionContext) setHTTPScheme(scheme string) { - c.request.URL.Protocol = truncate(scheme) - c.model.Request = &c.request -} - -func (c *transactionContext) setHTTPURL(httpURL string) error { - u, err := url.Parse(httpURL) - if err != nil { - return err - } - // http.url is typically a relative URL, i.e. missing - // the scheme and host. Don't override those parts of - // the URL if they're empty, as they may be set by - // other attributes. - if u.Scheme != "" { - c.request.URL.Protocol = truncate(u.Scheme) - } - if hostname := u.Hostname(); hostname != "" { - c.request.URL.Hostname = truncate(hostname) - } - if port := u.Port(); port != "" { - c.request.URL.Port = truncate(u.Port()) - } - c.request.URL.Path = truncate(u.Path) - c.request.URL.Search = truncate(u.RawQuery) - c.request.URL.Hash = truncate(u.Fragment) - c.model.Request = &c.request - return nil -} - -func (c *transactionContext) setHTTPHost(hostport string) { - url := url.URL{Host: hostport} - c.request.URL.Hostname = truncate(url.Hostname()) - c.request.URL.Port = truncate(url.Port()) - c.model.Request = &c.request -} - -func (c *transactionContext) setHTTPHostname(hostname string) { - c.request.URL.Hostname = truncate(hostname) - c.model.Request = &c.request -} - -func (c *transactionContext) setHTTPVersion(version string) { - c.request.HTTPVersion = truncate(version) - c.model.Request = &c.request -} - -func (c *transactionContext) setHTTPRemoteAddr(remoteAddr string) { - c.requestSocket.RemoteAddress = truncate(remoteAddr) - c.request.Socket = &c.requestSocket - c.model.Request = &c.request -} - -func (c *transactionContext) setHTTPRequestHeader(k string, v ...string) { - for i := range v { - v[i] = truncate(v[i]) - } - c.request.Headers = append(c.request.Headers, model.Header{Key: truncate(k), Values: v}) - c.model.Request = &c.request -} - -func (c *transactionContext) setHTTPStatusCode(statusCode int) { - c.response.StatusCode = statusCode - c.model.Response = &c.response -} - -type spanContext struct { - model model.SpanContext - http model.HTTPSpanContext - httpURL url.URL - db model.DatabaseSpanContext - destination model.DestinationSpanContext - destinationService model.DestinationServiceSpanContext -} - -func (c *spanContext) modelContext() *model.SpanContext { - switch { - case c.model.HTTP != nil: - case c.model.Database != nil: - case c.model.Destination != nil: - case len(c.model.Tags) != 0: - default: - return nil - } - return &c.model -} - -func (c *spanContext) setHTTPStatusCode(statusCode int) { - c.http.StatusCode = statusCode - c.model.HTTP = &c.http -} - -func (c *spanContext) setHTTPURL(httpURL string) error { - u, err := url.Parse(httpURL) - if err != nil { - return err - } - // http.url may be a relative URL (http.target), - // i.e. missing the scheme and host. Don't override - // those parts of the URL if they're empty, as they - // may be set by other attributes. - if u.Scheme != "" { - c.httpURL.Scheme = truncate(u.Scheme) - } - if u.Host != "" { - c.httpURL.Host = truncate(u.Host) - } - c.httpURL.Path = truncate(u.Path) - c.httpURL.RawQuery = truncate(u.RawQuery) - c.httpURL.Fragment = truncate(u.Fragment) - c.http.URL = &c.httpURL - c.model.HTTP = &c.http - return nil -} - -func (c *spanContext) setHTTPScheme(httpScheme string) { - c.httpURL.Scheme = truncate(httpScheme) - c.http.URL = &c.httpURL - c.model.HTTP = &c.http -} - -func (c *spanContext) setHTTPHost(httpHost string) { - c.httpURL.Host = truncate(httpHost) - c.http.URL = &c.httpURL - c.model.HTTP = &c.http -} - -func (c *spanContext) setDatabaseType(dbType string) { - c.db.Type = truncate(dbType) - c.model.Database = &c.db -} - -func (c *spanContext) setDatabaseInstance(dbInstance string) { - c.db.Instance = truncate(dbInstance) - c.model.Database = &c.db -} - -func (c *spanContext) setDatabaseStatement(dbStatement string) { - c.db.Statement = truncate(dbStatement) - c.model.Database = &c.db -} - -func (c *spanContext) setDatabaseUser(dbUser string) { - c.db.User = truncate(dbUser) - c.model.Database = &c.db -} - -func (c *spanContext) setDestinationAddress(address string, port int) { - c.destination.Address = truncate(address) - c.destination.Port = port - c.model.Destination = &c.destination -} - -func (c *spanContext) setDestinationService(name, resource string) { - c.destinationService.Name = truncate(name) - c.destinationService.Resource = truncate(resource) - c.destination.Service = &c.destinationService - c.model.Destination = &c.destination -} - -func schemeDefaultPort(scheme string) int { - switch scheme { - case "http": - return 80 - case "https": - return 443 - } - return 0 -} - -func spanStatusOutcome(status ptrace.SpanStatus) string { - switch status.Code() { - case ptrace.StatusCodeOk: - return "success" - case ptrace.StatusCodeError: - return "failure" - } - // Outcome will be set by the server. - return "" -} diff --git a/exporter/elasticexporter/internal/translator/elastic/traces_test.go b/exporter/elasticexporter/internal/translator/elastic/traces_test.go deleted file mode 100644 index 481dd774b482..000000000000 --- a/exporter/elasticexporter/internal/translator/elastic/traces_test.go +++ /dev/null @@ -1,547 +0,0 @@ -// Copyright 2020, OpenTelemetry 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 elastic_test - -import ( - "strings" - "testing" - "time" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "go.elastic.co/apm/model" - "go.elastic.co/apm/transport/transporttest" - "go.elastic.co/fastjson" - "go.opentelemetry.io/collector/pdata/pcommon" - "go.opentelemetry.io/collector/pdata/ptrace" - - "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter/internal/translator/elastic" -) - -func TestEncodeSpan(t *testing.T) { - var w fastjson.Writer - var recorder transporttest.RecorderTransport - assert.NoError(t, elastic.EncodeResourceMetadata(pcommon.NewResource(), &w)) - - traceID := model.TraceID{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16} - rootTransactionID := model.SpanID{1, 1, 1, 1, 1, 1, 1, 1} - clientSpanID := model.SpanID{2, 2, 2, 2, 2, 2, 2, 2} - serverTransactionID := model.SpanID{3, 3, 3, 3, 3, 3, 3, 3} - - startTime := time.Unix(123, 0).UTC() - endTime := startTime.Add(time.Millisecond * 5) - - rootSpan := ptrace.NewSpan() - rootSpan.SetSpanID(pcommon.NewSpanID(rootTransactionID)) - rootSpan.SetName("root_span") - rootSpan.Attributes().InsertString("string.attr", "string_value") - rootSpan.Attributes().InsertInt("int.attr", 123) - rootSpan.Attributes().InsertDouble("double.attr", 123.456) - rootSpan.Attributes().InsertBool("bool.attr", true) - - clientSpan := ptrace.NewSpan() - clientSpan.SetSpanID(pcommon.NewSpanID(clientSpanID)) - clientSpan.SetParentSpanID(pcommon.NewSpanID(rootTransactionID)) - clientSpan.SetKind(ptrace.SpanKindClient) - clientSpan.SetName("client_span") - clientSpan.Status().SetCode(ptrace.StatusCodeError) - clientSpan.Attributes().InsertString("string.attr", "string_value") - clientSpan.Attributes().InsertInt("int.attr", 123) - clientSpan.Attributes().InsertDouble("double.attr", 123.456) - clientSpan.Attributes().InsertBool("bool.attr", true) - - serverSpan := ptrace.NewSpan() - serverSpan.SetSpanID(pcommon.NewSpanID(serverTransactionID)) - serverSpan.SetParentSpanID(pcommon.NewSpanID(clientSpanID)) - serverSpan.SetKind(ptrace.SpanKindServer) - serverSpan.SetName("server_span") - serverSpan.Status().SetCode(ptrace.StatusCodeOk) - - for _, span := range []ptrace.Span{rootSpan, clientSpan, serverSpan} { - span.SetTraceID(pcommon.NewTraceID(traceID)) - span.SetStartTimestamp(pcommon.NewTimestampFromTime(startTime)) - span.SetEndTimestamp(pcommon.NewTimestampFromTime(endTime)) - } - - for _, span := range []ptrace.Span{rootSpan, clientSpan, serverSpan} { - err := elastic.EncodeSpan(span, pcommon.NewInstrumentationScope(), pcommon.NewResource(), &w) - require.NoError(t, err) - } - sendStream(t, &w, &recorder) - - payloads := recorder.Payloads() - assert.Equal(t, []model.Transaction{{ - TraceID: traceID, - ID: rootTransactionID, - Timestamp: model.Time(startTime), - Duration: 5.0, - Name: "root_span", - Type: "unknown", - Context: &model.Context{ - Tags: model.IfaceMap{{ - Key: "bool_attr", - Value: true, - }, { - Key: "double_attr", - Value: 123.456, - }, { - Key: "int_attr", - Value: float64(123), - }, { - Key: "string_attr", - Value: "string_value", - }}, - }, - }, { - TraceID: traceID, - ID: serverTransactionID, - ParentID: clientSpanID, - Timestamp: model.Time(startTime), - Duration: 5.0, - Name: "server_span", - Type: "unknown", - Result: "OK", - Outcome: "success", - }}, payloads.Transactions) - - assert.Equal(t, []model.Span{{ - TraceID: traceID, - ID: clientSpanID, - ParentID: rootTransactionID, - Timestamp: model.Time(startTime), - Duration: 5.0, - Name: "client_span", - Type: "app", - Context: &model.SpanContext{ - Tags: model.IfaceMap{{ - Key: "bool_attr", - Value: true, - }, { - Key: "double_attr", - Value: 123.456, - }, { - Key: "int_attr", - Value: float64(123), - }, { - Key: "string_attr", - Value: "string_value", - }}, - }, - Outcome: "failure", - }}, payloads.Spans) - - assert.Empty(t, payloads.Errors) -} - -func TestEncodeSpanStatus(t *testing.T) { - testStatusCode := func(t *testing.T, statusCode ptrace.StatusCode, expectedResult, expectedOutcome string) { - t.Helper() - - var w fastjson.Writer - var recorder transporttest.RecorderTransport - assert.NoError(t, elastic.EncodeResourceMetadata(pcommon.NewResource(), &w)) - span := ptrace.NewSpan() - span.SetTraceID(pcommon.NewTraceID([16]byte{1})) - span.SetSpanID(pcommon.NewSpanID([8]byte{1})) - span.SetName("span") - - if statusCode >= 0 { - span.Status().SetCode(statusCode) - } - - require.NoError(t, elastic.EncodeSpan(span, pcommon.NewInstrumentationScope(), pcommon.NewResource(), &w)) - sendStream(t, &w, &recorder) - payloads := recorder.Payloads() - require.Len(t, payloads.Transactions, 1) - assert.Equal(t, expectedResult, payloads.Transactions[0].Result) - assert.Equal(t, expectedOutcome, payloads.Transactions[0].Outcome) - } - - testStatusCode(t, -1, "", "") - testStatusCode(t, ptrace.StatusCodeUnset, "", "") - testStatusCode(t, ptrace.StatusCodeOk, "OK", "success") - testStatusCode(t, ptrace.StatusCodeError, "Error", "failure") -} - -func TestEncodeSpanTruncation(t *testing.T) { - span := ptrace.NewSpan() - span.SetName(strings.Repeat("x", 1300)) - - var w fastjson.Writer - var recorder transporttest.RecorderTransport - assert.NoError(t, elastic.EncodeResourceMetadata(pcommon.NewResource(), &w)) - require.NoError(t, elastic.EncodeSpan(span, pcommon.NewInstrumentationScope(), pcommon.NewResource(), &w)) - sendStream(t, &w, &recorder) - - payloads := recorder.Payloads() - require.Len(t, payloads.Transactions, 1) - assert.Equal(t, strings.Repeat("x", 1024), payloads.Transactions[0].Name) -} - -func TestTransactionHTTPRequestURL(t *testing.T) { - test := func(t *testing.T, expectedFull string, attrs map[string]interface{}) { - transaction := transactionWithAttributes(t, attrs) - assert.Equal(t, expectedFull, transaction.Context.Request.URL.Full) - } - t.Run("scheme_host_target", func(t *testing.T) { - test(t, "https://testing.invalid:80/foo?bar", map[string]interface{}{ - "http.scheme": "https", - "http.host": "testing.invalid:80", - "http.target": "/foo?bar", - }) - }) - t.Run("scheme_servername_nethostport_target", func(t *testing.T) { - test(t, "https://testing.invalid:80/foo?bar", map[string]interface{}{ - "http.scheme": "https", - "http.server_name": "testing.invalid", - "net.host.port": 80, - "http.target": "/foo?bar", - }) - }) - t.Run("scheme_nethostname_nethostport_target", func(t *testing.T) { - test(t, "https://testing.invalid:80/foo?bar", map[string]interface{}{ - "http.scheme": "https", - "net.host.name": "testing.invalid", - "net.host.port": 80, - "http.target": "/foo?bar", - }) - }) - t.Run("http.url", func(t *testing.T) { - const httpURL = "https://testing.invalid:80/foo?bar" - test(t, httpURL, map[string]interface{}{ - "http.url": httpURL, - }) - }) - t.Run("host_no_port", func(t *testing.T) { - test(t, "https://testing.invalid/foo?bar", map[string]interface{}{ - "http.scheme": "https", - "http.host": "testing.invalid", - "http.target": "/foo?bar", - }) - }) - t.Run("ipv6_host_no_port", func(t *testing.T) { - test(t, "https://[::1]/foo?bar", map[string]interface{}{ - "http.scheme": "https", - "http.host": "[::1]", - "http.target": "/foo?bar", - }) - }) - - // Scheme is set to "http" if it can't be deduced from attributes. - t.Run("default_scheme", func(t *testing.T) { - test(t, "http://testing.invalid:80/foo?bar", map[string]interface{}{ - "http.host": "testing.invalid:80", - "http.target": "/foo?bar", - }) - }) -} - -func TestTransactionHTTPRequestURLInvalid(t *testing.T) { - transaction := transactionWithAttributes(t, map[string]interface{}{ - "http.url": "0.0.0.0:8081", - }) - require.NotNil(t, transaction.Context) - assert.Nil(t, transaction.Context.Request) - assert.Equal(t, model.IfaceMap{ - {Key: "http_url", Value: "0.0.0.0:8081"}, - }, transaction.Context.Tags) -} - -func TestTransactionHTTPRequestSocketRemoteAddr(t *testing.T) { - test := func(t *testing.T, expected string, attrs map[string]interface{}) { - transaction := transactionWithAttributes(t, attrs) - assert.Equal(t, expected, transaction.Context.Request.Socket.RemoteAddress) - } - t.Run("net.peer.ip_port", func(t *testing.T) { - test(t, "192.168.0.1:1234", map[string]interface{}{ - "http.url": "http://testing.invalid", - "net.peer.ip": "192.168.0.1", - "net.peer.port": 1234, - }) - }) - t.Run("net.peer.ip", func(t *testing.T) { - test(t, "192.168.0.1", map[string]interface{}{ - "http.url": "http://testing.invalid", - "net.peer.ip": "192.168.0.1", - }) - }) - t.Run("http.remote_addr", func(t *testing.T) { - test(t, "192.168.0.1:1234", map[string]interface{}{ - "http.url": "http://testing.invalid", - "http.remote_addr": "192.168.0.1:1234", - }) - }) - t.Run("http.remote_addr_no_port", func(t *testing.T) { - test(t, "192.168.0.1", map[string]interface{}{ - "http.url": "http://testing.invalid", - "http.remote_addr": "192.168.0.1", - }) - }) -} - -func TestTransactionHTTPRequestHTTPVersion(t *testing.T) { - transaction := transactionWithAttributes(t, map[string]interface{}{ - "http.flavor": "1.1", - }) - assert.Equal(t, "1.1", transaction.Context.Request.HTTPVersion) -} - -func TestTransactionHTTPRequestHTTPMethod(t *testing.T) { - transaction := transactionWithAttributes(t, map[string]interface{}{ - "http.method": "PATCH", - }) - assert.Equal(t, "PATCH", transaction.Context.Request.Method) -} - -func TestTransactionHTTPRequestUserAgent(t *testing.T) { - transaction := transactionWithAttributes(t, map[string]interface{}{ - "http.user_agent": "Foo/bar (baz)", - }) - assert.Equal(t, model.Headers{{ - Key: "User-Agent", - Values: []string{"Foo/bar (baz)"}, - }}, transaction.Context.Request.Headers) -} - -func TestTransactionHTTPRequestClientIP(t *testing.T) { - transaction := transactionWithAttributes(t, map[string]interface{}{ - "http.client_ip": "256.257.258.259", - }) - assert.Equal(t, model.Headers{{ - Key: "X-Forwarded-For", - Values: []string{"256.257.258.259"}, - }}, transaction.Context.Request.Headers) -} - -func TestTransactionHTTPResponseStatusCode(t *testing.T) { - transaction := transactionWithAttributes(t, map[string]interface{}{ - "http.status_code": 200, - }) - assert.Equal(t, 200, transaction.Context.Response.StatusCode) -} - -func TestSpanHTTPURL(t *testing.T) { - test := func(t *testing.T, expectedURL string, attrs map[string]interface{}) { - span := spanWithAttributes(t, attrs) - assert.Equal(t, expectedURL, span.Context.HTTP.URL.String()) - } - t.Run("http.url", func(t *testing.T) { - const httpURL = "https://testing.invalid:80/foo?bar" - test(t, httpURL, map[string]interface{}{ - "http.url": httpURL, - }) - }) - t.Run("scheme_host_target", func(t *testing.T) { - test(t, "https://testing.invalid:80/foo?bar", map[string]interface{}{ - "http.scheme": "https", - "http.host": "testing.invalid:80", - "http.target": "/foo?bar", - }) - }) - t.Run("scheme_netpeername_netpeerport_target", func(t *testing.T) { - test(t, "https://testing.invalid:80/foo?bar", map[string]interface{}{ - "http.scheme": "https", - "net.peer.name": "testing.invalid", - "net.peer.ip": "::1", // net.peer.name preferred - "net.peer.port": 80, - "http.target": "/foo?bar", - }) - }) - t.Run("scheme_netpeerip_netpeerport_target", func(t *testing.T) { - test(t, "https://[::1]:80/foo?bar", map[string]interface{}{ - "http.scheme": "https", - "net.peer.ip": "::1", - "net.peer.port": 80, - "http.target": "/foo?bar", - }) - }) - - // Scheme is set to "http" if it can't be deduced from attributes. - t.Run("default_scheme", func(t *testing.T) { - test(t, "http://testing.invalid:80/foo?bar", map[string]interface{}{ - "http.host": "testing.invalid:80", - "http.target": "/foo?bar", - }) - }) -} - -func TestSpanHTTPDestination(t *testing.T) { - test := func(t *testing.T, expectedAddr string, expectedPort int, expectedName string, expectedResource string, - attrs map[string]interface{}) { - span := spanWithAttributes(t, attrs) - assert.Equal(t, &model.DestinationSpanContext{ - Address: expectedAddr, - Port: expectedPort, - Service: &model.DestinationServiceSpanContext{ - Type: "external", - Name: expectedName, - Resource: expectedResource, - }, - }, span.Context.Destination) - } - t.Run("url_default_port_specified", func(t *testing.T) { - test(t, "testing.invalid", 443, "https://testing.invalid", "testing.invalid:443", map[string]interface{}{ - "http.url": "https://testing.invalid:443/foo?bar", - }) - }) - t.Run("url_port_scheme", func(t *testing.T) { - test(t, "testing.invalid", 443, "https://testing.invalid", "testing.invalid:443", map[string]interface{}{ - "http.url": "https://testing.invalid/foo?bar", - }) - }) - t.Run("url_non_default_port", func(t *testing.T) { - test(t, "testing.invalid", 444, "https://testing.invalid:444", "testing.invalid:444", map[string]interface{}{ - "http.url": "https://testing.invalid:444/foo?bar", - }) - }) - t.Run("scheme_host_target", func(t *testing.T) { - test(t, "testing.invalid", 444, "https://testing.invalid:444", "testing.invalid:444", map[string]interface{}{ - "http.scheme": "https", - "http.host": "testing.invalid:444", - "http.target": "/foo?bar", - }) - }) - t.Run("scheme_netpeername_nethostport_target", func(t *testing.T) { - test(t, "::1", 444, "https://[::1]:444", "[::1]:444", map[string]interface{}{ - "http.scheme": "https", - "net.peer.ip": "::1", - "net.peer.port": 444, - "http.target": "/foo?bar", - }) - }) -} - -func TestSpanHTTPURLInvalid(t *testing.T) { - span := spanWithAttributes(t, map[string]interface{}{ - "http.url": "0.0.0.0:8081", - }) - require.NotNil(t, span.Context) - assert.Nil(t, span.Context.HTTP) - assert.Equal(t, model.IfaceMap{ - {Key: "http_url", Value: "0.0.0.0:8081"}, - }, span.Context.Tags) -} - -func TestSpanHTTPStatusCode(t *testing.T) { - span := spanWithAttributes(t, map[string]interface{}{ - "http.status_code": 200, - }) - assert.Equal(t, 200, span.Context.HTTP.StatusCode) -} - -func TestSpanDatabaseContext(t *testing.T) { - // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/database.md#mysql - connectionString := "Server=shopdb.example.com;Database=ShopDb;Uid=billing_user;TableCache=true;UseCompression=True;MinimumPoolSize=10;MaximumPoolSize=50;" - span := spanWithAttributes(t, map[string]interface{}{ - "db.system": "mysql", - "db.connection_string": connectionString, - "db.user": "billing_user", - "db.name": "ShopDb", - "db.statement": "SELECT * FROM orders WHERE order_id = 'o4711'", - "net.peer.name": "shopdb.example.com", - "net.peer.ip": "192.0.2.12", - "net.peer.port": 3306, - "net.transport": "IP.TCP", - }) - - assert.Equal(t, "db", span.Type) - assert.Equal(t, "mysql", span.Subtype) - assert.Equal(t, "", span.Action) - - assert.Equal(t, &model.DatabaseSpanContext{ - Type: "mysql", - Instance: "ShopDb", - Statement: "SELECT * FROM orders WHERE order_id = 'o4711'", - User: "billing_user", - }, span.Context.Database) - - assert.Equal(t, model.IfaceMap{ - {Key: "db_connection_string", Value: connectionString}, - {Key: "net_transport", Value: "IP.TCP"}, - }, span.Context.Tags) - - assert.Equal(t, &model.DestinationSpanContext{ - Address: "shopdb.example.com", - Port: 3306, - Service: &model.DestinationServiceSpanContext{ - Type: "db", - Name: "mysql", - Resource: "mysql", - }, - }, span.Context.Destination) -} - -func TestInstrumentationLibrary(t *testing.T) { - var w fastjson.Writer - var recorder transporttest.RecorderTransport - - span := ptrace.NewSpan() - span.SetName("root_span") - - library := pcommon.NewInstrumentationScope() - library.SetName("library-name") - library.SetVersion("1.2.3") - - resource := pcommon.NewResource() - assert.NoError(t, elastic.EncodeResourceMetadata(resource, &w)) - assert.NoError(t, elastic.EncodeSpan(span, library, resource, &w)) - sendStream(t, &w, &recorder) - - payloads := recorder.Payloads() - require.Len(t, payloads.Transactions, 1) - assert.Equal(t, &model.Context{ - Service: &model.Service{ - Framework: &model.Framework{ - Name: "library-name", - Version: "1.2.3", - }, - }, - }, payloads.Transactions[0].Context) -} - -func transactionWithAttributes(t *testing.T, attrs map[string]interface{}) model.Transaction { - var w fastjson.Writer - var recorder transporttest.RecorderTransport - - span := ptrace.NewSpan() - pcommon.NewMapFromRaw(attrs).CopyTo(span.Attributes()) - - resource := pcommon.NewResource() - assert.NoError(t, elastic.EncodeResourceMetadata(resource, &w)) - assert.NoError(t, elastic.EncodeSpan(span, pcommon.NewInstrumentationScope(), resource, &w)) - sendStream(t, &w, &recorder) - - payloads := recorder.Payloads() - require.Len(t, payloads.Transactions, 1) - return payloads.Transactions[0] -} - -func spanWithAttributes(t *testing.T, attrs map[string]interface{}) model.Span { - var w fastjson.Writer - var recorder transporttest.RecorderTransport - - span := ptrace.NewSpan() - span.SetParentSpanID(pcommon.NewSpanID([8]byte{1})) - pcommon.NewMapFromRaw(attrs).CopyTo(span.Attributes()) - - resource := pcommon.NewResource() - assert.NoError(t, elastic.EncodeResourceMetadata(resource, &w)) - assert.NoError(t, elastic.EncodeSpan(span, pcommon.NewInstrumentationScope(), resource, &w)) - sendStream(t, &w, &recorder) - - payloads := recorder.Payloads() - require.Len(t, payloads.Spans, 1) - return payloads.Spans[0] -} diff --git a/exporter/elasticexporter/internal/translator/elastic/utils.go b/exporter/elasticexporter/internal/translator/elastic/utils.go deleted file mode 100644 index c43a46474e26..000000000000 --- a/exporter/elasticexporter/internal/translator/elastic/utils.go +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2020, OpenTelemetry 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 elastic contains an opentelemetry-collector exporter -// for Elastic APM. -package elastic // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter/internal/translator/elastic" - -import ( - "regexp" - "strings" - - "go.opentelemetry.io/collector/pdata/pcommon" -) - -var ( - serviceNameInvalidRegexp = regexp.MustCompile("[^a-zA-Z0-9 _-]") - labelKeyReplacer = strings.NewReplacer(`.`, `_`, `*`, `_`, `"`, `_`) -) - -func ifaceAttributeValue(v pcommon.Value) interface{} { - switch v.Type() { - case pcommon.ValueTypeString: - return truncate(v.StringVal()) - case pcommon.ValueTypeInt: - return v.IntVal() - case pcommon.ValueTypeDouble: - return v.DoubleVal() - case pcommon.ValueTypeBool: - return v.BoolVal() - } - return nil -} - -func cleanServiceName(name string) string { - return serviceNameInvalidRegexp.ReplaceAllString(truncate(name), "_") -} - -func cleanLabelKey(k string) string { - return labelKeyReplacer.Replace(truncate(k)) -} - -func truncate(s string) string { - const maxRunes = 1024 - var j int - for i := range s { - if j == maxRunes { - return s[:i] - } - j++ - } - return s -} diff --git a/exporter/elasticexporter/internal/translator/elastic/utils_test.go b/exporter/elasticexporter/internal/translator/elastic/utils_test.go deleted file mode 100644 index 3ec7792df944..000000000000 --- a/exporter/elasticexporter/internal/translator/elastic/utils_test.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2020, OpenTelemetry 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 elastic_test - -import ( - "bytes" - "compress/zlib" - "context" - "testing" - - "github.com/stretchr/testify/require" - "go.elastic.co/apm/transport" - "go.elastic.co/fastjson" -) - -func sendStream(t *testing.T, w *fastjson.Writer, transport transport.Transport) { - var buf bytes.Buffer - zw, err := zlib.NewWriterLevel(&buf, zlib.DefaultCompression) - require.NoError(t, err) - _, err = zw.Write(w.Bytes()) - require.NoError(t, err) - require.NoError(t, zw.Close()) - require.NoError(t, transport.SendStream(context.Background(), &buf)) -} diff --git a/exporter/elasticexporter/testdata/config.yaml b/exporter/elasticexporter/testdata/config.yaml deleted file mode 100644 index 792fdb3c131e..000000000000 --- a/exporter/elasticexporter/testdata/config.yaml +++ /dev/null @@ -1,20 +0,0 @@ -receivers: - nop: - -processors: - nop: - -exporters: - elastic: - apm_server_url: https://elastic.example.com - elastic/customname: - apm_server_url: https://elastic.example.com - api_key: RTNxMjlXNEJt - secret_token: hunter2 - -service: - pipelines: - traces: - receivers: [nop] - processors: [nop] - exporters: [elastic] diff --git a/exporter/honeycombexporter/Makefile b/exporter/honeycombexporter/Makefile deleted file mode 100644 index ded7a36092dc..000000000000 --- a/exporter/honeycombexporter/Makefile +++ /dev/null @@ -1 +0,0 @@ -include ../../Makefile.Common diff --git a/exporter/honeycombexporter/README.md b/exporter/honeycombexporter/README.md deleted file mode 100644 index 5a927d76dfa6..000000000000 --- a/exporter/honeycombexporter/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# Honeycomb Exporter -# Deprecated Honeycomb Exporter -| Status | | -| ------------------------ |------------------| -| Stability | [deprecated] | -| Supported pipeline types | traces | -| Distributions | [contrib] | - -**NOTE:** Honeycomb now supports OTLP ingest directly. This means you can use an [OTLP](https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter/otlpexporter) exporter and no longer need this exporter to send data to Honeycomb. - -This exporter supports sending trace data to [Honeycomb](https://www.honeycomb.io). - -The following configuration options are supported: - -* `api_key` (Required): This is the API key (also called Write Key) for your Honeycomb account. -* `dataset` (Required): The Honeycomb dataset that you want to send events to. -* `api_url` (Optional): You can set the hostname to send events to. Useful for debugging, defaults to `https://api.honeycomb.io` -* `sample_rate` (Optional): Constant sample rate. Can be used to send 1 / x events to Honeycomb. Defaults to 1 (always sample). -* `sample_rate_attribute` (Optional): The name of an attribute that contains the sample_rate for each span. If the attribute is on the span, it takes precedence over the static sample_rate configuration -* `debug` (Optional): Set this to true to get debug logs from the honeycomb SDK. Defaults to false. -* `retry_on_failure` (Optional): - - `enabled` (default = true) - - `initial_interval` (default = 5s): Time to wait after the first failure before retrying; ignored if `enabled` is `false` - - `max_interval` (default = 30s): Is the upper bound on backoff; ignored if `enabled` is `false` - - `max_elapsed_time` (default = 120s): Is the maximum amount of time spent trying to send a batch; ignored if `enabled` is `false` -* `sending_queue` (Optional): - - `enabled` (default = true) - - `num_consumers` (default = 10): Number of consumers that dequeue batches; ignored if `enabled` is `false` - - `queue_size` (default = 5000): Maximum number of batches kept in memory before data; ignored if `enabled` is `false`; - -Example: - -```yaml -exporters: - honeycomb: - api_key: "my-api-key" - dataset: "my-dataset" - api_url: "https://api.testhost.io" - sample_rate: 25 - sample_rate_attribute: "hny.sample_rate" - debug: true - retry_on_failure: - enabled: true - initial_interval: 5 - max_interval: 30 - max_elapsed_time: 120 - sending_queue: - enabled: true - num_consumers: 10 - queue_size: 10000 -``` - -[deprecated]:https://github.com/open-telemetry/opentelemetry-collector#deprecated -[contrib]:https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib \ No newline at end of file diff --git a/exporter/honeycombexporter/config.go b/exporter/honeycombexporter/config.go deleted file mode 100644 index 42896d1f9291..000000000000 --- a/exporter/honeycombexporter/config.go +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2019 OpenTelemetry 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 honeycombexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/honeycombexporter" - -import ( - "fmt" - - "go.opentelemetry.io/collector/config" - "go.opentelemetry.io/collector/exporter/exporterhelper" -) - -type Config struct { - config.ExporterSettings `mapstructure:",squash"` - // APIKey is the authentication token associated with the Honeycomb account. - APIKey string `mapstructure:"api_key"` - // Dataset is the Honeycomb dataset to send events to. - Dataset string `mapstructure:"dataset"` - // API URL to use (defaults to https://api.honeycomb.io) - APIURL string `mapstructure:"api_url"` - // Deprecated - do not use. This will be removed in a future release. - SampleRate uint `mapstructure:"sample_rate"` - // The name of an attribute that contains the sample_rate for each span. - // If the attribute is on the span, it takes precedence over the static sample_rate configuration - SampleRateAttribute string `mapstructure:"sample_rate_attribute"` - // Debug enables more verbose logging from the Honeycomb SDK. It defaults to false. - Debug bool `mapstructure:"debug"` - // RetrySettings helps configure retry on traces which failed to send - exporterhelper.RetrySettings `mapstructure:"retry_on_failure"` - // QueueSettings enable queued processing - exporterhelper.QueueSettings `mapstructure:"sending_queue"` -} - -func (cfg *Config) Validate() error { - if err := cfg.QueueSettings.Validate(); err != nil { - return fmt.Errorf("`sending_queue` settings has invalid configuration: %w", err) - } - return nil -} diff --git a/exporter/honeycombexporter/config_test.go b/exporter/honeycombexporter/config_test.go deleted file mode 100644 index 6a65d854a78b..000000000000 --- a/exporter/honeycombexporter/config_test.go +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2019 OpenTelemetry 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 honeycombexporter - -import ( - "path/filepath" - "testing" - "time" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/component/componenttest" - "go.opentelemetry.io/collector/config" - "go.opentelemetry.io/collector/exporter/exporterhelper" - "go.opentelemetry.io/collector/service/servicetest" -) - -func TestLoadConfig(t *testing.T) { - factories, err := componenttest.NopFactories() - assert.Nil(t, err) - - factory := NewFactory() - factories.Exporters[typeStr] = factory - cfg, err := servicetest.LoadConfigAndValidate(filepath.Join("testdata", "config.yaml"), factories) - - require.NoError(t, err) - require.NotNil(t, cfg) - - assert.Equal(t, len(cfg.Exporters), 3) - - r0 := cfg.Exporters[config.NewComponentID(typeStr)] - assert.Equal(t, r0, factory.CreateDefaultConfig()) - - r1 := cfg.Exporters[config.NewComponentIDWithName(typeStr, "customname")].(*Config) - assert.Equal(t, r1, &Config{ - ExporterSettings: config.NewExporterSettings(config.NewComponentIDWithName(typeStr, "customname")), - APIKey: "test-apikey", - Dataset: "test-dataset", - APIURL: "https://api.testhost.io", - RetrySettings: exporterhelper.RetrySettings{ - Enabled: true, - InitialInterval: 10 * time.Second, - MaxInterval: 60 * time.Second, - MaxElapsedTime: 120 * time.Second, - }, - QueueSettings: exporterhelper.QueueSettings{ - Enabled: true, - NumConsumers: 1, - QueueSize: 1, - }, - }) - - r2 := cfg.Exporters[config.NewComponentIDWithName(typeStr, "sample_rate")].(*Config) - assert.Equal(t, r2, &Config{ - ExporterSettings: config.NewExporterSettings(config.NewComponentIDWithName(typeStr, "sample_rate")), - APIURL: "https://api.honeycomb.io", - SampleRate: 5, - SampleRateAttribute: "custom.sample_rate", - RetrySettings: exporterhelper.RetrySettings{ - Enabled: true, - InitialInterval: 10 * time.Second, - MaxInterval: 60 * time.Second, - MaxElapsedTime: 120 * time.Second, - }, - QueueSettings: exporterhelper.QueueSettings{ - Enabled: true, - NumConsumers: 1, - QueueSize: 1, - }, - }) -} diff --git a/exporter/honeycombexporter/factory.go b/exporter/honeycombexporter/factory.go deleted file mode 100644 index cc4ae89a509f..000000000000 --- a/exporter/honeycombexporter/factory.go +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2019 OpenTelemetry 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 honeycombexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/honeycombexporter" - -import ( - "context" - "sync" - - "go.opentelemetry.io/collector/component" - "go.opentelemetry.io/collector/config" - "go.opentelemetry.io/collector/exporter/exporterhelper" - "go.uber.org/zap" -) - -const ( - // The value of "type" key in configuration. - typeStr = "honeycomb" - // The stability level of the exporter. - stability = component.StabilityLevelDeprecated -) - -var once sync.Once - -// NewFactory creates a factory for Honeycomb exporter. -func NewFactory() component.ExporterFactory { - return component.NewExporterFactory( - typeStr, - createDefaultConfig, - component.WithTracesExporter(createTracesExporter, stability)) -} - -func logDeprecation(logger *zap.Logger) { - once.Do(func() { - logger.Warn("Honeycomb exporter is deprecated and will be removed in future versions.") - }) -} - -func createDefaultConfig() config.Exporter { - return &Config{ - ExporterSettings: config.NewExporterSettings(config.NewComponentID(typeStr)), - APIKey: "", - Dataset: "", - APIURL: "https://api.honeycomb.io", - SampleRateAttribute: "", - Debug: false, - RetrySettings: exporterhelper.NewDefaultRetrySettings(), - QueueSettings: exporterhelper.NewDefaultQueueSettings(), - } -} - -func createTracesExporter( - ctx context.Context, - set component.ExporterCreateSettings, - cfg config.Exporter, -) (component.TracesExporter, error) { - eCfg := cfg.(*Config) - exporter, err := newHoneycombTracesExporter(eCfg, set.Logger) - if err != nil { - return nil, err - } - - logDeprecation(set.Logger) - return exporterhelper.NewTracesExporterWithContext( - ctx, - set, - cfg, - exporter.pushTraceData, - exporterhelper.WithShutdown(exporter.Shutdown), - exporterhelper.WithRetry(eCfg.RetrySettings), - exporterhelper.WithQueue(eCfg.QueueSettings)) -} diff --git a/exporter/honeycombexporter/factory_test.go b/exporter/honeycombexporter/factory_test.go deleted file mode 100644 index 092660d25055..000000000000 --- a/exporter/honeycombexporter/factory_test.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2019 OpenTelemetry 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 honeycombexporter - -import ( - "context" - "path/filepath" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/component/componenttest" - "go.opentelemetry.io/collector/config" - "go.opentelemetry.io/collector/config/configtest" - "go.opentelemetry.io/collector/service/servicetest" -) - -func TestCreateDefaultConfig(t *testing.T) { - cfg := createDefaultConfig() - assert.NotNil(t, cfg, "failed to create default config") - assert.NoError(t, configtest.CheckConfigStruct(cfg)) -} - -func TestCreateTracesExporter(t *testing.T) { - factories, err := componenttest.NopFactories() - require.NoError(t, err) - factory := NewFactory() - factories.Exporters[typeStr] = factory - cfg, err := servicetest.LoadConfigAndValidate(filepath.Join("testdata", "config.yaml"), factories) - require.NoError(t, err) - - params := componenttest.NewNopExporterCreateSettings() - exporter, err := factory.CreateTracesExporter(context.Background(), params, cfg.Exporters[config.NewComponentIDWithName(typeStr, "customname")]) - assert.Nil(t, err) - assert.NotNil(t, exporter) -} - -func TestCreateMetricsExporter(t *testing.T) { - factories, err := componenttest.NopFactories() - require.NoError(t, err) - factory := NewFactory() - factories.Exporters[typeStr] = factory - cfg, err := servicetest.LoadConfigAndValidate(filepath.Join("testdata", "config.yaml"), factories) - require.NoError(t, err) - - params := componenttest.NewNopExporterCreateSettings() - exporter, err := factory.CreateMetricsExporter(context.Background(), params, cfg.Exporters[config.NewComponentIDWithName(typeStr, "customname")]) - assert.NotNil(t, err) - assert.Nil(t, exporter) -} diff --git a/exporter/honeycombexporter/go.mod b/exporter/honeycombexporter/go.mod deleted file mode 100644 index 78d12d853ad0..000000000000 --- a/exporter/honeycombexporter/go.mod +++ /dev/null @@ -1,53 +0,0 @@ -// Deprecated: honeycombexporter exporter is deprecated and will be removed in future versions. -module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/honeycombexporter - -go 1.18 - -require ( - github.com/google/go-cmp v0.5.8 - github.com/honeycombio/libhoney-go v1.16.0 - github.com/klauspost/compress v1.15.9 - github.com/stretchr/testify v1.8.0 - go.opentelemetry.io/collector v0.58.0 - go.opentelemetry.io/collector/pdata v0.58.0 - go.uber.org/multierr v1.8.0 - go.uber.org/zap v1.22.0 - google.golang.org/protobuf v1.28.1 -) - -require ( - github.com/cenkalti/backoff/v4 v4.1.3 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a // indirect - github.com/facebookgo/limitgroup v0.0.0-20150612190941-6abd8d71ec01 // indirect - github.com/facebookgo/muster v0.0.0-20150708232844-fd3d7953fd52 // indirect - github.com/fsnotify/fsnotify v1.5.4 // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/protobuf v1.5.2 // indirect - github.com/json-iterator/go v1.1.12 // indirect - github.com/knadh/koanf v1.4.2 // indirect - github.com/kr/pretty v0.3.0 // indirect - github.com/mitchellh/copystructure v1.2.0 // indirect - github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/mitchellh/reflectwalk v1.0.2 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/pelletier/go-toml v1.9.4 // indirect - github.com/pkg/errors v0.9.1 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect - github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect - go.opencensus.io v0.23.0 // indirect - go.opentelemetry.io/otel v1.9.0 // indirect - go.opentelemetry.io/otel/metric v0.31.0 // indirect - go.opentelemetry.io/otel/trace v1.9.0 // indirect - go.uber.org/atomic v1.9.0 // indirect - golang.org/x/net v0.0.0-20220225172249-27dd8689420f // indirect - golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect - golang.org/x/text v0.3.7 // indirect - google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa // indirect - google.golang.org/grpc v1.48.0 // indirect - gopkg.in/alexcesaro/statsd.v2 v2.0.0 // indirect - gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect -) diff --git a/exporter/honeycombexporter/go.sum b/exporter/honeycombexporter/go.sum deleted file mode 100644 index a7f4fa05771c..000000000000 --- a/exporter/honeycombexporter/go.sum +++ /dev/null @@ -1,353 +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/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= -github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/aws/aws-sdk-go-v2 v1.9.2/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= -github.com/aws/aws-sdk-go-v2/config v1.8.3/go.mod h1:4AEiLtAb8kLs7vgw2ZV3p2VZ1+hBavOc84hqxVNpCyw= -github.com/aws/aws-sdk-go-v2/credentials v1.4.3/go.mod h1:FNNC6nQZQUuyhq5aE5c7ata8o9e4ECGmS4lAXC7o1mQ= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.6.0/go.mod h1:gqlclDEZp4aqJOancXK6TN24aKhT0W0Ae9MHk3wzTMM= -github.com/aws/aws-sdk-go-v2/internal/ini v1.2.4/go.mod h1:ZcBrrI3zBKlhGFNYWvju0I3TR93I7YIgAfy82Fh4lcQ= -github.com/aws/aws-sdk-go-v2/service/appconfig v1.4.2/go.mod h1:FZ3HkCe+b10uFZZkFdvf98LHW21k49W8o8J366lqVKY= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.3.2/go.mod h1:72HRZDLMtmVQiLG2tLfQcaWLCssELvGl+Zf2WVxMmR8= -github.com/aws/aws-sdk-go-v2/service/sso v1.4.2/go.mod h1:NBvT9R1MEF+Ud6ApJKM0G+IkPchKS7p7c2YPKwHmBOk= -github.com/aws/aws-sdk-go-v2/service/sts v1.7.2/go.mod h1:8EzeIqfWt2wWT4rJVu3f21TfrhJ8AEMzVybRNSb/b4g= -github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= -github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a h1:yDWHCSQ40h88yih2JAcL6Ls/kVkSE8GFACTGVnMPruw= -github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a/go.mod h1:7Ga40egUymuWXxAe151lTNnCv97MddSOVsjpPPkityA= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= -github.com/facebookgo/limitgroup v0.0.0-20150612190941-6abd8d71ec01 h1:IeaD1VDVBPlx3viJT9Md8if8IxxJnO+x0JCGb054heg= -github.com/facebookgo/limitgroup v0.0.0-20150612190941-6abd8d71ec01/go.mod h1:ypD5nozFk9vcGw1ATYefw6jHe/jZP++Z15/+VTMcWhc= -github.com/facebookgo/muster v0.0.0-20150708232844-fd3d7953fd52 h1:a4DFiKFJiDRGFD1qIcqGLX/WlUMD9dyLSLDt+9QZgt8= -github.com/facebookgo/muster v0.0.0-20150708232844-fd3d7953fd52/go.mod h1:yIquW87NGRw1FU5p5lEkpnt/QxoH5uPAOUlOVkAUuMg= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= -github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc= -github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= -github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= -github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -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/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= -github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY= -github.com/hashicorp/go-retryablehttp v0.5.4/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/vault/api v1.0.4/go.mod h1:gDcqh3WGcR1cpF5AJz/B1UFheUEneMoIospckxBxk6Q= -github.com/hashicorp/vault/sdk v0.1.13/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M= -github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/honeycombio/libhoney-go v1.16.0 h1:kPpqoz6vbOzgp7jC6SR7SkNj7rua7rgxvznI6M3KdHc= -github.com/honeycombio/libhoney-go v1.16.0/go.mod h1:izP4fbREuZ3vqC4HlCAmPrcPT9gxyxejRjGtCYpmBn0= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= -github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= -github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.15.7/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= -github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY= -github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= -github.com/knadh/koanf v1.4.2 h1:2itp+cdC6miId4pO4Jw7c/3eiYD26Z/Sz3ATJMwHxIs= -github.com/knadh/koanf v1.4.2/go.mod h1:4NCo0q4pmU398vF9vq2jStF9MWQZ8JEDcDMHlDCr4h0= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= -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/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= -github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= -github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= -github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= -github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/npillmayer/nestext v0.1.3/go.mod h1:h2lrijH8jpicr25dFY+oAJLyzlya6jhnuG+zWp9L0Uk= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= -github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= -github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rhnvrm/simples3 v0.6.1/go.mod h1:Y+3vYm2V7Y4VijFoJHHTrja6OgPrJ2cBti8dPGkC3sA= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU= -github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= -github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= -github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/collector v0.58.0 h1:ofl5qa+vTV69PC9NaZKQjE7MP/49iclDKRppl00WgZg= -go.opentelemetry.io/collector v0.58.0/go.mod h1:U3TE477WDi3CYhmE7JGinnpIg8qMH1KCBkRmk3BxKyw= -go.opentelemetry.io/collector/pdata v0.58.0 h1:SKWw4vjd6ZjCuvsCvEzqwBaxvov4YbXnnXkc9C4xMqM= -go.opentelemetry.io/collector/pdata v0.58.0/go.mod h1:iMv7Pz+hRthi30rkYkwLVusxQ94GU4pPJgFq7gjGcBk= -go.opentelemetry.io/otel v1.9.0 h1:8WZNQFIB2a71LnANS9JeyidJKKGOOremcUtb/OtHISw= -go.opentelemetry.io/otel v1.9.0/go.mod h1:np4EoPGzoPs3O67xUVNoPPcmSvsfOxNlNA4F4AC+0Eo= -go.opentelemetry.io/otel/metric v0.31.0 h1:6SiklT+gfWAwWUR0meEMxQBtihpiEs4c+vL9spDTqUs= -go.opentelemetry.io/otel/metric v0.31.0/go.mod h1:ohmwj9KTSIeBnDBm/ZwH2PSZxZzoOaG2xZeekTRzL5A= -go.opentelemetry.io/otel/sdk v1.9.0 h1:LNXp1vrr83fNXTHgU8eO89mhzxb/bbWAsHG6fNf3qWo= -go.opentelemetry.io/otel/trace v1.9.0 h1:oZaCNJUjWcg60VXWee8lJKlqhPbXAPB51URuR47pQYc= -go.opentelemetry.io/otel/trace v1.9.0/go.mod h1:2737Q0MuG8q1uILYm2YYVkAyLtOofiTNGg6VODnOiPo= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/zap v1.22.0 h1:Zcye5DUgBloQ9BaT4qc9BnjOFog5TvBSAGkJ3Nf70c0= -go.uber.org/zap v1.22.0/go.mod h1:H4siCOZOrAolnUPJEkfaSjDqyP+BDS0DdDWzwcgt3+U= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -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-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -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-20190108225652-1e06a53dbb7e/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/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/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/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/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-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -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-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa h1:I0YcKz0I7OAhddo7ya8kMnvprhcWM045PmkBdMO9zN0= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.48.0 h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w= -google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/alexcesaro/statsd.v2 v2.0.0 h1:FXkZSCZIH17vLCO5sO2UucTHsH9pc+17F6pl3JVCwMc= -gopkg.in/alexcesaro/statsd.v2 v2.0.0/go.mod h1:i0ubccKGzBVNBpdGV5MocxyA/XlLUJzA7SLonnE4drU= -gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= -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/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/exporter/honeycombexporter/honeycomb.go b/exporter/honeycombexporter/honeycomb.go deleted file mode 100644 index 3b3a83787ece..000000000000 --- a/exporter/honeycombexporter/honeycomb.go +++ /dev/null @@ -1,307 +0,0 @@ -// Copyright 2019 OpenTelemetry 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 honeycombexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/honeycombexporter" - -import ( - "context" - "time" - - "github.com/honeycombio/libhoney-go" - "github.com/honeycombio/libhoney-go/transmission" - "go.opentelemetry.io/collector/pdata/ptrace" - "go.uber.org/multierr" - "go.uber.org/zap" -) - -// User agent string to use when sending events to Honeycomb. -const ( - oTelCollectorUserAgentStr = "Honeycomb-OpenTelemetry-Collector" -) - -// honeycombExporter is the object that sends events to honeycomb. -type honeycombExporter struct { - builder *libhoney.Builder - onError func(error) - logger *zap.Logger - sampleRateAttribute string -} - -// event represents a honeycomb event. -type event struct { - ID string `json:"trace.span_id"` - TraceID string `json:"trace.trace_id"` - ParentID string `json:"trace.parent_id,omitempty"` - Name string `json:"name"` - Status string `json:"response.status_code,omitempty"` - DurationMilli float64 `json:"duration_ms"` -} - -// spanEvent represents an event attached to a specific span.¬ -type spanEvent struct { - Name string `json:"name"` - TraceID string `json:"trace.trace_id"` - ParentID string `json:"trace.parent_id,omitempty"` - ParentName string `json:"trace.parent_name,omitempty"` - AnnotationType string `json:"meta.annotation_type"` -} - -// link represents a link to a trace and span that lives elsewhere. -// TraceID and ParentID are used to identify the span with which the trace is associated -// We are modeling Links for now as child spans rather than properties of the event. -type link struct { - TraceID string `json:"trace.trace_id"` - ParentID string `json:"trace.parent_id,omitempty"` - LinkTraceID string `json:"trace.link.trace_id"` - LinkSpanID string `json:"trace.link.span_id"` - AnnotationType string `json:"meta.annotation_type"` -} - -// newHoneycombTracesExporter creates and returns a new honeycombExporter. It -// wraps the exporter in the component.TracesExporterOld helper method. -func newHoneycombTracesExporter(cfg *Config, logger *zap.Logger) (*honeycombExporter, error) { - libhoneyConfig := libhoney.Config{ - WriteKey: cfg.APIKey, - Dataset: cfg.Dataset, - APIHost: cfg.APIURL, - } - userAgent := oTelCollectorUserAgentStr - libhoney.UserAgentAddition = userAgent - - if cfg.Debug { - libhoneyConfig.Logger = &libhoney.DefaultLogger{} - } - - if err := libhoney.Init(libhoneyConfig); err != nil { - return nil, err - } - builder := libhoney.NewBuilder() - exporter := &honeycombExporter{ - builder: builder, - logger: logger, - onError: func(err error) { - logger.Warn(err.Error()) - }, - sampleRateAttribute: cfg.SampleRateAttribute, - } - - return exporter, nil -} - -// pushTraceData is the method called when trace data is available. It will be -// responsible for sending a batch of events. -func (e *honeycombExporter) pushTraceData(ctx context.Context, td ptrace.Traces) error { - var errs error - - // Run the error logger. This just listens for messages in the error - // response queue and writes them out using the logger. - ctx, cancel := context.WithCancel(ctx) - go e.RunErrorLogger(ctx, libhoney.TxResponses()) - defer cancel() - - rs := td.ResourceSpans() - for i := 0; i < rs.Len(); i++ { - rsSpan := rs.At(i) - - // Extract Resource attributes, they will be added to every span. - resourceAttrs := spanAttributesToMap(rsSpan.Resource().Attributes()) - - ils := rsSpan.ScopeSpans() - for j := 0; j < ils.Len(); j++ { - ilsSpan := ils.At(j) - spans := ilsSpan.Spans() - for k := 0; k < spans.Len(); k++ { - span := spans.At(k) - ev := e.builder.NewEvent() - - for k, v := range resourceAttrs { - ev.AddField(k, v) - } - - lib := ilsSpan.Scope() - if name := lib.Name(); name != "" { - ev.AddField("library.name", name) - } - if version := lib.Version(); version != "" { - ev.AddField("library.version", version) - } - - if attrs := spanAttributesToMap(span.Attributes()); attrs != nil { - for k, v := range attrs { - ev.AddField(k, v) - } - - e.addSampleRate(ev, attrs) - } - - ev.Timestamp = timestampToTime(span.StartTimestamp()) - startTime := timestampToTime(span.StartTimestamp()) - endTime := timestampToTime(span.EndTimestamp()) - - err := ev.Add(event{ - ID: getHoneycombSpanID(span.SpanID()), - TraceID: getHoneycombTraceID(span.TraceID()), - ParentID: getHoneycombSpanID(span.ParentSpanID()), - Name: span.Name(), - DurationMilli: float64(endTime.Sub(startTime)) / float64(time.Millisecond), - }) - if err != nil { - errs = multierr.Append(errs, err) - } - - e.sendMessageEvents(span, resourceAttrs) - e.sendSpanLinks(span) - - ev.AddField("span_kind", getSpanKind(span.Kind())) - ev.AddField("status.code", getStatusCode(span.Status())) - ev.AddField("status.message", getStatusMessage(span.Status())) - - errs = multierr.Append(errs, ev.SendPresampled()) - } - } - } - - return errs -} - -func getSpanKind(kind ptrace.SpanKind) string { - switch kind { - case ptrace.SpanKindClient: - return "client" - case ptrace.SpanKindServer: - return "server" - case ptrace.SpanKindProducer: - return "producer" - case ptrace.SpanKindConsumer: - return "consumer" - case ptrace.SpanKindInternal: - return "internal" - case ptrace.SpanKindUnspecified: - fallthrough - default: - return "unspecified" - } -} - -// sendSpanLinks gets the list of links associated with this span and sends them as -// separate events to Honeycomb, with a span type "link". -func (e *honeycombExporter) sendSpanLinks(span ptrace.Span) { - links := span.Links() - - for i := 0; i < links.Len(); i++ { - l := links.At(i) - - ev := e.builder.NewEvent() - if err := ev.Add(link{ - TraceID: getHoneycombTraceID(span.TraceID()), - ParentID: getHoneycombSpanID(span.SpanID()), - LinkTraceID: getHoneycombTraceID(l.TraceID()), - LinkSpanID: getHoneycombSpanID(l.SpanID()), - AnnotationType: "link", - }); err != nil { - e.onError(err) - } - - attrs := spanAttributesToMap(l.Attributes()) - for k, v := range attrs { - ev.AddField(k, v) - } - e.addSampleRate(ev, attrs) - - if err := ev.SendPresampled(); err != nil { - e.onError(err) - } - } -} - -// sendMessageEvents gets the list of timeevents from the span and sends them as -// separate events to Honeycomb, with a span type "span_event". -func (e *honeycombExporter) sendMessageEvents(span ptrace.Span, resourceAttrs map[string]interface{}) { - timeEvents := span.Events() - - for i := 0; i < timeEvents.Len(); i++ { - event := timeEvents.At(i) - - ts := timestampToTime(event.Timestamp()) - name := event.Name() - attrs := spanAttributesToMap(event.Attributes()) - - // treat trace level fields as underlays with same keyed span attributes taking precedence. - ev := e.builder.NewEvent() - for k, v := range resourceAttrs { - ev.AddField(k, v) - } - - for k, v := range attrs { - ev.AddField(k, v) - } - e.addSampleRate(ev, attrs) - - ev.Timestamp = ts - if err := ev.Add(spanEvent{ - Name: name, - TraceID: getHoneycombTraceID(span.TraceID()), - ParentID: getHoneycombSpanID(span.SpanID()), - ParentName: span.Name(), - AnnotationType: "span_event", - }); err != nil { - e.onError(err) - } - if err := ev.SendPresampled(); err != nil { - e.onError(err) - } - } -} - -// Shutdown takes care of any cleanup tasks that need to be carried out. In -// this case, we close the honeycomb sdk which flushes any events still in the -// queue and closes any open channels between queues. -func (e *honeycombExporter) Shutdown(context.Context) error { - libhoney.Close() - return nil -} - -// RunErrorLogger consumes from the response queue, calling the onError callback -// when errors are encountered. -// -// This method will block until the passed context.Context is canceled, or until -// exporter.Close is called. -func (e *honeycombExporter) RunErrorLogger(ctx context.Context, responses chan transmission.Response) { - for { - select { - case r, ok := <-responses: - if !ok { - return - } - if r.Err != nil { - e.onError(r.Err) - } - case <-ctx.Done(): - return - } - } -} - -func (e *honeycombExporter) addSampleRate(event *libhoney.Event, attrs map[string]interface{}) { - if e.sampleRateAttribute != "" && attrs != nil { - if value, ok := attrs[e.sampleRateAttribute]; ok { - switch v := value.(type) { - case int64: - event.SampleRate = uint(v) - default: - return - } - } - } -} diff --git a/exporter/honeycombexporter/honeycomb_test.go b/exporter/honeycombexporter/honeycomb_test.go deleted file mode 100644 index 49c5eff77e2b..000000000000 --- a/exporter/honeycombexporter/honeycomb_test.go +++ /dev/null @@ -1,413 +0,0 @@ -// Copyright 2020 OpenTelemetry 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 honeycombexporter - -import ( - "context" - "encoding/json" - "errors" - "fmt" - "io" - "net/http" - "net/http/httptest" - "testing" - - "github.com/google/go-cmp/cmp" - "github.com/honeycombio/libhoney-go/transmission" - "github.com/klauspost/compress/zstd" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/component/componenttest" - "go.opentelemetry.io/collector/config" - "go.opentelemetry.io/collector/pdata/pcommon" - "go.opentelemetry.io/collector/pdata/ptrace" - "go.uber.org/zap" - "go.uber.org/zap/zapcore" - "go.uber.org/zap/zaptest/observer" -) - -type honeycombData struct { - Data map[string]interface{} `json:"data"` -} - -func testingServer(callback func(data []honeycombData)) *httptest.Server { - return httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) { - uncompressed, err := zstd.NewReader(req.Body) - if err != nil { - http.Error(rw, err.Error(), http.StatusInternalServerError) - return - } - defer req.Body.Close() - b, err := io.ReadAll(uncompressed) - if err != nil { - http.Error(rw, err.Error(), http.StatusInternalServerError) - return - } - - var data []honeycombData - err = json.Unmarshal(b, &data) - if err != nil { - http.Error(rw, err.Error(), http.StatusInternalServerError) - return - } - callback(data) - if _, err = rw.Write([]byte(`OK`)); err != nil { - http.Error(rw, err.Error(), http.StatusInternalServerError) - return - } - })) -} - -func testTracesExporter(td ptrace.Traces, t *testing.T, cfg *Config) []honeycombData { - var got []honeycombData - server := testingServer(func(data []honeycombData) { - got = append(got, data...) - }) - defer server.Close() - - cfg.APIURL = server.URL - - params := componenttest.NewNopExporterCreateSettings() - exporter, err := createTracesExporter(context.Background(), params, cfg) - require.NoError(t, err) - - ctx := context.Background() - err = exporter.ConsumeTraces(ctx, td) - require.NoError(t, err) - require.NoError(t, exporter.Shutdown(context.Background())) - - return got -} - -func baseConfig() *Config { - return &Config{ - ExporterSettings: config.NewExporterSettings(config.NewComponentID(typeStr)), - APIKey: "test", - Dataset: "test", - Debug: false, - SampleRateAttribute: "", - } -} - -func TestExporter(t *testing.T) { - td := ptrace.NewTraces() - rs := td.ResourceSpans().AppendEmpty() - rs.Resource().Attributes().InsertString("service.name", "test_service") - rs.Resource().Attributes().InsertString("A", "B") - rs.Resource().Attributes().InsertString("B", "C") - instrLibrarySpans := rs.ScopeSpans().AppendEmpty() - lib := instrLibrarySpans.Scope() - lib.SetName("my.custom.library") - lib.SetVersion("1.0.0") - - clientSpan := instrLibrarySpans.Spans().AppendEmpty() - clientSpan.SetTraceID(pcommon.NewTraceID([16]byte{0x01})) - clientSpan.SetSpanID(pcommon.NewSpanID([8]byte{0x03})) - clientSpan.SetParentSpanID(pcommon.NewSpanID([8]byte{0x02})) - clientSpan.SetName("client") - clientSpan.SetKind(ptrace.SpanKindClient) - clientSpanLink := clientSpan.Links().AppendEmpty() - clientSpanLink.SetTraceID(pcommon.NewTraceID([16]byte{0x04})) - clientSpanLink.SetSpanID(pcommon.NewSpanID([8]byte{0x05})) - clientSpanLink.Attributes().InsertInt("span_link_attr", 12345) - - serverSpan := instrLibrarySpans.Spans().AppendEmpty() - serverSpan.SetTraceID(pcommon.NewTraceID([16]byte{0x01})) - serverSpan.SetSpanID(pcommon.NewSpanID([8]byte{0x04})) - serverSpan.SetParentSpanID(pcommon.NewSpanID([8]byte{0x03})) - serverSpan.SetName("server") - serverSpan.SetKind(ptrace.SpanKindServer) - - rootSpan := instrLibrarySpans.Spans().AppendEmpty() - rootSpan.SetTraceID(pcommon.NewTraceID([16]byte{0x01})) - rootSpan.SetSpanID(pcommon.NewSpanID([8]byte{0x02})) - rootSpan.SetName("root") - rootSpan.SetKind(ptrace.SpanKindServer) - rootSpan.Attributes().InsertString("span_attr_name", "Span Attribute") - rootSpan.Attributes().InsertString("B", "D") - rootSpanEvent := rootSpan.Events().AppendEmpty() - rootSpanEvent.SetTimestamp(0) - rootSpanEvent.SetName("Some Description") - rootSpanEvent.Attributes().InsertString("attribute_name", "Hello MessageEvent") - rootSpanEvent.Attributes().InsertString("B", "D") - - got := testTracesExporter(td, t, baseConfig()) - want := []honeycombData{ - { - Data: map[string]interface{}{ - "meta.annotation_type": "link", - "span_link_attr": float64(12345), - "trace.trace_id": "01000000000000000000000000000000", - "trace.parent_id": "0300000000000000", - "trace.link.span_id": "0500000000000000", - "trace.link.trace_id": "04000000000000000000000000000000", - }, - }, - { - Data: map[string]interface{}{ - "duration_ms": float64(0), - "name": "client", - "service.name": "test_service", - "span_kind": "client", - "status.code": float64(0), // Default status code - "status.message": "STATUS_CODE_UNSET", - "trace.parent_id": "0200000000000000", - "trace.span_id": "0300000000000000", - "trace.trace_id": "01000000000000000000000000000000", - "library.name": "my.custom.library", - "library.version": "1.0.0", - "A": "B", - "B": "C", - }, - }, - { - Data: map[string]interface{}{ - "duration_ms": float64(0), - "name": "server", - "service.name": "test_service", - "span_kind": "server", - "status.code": float64(0), // Default status code - "status.message": "STATUS_CODE_UNSET", - "trace.parent_id": "0300000000000000", - "trace.span_id": "0400000000000000", - "trace.trace_id": "01000000000000000000000000000000", - "library.name": "my.custom.library", - "library.version": "1.0.0", - "A": "B", - "B": "C", - }, - }, - { - Data: map[string]interface{}{ - "A": "B", - "B": "D", - "attribute_name": "Hello MessageEvent", - "meta.annotation_type": "span_event", - "name": "Some Description", - "service.name": "test_service", - "trace.parent_id": "0200000000000000", - "trace.parent_name": "root", - "trace.trace_id": "01000000000000000000000000000000", - }, - }, - { - Data: map[string]interface{}{ - "duration_ms": float64(0), - "name": "root", - "service.name": "test_service", - "span_attr_name": "Span Attribute", - "span_kind": "server", - "status.code": float64(0), // Default status code - "status.message": "STATUS_CODE_UNSET", - "trace.span_id": "0200000000000000", - "trace.trace_id": "01000000000000000000000000000000", - "A": "B", - "B": "D", - "library.name": "my.custom.library", - "library.version": "1.0.0", - }, - }, - } - - if diff := cmp.Diff(want, got); diff != "" { - t.Errorf("otel span: (-want +got):\n%s", diff) - } -} - -func TestSpanKinds(t *testing.T) { - td := ptrace.NewTraces() - rs := td.ResourceSpans().AppendEmpty() - rs.Resource().Attributes().InsertString("service.name", "test_service") - instrLibrarySpans := rs.ScopeSpans().AppendEmpty() - lib := instrLibrarySpans.Scope() - lib.SetName("my.custom.library") - lib.SetVersion("1.0.0") - - initSpan(instrLibrarySpans.Spans().AppendEmpty()) - - spanKinds := []ptrace.SpanKind{ - ptrace.SpanKindInternal, - ptrace.SpanKindClient, - ptrace.SpanKindServer, - ptrace.SpanKindProducer, - ptrace.SpanKindConsumer, - ptrace.SpanKindUnspecified, - ptrace.SpanKind(1000), - } - - expectedStrings := []string{ - "internal", - "client", - "server", - "producer", - "consumer", - "unspecified", - "unspecified", - } - - for idx, kind := range spanKinds { - stringKind := expectedStrings[idx] - t.Run(fmt.Sprintf("span kind %s", stringKind), func(t *testing.T) { - want := []honeycombData{ - { - Data: map[string]interface{}{ - "duration_ms": float64(0), - "name": "spanName", - "library.name": "my.custom.library", - "library.version": "1.0.0", - "service.name": "test_service", - "span_attr_name": "Span Attribute", - "span_kind": stringKind, - "status.code": float64(0), // Default status code - "status.message": "STATUS_CODE_UNSET", - "trace.span_id": "0300000000000000", - "trace.parent_id": "0200000000000000", - "trace.trace_id": "01000000000000000000000000000000", - }, - }, - } - - instrLibrarySpans.Spans().At(0).SetKind(kind) - - got := testTracesExporter(td, t, baseConfig()) - - if diff := cmp.Diff(want, got); diff != "" { - t.Errorf("otel span: (-want +got):\n%s", diff) - } - }) - } -} - -func initSpan(span ptrace.Span) { - span.SetName("spanName") - span.SetTraceID(pcommon.NewTraceID([16]byte{0x01})) - span.SetParentSpanID(pcommon.NewSpanID([8]byte{0x02})) - span.SetSpanID(pcommon.NewSpanID([8]byte{0x03})) - span.Attributes().InsertString("span_attr_name", "Span Attribute") -} - -func TestSampleRateAttribute(t *testing.T) { - td := ptrace.NewTraces() - rs := td.ResourceSpans().AppendEmpty() - instrLibrarySpans := rs.ScopeSpans().AppendEmpty() - - intSampleRateSpan := instrLibrarySpans.Spans().AppendEmpty() - intSampleRateSpan.SetTraceID(pcommon.NewTraceID([16]byte{0x01})) - intSampleRateSpan.SetSpanID(pcommon.NewSpanID([8]byte{0x02})) - intSampleRateSpan.SetName("root") - intSampleRateSpan.SetKind(ptrace.SpanKindServer) - intSampleRateSpan.Attributes().InsertString("some_attribute", "A value") - intSampleRateSpan.Attributes().InsertInt("hc.sample.rate", 13) - - noSampleRateSpan := instrLibrarySpans.Spans().AppendEmpty() - noSampleRateSpan.SetTraceID(pcommon.NewTraceID([16]byte{0x01})) - noSampleRateSpan.SetSpanID(pcommon.NewSpanID([8]byte{0x02})) - noSampleRateSpan.SetName("root") - noSampleRateSpan.SetKind(ptrace.SpanKindServer) - noSampleRateSpan.Attributes().InsertString("no_sample_rate", "gets_default") - - invalidSampleRateSpan := instrLibrarySpans.Spans().AppendEmpty() - invalidSampleRateSpan.SetTraceID(pcommon.NewTraceID([16]byte{0x01})) - invalidSampleRateSpan.SetSpanID(pcommon.NewSpanID([8]byte{0x02})) - invalidSampleRateSpan.SetName("root") - invalidSampleRateSpan.SetKind(ptrace.SpanKindServer) - invalidSampleRateSpan.Attributes().InsertString("hc.sample.rate", "wrong_type") - - cfg := baseConfig() - cfg.SampleRateAttribute = "hc.sample.rate" - - got := testTracesExporter(td, t, cfg) - - want := []honeycombData{ - { - Data: map[string]interface{}{ - "duration_ms": float64(0), - "hc.sample.rate": float64(13), - "name": "root", - "span_kind": "server", - "status.code": float64(0), // Default status code - "status.message": "STATUS_CODE_UNSET", - "trace.span_id": "0200000000000000", - "trace.trace_id": "01000000000000000000000000000000", - "some_attribute": "A value", - }, - }, - { - Data: map[string]interface{}{ - "duration_ms": float64(0), - "name": "root", - "span_kind": "server", - "status.code": float64(0), // Default status code - "status.message": "STATUS_CODE_UNSET", - "trace.span_id": "0200000000000000", - "trace.trace_id": "01000000000000000000000000000000", - "no_sample_rate": "gets_default", - }, - }, - { - Data: map[string]interface{}{ - "duration_ms": float64(0), - "hc.sample.rate": "wrong_type", - "name": "root", - "span_kind": "server", - "status.code": float64(0), // Default status code - "status.message": "STATUS_CODE_UNSET", - "trace.span_id": "0200000000000000", - "trace.trace_id": "01000000000000000000000000000000", - }, - }, - } - - if diff := cmp.Diff(want, got); diff != "" { - t.Errorf("otel span: (-want +got):\n%s", diff) - } -} - -func TestRunErrorLogger_OnError(t *testing.T) { - obs, logs := observer.New(zap.WarnLevel) - logger := zap.New(obs) - - cfg := createDefaultConfig().(*Config) - exporter, err := newHoneycombTracesExporter(cfg, logger) - require.NoError(t, err) - - ctx := context.Background() - defer ctx.Done() - - channel := make(chan transmission.Response) - - go func() { - channel <- transmission.Response{ - Err: errors.New("its a transmission error"), - } - close(channel) - }() - - exporter.RunErrorLogger(ctx, channel) - - expectedLogs := []observer.LoggedEntry{{ - Entry: zapcore.Entry{Level: zap.WarnLevel, Message: "its a transmission error"}, - Context: []zapcore.Field{}, - }} - - assert.Equal(t, 1, logs.Len()) - assert.Equal(t, expectedLogs, logs.AllUntimed()) -} - -func TestDebugUsesDebugLogger(t *testing.T) { - cfg := createDefaultConfig().(*Config) - cfg.Debug = true - _, err := newHoneycombTracesExporter(cfg, zap.NewNop()) - require.NoError(t, err) -} diff --git a/exporter/honeycombexporter/ids.go b/exporter/honeycombexporter/ids.go deleted file mode 100644 index d860a6b356c1..000000000000 --- a/exporter/honeycombexporter/ids.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2019 OpenTelemetry 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 honeycombexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/honeycombexporter" - -import ( - "encoding/binary" - "fmt" - - "go.opentelemetry.io/collector/pdata/pcommon" -) - -const ( - traceIDShortLength = 8 -) - -// getHoneycombID returns an ID suitable for use for spans and traces. Before -// encoding the bytes as a hex string, we want to handle cases where we are -// given 128-bit IDs with zero padding, e.g. 0000000000000000f798a1e7f33c8af6. -// To do this, we borrow a strategy from Jaeger [1] wherein we split the byte -// sequence into two parts. The leftmost part could contain all zeros. We use -// that to determine whether to return a 64-bit hex encoded string or a 128-bit -// one. -// -// [1]: https://github.com/jaegertracing/jaeger/blob/cd19b64413eca0f06b61d92fe29bebce1321d0b0/model/ids.go#L81 -func getHoneycombTraceID(traceID pcommon.TraceID) string { - // binary.BigEndian.Uint64() does a bounds check on traceID which will - // cause a panic if traceID is fewer than 8 bytes. In this case, we don't - // need to check for zero padding on the high part anyway, so just return a - // hex string. - - var low uint64 - tID := traceID.Bytes() - - low = binary.BigEndian.Uint64(tID[traceIDShortLength:]) - if high := binary.BigEndian.Uint64(tID[:traceIDShortLength]); high != 0 { - return fmt.Sprintf("%016x%016x", high, low) - } - - return fmt.Sprintf("%016x", low) -} - -// getHoneycombSpanID just takes a byte array and hex encodes it. -func getHoneycombSpanID(id pcommon.SpanID) string { - if !id.IsEmpty() { - return fmt.Sprintf("%x", id.Bytes()) - } - return "" -} diff --git a/exporter/honeycombexporter/ids_test.go b/exporter/honeycombexporter/ids_test.go deleted file mode 100644 index 53166bb44f8f..000000000000 --- a/exporter/honeycombexporter/ids_test.go +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2019 OpenTelemetry 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 honeycombexporter - -import ( - "reflect" - "testing" - - "go.opentelemetry.io/collector/pdata/pcommon" -) - -func TestGetHoneycombTraceID(t *testing.T) { - tests := []struct { - name string - traceID pcommon.TraceID - want string - }{ - { - name: "128-bit zero-padded traceID", - traceID: pcommon.NewTraceID([16]byte{0, 0, 0, 0, 0, 0, 0, 0, 203, 228, 222, 205, 18, 66, 145, 119}), - want: "cbe4decd12429177", - }, - { - name: "128-bit non-zero-padded traceID", - traceID: pcommon.NewTraceID([16]byte{242, 59, 66, 234, 194, 137, 160, 253, 205, 228, 143, 203, 227, 171, 26, 50}), - want: "f23b42eac289a0fdcde48fcbe3ab1a32", - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got := getHoneycombTraceID(tt.traceID) - if !reflect.DeepEqual(got, tt.want) { - t.Errorf("getHoneycombTraceID:\n\tgot: %#v\n\twant: %#v", got, tt.want) - } - }) - } -} diff --git a/exporter/honeycombexporter/testdata/config.yaml b/exporter/honeycombexporter/testdata/config.yaml deleted file mode 100644 index 244f3542232d..000000000000 --- a/exporter/honeycombexporter/testdata/config.yaml +++ /dev/null @@ -1,40 +0,0 @@ -receivers: - nop: - -processors: - nop: - -exporters: - honeycomb: - honeycomb/customname: - api_key: "test-apikey" - dataset: "test-dataset" - api_url: "https://api.testhost.io" - sending_queue: - enabled: true - num_consumers: 1 - queue_size: 1 - retry_on_failure: - enabled: true - initial_interval: 10s - max_interval: 60s - max_elapsed_time: 120s - honeycomb/sample_rate: - sample_rate: 5 # deprecated but left to ensure existing configs do not break - sample_rate_attribute: "custom.sample_rate" - sending_queue: - enabled: true - num_consumers: 1 - queue_size: 1 - retry_on_failure: - enabled: true - initial_interval: 10s - max_interval: 60s - max_elapsed_time: 120s - -service: - pipelines: - traces: - receivers: [nop] - processors: [nop] - exporters: [honeycomb] diff --git a/exporter/honeycombexporter/translator.go b/exporter/honeycombexporter/translator.go deleted file mode 100644 index 5531eeb1408b..000000000000 --- a/exporter/honeycombexporter/translator.go +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2019 OpenTelemetry 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 honeycombexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/honeycombexporter" - -import ( - "time" - - "go.opentelemetry.io/collector/pdata/pcommon" - "go.opentelemetry.io/collector/pdata/ptrace" -) - -// spanAttributesToMap converts an opencensus proto Span_Attributes object into a map -// of strings to generic types usable for sending events to honeycomb. -func spanAttributesToMap(spanAttrs pcommon.Map) map[string]interface{} { - var attrs = make(map[string]interface{}, spanAttrs.Len()) - - spanAttrs.Range(func(key string, value pcommon.Value) bool { - switch value.Type() { - case pcommon.ValueTypeString: - attrs[key] = value.StringVal() - case pcommon.ValueTypeBool: - attrs[key] = value.BoolVal() - case pcommon.ValueTypeInt: - attrs[key] = value.IntVal() - case pcommon.ValueTypeDouble: - attrs[key] = value.DoubleVal() - } - return true - }) - - return attrs -} - -// timestampToTime converts a protobuf timestamp into a time.Time. -func timestampToTime(ts pcommon.Timestamp) (t time.Time) { - if ts == 0 { - return - } - return time.Unix(0, int64(ts)).UTC() -} - -// getStatusCode returns the status code -func getStatusCode(status ptrace.SpanStatus) int32 { - return int32(status.Code()) -} - -// getStatusMessage returns the status message as a string -func getStatusMessage(status ptrace.SpanStatus) string { - if len(status.Message()) > 0 { - return status.Message() - } - - return status.Code().String() -} diff --git a/exporter/honeycombexporter/translator_test.go b/exporter/honeycombexporter/translator_test.go deleted file mode 100644 index fd50cbbe5e2b..000000000000 --- a/exporter/honeycombexporter/translator_test.go +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright 2019 OpenTelemetry 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 honeycombexporter - -import ( - "testing" - "time" - - "github.com/stretchr/testify/assert" - "go.opentelemetry.io/collector/pdata/pcommon" - "go.opentelemetry.io/collector/pdata/ptrace" - "google.golang.org/protobuf/types/known/timestamppb" -) - -func TestSpanAttributesToMap(t *testing.T) { - - spanAttrs := []pcommon.Map{ - pcommon.NewMapFromRaw(map[string]interface{}{ - "foo": "bar", - }), - pcommon.NewMapFromRaw(map[string]interface{}{ - "foo": 1234, - }), - pcommon.NewMapFromRaw(map[string]interface{}{ - "foo": true, - }), - pcommon.NewMapFromRaw(map[string]interface{}{ - "foo": 0.3145, - }), - pcommon.NewMap(), - } - - wantResults := []map[string]interface{}{ - {"foo": "bar"}, - {"foo": int64(1234)}, - {"foo": true}, - {"foo": 0.3145}, - {}, - {}, - } - - for i, attrs := range spanAttrs { - got := spanAttributesToMap(attrs) - want := wantResults[i] - for k := range want { - if got[k] != want[k] { - t.Errorf("Got: %+v, Want: %+v", got[k], want[k]) - } - } - } -} - -func TestTimestampToTime(t *testing.T) { - var t1 time.Time - emptyTime := timestampToTime(pcommon.Timestamp(0)) - if t1 != emptyTime { - t.Errorf("Expected %+v, Got: %+v\n", t1, emptyTime) - } - - t2 := time.Now() - seconds := t2.UnixNano() / 1000000000 - nowTime := timestampToTime(pcommon.NewTimestampFromTime( - (×tamppb.Timestamp{ - Seconds: seconds, - Nanos: int32(t2.UnixNano() - (seconds * 1000000000)), - }).AsTime())) - - if !t2.Equal(nowTime) { - t.Errorf("Expected %+v, Got %+v\n", t2, nowTime) - } -} - -func TestStatusCode(t *testing.T) { - status := ptrace.NewSpanStatus() - assert.Equal(t, int32(ptrace.StatusCodeUnset), getStatusCode(status), "empty") - - status.SetCode(ptrace.StatusCodeError) - assert.Equal(t, int32(ptrace.StatusCodeError), getStatusCode(status), "error") - - status.SetCode(ptrace.StatusCodeOk) - assert.Equal(t, int32(ptrace.StatusCodeOk), getStatusCode(status), "ok") -} - -func TestStatusMessage(t *testing.T) { - status := ptrace.NewSpanStatus() - assert.Equal(t, "STATUS_CODE_UNSET", getStatusMessage(status), "empty") - - status.SetMessage("custom message") - assert.Equal(t, "custom message", getStatusMessage(status), "custom") -} diff --git a/go.mod b/go.mod index 3a017f1d62bd..f800e2c334f9 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,6 @@ require ( github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awscloudwatchlogsexporter v0.57.2 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsemfexporter v0.57.2 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awskinesisexporter v0.57.2 - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsprometheusremotewriteexporter v0.57.2 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter v0.57.2 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter v0.57.2 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/carbonexporter v0.57.2 @@ -15,14 +14,12 @@ require ( github.com/open-telemetry/opentelemetry-collector-contrib/exporter/coralogixexporter v0.57.2 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter v0.57.2 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/dynatraceexporter v0.57.2 - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter v0.57.2 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter v0.57.2 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/f5cloudexporter v0.57.2 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter v0.57.2 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudexporter v0.57.2 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudpubsubexporter v0.57.2 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlemanagedprometheusexporter v0.57.2 - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/honeycombexporter v0.57.2 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/humioexporter v0.57.2 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/influxdbexporter v0.57.2 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/jaegerexporter v0.57.2 @@ -285,9 +282,6 @@ require ( github.com/envoyproxy/protoc-gen-validate v0.6.7 // indirect github.com/euank/go-kmsg-parser v2.0.0+incompatible // indirect github.com/facebook/time v0.0.0-20220713225404-f7a0d7702d50 // indirect - github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a // indirect - github.com/facebookgo/limitgroup v0.0.0-20150612190941-6abd8d71ec01 // indirect - github.com/facebookgo/muster v0.0.0-20150708232844-fd3d7953fd52 // indirect github.com/fatih/color v1.13.0 // indirect github.com/felixge/httpsnoop v1.0.3 // indirect github.com/form3tech-oss/jwt-go v3.2.5+incompatible // indirect @@ -357,7 +351,6 @@ require ( github.com/hashicorp/nomad/api v0.0.0-20220718181929-9457a13c7ccf // indirect github.com/hashicorp/serf v0.9.7 // indirect github.com/hetznercloud/hcloud-go v1.35.0 // indirect - github.com/honeycombio/libhoney-go v1.16.0 // indirect github.com/iancoleman/strcase v0.2.0 // indirect github.com/imdario/mergo v0.3.12 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect @@ -481,7 +474,6 @@ require ( github.com/prometheus/statsd_exporter v0.21.0 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/rs/cors v1.8.2 // indirect - github.com/santhosh-tekuri/jsonschema v1.2.4 // indirect github.com/scaleway/scaleway-sdk-go v1.0.0-beta.9 // indirect github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646 // indirect github.com/secure-systems-lab/go-securesystemslib v0.3.1 // indirect @@ -523,8 +515,6 @@ require ( github.com/vincent-petithory/dataurl v1.0.0 // indirect github.com/vishvananda/netlink v1.1.1-0.20210330154013-f5de75959ad5 // indirect github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f // indirect - github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect - github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect github.com/vmware/go-vmware-nsxt v0.0.0-20220328155605-f49a14c1ef5f // indirect github.com/vmware/govmomi v0.28.0 // indirect github.com/vultr/govultr/v2 v2.17.2 // indirect @@ -535,8 +525,6 @@ require ( github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect - go.elastic.co/apm v1.15.0 // indirect - go.elastic.co/fastjson v1.1.0 // indirect go.etcd.io/bbolt v1.3.6 // indirect go.mongodb.org/atlas v0.16.0 // indirect go.mongodb.org/mongo-driver v1.10.1 // indirect @@ -571,7 +559,6 @@ require ( google.golang.org/genproto v0.0.0-20220706185917-7780775163c4 // indirect google.golang.org/grpc v1.48.0 // indirect google.golang.org/protobuf v1.28.1 // indirect - gopkg.in/alexcesaro/statsd.v2 v2.0.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/ini.v1 v1.66.4 // indirect gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect @@ -640,8 +627,6 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsem replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awskinesisexporter => ./exporter/awskinesisexporter -replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsprometheusremotewriteexporter => ./exporter/awsprometheusremotewriteexporter - replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter => ./exporter/awsxrayexporter replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter => ./exporter/azuremonitorexporter @@ -666,8 +651,6 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googl replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudpubsubexporter => ./exporter/googlecloudpubsubexporter -replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/honeycombexporter => ./exporter/honeycombexporter - replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/humioexporter => ./exporter/humioexporter replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/influxdbexporter => ./exporter/influxdbexporter @@ -712,8 +695,6 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tanzu replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tencentcloudlogserviceexporter => ./exporter/tencentcloudlogserviceexporter -replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter => ./exporter/elasticexporter - replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter => ./exporter/elasticsearchexporter replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/zipkinexporter => ./exporter/zipkinexporter diff --git a/go.sum b/go.sum index c686a67bf46e..b061b3a5e2ab 100644 --- a/go.sum +++ b/go.sum @@ -283,7 +283,6 @@ github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmV github.com/armon/go-metrics v0.3.10 h1:FR+drcQStOe+32sYyJYyZ7FIdgoGGBnwLl+flodp8Uo= github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= @@ -638,14 +637,8 @@ github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFP github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/elastic/go-elasticsearch/v7 v7.17.1 h1:49mHcHx7lpCL8cW1aioEwSEVKQF3s+Igi4Ye/QTWwmk= github.com/elastic/go-elasticsearch/v7 v7.17.1/go.mod h1:OJ4wdbtDNk5g503kvlHLyErCgQwwzmDtaFC4XyOxXA4= -github.com/elastic/go-licenser v0.3.1 h1:RmRukU/JUmts+rpexAw0Fvt2ly7VVu6mw8z4HrEzObU= -github.com/elastic/go-licenser v0.3.1/go.mod h1:D8eNQk70FOCVBl3smCGQt/lv7meBeQno2eI1S5apiHQ= github.com/elastic/go-structform v0.0.10 h1:oy08o/Ih2hHTkNcRY/1HhaYvIp5z6t8si8gnCJPDo1w= github.com/elastic/go-structform v0.0.10/go.mod h1:CZWf9aIRYY5SuKSmOhtXScE5uQiLZNqAFnwKR4OrIM4= -github.com/elastic/go-sysinfo v1.1.1 h1:ZVlaLDyhVkDfjwPGU55CQRCRolNpc7P0BbyhhQZQmMI= -github.com/elastic/go-sysinfo v1.1.1/go.mod h1:i1ZYdU10oLNfRzq4vq62BEwD2fH8KaWh6eh0ikPT9F0= -github.com/elastic/go-windows v1.0.0 h1:qLURgZFkkrYyTTkvYpsZIgf83AUsdIHfvlJaqaZ7aSY= -github.com/elastic/go-windows v1.0.0/go.mod h1:TsU0Nrp7/y3+VwE82FoZF8gC/XFg/Elz6CcloAxnPgU= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= @@ -673,20 +666,10 @@ github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/facebook/time v0.0.0-20220713225404-f7a0d7702d50 h1:3fALCgsB+zI8Bxlv4ph4lCgt1CEQHIdU5sWxbkaMkuc= github.com/facebook/time v0.0.0-20220713225404-f7a0d7702d50/go.mod h1:IQmM+Ezbn5X7gpDO0IjKU5RmW9xT1a19dLp+NbivoXE= -github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a h1:yDWHCSQ40h88yih2JAcL6Ls/kVkSE8GFACTGVnMPruw= -github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a/go.mod h1:7Ga40egUymuWXxAe151lTNnCv97MddSOVsjpPPkityA= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= -github.com/facebookgo/limitgroup v0.0.0-20150612190941-6abd8d71ec01 h1:IeaD1VDVBPlx3viJT9Md8if8IxxJnO+x0JCGb054heg= -github.com/facebookgo/limitgroup v0.0.0-20150612190941-6abd8d71ec01/go.mod h1:ypD5nozFk9vcGw1ATYefw6jHe/jZP++Z15/+VTMcWhc= -github.com/facebookgo/muster v0.0.0-20150708232844-fd3d7953fd52 h1:a4DFiKFJiDRGFD1qIcqGLX/WlUMD9dyLSLDt+9QZgt8= -github.com/facebookgo/muster v0.0.0-20150708232844-fd3d7953fd52/go.mod h1:yIquW87NGRw1FU5p5lEkpnt/QxoH5uPAOUlOVkAUuMg= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= github.com/facebookgo/stackerr v0.0.0-20150612192056-c2fcf88613f4 h1:fP04zlkPjAGpsduG7xN3rRkxjAqkJaIQnnkNYYw/pAk= github.com/facebookgo/stackerr v0.0.0-20150612192056-c2fcf88613f4/go.mod h1:SBHk9aNQtiw4R4bEuzHjVmZikkUKCnO1v3lPQ21HZGk= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= @@ -1086,8 +1069,6 @@ github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKe github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/hetznercloud/hcloud-go v1.35.0 h1:sduXOrWM0/sJXwBty7EQd7+RXEJh5+CsAGQmHshChFg= github.com/hetznercloud/hcloud-go v1.35.0/go.mod h1:mepQwR6va27S3UQthaEPGS86jtzSY9xWL1e9dyxXpgA= -github.com/honeycombio/libhoney-go v1.16.0 h1:kPpqoz6vbOzgp7jC6SR7SkNj7rua7rgxvznI6M3KdHc= -github.com/honeycombio/libhoney-go v1.16.0/go.mod h1:izP4fbREuZ3vqC4HlCAmPrcPT9gxyxejRjGtCYpmBn0= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/iancoleman/strcase v0.2.0 h1:05I4QRnGpI0m37iZQRuskXh+w77mr6Z41lwQzuHLwW0= @@ -1175,8 +1156,6 @@ github.com/jaegertracing/jaeger v1.37.0 h1:/EY0n/IUFT/NozEM78bzW2Lm2dPoKuIF/9c9U github.com/jaegertracing/jaeger v1.37.0/go.mod h1:2tPPMcktsOFhmsiyxoYnUE0QAlP4UC6DEsC2jdllt5g= github.com/jawher/mow.cli v1.0.4/go.mod h1:5hQj2V8g+qYmLUVWqu4Wuja1pI57M83EChYLVZ0sMKk= github.com/jawher/mow.cli v1.2.0/go.mod h1:y+pcA3jBAdo/GIZx/0rFjw/K2bVEODP9rfZOfaiq8Ko= -github.com/jcchavezs/porto v0.1.0 h1:Xmxxn25zQMmgE7/yHYmh19KcItG81hIwfbEEFnd6w/Q= -github.com/jcchavezs/porto v0.1.0/go.mod h1:fESH0gzDHiutHRdX2hv27ojnOVFco37hg1W6E9EZF4A= github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8= github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= github.com/jcmturner/dnsutils/v2 v2.0.0 h1:lltnkeZGL0wILNvrNiVCR6Ro5PGU/SeBvVO/8c/iPbo= @@ -1189,7 +1168,6 @@ github.com/jcmturner/gokrb5/v8 v8.4.2 h1:6ZIM6b/JJN0X8UM43ZOM6Z4SJzla+a/u7scXFJz github.com/jcmturner/gokrb5/v8 v8.4.2/go.mod h1:sb+Xq/fTY5yktf/VxLsE3wlfPqQjp0aWNYyvBVK62bc= github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY= github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= @@ -1200,8 +1178,6 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGw github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= -github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901 h1:rp+c0RAYOWj8l6qbCUTSiRLG/iKnW3K3/QfPPuSsBt4= -github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901/go.mod h1:Z86h9688Y0wesXCyonoVr47MasHilkuLMqGhRZ4Hpak= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= @@ -1245,7 +1221,6 @@ github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYs github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.13.1/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.7/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/klauspost/compress v1.15.8/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY= github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= @@ -1627,7 +1602,6 @@ github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190425082905-87a4384529e0/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.0-20190522114515-bc1a522cf7b1/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= @@ -1675,8 +1649,6 @@ github.com/safchain/ethtool v0.0.0-20210803160452-9aa261dae9b1/go.mod h1:Z0q5wiB github.com/samuel/go-zookeeper v0.0.0-20190810000440-0ceca61e4d75/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/sanity-io/litter v1.2.0/go.mod h1:JF6pZUFgu2Q0sBZ+HSV35P8TVPI1TTzEwyu9FXAw2W4= -github.com/santhosh-tekuri/jsonschema v1.2.4 h1:hNhW8e7t+H1vgY+1QeEQpveR6D4+OwKPXCfD2aieJis= -github.com/santhosh-tekuri/jsonschema v1.2.4/go.mod h1:TEAUOeZSmIxTTuHatJzrvARHiuO9LYd+cIxzgEHCQI4= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/scaleway/scaleway-sdk-go v1.0.0-beta.9 h1:0roa6gXKgyta64uqh52AQG3wzZXH21unn+ltzQSXML0= github.com/scaleway/scaleway-sdk-go v1.0.0-beta.9/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg= @@ -1864,11 +1836,7 @@ github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1 github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f h1:p4VB7kIXpOQvVn1ZaTIVp+3vuYAXFe3OJEvjbUYJLaA= github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= github.com/vmihailenco/msgpack/v4 v4.3.12 h1:07s4sz9IReOgdikxLTKNbBdqDMLsjPKXwvCazn8G65U= -github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU= -github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= github.com/vmihailenco/tagparser v0.1.2 h1:gnjoVuB/kljJ5wICEEOpx98oXMWPLj22G67Vbd1qPqc= -github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= -github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/vmware/go-vmware-nsxt v0.0.0-20220328155605-f49a14c1ef5f h1:NbC9yOr5At92seXK+kOr2TzU3mIWzcJOVzZasGSuwoU= github.com/vmware/go-vmware-nsxt v0.0.0-20220328155605-f49a14c1ef5f/go.mod h1:VEqcmf4Sp7gPB7z05QGyKVmn6xWppr7Nz8cVNvyC80o= github.com/vmware/govmomi v0.28.0 h1:VgeQ/Rvz79U9G8QIKLdgpsN9AndHJL+5iMJLgYIrBGI= @@ -1909,10 +1877,6 @@ github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPS github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= github.com/zorkian/go-datadog-api v2.30.0+incompatible h1:R4ryGocppDqZZbnNc5EDR8xGWF/z/MxzWnqTUijDQes= -go.elastic.co/apm v1.15.0 h1:uPk2g/whK7c7XiZyz/YCUnAUBNPiyNeE3ARX3G6Gx7Q= -go.elastic.co/apm v1.15.0/go.mod h1:dylGv2HKR0tiCV+wliJz1KHtDyuD8SPe69oV7VyK6WY= -go.elastic.co/fastjson v1.1.0 h1:3MrGBWWVIxe/xvsbpghtkFoPciPhOCmjsR/HfwEeQR4= -go.elastic.co/fastjson v1.1.0/go.mod h1:boNGISWMjQsUPy/t6yqt2/1Wx4YNPSe+mZjlyw9vKKI= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= @@ -2266,7 +2230,6 @@ golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191025021431-6c3a3bfe00ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2457,7 +2420,6 @@ golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjs golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= @@ -2721,8 +2683,6 @@ google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175 google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/alexcesaro/statsd.v2 v2.0.0 h1:FXkZSCZIH17vLCO5sO2UucTHsH9pc+17F6pl3JVCwMc= -gopkg.in/alexcesaro/statsd.v2 v2.0.0/go.mod h1:i0ubccKGzBVNBpdGV5MocxyA/XlLUJzA7SLonnE4drU= gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -2786,8 +2746,6 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -howett.net/plist v0.0.0-20181124034731-591f970eefbb h1:jhnBjNi9UFpfpl8YZhA9CrOqpnJdvzuiHsl/dnxl11M= -howett.net/plist v0.0.0-20181124034731-591f970eefbb/go.mod h1:vMygbs4qMhSZSc4lCUl2OEE+rDiIIJAIdR4m7MiMcm0= k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= diff --git a/internal/components/components.go b/internal/components/components.go index 13c67fc59051..78f73193589b 100644 --- a/internal/components/components.go +++ b/internal/components/components.go @@ -29,7 +29,6 @@ import ( "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awscloudwatchlogsexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsemfexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awskinesisexporter" - "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsprometheusremotewriteexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/carbonexporter" @@ -37,14 +36,12 @@ import ( "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/coralogixexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/dynatraceexporter" - "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/f5cloudexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudpubsubexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlemanagedprometheusexporter" - "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/honeycombexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/humioexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/influxdbexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/jaegerexporter" @@ -285,7 +282,6 @@ func Components() (component.Factories, error) { awscloudwatchlogsexporter.NewFactory(), awsemfexporter.NewFactory(), awskinesisexporter.NewFactory(), - awsprometheusremotewriteexporter.NewFactory(), awsxrayexporter.NewFactory(), azuremonitorexporter.NewFactory(), carbonexporter.NewFactory(), @@ -293,14 +289,12 @@ func Components() (component.Factories, error) { coralogixexporter.NewFactory(), datadogexporter.NewFactory(), dynatraceexporter.NewFactory(), - elasticexporter.NewFactory(), elasticsearchexporter.NewFactory(), f5cloudexporter.NewFactory(), fileexporter.NewFactory(), googlecloudexporter.NewFactory(), googlemanagedprometheusexporter.NewFactory(), googlecloudpubsubexporter.NewFactory(), - honeycombexporter.NewFactory(), humioexporter.NewFactory(), influxdbexporter.NewFactory(), jaegerexporter.NewFactory(), diff --git a/internal/components/exporters_test.go b/internal/components/exporters_test.go index 7e5c78f5aacb..415b9f8de9b1 100644 --- a/internal/components/exporters_test.go +++ b/internal/components/exporters_test.go @@ -38,7 +38,6 @@ import ( "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awscloudwatchlogsexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsemfexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awskinesisexporter" - "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsprometheusremotewriteexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/carbonexporter" @@ -46,11 +45,9 @@ import ( "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/coralogixexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter" dtconf "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/dynatraceexporter/config" - "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/f5cloudexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter" - "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/honeycombexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/humioexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/influxdbexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/jaegerexporter" @@ -224,14 +221,6 @@ func TestDefaultExporters(t *testing.T) { return cfg }, }, - { - exporter: "awsprometheusremotewrite", - getConfigFn: func() config.Exporter { - cfg := expFactories["awsprometheusremotewrite"].CreateDefaultConfig().(*awsprometheusremotewriteexporter.Config) - cfg.HTTPClientSettings.Endpoint = "http://" + endpoint - return cfg - }, - }, { exporter: "alibabacloud_logservice", getConfigFn: func() config.Exporter { @@ -319,14 +308,6 @@ func TestDefaultExporters(t *testing.T) { return cfg }, }, - { - exporter: "elastic", - getConfigFn: func() config.Exporter { - cfg := expFactories["elastic"].CreateDefaultConfig().(*elasticexporter.Config) - cfg.APMServerURL = "http://" + endpoint - return cfg - }, - }, { exporter: "elasticsearch", getConfigFn: func() config.Exporter { @@ -357,15 +338,6 @@ func TestDefaultExporters(t *testing.T) { { exporter: "googlecloudpubsub", }, - { - exporter: "honeycomb", - getConfigFn: func() config.Exporter { - cfg := expFactories["honeycomb"].CreateDefaultConfig().(*honeycombexporter.Config) - cfg.APIURL = "http://" + endpoint - cfg.APIKey = "busybeesworking" - return cfg - }, - }, { exporter: "humio", getConfigFn: func() config.Exporter { diff --git a/versions.yaml b/versions.yaml index bcc58351a3c7..41b7fb4894f9 100644 --- a/versions.yaml +++ b/versions.yaml @@ -27,7 +27,6 @@ module-sets: - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awscloudwatchlogsexporter - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsemfexporter - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awskinesisexporter - - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsprometheusremotewriteexporter - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/carbonexporter @@ -35,14 +34,12 @@ module-sets: - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/coralogixexporter - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/dynatraceexporter - - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/f5cloudexporter - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudexporter - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlemanagedprometheusexporter - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudpubsubexporter - - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/honeycombexporter - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/humioexporter - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/influxdbexporter - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/jaegerexporter