From c0d6c5b74db5554b3e9950d7ec9938f333067fe3 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Fri, 8 Nov 2019 15:26:25 -0600 Subject: [PATCH 01/59] initial def of aws xray exporter --- exporter/awsxrayexporter/Makefile | 1 + exporter/awsxrayexporter/awsxray.go | 42 + exporter/awsxrayexporter/config.go | 41 + exporter/awsxrayexporter/config_test.go | 60 + exporter/awsxrayexporter/doc.go | 17 + exporter/awsxrayexporter/error.go | 33 + exporter/awsxrayexporter/factory.go | 64 + exporter/awsxrayexporter/factory_test.go | 28 + exporter/awsxrayexporter/go.mod | 173 ++ exporter/awsxrayexporter/go.sum | 2279 +++++++++++++++++ exporter/awsxrayexporter/http.go | 147 ++ exporter/awsxrayexporter/segment.go | 475 ++++ exporter/awsxrayexporter/testdata/config.yaml | 21 + 13 files changed, 3381 insertions(+) create mode 100644 exporter/awsxrayexporter/Makefile create mode 100644 exporter/awsxrayexporter/awsxray.go create mode 100644 exporter/awsxrayexporter/config.go create mode 100644 exporter/awsxrayexporter/config_test.go create mode 100644 exporter/awsxrayexporter/doc.go create mode 100644 exporter/awsxrayexporter/error.go create mode 100644 exporter/awsxrayexporter/factory.go create mode 100644 exporter/awsxrayexporter/factory_test.go create mode 100644 exporter/awsxrayexporter/go.mod create mode 100644 exporter/awsxrayexporter/go.sum create mode 100644 exporter/awsxrayexporter/http.go create mode 100644 exporter/awsxrayexporter/segment.go create mode 100644 exporter/awsxrayexporter/testdata/config.yaml diff --git a/exporter/awsxrayexporter/Makefile b/exporter/awsxrayexporter/Makefile new file mode 100644 index 000000000000..c1496226e590 --- /dev/null +++ b/exporter/awsxrayexporter/Makefile @@ -0,0 +1 @@ +include ../../Makefile.Common \ No newline at end of file diff --git a/exporter/awsxrayexporter/awsxray.go b/exporter/awsxrayexporter/awsxray.go new file mode 100644 index 000000000000..a740ef095b49 --- /dev/null +++ b/exporter/awsxrayexporter/awsxray.go @@ -0,0 +1,42 @@ +// 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 awsxrayexporter + +import ( + "context" + "github.com/open-telemetry/opentelemetry-collector/config/configmodels" + "github.com/open-telemetry/opentelemetry-collector/consumer/consumerdata" + "github.com/open-telemetry/opentelemetry-collector/exporter" + "github.com/open-telemetry/opentelemetry-collector/exporter/exporterhelper" + "go.uber.org/zap" +) + +// NewTraceExporter creates an exporter.TraceExporter that just drops the +// received data and logs debugging messages. +func NewTraceExporter(config configmodels.Exporter, logger *zap.Logger) (exporter.TraceExporter, error) { + typeLog := zap.String("type", config.Type()) + nameLog := zap.String("name", config.Name()) + return exporterhelper.NewTraceExporter( + config, + func(ctx context.Context, td consumerdata.TraceData) (int, error) { + logger.Info("TraceExporter", typeLog, nameLog, zap.Int("#spans", len(td.Spans))) + // TODO: Add ability to record the received data + return 0, nil + }, + exporterhelper.WithTracing(true), + exporterhelper.WithMetrics(false), + exporterhelper.WithShutdown(logger.Sync), + ) +} diff --git a/exporter/awsxrayexporter/config.go b/exporter/awsxrayexporter/config.go new file mode 100644 index 000000000000..8b403a7e0060 --- /dev/null +++ b/exporter/awsxrayexporter/config.go @@ -0,0 +1,41 @@ +// 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 awsxrayexporter + +import "github.com/open-telemetry/opentelemetry-collector/config/configmodels" + +// Config defines configuration for AWS X-Ray exporter. +type Config struct { + configmodels.ExporterSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct. + // Maximum number of concurrent calls to AWS X-Ray to upload segment documents. + Concurrency int `mapstructure:"num_workers"` + // X-Ray service endpoint to which the daemon sends segment documents. + Endpoint string `mapstructure:"endpoint"` + // Send segments to AWS X-Ray service in a specific region. + Region string `mapstructure:"region"` + // Local mode to skip EC2 instance metadata check. + LocalMode bool `mapstructure:"local_mode"` + // Amazon Resource Name (ARN) of the AWS resource running the daemon. + ResourceARN string `mapstructure:"resource_arn"` + // IAM role to upload segments to a different account. + RoleARN string `mapstructure:"role_arn"` + // Enable or disable TLS certificate verification. + NoVerifySSL bool `mapstructure:"no_verify_ssl"` + // Upload segments to AWS X-Ray through a proxy. + ProxyAddress string `mapstructure:"proxy_address"` + // Default AWS resource type of trace data origin + // [AWS::EC2::Instance | AWS::ECS::Container | AWS::ElasticBeanstalk::Environment] + Origin string `mapstructure:"origin"` +} diff --git a/exporter/awsxrayexporter/config_test.go b/exporter/awsxrayexporter/config_test.go new file mode 100644 index 000000000000..da686ff4cbfe --- /dev/null +++ b/exporter/awsxrayexporter/config_test.go @@ -0,0 +1,60 @@ +// 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 awsxrayexporter + +import ( + "path" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/open-telemetry/opentelemetry-collector/config" + "github.com/open-telemetry/opentelemetry-collector/config/configmodels" +) + +func TestLoadConfig(t *testing.T) { + factories, err := config.ExampleComponents() + assert.Nil(t, err) + + factory := &Factory{} + factories.Exporters[typeStr] = factory + cfg, err := config.LoadConfigFile( + t, path.Join(".", "testdata", "config.yaml"), factories, + ) + + require.NoError(t, err) + require.NotNil(t, cfg) + + assert.Equal(t, len(cfg.Exporters), 2) + + r0 := cfg.Exporters["awsxray"] + assert.Equal(t, r0, factory.CreateDefaultConfig()) + + r1 := cfg.Exporters["awsxray/customname"].(*Config) + assert.Equal(t, r1, + &Config{ + ExporterSettings: configmodels.ExporterSettings{TypeVal: typeStr, NameVal: "awsxray/customname"}, + Concurrency: 8, + Endpoint: "", + Region: "us-east-1", + LocalMode: false, + ResourceARN: "", + RoleARN: "", + NoVerifySSL: false, + ProxyAddress: "", + Origin: "AWS::ECS::Container", + }) +} diff --git a/exporter/awsxrayexporter/doc.go b/exporter/awsxrayexporter/doc.go new file mode 100644 index 000000000000..bd542c44e340 --- /dev/null +++ b/exporter/awsxrayexporter/doc.go @@ -0,0 +1,17 @@ +// 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 awsxrayexporter implements an Otel Collector exporter that sends trace data to +// AWS X-Ray in the region the collector is running in using the PutTraceSegments API. +package awsxrayexporter diff --git a/exporter/awsxrayexporter/error.go b/exporter/awsxrayexporter/error.go new file mode 100644 index 000000000000..0dacc67800eb --- /dev/null +++ b/exporter/awsxrayexporter/error.go @@ -0,0 +1,33 @@ +// 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 awsxrayexporter + +type exception struct { + // ID – A 64-bit identifier for the exception, unique among segments in the same trace, + // in 16 hexadecimal digits. + ID string `json:"id"` + + // Message – The exception message. + Message string `json:"message,omitempty"` +} + +// cause - A cause can be either a 16 character exception ID or an object with the following fields: +type errCause struct { + // WorkingDirectory – The full path of the working directory when the exception occurred. + WorkingDirectory string `json:"working_directory"` + + // Exceptions - The array of exception objects. + Exceptions []exception `json:"exceptions,omitempty"` +} diff --git a/exporter/awsxrayexporter/factory.go b/exporter/awsxrayexporter/factory.go new file mode 100644 index 000000000000..bc229610c4e7 --- /dev/null +++ b/exporter/awsxrayexporter/factory.go @@ -0,0 +1,64 @@ +// 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 awsxrayexporter + +import ( + "github.com/open-telemetry/opentelemetry-collector/config/configmodels" + "github.com/open-telemetry/opentelemetry-collector/exporter" + "go.uber.org/zap" +) + +const ( + // The value of "type" key in configuration. + typeStr = "awsxray" +) + +// Factory is the factory for AWS X-Ray exporter. +type Factory struct { +} + +// Type gets the type of the Exporter config created by this factory. +func (f *Factory) Type() string { + return typeStr +} + +// CreateDefaultConfig creates the default configuration for exporter. +func (f *Factory) CreateDefaultConfig() configmodels.Exporter { + return &Config{ + ExporterSettings: configmodels.ExporterSettings{ + TypeVal: typeStr, + NameVal: typeStr, + }, + Concurrency: 8, + Endpoint: "", + Region: "", + LocalMode: false, + ResourceARN: "", + RoleARN: "", + NoVerifySSL: false, + ProxyAddress: "", + Origin: "AWS::EC2::Instance", + } +} + +// CreateTraceExporter creates a trace exporter based on this config. +func (f *Factory) CreateTraceExporter(logger *zap.Logger, cfg configmodels.Exporter) (exporter.TraceExporter, error) { + eCfg := cfg.(*Config) + return NewTraceExporter(eCfg, logger) +} + +func (f *Factory) CreateMetricsExporter(logger *zap.Logger, cfg configmodels.Exporter) (exporter.MetricsExporter, error) { + return nil, nil +} diff --git a/exporter/awsxrayexporter/factory_test.go b/exporter/awsxrayexporter/factory_test.go new file mode 100644 index 000000000000..99a30ef25149 --- /dev/null +++ b/exporter/awsxrayexporter/factory_test.go @@ -0,0 +1,28 @@ +// 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 awsxrayexporter + +import ( + "github.com/open-telemetry/opentelemetry-collector/config/configcheck" + "github.com/stretchr/testify/assert" + "testing" +) + +func TestCreateDefaultConfig(t *testing.T) { + factory := Factory{} + cfg := factory.CreateDefaultConfig() + assert.NotNil(t, cfg, "failed to create default config") + assert.NoError(t, configcheck.ValidateConfig(cfg)) +} diff --git a/exporter/awsxrayexporter/go.mod b/exporter/awsxrayexporter/go.mod new file mode 100644 index 000000000000..60dcf2fa3a0a --- /dev/null +++ b/exporter/awsxrayexporter/go.mod @@ -0,0 +1,173 @@ +module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter + +go 1.12 + +require ( + cloud.google.com/go/datastore v1.0.0 // indirect + collectd.org v0.3.0 // indirect + dmitri.shuralyov.com/route/github v0.0.0-20180323232716-ce4edef1f8c9 // indirect + git.apache.org/thrift.git v0.13.0 // indirect + github.com/AaronO/go-git-http v0.0.0-20161214145340-1d9485b3a98f // indirect + github.com/aclements/go-gg v0.0.0-20170323211221-abd1f791f5ee // indirect + github.com/aclements/go-moremath v0.0.0-20190830160640-d16893ddf098 // indirect + github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 // indirect + github.com/ajstarks/deck v0.0.0-20191009173945-82d717002242 // indirect + github.com/ajstarks/svgo v0.0.0-20190826172357-de52242f3d65 // indirect + github.com/andygrunwald/go-gerrit v0.0.0-20191101112536-3f5e365ccf57 // indirect + github.com/apache/arrow/go/arrow v0.0.0-20191105160933-1afbcb6bb2a6 // indirect + github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a // indirect + github.com/aws/aws-sdk-go v1.23.12 + github.com/aws/aws-sdk-go-v2 v0.15.0 // indirect + github.com/aws/aws-xray-sdk-go v0.9.4 // indirect + github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59 // indirect + github.com/beyang/hgo v0.0.0-20150825035631-d45f1891a48a // indirect + github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40 // indirect + github.com/boltdb/bolt v1.3.1 // indirect + github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b // indirect + github.com/bsm/sarama-cluster v2.1.15+incompatible // indirect + github.com/cactus/go-statsd-client/statsd v0.0.0-20191030180650-a68a2246f89c // indirect + github.com/casbin/casbin v1.9.1 // indirect + github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect + github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec // indirect + github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0 // indirect + github.com/coreos/etcd v3.3.17+incompatible // indirect + github.com/crossdock/crossdock-go v0.0.0-20160816171116-049aabb0122b // indirect + github.com/cznic/cc v0.0.0-20181122101902-d673e9b70d4d // indirect + github.com/cznic/fileutil v0.0.0-20181122101858-4d67cfea8c87 // indirect + github.com/cznic/golex v0.0.0-20181122101858-9c343928389c // indirect + github.com/cznic/internal v0.0.0-20181122101858-3279554c546e // indirect + github.com/cznic/ir v0.0.0-20181122101859-da7ba2ecce8b // indirect + github.com/cznic/lex v0.0.0-20181122101858-ce0fb5e9bb1b // indirect + github.com/cznic/lexer v0.0.0-20181122101858-e884d4bd112e // indirect + github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 // indirect + github.com/cznic/strutil v0.0.0-20181122101858-275e90344537 // indirect + github.com/cznic/xc v0.0.0-20181122101856-45b06973881e // indirect + github.com/dgraph-io/badger v1.6.0 // indirect + github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8 // indirect + github.com/dimchansky/utfbom v1.1.0 // indirect + github.com/disintegration/gift v1.2.1 // indirect + github.com/djherbis/buffer v1.1.0 // indirect + github.com/djherbis/nio v2.0.3+incompatible // indirect + github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 // indirect + github.com/emicklei/go-restful-swagger12 v0.0.0-20170926063155-7524189396c6 // indirect + github.com/fogleman/gg v1.3.0 // indirect + github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8 // indirect + github.com/garyburd/redigo v1.6.0 // indirect + github.com/gin-gonic/gin v1.4.0 // indirect + github.com/glycerine/go-unsnap-stream v0.0.0-20190901134440-81cf024a9e0a // indirect + github.com/go-chi/chi v4.0.2+incompatible // indirect + github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab // indirect + github.com/gobuffalo/buffalo v0.15.0 // indirect + github.com/gobwas/glob v0.2.3 // indirect + github.com/gocql/gocql v0.0.0-20191102131523-9faa4c08d962 // indirect + github.com/godbus/dbus v4.1.0+incompatible // indirect + github.com/goji/param v0.0.0-20160927210335-d7f49fd7d1ed // indirect + github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect + github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac // indirect + github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82 // indirect + github.com/gonum/internal v0.0.0-20181124074243-f884aa714029 // indirect + github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9 // indirect + github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9 // indirect + github.com/gorilla/handlers v1.4.2 // indirect + github.com/gorilla/schema v1.1.0 // indirect + github.com/graph-gophers/graphql-go v0.0.0-20191031232829-adde0d0f76a3 // indirect + github.com/hashicorp/go-hclog v0.10.0 // indirect + github.com/hashicorp/go-plugin v1.0.1 // indirect + github.com/hudl/fargo v1.3.0 // indirect + github.com/iancoleman/strcase v0.0.0-20190422225806-e506e3ef7365 // indirect + github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6 // indirect + github.com/inconshreveable/go-vhost v0.0.0-20160627193104-06d84117953b // indirect + github.com/inconshreveable/log15 v0.0.0-20180818164646-67afb5ed74ec // indirect + github.com/influxdata/flux v0.53.0 // indirect + github.com/influxdata/influxdb1-client v0.0.0-20190809212627-fc22c7df067e // indirect + github.com/influxdata/influxql v1.0.1 // indirect + github.com/influxdata/roaring v0.4.12 // indirect + github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368 // indirect + github.com/jsternberg/zap-logfmt v1.2.0 // indirect + github.com/jung-kurt/gofpdf v1.13.0 // indirect + github.com/justinas/alice v1.2.0 // indirect + github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef // indirect + github.com/kisielk/sqlstruct v0.0.0-20150923205031-648daed35d49 // indirect + github.com/klauspost/compress v1.9.1 // indirect + github.com/klauspost/pgzip v1.2.1 // indirect + github.com/lightstep/lightstep-tracer-go v0.17.1 // indirect + github.com/lyft/protoc-gen-star v0.4.11 // indirect + github.com/m3db/prometheus_client_golang v0.8.1 // indirect + github.com/m3db/prometheus_client_model v0.1.0 // indirect + github.com/m3db/prometheus_common v0.1.0 // indirect + github.com/m3db/prometheus_procfs v0.8.1 // indirect + github.com/marstr/goalias v0.0.0-20180416201319-8dff9a14db64 // indirect + github.com/marstr/guid v1.1.0 // indirect + github.com/marstr/randname v0.0.0-20181206212954-d5b0f288ab8c // indirect + github.com/martini-contrib/render v0.0.0-20150707142108-ec18f8345a11 // indirect + github.com/mjibson/appstats v0.0.0-20151004071057-0542d5f0e87e // indirect + github.com/montanaflynn/stats v0.5.0 // indirect + github.com/nats-io/nats.go v1.9.1 // indirect + github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d // indirect + github.com/oklog/oklog v0.3.2 // indirect + github.com/olekukonko/tablewriter v0.0.1 // indirect + github.com/olivere/elastic v6.2.26+incompatible // indirect + github.com/olivere/env v1.1.0 // indirect + github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 // indirect + // TODO: pin a released version + github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb0c1d1e + github.com/opentracing/basictracer-go v1.0.0 // indirect + github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.4 // indirect + github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c // indirect + github.com/paulbellamy/ratecounter v0.2.0 // indirect + github.com/pborman/getopt v0.0.0-20190409184431-ee0cd42419d3 // indirect + github.com/performancecopilot/speed v3.0.0+incompatible // indirect + github.com/peterh/liner v1.1.0 // indirect + github.com/philhofer/fwd v1.0.0 // indirect + github.com/pkg/sftp v1.10.1 // indirect + github.com/pressly/chi v4.0.2+incompatible // indirect + github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237 // indirect + github.com/retailnext/hllpp v1.0.0 // indirect + github.com/rogpeppe/go-charset v0.0.0-20190617161244-0dc95cdf6f31 // indirect + github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd // indirect + github.com/samuel/go-thrift v0.0.0-20190219015601-e8b6b52668fe // indirect + github.com/shopspring/decimal v0.0.0-20191009025716-f1972eb1d1f5 // indirect + github.com/shurcooL/frontend v0.0.0-20180531171852-7e359e4b7b17 // indirect + github.com/shurcooL/githubv4 v0.0.0-20191102174205-af46314aec7b // indirect + github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f // indirect + github.com/shurcooL/httpgzip v0.0.0-20190720172056-320755c1c1b0 // indirect + github.com/shurcooL/markdownfmt v0.0.0-20190409060426-3438a10682f5 // indirect + github.com/shurcooL/notificationsapp v0.0.0-20181114034014-0a6e54cc4198 // indirect + github.com/shurcooL/resume v0.0.0-20190824223711-dc47c8f77a80 // indirect + github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9 // indirect + github.com/sony/gobreaker v0.4.1 // indirect + github.com/sourcegraph/go-diff v0.5.1 // indirect + github.com/stathat/go v1.0.0 // indirect + github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a // indirect + github.com/stretchr/testify v1.4.0 + github.com/syndtr/goleveldb v1.0.0 // indirect + github.com/tambet/go-asana v0.0.0-20161015030314-6c0cb7090a14 // indirect + github.com/tinylib/msgp v1.1.0 // indirect + github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2 // indirect + github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b // indirect + github.com/tj/go-spin v1.1.0 // indirect + github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31 // indirect + github.com/uber-go/tally v3.3.12+incompatible // indirect + github.com/unknwon/cae v1.0.0 // indirect + github.com/urfave/cli v1.22.1 // indirect + github.com/urfave/negroni v1.0.0 // indirect + github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c // indirect + github.com/xdg/stringprep v1.0.0 // indirect + go.etcd.io/etcd v3.3.17+incompatible // indirect + go.opencensus.io v0.22.1 + go.uber.org/automaxprocs v1.2.0 // indirect + go.uber.org/zap v1.10.0 + gopkg.in/cheggaaa/pb.v1 v1.0.28 // indirect + gopkg.in/gcfg.v1 v1.2.3 // indirect + gopkg.in/pipe.v2 v2.0.0-20140414041502-3c2ca4d52544 // indirect + gopkg.in/tomb.v2 v2.0.0-20161208151619-d5d1b5820637 // indirect + gopkg.in/validator.v2 v2.0.0-20191029180049-30e574a82075 // indirect + gopkg.in/vmihailenco/msgpack.v2 v2.9.1 // indirect + gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0 // indirect + honnef.co/go/js/dom v0.0.0-20190526011328-ebc4cf92d81f // indirect + istio.io/gogo-genproto v0.0.0-20191024203824-d079cc8b1d55 // indirect + sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 // indirect + sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67 // indirect + sourcegraph.com/sourcegraph/go-git v0.0.0-20190828120159-87e0e4ab9e95 // indirect + sourcegraph.com/sourcegraph/go-vcs v0.0.0-20190409071845-d784c9520ccd // indirect +) diff --git a/exporter/awsxrayexporter/go.sum b/exporter/awsxrayexporter/go.sum new file mode 100644 index 000000000000..c1d923b9f90e --- /dev/null +++ b/exporter/awsxrayexporter/go.sum @@ -0,0 +1,2279 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.36.0/go.mod h1:RUoy9p/M4ge0HzT8L+SDZ8jg+Q6fth0CiBuhFJpSV40= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= +cloud.google.com/go v0.44.1 h1:7gXaI3V/b4DRaK++rTqhRajcT7z8gtP0qKMZTXqlySM= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.47.0 h1:1JUtpcY9E7+eTospEwWS2QXP3DEn7poB3E2j0jN74mM= +cloud.google.com/go/datastore v1.0.0 h1:Kt+gOPPp2LEPWp8CSfxhsM8ik9CcyE/gYu+0r+RnZvM= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +collectd.org v0.3.0 h1:iNBHGw1VvPJxH2B6RiFWFZ+vsjo1lCdRszBeOuwGi00= +collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= +contrib.go.opencensus.io/exporter/jaeger v0.1.1-0.20190430175949-e8b55949d948 h1:xdP25yLqNGSnpfDmEChwA9ZuKLdiyL0jqJKPm/Ypfag= +contrib.go.opencensus.io/exporter/jaeger v0.1.1-0.20190430175949-e8b55949d948/go.mod h1:ukdzwIYYHgZ7QYtwVFQUjiT28BJHiMhTERo32s6qVgM= +contrib.go.opencensus.io/exporter/ocagent v0.6.0 h1:Z1n6UAyr0QwM284yUuh5Zd8JlvxUGAhFZcgMJkMPrGM= +contrib.go.opencensus.io/exporter/ocagent v0.6.0/go.mod h1:zmKjrJcdo0aYcVS7bmEeSEBLPA9YJp5bjrofdU3pIXs= +contrib.go.opencensus.io/exporter/prometheus v0.1.0 h1:SByaIoWwNgMdPSgl5sMqM2KDE5H/ukPWBRo314xiDvg= +contrib.go.opencensus.io/exporter/prometheus v0.1.0/go.mod h1:cGFniUXGZlKRjzOyuZJ6mgB+PgBcCIa79kEKR8YCW+A= +contrib.go.opencensus.io/exporter/zipkin v0.1.1 h1:PR+1zWqY8ceXs1qDQQIlgXe+sdiwCf0n32bH4+Epk8g= +contrib.go.opencensus.io/exporter/zipkin v0.1.1/go.mod h1:GMvdSl3eJ2gapOaLKzTKE3qDgUkJ86k9k3yY2eqwkzc= +contrib.go.opencensus.io/resource v0.1.2 h1:b4WFJV8u7/NzPWHeTqj3Ec2AW8OGhtJxC/hbphIOvbU= +contrib.go.opencensus.io/resource v0.1.2/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= +dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3 h1:hJiie5Bf3QucGRa4ymsAUOxyhYwGEz1xrsVk0P8erlw= +dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= +dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0 h1:SPOUaucgtVls75mg+X7CXigS71EnsfVUK/2CgVrwqgw= +dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= +dmitri.shuralyov.com/route/github v0.0.0-20180323232716-ce4edef1f8c9 h1:7rFRFegk+s3dVmOi/f8wDQ5O+uI29iNA7MzzMFVOmzU= +dmitri.shuralyov.com/route/github v0.0.0-20180323232716-ce4edef1f8c9/go.mod h1:5oSmIM2HxgXgKSUK0E6F3pcAfHztRSpKaVxglL+HLSk= +dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412 h1:GvWw74lx5noHocd+f6HBMXK6DuggBB1dhVkuGZbv7qM= +dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= +dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c h1:ivON6cwHK1OH26MZyWDCnbTRZZf0IhNsENoNAKFS1g4= +dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= +git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= +git.apache.org/thrift.git v0.13.0 h1:/3bz5WZ+sqYArk7MBBBbDufMxKKOA56/6JO6psDpUDY= +git.apache.org/thrift.git v0.13.0/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= +github.com/AaronO/go-git-http v0.0.0-20161214145340-1d9485b3a98f h1:x/RDwGRneK2/891S2o7KhZt3MhHMSCssoeDOfvolTMk= +github.com/AaronO/go-git-http v0.0.0-20161214145340-1d9485b3a98f/go.mod h1:+6Yuq73F9068Na+mSBNXCvyuxvgw4f/g5ii40e3U8Sc= +github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9 h1:HD8gA2tkByhMAwYaFAX9w2l7vxvBQ5NMoxDrkhqhtn4= +github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= +github.com/Azure/azure-sdk-for-go v23.2.0+incompatible h1:bch1RS060vGpHpY3zvQDV4rOiRw25J1zmR/B9a76aSA= +github.com/Azure/azure-sdk-for-go v23.2.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/go-autorest v11.1.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest v11.2.8+incompatible h1:Q2feRPMlcfVcqz3pF87PJzkm5lZrL+x6BDtzhODzNJM= +github.com/Azure/go-autorest v11.2.8+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DATA-DOG/go-sqlmock v1.3.3 h1:CWUqKXe0s8A2z6qCgkP4Kru7wC11YoAnoupUKFDnH08= +github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/DataDog/datadog-go v2.2.0+incompatible h1:V5BKkxACZLjzHjSgBbr2gvLA2Ae49yhc6CSY7MLy5k4= +github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46 h1:lsxEuwrXEAokXB9qhlbKWPpo3KMLZQ5WB5WLQRW1uq0= +github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/OneOfOne/xxhash v1.2.5 h1:zl/OfRA6nftbBK9qTohYBJ5xvw6C/oNKizR7cZGl3cI= +github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= +github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/Shopify/sarama v1.19.0 h1:9oksLxC6uxVPHPVYUmq6xhr1BOF/hHobWH2UzO67z1s= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= +github.com/aclements/go-gg v0.0.0-20170323211221-abd1f791f5ee h1:KJgh99JlYRhfgHtb7XyhAZSJMdfkjVmo3PP7XO1/HO8= +github.com/aclements/go-gg v0.0.0-20170323211221-abd1f791f5ee/go.mod h1:55qNq4vcpkIuHowELi5C8e+1yUHtoLoOUR9QU5j7Tes= +github.com/aclements/go-moremath v0.0.0-20190830160640-d16893ddf098 h1:a7+Y8VlXRC2VX5ue6tpCutr4PsrkRkWWVZv4zqfaHuc= +github.com/aclements/go-moremath v0.0.0-20190830160640-d16893ddf098/go.mod h1:idZL3yvz4kzx1dsBOAC+oYv6L92P1oFEhUXUB1A/lwQ= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 h1:rFw4nCn9iMW+Vajsk51NtYIcwSTkXr+JGrMd36kTDJw= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/ajg/form v0.0.0-20160822230020-523a5da1a92f/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= +github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= +github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= +github.com/ajstarks/deck v0.0.0-20191009173945-82d717002242 h1:30XVZzSxUv+pE25mnlAL5nW/KsUDBmldePggLIAEJgk= +github.com/ajstarks/deck v0.0.0-20191009173945-82d717002242/go.mod h1:j3f/59diR4DorW5A78eDYvRkdrkh+nps4p5LA1Tl05U= +github.com/ajstarks/svgo v0.0.0-20190826172357-de52242f3d65 h1:kZegOsPGxfV9mM8WzfllNZOx3MvM5zItmhQlvITKVvA= +github.com/ajstarks/svgo v0.0.0-20190826172357-de52242f3d65/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/alecthomas/kingpin v2.2.6+incompatible h1:5svnBTFgJjZvGKyYBtMB0+m5wvrbUHiqye8wRJMlnYI= +github.com/alecthomas/kingpin v2.2.6+incompatible/go.mod h1:59OFYbFVLKQKq+mqrL6Rw5bR0c3ACQaawgXx0QYndlE= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= +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 h1:Hs82Z41s6SdL1CELW+XaDYmOH4hkBN4/N9og/AsOv7E= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/andygrunwald/go-gerrit v0.0.0-20191101112536-3f5e365ccf57 h1:wtSQ14h8qAUezER6QPfYmCh5+W5Ly1lVruhm/QeOVUE= +github.com/andygrunwald/go-gerrit v0.0.0-20191101112536-3f5e365ccf57/go.mod h1:0iuRQp6WJ44ts+iihy5E/WlPqfg5RNeQxOmzRkxCdtk= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/apache/arrow v0.0.0-20191105160933-1afbcb6bb2a6 h1:0Cn1JoEEOLKPNpSQhiug+H2aot6rVVSAigTROSX4YxE= +github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= +github.com/apache/arrow/go/arrow v0.0.0-20191105160933-1afbcb6bb2a6 h1:Cm45hoKQzk6EQbR6X0B6zfQhUMLYo0MEjLt3+PWZNx0= +github.com/apache/arrow/go/arrow v0.0.0-20191105160933-1afbcb6bb2a6/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= +github.com/apache/thrift v0.0.0-20161221203622-b2a4d4ae21c7 h1:Fv9bK1Q+ly/ROk4aJsVMeuIwPel4bEnD8EPiI91nZMg= +github.com/apache/thrift v0.0.0-20161221203622-b2a4d4ae21c7/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.12.0 h1:pODnxUFNcjP9UTLZGTdeh+j16A8lJbRvD3rOtrk/7bs= +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apex/log v1.1.0 h1:J5rld6WVFi6NxA6m8GJ1LJqu3+GiTFIt3mYv27gdQWI= +github.com/apex/log v1.1.0/go.mod h1:yA770aXIDQrhVOIGurT/pVdfCpSq1GQV/auzMN5fzvY= +github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a h1:2KLQMJ8msqoPHIPDufkxVcoTtcmE5+1sL9950m4R9Pk= +github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a/go.mod h1:3NqKYiepwy8kCu4PNA+aP7WUV72eXWJeP9/r3/K9aLE= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 h1:G1bPvciwNyF7IUmKXNt9Ak3m6u9DE1rF+RmtIkBpVdA= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878 h1:EFSB7Zo9Eg91v7MJPVsifUysc/wPdN+NOnVe6bWbdBM= +github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878/go.mod h1:3AMJUQhVx52RsWOnlkpikZr01T/yAVN2gn0861vByNg= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310 h1:BUAU3CGlLvorLI26FmByPp2eC2qla6E1Tw+scpcg/to= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA= +github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/aws/aws-sdk-go v1.15.64/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= +github.com/aws/aws-sdk-go v1.15.77/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= +github.com/aws/aws-sdk-go v1.23.12 h1:2UnxgNO6Y5J1OrkXS8XNp0UatDxD1bWHiDT62RDPggI= +github.com/aws/aws-sdk-go v1.23.12/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go-v2 v0.15.0 h1:mQCV2MV4I0L02Nwi1xs0HM7yWbrcWjjUOy1UAv27sw8= +github.com/aws/aws-sdk-go-v2 v0.15.0/go.mod h1:pFLIN9LDjOEwHfruGweAXEq0XaD6uRkY8FsRkxhuBIg= +github.com/aws/aws-xray-sdk-go v0.9.4 h1:3mtFCrgFR5IefmWFV5pscHp9TTyOWuqaIKJIY0d1Y4g= +github.com/aws/aws-xray-sdk-go v0.9.4/go.mod h1:XtMKdBQfpVut+tJEwI7+dJFRxxRdxHDyVNp2tHXRq04= +github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59 h1:WWB576BN5zNSZc/M9d/10pqEx5VHNhaQ/yOVAkmj5Yo= +github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I= +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 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/beyang/hgo v0.0.0-20150825035631-d45f1891a48a h1:Gfewj+rrM2kJ2DI3+dfJj3W+PPEfNqwX/6R7lax9j14= +github.com/beyang/hgo v0.0.0-20150825035631-d45f1891a48a/go.mod h1:n88RubZnITBFvoKP88nD4ajBX+PekZgpQOCgxazSTTA= +github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 h1:mXoPYz/Ul5HYEDvkta6I8/rnYM5gSdSV2tJ6XbZuEtY= +github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= +github.com/blakesmith/ar v0.0.0-20150311145944-8bd4349a67f2 h1:oMCHnXa6CCCafdPDbMh/lWRhRByN0VFLvv+g+ayx1SI= +github.com/blakesmith/ar v0.0.0-20150311145944-8bd4349a67f2/go.mod h1:PkYb9DJNAwrSvRx5DYA+gUcOIgTGVMNkfSCbZM8cWpI= +github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= +github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= +github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= +github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40 h1:y4B3+GPxKlrigF1ha5FFErxK+sr6sWxQovRMzwMhejo= +github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= +github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b h1:AP/Y7sqYicnjGDfD5VcY4CIfh1hRXBUavxrvELjTiOE= +github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b/go.mod h1:ac9efd0D1fsDb3EJvhqgXRbFx7bs2wqZ10HQPeU8U/Q= +github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/boombuler/barcode v1.0.0 h1:s1TvRnXwL2xJRaccrdcBQMZxq6X7DvsMogtmJeHDdrc= +github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625 h1:ckJgFhFWywOx+YLEMIJsTb+NV6NexWICk5+AMSuz3ss= +github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= +github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b h1:L/QXpzIa3pOvUGt1D1lA5KjYhPBAN/3iWdP7xeFS9F0= +github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA= +github.com/bsm/sarama-cluster v2.1.15+incompatible h1:RkV6WiNRnqEEbp81druK8zYhmnIgdOjqSVi0+9Cnl2A= +github.com/bsm/sarama-cluster v2.1.15+incompatible/go.mod h1:r7ao+4tTNXvWm+VRpRJchr2kQhqxgmAp2iEX5W96gMM= +github.com/c-bata/go-prompt v0.2.2 h1:uyKRz6Z6DUyj49QVijyM339UJV9yhbr70gESwbNU3e0= +github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= +github.com/caarlos0/ctrlc v1.0.0 h1:2DtF8GSIcajgffDFJzyG15vO+1PuBWOMUdFut7NnXhw= +github.com/caarlos0/ctrlc v1.0.0/go.mod h1:CdXpj4rmq0q/1Eb44M9zi2nKB0QraNKuRGYGrrHhcQw= +github.com/cactus/go-statsd-client v3.2.0+incompatible h1:ZJpQV7zHnerDzsEQS1wnI38tpR7wX3QFmL7WzTerEmY= +github.com/cactus/go-statsd-client/statsd v0.0.0-20191030180650-a68a2246f89c h1:rrLWPlpOKwnBpVUXitbgM3+Nie1eBaFfBZqfiPpxVj8= +github.com/cactus/go-statsd-client/statsd v0.0.0-20191030180650-a68a2246f89c/go.mod h1:l/bIBLeOl9eX+wxJAzxS4TveKRtAqlyDpHjhkfO0MEI= +github.com/campoy/unique v0.0.0-20180121183637-88950e537e7e h1:V9a67dfYqPLAvzk5hMQOXYJlZ4SLIXgyKIE+ZiHzgGQ= +github.com/campoy/unique v0.0.0-20180121183637-88950e537e7e/go.mod h1:9IOqJGCPMSc6E5ydlp5NIonxObaeu/Iub/X03EKPVYo= +github.com/casbin/casbin v1.9.1 h1:ucjbS5zTrmSLtH4XogqOG920Poe6QatdXtz1FEbApeM= +github.com/casbin/casbin v1.9.1/go.mod h1:z8uPsfBJGUsnkagrt3G8QvjgTKFMBJ32UP8HpZllfog= +github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409 h1:Da6uN+CAo1Wf09Rz1U4i9QN8f0REjyNJ73BEwAq/paU= +github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v0.0.0-20181017004759-096ff4a8a059/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible h1:C29Ae4G5GtYyYMm1aztcyj/J5ckgJm2zwdDajFbx1NY= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3 h1:TJH+oke8D16535+jHExHj4nQvzlZrj7ug5D7I/orNUA= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec h1:EdRZT3IeKQmfCSrgo8SZ8V3MEnskuJP0wCYNpe+aiXo= +github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= +github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= +github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= +github.com/cockroachdb/cockroach-go v0.0.0-20181001143604-e0a95dfd547c/go.mod h1:XGLbWH/ujMcbPbhZq52Nv6UrCghb1yGn//133kEsvDk= +github.com/cockroachdb/cockroach-go v0.0.0-20190916165215-ad57a61cc915 h1:QX2Zc22B15gdWwDCwS7BXmbeD/SWdcRK12gOfZ5BsIs= +github.com/cockroachdb/cockroach-go v0.0.0-20190916165215-ad57a61cc915/go.mod h1:XGLbWH/ujMcbPbhZq52Nv6UrCghb1yGn//133kEsvDk= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0 h1:sDMmm+q/3+BukdIpxwO365v/Rbspp2Nt5XntgQRXq8Q= +github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= +github.com/codegangsta/negroni v1.0.0 h1:+aYywywx4bnKXWvoWtRfJ91vC59NbEhEY03sZjQhbVY= +github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0= +github.com/coreos/bbolt v1.3.2 h1:wZwiHHUieZCquLkDL0B8UhzreNWsPHooDAG3q34zk0s= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible h1:jFneRYjIvLMLhDLCzuTuU4rSJUjRplcJQ7pD7MnhC04= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/etcd v3.3.17+incompatible h1:f/Z3EoDSx1yjaIjLQGo1diYUlQYSBrrAQ5vP8NjwXwo= +github.com/coreos/etcd v3.3.17+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible h1:bXhRBIXoTm9BYHS3gE0TtQuyNZyeEMux2sDi4oo5YOo= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-semver v0.2.0 h1:3Jm3tLmsgAYcjC+4Up7hJrFBPr+n7rAqYeSw/SZazuY= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f h1:JOrtw2xFKzlg+cbHpyrpLDmnN1HqhBfnX7WDiW7eG2c= +github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/creack/pty v1.1.7 h1:6pwm8kMQKCmgUg0ZHTm5+/YvRK0s3THD/28+T6/kk4A= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/crossdock/crossdock-go v0.0.0-20160816171116-049aabb0122b h1:WR1qVJzbvrVywhAk4kMQKRPx09AZVI0NdEdYs59iHcA= +github.com/crossdock/crossdock-go v0.0.0-20160816171116-049aabb0122b/go.mod h1:v9FBN7gdVTpiD/+LZ7Po0UKvROyT87uLVxTHVky/dlQ= +github.com/cznic/cc v0.0.0-20181122101902-d673e9b70d4d h1:AePLLLsGE1yOEDAmaJlQ9zd/9qiaEVskYukZ1f2srAA= +github.com/cznic/cc v0.0.0-20181122101902-d673e9b70d4d/go.mod h1:m3fD/V+XTB35Kh9zw6dzjMY+We0Q7PMf6LLIC4vuG9k= +github.com/cznic/fileutil v0.0.0-20181122101858-4d67cfea8c87 h1:94XgeeTZ+3Xi9zsdgBjP1Byx/wywCImjF8FzQ7OaKdU= +github.com/cznic/fileutil v0.0.0-20181122101858-4d67cfea8c87/go.mod h1:8S58EK26zhXSxzv7NQFpnliaOQsmDUxvoQO3rt154Vg= +github.com/cznic/golex v0.0.0-20181122101858-9c343928389c h1:G8zTsaqyVfIHpgMFcGgdbhHSFhlNc77rAKkhVbQ9kQg= +github.com/cznic/golex v0.0.0-20181122101858-9c343928389c/go.mod h1:+bmmJDNmKlhWNG+gwWCkaBoTy39Fs+bzRxVBzoTQbIc= +github.com/cznic/internal v0.0.0-20181122101858-3279554c546e h1:58AcyflCe84EONph4gkyo3eDOEQcW5HIPfQBrD76W68= +github.com/cznic/internal v0.0.0-20181122101858-3279554c546e/go.mod h1:olo7eAdKwJdXxb55TKGLiJ6xt1H0/tiiRCWKVLmtjY4= +github.com/cznic/ir v0.0.0-20181122101859-da7ba2ecce8b h1:GelTfvbS1tZtnyCTx3aMIHbRw5euyrfHd6H3rLqLlHU= +github.com/cznic/ir v0.0.0-20181122101859-da7ba2ecce8b/go.mod h1:bctvsSxTD8Lpaj5RRQ0OrAAu4+0mD4KognDQItBNMn0= +github.com/cznic/lex v0.0.0-20181122101858-ce0fb5e9bb1b h1:KJtZdP0G3jUnpgEWZdJ7326WvTbREwcwlDSOpkpNZGY= +github.com/cznic/lex v0.0.0-20181122101858-ce0fb5e9bb1b/go.mod h1:LcYbbl1tn/c31gGxe2EOWyzr7EaBcdQOoIVGvJMc7Dc= +github.com/cznic/lexer v0.0.0-20181122101858-e884d4bd112e h1:K5kIaw68kxYw40mp8YKuwKrb63R0BPCR1iEGvBR6Mfs= +github.com/cznic/lexer v0.0.0-20181122101858-e884d4bd112e/go.mod h1:YNGh5qsZlhFHDfWBp/3DrJ37Uy4pRqlwxtL+LS7a/Qw= +github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 h1:iwZdTE0PVqJCos1vaoKsclOGD3ADKpshg3SRtYBbwso= +github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM= +github.com/cznic/strutil v0.0.0-20181122101858-275e90344537 h1:MZRmHqDBd0vxNwenEbKSQqRVT24d3C05ft8kduSwlqM= +github.com/cznic/strutil v0.0.0-20181122101858-275e90344537/go.mod h1:AHHPPPXTw0h6pVabbcbyGRK1DckRn7r/STdZEeIDzZc= +github.com/cznic/xc v0.0.0-20181122101856-45b06973881e h1:U9mUTtTukbCdFuphv3QiJBjtImXsUTHcX5toZZi4OzY= +github.com/cznic/xc v0.0.0-20181122101856-45b06973881e/go.mod h1:3oFoiOvCDBYH+swwf5+k/woVmWy7h1Fcyu8Qig/jjX0= +github.com/dave/jennifer v1.2.0 h1:S15ZkFMRoJ36mGAQgWL1tnr0NQJh9rZ8qatseX/VbBc= +github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= +github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +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/dgraph-io/badger v1.6.0 h1:DshxFxZWXUcO0xX476VJC07Xsr6ZCBVRHKZ93Oh7Evo= +github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= +github.com/dgrijalva/jwt-go v0.0.0-20160705203006-01aeca54ebda/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8 h1:akOQj8IVgoeFfBTzGOEQakCYshWD6RNo1M5pivFXt70= +github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= +github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= +github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dgryski/go-sip13 v0.0.0-20190329191031-25c5027a8c7b h1:Yqiad0+sloMPdd/0Fg22actpFx0dekpzt1xJmVNVkU0= +github.com/dgryski/go-sip13 v0.0.0-20190329191031-25c5027a8c7b/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= +github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= +github.com/disintegration/gift v1.2.1 h1:Y005a1X4Z7Uc+0gLpSAsKhWi4qLtsdEcMIbbdvdZ6pc= +github.com/disintegration/gift v1.2.1/go.mod h1:Jh2i7f7Q2BM7Ezno3PhfezbR1xpUg9dUg3/RlKGr4HI= +github.com/djherbis/buffer v1.1.0 h1:uGQ+DZDAMlfC2z3khbBtLcAHC0wyoNrX9lpOml3g3fg= +github.com/djherbis/buffer v1.1.0/go.mod h1:VwN8VdFkMY0DCALdY8o00d3IZ6Amz/UNVMWcSaJT44o= +github.com/djherbis/nio v2.0.3+incompatible h1:CidFHoR25he4511AIQ3RW9LH9XkLMOoNML8xd7R7Irc= +github.com/djherbis/nio v2.0.3+incompatible/go.mod h1:v74owXPROGWsr1y28T13rlXf5Hn/bWJ1bbX8M+BqyPo= +github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96 h1:cenwrSVm+Z7QLSV/BsnenAOcDXdX4cMv4wP0B/5QbPg= +github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 h1:bWDMxwH3px2JBh6AyO7hdCn/PkvCZXii8TGj7sbtEbQ= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/dustin/go-humanize v0.0.0-20180713052910-9f541cc9db5d/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/eapache/go-resiliency v1.1.0 h1:1NtRmCAqadE2FN4ZcN6g90TP3uk8cg9rn9eNK2197aU= +github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/eclipse/paho.mqtt.golang v1.2.0 h1:1F8mhG9+aO5/xpdtFkW4SxOJB67ukuDC3t2y2qayIX0= +github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= +github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e h1:p1yVGRW3nmb85p1Sh1ZJSDm4A4iKLS5QNbvUHMgGu/M= +github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633 h1:H2pdYOb3KQ1/YsqVWoWNLQO+fusocsw354rqGTZtAgw= +github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful-swagger12 v0.0.0-20170926063155-7524189396c6 h1:V94anc0ZG3Pa/cAMwP2m1aQW3+/FF8Qmw/GsFyTJAp4= +github.com/emicklei/go-restful-swagger12 v0.0.0-20170926063155-7524189396c6/go.mod h1:qr0VowGBT4CS4Q8vFF8BSeKz34PuqKGxs/L0IAQA9DQ= +github.com/emirpasic/gods v1.9.0 h1:rUF4PuzEjMChMiNsVjdI+SyLu7rEqpQ5reNFnhC7oFo= +github.com/emirpasic/gods v1.9.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/envoyproxy/go-control-plane v0.6.9 h1:deEH9W8ZAUGNbCdX+9iNzBOGrAOrnpJGoy0PcTqk/tE= +github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= +github.com/evanphx/json-patch v0.0.0-20190203023257-5858425f7550/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.5.0+incompatible h1:ouOWdg56aJriqS0huScTkVXPC5IcNrDCXZ6OoTAWu7M= +github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/structs v1.0.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= +github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8= +github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8 h1:a9ENSRDFBUPkJ5lCgVZh26+ZbGyoVJG7yb5SSzF5H54= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= +github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/garyburd/redigo v1.6.0 h1:0VruCpn7yAIIu7pWVClQC8wxCJEcG3nyzpMSHKi1PQc= +github.com/garyburd/redigo v1.6.0/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= +github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3 h1:t8FVkw33L+wilf2QiWkw0UV77qRpcH/JHPKGpKa2E8g= +github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= +github.com/gin-gonic/gin v1.4.0 h1:3tMoCCfM7ppqsR0ptz/wi1impNpT7/9wQtMZ8lr1mCQ= +github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= +github.com/gliderlabs/ssh v0.1.1 h1:j3L6gSLQalDETeEg/Jg0mGY0/y/N6zI2xX1978P0Uqw= +github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8 h1:DujepqpGd1hyOd7aW59XpK7Qymp8iy83xq74fLr21is= +github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/glycerine/go-unsnap-stream v0.0.0-20190901134440-81cf024a9e0a h1:FQqoVvjbiUioBBFUL5up+h+GdCa/AnJsL/1bIs/veSI= +github.com/glycerine/go-unsnap-stream v0.0.0-20190901134440-81cf024a9e0a/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= +github.com/go-chi/chi v4.0.2+incompatible h1:maB6vn6FqCxrpz4FqWdh4+lwpyZIQS7YEAUcHlgXVRs= +github.com/go-chi/chi v4.0.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= +github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab h1:xveKWz2iaueeTaUgdetzel+U7exyigDYBryyVfV/rZk= +github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= +github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= +github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.17.2/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= +github.com/go-openapi/analysis v0.19.4 h1:1TjOzrWkj+9BrjnM1yPAICbaoC0FyfD49oVkTBrSSa0= +github.com/go-openapi/analysis v0.19.4/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= +github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.17.2/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.19.2 h1:a2kIyV3w+OS3S97zxUndRVD46+FhGOUBDFY7nmu4CsY= +github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= +github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.17.2/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.19.2 h1:A9+F4Dc/MCNB5jibxf6rRvOvR/iFgQdyNx9eIhnGqq0= +github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= +github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.17.2/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.19.2 h1:o20suLFB4Ri0tuzpWtyHlh7E7HnkqTNLq6aR6WVNS1w= +github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= +github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.17.2/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.2 h1:rf5ArTHmIJxyV5Oiks+Su0mUens1+AjpkPoWr5xFRcI= +github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= +github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= +github.com/go-openapi/runtime v0.18.0/go.mod h1:uI6pHuxWYTy94zZxgcwJkUWa9wbIlhteGfloI10GD4U= +github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= +github.com/go-openapi/runtime v0.19.3 h1:pyVE0l7ybsThmn9Y9kWRK3o/cUmaT8WVfd6pDCIKeNE= +github.com/go-openapi/runtime v0.19.3/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= +github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.17.2/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.19.2 h1:SStNd1jRcYtfKCN7R0laGNs80WYYvn5CbBjM2sOmCrE= +github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= +github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.17.2/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= +github.com/go-openapi/strfmt v0.19.2 h1:clPGfBnJohokno0e+d7hs6Yocrzjlgz6EsQSDncCRnE= +github.com/go-openapi/strfmt v0.19.2/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= +github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.17.2/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.4 h1:i/65mCM9s1h8eCkT07F5Z/C1e/f8VTgEwer+00yevpA= +github.com/go-openapi/swag v0.19.4/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/validate v0.17.2/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= +github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= +github.com/go-openapi/validate v0.19.2 h1:ky5l57HjyVRrsJfd2+Ro5Z9PjGuKbsmftwyMtk8H7js= +github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= +github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gobuffalo/attrs v0.0.0-20190219185331-f338c9388485/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= +github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= +github.com/gobuffalo/attrs v0.1.0 h1:LY6/rbhPD/hfa+AfviaMXBmZBGb0fGHF12yg7f3dPQA= +github.com/gobuffalo/attrs v0.1.0/go.mod h1:fmNpaWyHM0tRm8gCZWKx8yY9fvaNLo2PyzBNSrBZ5Hw= +github.com/gobuffalo/buffalo v0.12.8-0.20181004233540-fac9bb505aa8/go.mod h1:sLyT7/dceRXJUxSsE813JTQtA3Eb1vjxWfo/N//vXIY= +github.com/gobuffalo/buffalo v0.13.0/go.mod h1:Mjn1Ba9wpIbpbrD+lIDMy99pQ0H0LiddMIIDGse7qT4= +github.com/gobuffalo/buffalo v0.13.1/go.mod h1:K9c22KLfDz7obgxvHv1amvJtCQEZNiox9+q6FDJ1Zcs= +github.com/gobuffalo/buffalo v0.13.2/go.mod h1:vA8I4Dwcfkx7RAzIRHVDZxfS3QJR7muiOjX4r8P2/GE= +github.com/gobuffalo/buffalo v0.13.4/go.mod h1:y2jbKkO0k49OrNIOAkbWQiPBqxAFpHn5OKnkc7BDh+I= +github.com/gobuffalo/buffalo v0.13.5/go.mod h1:hPcP12TkFSZmT3gUVHZ24KRhTX3deSgu6QSgn0nbWf4= +github.com/gobuffalo/buffalo v0.13.6/go.mod h1:/Pm0MPLusPhWDayjRD+/vKYnelScIiv0sX9YYek0wpg= +github.com/gobuffalo/buffalo v0.13.7/go.mod h1:3gQwZhI8DSbqmDqlFh7kfwuv/wd40rqdVxXtFWlCQHw= +github.com/gobuffalo/buffalo v0.13.9/go.mod h1:vIItiQkTHq46D1p+bw8mFc5w3BwrtJhMvYjSIYK3yjE= +github.com/gobuffalo/buffalo v0.13.12/go.mod h1:Y9e0p0cdo/eI+lHm7EFzlkc9YzjwGo5QeDj+FbsyqVA= +github.com/gobuffalo/buffalo v0.13.13/go.mod h1:WAL36xBN8OkU71lNjuYv6llmgl0o8twjlY+j7oGUmYw= +github.com/gobuffalo/buffalo v0.14.0/go.mod h1:A9JI3juErlXNrPBeJ/0Pdky9Wz+GffEg7ZN0d1B5h48= +github.com/gobuffalo/buffalo v0.14.2/go.mod h1:VNMTzddg7bMnkVxCUXzqTS4PvUo6cDOs/imtG8Cnt/k= +github.com/gobuffalo/buffalo v0.14.3/go.mod h1:3O9vB/a4UNb16TevehTvDCaPnb98NWvYz0msJQ6ZlVA= +github.com/gobuffalo/buffalo v0.14.5/go.mod h1:RWK6evR4hY4nRVfw9xie9V/LYK3j0U9wU2oKgQUFZ88= +github.com/gobuffalo/buffalo v0.14.6/go.mod h1:71Un+T2JGgwXLjBqYFdGSooz/OUjw15BJM0nbbcAM0o= +github.com/gobuffalo/buffalo v0.14.9/go.mod h1:M8XWw+Rcotn7C4NYpCEGBg3yX+O1TeD1pBfmiILhgHw= +github.com/gobuffalo/buffalo v0.14.10/go.mod h1:49A7/JYlsCyTkVHtvKl91w6rG35ZiywwjWMVC1zKWsQ= +github.com/gobuffalo/buffalo v0.14.11/go.mod h1:RO5OwOJQjv6/TukzszV5ELA54lg84D1kZwla6oAkTlo= +github.com/gobuffalo/buffalo v0.15.0 h1:VsxIcfJaDm4u2UirLHGgMfQpfHVwJP3JoDmGyeeNnc0= +github.com/gobuffalo/buffalo v0.15.0/go.mod h1:WBSrSdbxiww/yXZlh2D69FByhM5xdYT1aDIwEQssTto= +github.com/gobuffalo/buffalo-docker v1.0.5/go.mod h1:NZ3+21WIdqOUlOlM2onCt7cwojYp4Qwlsngoolw8zlE= +github.com/gobuffalo/buffalo-docker v1.0.6/go.mod h1:UlqKHJD8CQvyIb+pFq+m/JQW2w2mXuhxsaKaTj1X1XI= +github.com/gobuffalo/buffalo-docker v1.0.7 h1:kj+AfChcev54v4N8N6PzNFWyiVSenzu6djrgxTBvbTk= +github.com/gobuffalo/buffalo-docker v1.0.7/go.mod h1:BdB8AhcmjwR6Lo3rDPMzyh/+eNjYnZ1TAO0eZeLkhig= +github.com/gobuffalo/buffalo-plugins v1.0.2/go.mod h1:pOp/uF7X3IShFHyobahTkTLZaeUXwb0GrUTb9ngJWTs= +github.com/gobuffalo/buffalo-plugins v1.0.4/go.mod h1:pWS1vjtQ6uD17MVFWf7i3zfThrEKWlI5+PYLw/NaDB4= +github.com/gobuffalo/buffalo-plugins v1.4.3/go.mod h1:uCzTY0woez4nDMdQjkcOYKanngeUVRO2HZi7ezmAjWY= +github.com/gobuffalo/buffalo-plugins v1.5.1/go.mod h1:jbmwSZK5+PiAP9cC09VQOrGMZFCa/P0UMlIS3O12r5w= +github.com/gobuffalo/buffalo-plugins v1.6.1/go.mod h1:/XZt7UuuDnx5P4v3cStK0+XoYiNOA2f0wDIsm1oLJQA= +github.com/gobuffalo/buffalo-plugins v1.6.4/go.mod h1:/+N1aophkA2jZ1ifB2O3Y9yGwu6gKOVMtUmJnbg+OZI= +github.com/gobuffalo/buffalo-plugins v1.6.5/go.mod h1:0HVkbgrVs/MnPZ/FOseDMVanCTm2RNcdM0PuXcL1NNI= +github.com/gobuffalo/buffalo-plugins v1.6.6/go.mod h1:hSWAEkJyL9RENJlmanMivgnNkrQ9RC4xJARz8dQryi0= +github.com/gobuffalo/buffalo-plugins v1.6.7/go.mod h1:ZGZRkzz2PiKWHs0z7QsPBOTo2EpcGRArMEym6ghKYgk= +github.com/gobuffalo/buffalo-plugins v1.6.9/go.mod h1:yYlYTrPdMCz+6/+UaXg5Jm4gN3xhsvsQ2ygVatZV5vw= +github.com/gobuffalo/buffalo-plugins v1.6.10/go.mod h1:HxzPZjAEzh9H0gnHelObxxrut9O+1dxydf7U93SYsc8= +github.com/gobuffalo/buffalo-plugins v1.6.11/go.mod h1:eAA6xJIL8OuynJZ8amXjRmHND6YiusVAaJdHDN1Lu8Q= +github.com/gobuffalo/buffalo-plugins v1.7.2/go.mod h1:vEbx30cLFeeZ48gBA/rkhbqC2M/2JpsKs5CoESWhkPw= +github.com/gobuffalo/buffalo-plugins v1.8.1/go.mod h1:vu71J3fD4b7KKywJQ1tyaJGtahG837Cj6kgbxX0e4UI= +github.com/gobuffalo/buffalo-plugins v1.8.2/go.mod h1:9te6/VjEQ7pKp7lXlDIMqzxgGpjlKoAcAANdCgoR960= +github.com/gobuffalo/buffalo-plugins v1.8.3/go.mod h1:IAWq6vjZJVXebIq2qGTLOdlXzmpyTZ5iJG5b59fza5U= +github.com/gobuffalo/buffalo-plugins v1.9.3/go.mod h1:BNRunDThMZKjqx6R+n14Rk3sRSOWgbMuzCKXLqbd7m0= +github.com/gobuffalo/buffalo-plugins v1.9.4/go.mod h1:grCV6DGsQlVzQwk6XdgcL3ZPgLm9BVxlBmXPMF8oBHI= +github.com/gobuffalo/buffalo-plugins v1.10.0/go.mod h1:4osg8d9s60txLuGwXnqH+RCjPHj9K466cDFRl3PErHI= +github.com/gobuffalo/buffalo-plugins v1.11.0/go.mod h1:rtIvAYRjYibgmWhnjKmo7OadtnxuMG5ZQLr25ozAzjg= +github.com/gobuffalo/buffalo-plugins v1.12.0/go.mod h1:kw4Mj2vQXqe4X5TI36PEQgswbL30heGQwJEeDKd1v+4= +github.com/gobuffalo/buffalo-plugins v1.13.0/go.mod h1:Y9nH2VwHVkeKhmdM380ulNXmhhD5On81nRVeD+WlDTQ= +github.com/gobuffalo/buffalo-plugins v1.13.1/go.mod h1:VcvhrgWcZLhOp8JPLckHBDtv05KepY/MxHsT2+06xX4= +github.com/gobuffalo/buffalo-plugins v1.14.0/go.mod h1:r2lykSXBT79c3T5JK1ouivVDrHvvCZUdZBmn+lPMHU8= +github.com/gobuffalo/buffalo-plugins v1.14.1 h1:ZL22sNZif+k/0I9X7LB8cpVMWh7zcVjfpiqxFlH4xSY= +github.com/gobuffalo/buffalo-plugins v1.14.1/go.mod h1:9BRBvXuKxR0m4YttVFRtuUcAP9Rs97mGq6OleyDbIuo= +github.com/gobuffalo/buffalo-pop v1.0.5/go.mod h1:Fw/LfFDnSmB/vvQXPvcXEjzP98Tc+AudyNWUBWKCwQ8= +github.com/gobuffalo/buffalo-pop v1.1.2/go.mod h1:czNLXcYbg5/fjr+uht0NyjZaQ0V2W23H1jzyORgCzQ4= +github.com/gobuffalo/buffalo-pop v1.1.5/go.mod h1:H01JIg42XwOHS4gRMhSeDZqBovNVlfBUsVXckU617s4= +github.com/gobuffalo/buffalo-pop v1.1.8/go.mod h1:1uaxOFzzVud/zR5f1OEBr21tMVLQS3OZpQ1A5cr0svE= +github.com/gobuffalo/buffalo-pop v1.1.13/go.mod h1:47GQoBjCMcl5Pw40iCWHQYJvd0HsT9kdaOPWgnzHzk4= +github.com/gobuffalo/buffalo-pop v1.1.14/go.mod h1:sAMh6+s7wytCn5cHqZIuItJbAqzvs6M7FemLexl+pwc= +github.com/gobuffalo/buffalo-pop v1.1.15/go.mod h1:vnvvxhbEFAaEbac9E2ZPjsBeL7WHkma2UyKNVA4y9Wo= +github.com/gobuffalo/buffalo-pop v1.2.1/go.mod h1:SHqojN0bVzaAzCbQDdWtsib202FDIxqwmCO8VDdweF4= +github.com/gobuffalo/buffalo-pop v1.3.0/go.mod h1:P0PhA225dRGyv0WkgYjYKqgoxPdDPDFZDvHj60AGF5w= +github.com/gobuffalo/buffalo-pop v1.6.0/go.mod h1:vrEVNOBKe042HjSNMj72J4FgER/VG6lt4xW6WMpTdlY= +github.com/gobuffalo/buffalo-pop v1.7.0/go.mod h1:UB5HHeFucJG7esTPUPjinBaJTEpVoREJHfSJJELnyeI= +github.com/gobuffalo/buffalo-pop v1.9.0/go.mod h1:MfrkBg0iN9+RdlxdHHAqqGFAC/iyCfTiKqH7Jvt+vhE= +github.com/gobuffalo/buffalo-pop v1.10.0/go.mod h1:C3/cFXB8Zd38XiGgHFdE7dw3Wu9MOKeD7bfELQicGPI= +github.com/gobuffalo/buffalo-pop v1.12.0/go.mod h1:pO2ONSJOCjyroGp4BwVHfMkfd7sLg1U9BvMJqRy6Otk= +github.com/gobuffalo/buffalo-pop v1.13.0/go.mod h1:h+zfyXCUFwihFqz6jmo9xsdsZ1Tm9n7knYpQjW0gv18= +github.com/gobuffalo/buffalo-pop v1.16.0/go.mod h1:XYA72cNFvL6m1o7PZ+Z7Yd/WDQTPcOiuDukiHvEo2KY= +github.com/gobuffalo/buffalo-pop v1.17.2/go.mod h1:nyOm0mtmp9/+m2NaXrp+9SqtuKZslA7Ys2DBaT/t2n4= +github.com/gobuffalo/buffalo-pop v1.22.0/go.mod h1:S8uJpbC9PUMFA6ZWbPnbk3c32n4vJ32p5NLsREcz+H8= +github.com/gobuffalo/buffalo-pop v1.23.1 h1:AnxJQZu/ZN7HCm3L8YBJoNWc2UiwSe6UHv5S4DfXUDA= +github.com/gobuffalo/buffalo-pop v1.23.1/go.mod h1:Sb+fy/hLtxfhOrtLAJiL7JsKqazydmAVqp5rcHio/yg= +github.com/gobuffalo/clara v0.4.1/go.mod h1:3QgAPqYgPqAzhfGbNLlp4UztaZRi2SOg+ZrZwaq9L94= +github.com/gobuffalo/clara v0.6.0/go.mod h1:RKZxkcH80pLykRi2hLkoxGMxA8T06Dc9fN/pFvutMFY= +github.com/gobuffalo/clara v0.7.0/go.mod h1:pen7ZMmnuYUYVF/3BbnvidYVAbMEfkyO4O+Tc+FKICU= +github.com/gobuffalo/clara v0.9.1 h1:LYjwmKG0VwwW/nOG2f5jNamvAcfdm2Ysokc/eoVhtZ8= +github.com/gobuffalo/clara v0.9.1/go.mod h1:OQ3HmSqLQJHaMmKhuTkmBCvBLL4BhgjweNpywRGulWo= +github.com/gobuffalo/depgen v0.0.0-20190219190223-ba8c93fa0c2c/go.mod h1:CE/HUV4vDCXtJayRf6WoMWgezb1yH4QHg8GNK8FL0JI= +github.com/gobuffalo/depgen v0.0.0-20190315122043-8442b3fa16db/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= +github.com/gobuffalo/depgen v0.0.0-20190315124901-e02f65b90669/go.mod h1:yTQe8xo5pGIDOApkeO95DjePS4ZOSSSx+ItkqJHxUG4= +github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= +github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= +github.com/gobuffalo/depgen v0.1.1/go.mod h1:65EOv3g7CMe4kc8J1Ds+l2bjcwrWKGXkE4/vpRRLPWY= +github.com/gobuffalo/depgen v0.2.0 h1:CYuqsR8sq+L9G9+A6uUcTEuaK8AGenAjtYOm238fN3M= +github.com/gobuffalo/depgen v0.2.0/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= +github.com/gobuffalo/envy v1.6.4/go.mod h1:Abh+Jfw475/NWtYMEt+hnJWRiC8INKWibIMyNt1w2Mc= +github.com/gobuffalo/envy v1.6.5/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= +github.com/gobuffalo/envy v1.6.6/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= +github.com/gobuffalo/envy v1.6.7/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= +github.com/gobuffalo/envy v1.6.8/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= +github.com/gobuffalo/envy v1.6.9/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= +github.com/gobuffalo/envy v1.6.10/go.mod h1:X0CFllQjTV5ogsnUrg+Oks2yTI+PU2dGYBJOEI2D1Uo= +github.com/gobuffalo/envy v1.6.11/go.mod h1:Fiq52W7nrHGDggFPhn2ZCcHw4u/rqXkqo+i7FB6EAcg= +github.com/gobuffalo/envy v1.6.12/go.mod h1:qJNrJhKkZpEW0glh5xP2syQHH5kgdmgsKss2Kk8PTP0= +github.com/gobuffalo/envy v1.6.13/go.mod h1:w9DJppgl51JwUFWWd/M/6/otrPtWV3WYMa+NNLunqKA= +github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/envy v1.7.1 h1:OQl5ys5MBea7OGCdvPbBJWRgnhC/fGona6QKfvFeau8= +github.com/gobuffalo/envy v1.7.1/go.mod h1:FurDp9+EDPE4aIUS3ZLyD+7/9fpx7YRt/ukY6jIHf0w= +github.com/gobuffalo/events v1.0.3/go.mod h1:Txo8WmqScapa7zimEQIwgiJBvMECMe9gJjsKNPN3uZw= +github.com/gobuffalo/events v1.0.7/go.mod h1:z8txf6H9jWhQ5Scr7YPLWg/cgXBRj8Q4uYI+rsVCCSQ= +github.com/gobuffalo/events v1.0.8/go.mod h1:A5KyqT1sA+3GJiBE4QKZibse9mtOcI9nw8gGrDdqYGs= +github.com/gobuffalo/events v1.1.1/go.mod h1:Ia9OgHMco9pEhJaPrPQJ4u4+IZlkxYVco2VbJ2XgnAE= +github.com/gobuffalo/events v1.1.3/go.mod h1:9yPGWYv11GENtzrIRApwQRMYSbUgCsZ1w6R503fCfrk= +github.com/gobuffalo/events v1.1.4/go.mod h1:09/YRRgZHEOts5Isov+g9X2xajxdvOAcUuAHIX/O//A= +github.com/gobuffalo/events v1.1.5/go.mod h1:3YUSzgHfYctSjEjLCWbkXP6djH2M+MLaVRzb4ymbAK0= +github.com/gobuffalo/events v1.1.6/go.mod h1:H/3ZB9BA+WorMb/0F79UvU6u0Cyo2hU97WA51bG2ONY= +github.com/gobuffalo/events v1.1.7/go.mod h1:6fGqxH2ing5XMb3EYRq9LEkVlyPGs4oO/eLzh+S8CxY= +github.com/gobuffalo/events v1.1.8/go.mod h1:UFy+W6X6VbCWS8k2iT81HYX65dMtiuVycMy04cplt/8= +github.com/gobuffalo/events v1.1.9/go.mod h1:/0nf8lMtP5TkgNbzYxR6Bl4GzBy5s5TebgNTdRfRbPM= +github.com/gobuffalo/events v1.2.0/go.mod h1:pxvpvsKXKZNPtHuIxUV3K+g+KP5o4forzaeFj++bh68= +github.com/gobuffalo/events v1.3.1/go.mod h1:9JOkQVoyRtailYVE/JJ2ZQ/6i4gTjM5t2HsZK4C1cSA= +github.com/gobuffalo/events v1.4.0 h1:Vje/vgTWs+dyhIS0U03oLpvx1SUdAqutv/hDWIz2ErM= +github.com/gobuffalo/events v1.4.0/go.mod h1:gQbNh681BwO+urxPpHHBiVD8Y+2lg17Wj2xuCMMKr8E= +github.com/gobuffalo/fizz v1.0.12/go.mod h1:C0sltPxpYK8Ftvf64kbsQa2yiCZY4RZviurNxXdAKwc= +github.com/gobuffalo/fizz v1.0.15/go.mod h1:EI3mEpjImuji6Bwu++N2uXhljQwOhwtimZQJ89zwyF4= +github.com/gobuffalo/fizz v1.0.16/go.mod h1:EI3mEpjImuji6Bwu++N2uXhljQwOhwtimZQJ89zwyF4= +github.com/gobuffalo/fizz v1.1.2/go.mod h1:THqzNTlNxNaF5hq3ddp16SnEcl2m83bTeTzJEoD+kqc= +github.com/gobuffalo/fizz v1.1.3/go.mod h1:THqzNTlNxNaF5hq3ddp16SnEcl2m83bTeTzJEoD+kqc= +github.com/gobuffalo/fizz v1.3.0/go.mod h1:THqzNTlNxNaF5hq3ddp16SnEcl2m83bTeTzJEoD+kqc= +github.com/gobuffalo/fizz v1.5.0/go.mod h1:Uu3ch14M4S7LDU7LAP1GQ+KNCRmZYd05Gqasc96XLa0= +github.com/gobuffalo/fizz v1.6.0/go.mod h1:V4V6EA8eYu/L43y6gZj7mjmPkigl9m+Eu3Pe+SWQRRg= +github.com/gobuffalo/fizz v1.6.1/go.mod h1:V4V6EA8eYu/L43y6gZj7mjmPkigl9m+Eu3Pe+SWQRRg= +github.com/gobuffalo/fizz v1.8.0/go.mod h1:2LqJOOGUp1JpN9m54ac5jMQ1MpbNvSVbFi9BY+AEXOo= +github.com/gobuffalo/fizz v1.9.0/go.mod h1:2LqJOOGUp1JpN9m54ac5jMQ1MpbNvSVbFi9BY+AEXOo= +github.com/gobuffalo/fizz v1.9.2/go.mod h1:XJb7Do1keOPkaJnJ48OCjV+7ABQ7mbOqui2WfDobXTQ= +github.com/gobuffalo/fizz v1.9.5 h1:Qh0GkP7MYtJs9RZwBkPJ0CzEXynVowdNfrjg8b+TOxA= +github.com/gobuffalo/fizz v1.9.5/go.mod h1:v9cFl56oXm+hNNayTsIQHnq209bTDUbIM8GYWCJw3TE= +github.com/gobuffalo/flect v0.0.0-20180907193754-dc14d8acaf9f/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= +github.com/gobuffalo/flect v0.0.0-20181002182613-4571df4b1daf/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= +github.com/gobuffalo/flect v0.0.0-20181007231023-ae7ed6bfe683/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= +github.com/gobuffalo/flect v0.0.0-20181018182602-fd24a256709f/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= +github.com/gobuffalo/flect v0.0.0-20181019110701-3d6f0b585514/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= +github.com/gobuffalo/flect v0.0.0-20181024204909-8f6be1a8c6c2/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= +github.com/gobuffalo/flect v0.0.0-20181104133451-1f6e9779237a/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= +github.com/gobuffalo/flect v0.0.0-20181108195648-8fe1b44cfe32/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= +github.com/gobuffalo/flect v0.0.0-20181109221320-179d36177b5b/go.mod h1:0HvNbHdfh+WOvDSIASqJOSxTOWSxCCUF++k/Y53v9rI= +github.com/gobuffalo/flect v0.0.0-20181114183036-47375f6d8328/go.mod h1:0HvNbHdfh+WOvDSIASqJOSxTOWSxCCUF++k/Y53v9rI= +github.com/gobuffalo/flect v0.0.0-20181210151238-24a2b68e0316/go.mod h1:en58vff74S9b99Eg42Dr+/9yPu437QjlNsO/hBYPuOk= +github.com/gobuffalo/flect v0.0.0-20190104192022-4af577e09bf2/go.mod h1:en58vff74S9b99Eg42Dr+/9yPu437QjlNsO/hBYPuOk= +github.com/gobuffalo/flect v0.0.0-20190117212819-a62e61d96794/go.mod h1:397QT6v05LkZkn07oJXXT6y9FCfwC8Pug0WA2/2mE9k= +github.com/gobuffalo/flect v0.0.0-20190205211104-b2cb381e56e0/go.mod h1:397QT6v05LkZkn07oJXXT6y9FCfwC8Pug0WA2/2mE9k= +github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs= +github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/flect v0.1.5/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= +github.com/gobuffalo/flect v0.1.6 h1:D7KWNRFiCknJKA495/e1BO7oxqf8tbieaLv/ehoZ/+g= +github.com/gobuffalo/flect v0.1.6/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= +github.com/gobuffalo/genny v0.0.0-20180924032338-7af3a40f2252/go.mod h1:tUTQOogrr7tAQnhajMSH6rv1BVev34H2sa1xNHMy94g= +github.com/gobuffalo/genny v0.0.0-20181003150629-3786a0744c5d/go.mod h1:WAd8HmjMVrnkAZbmfgH5dLBUchsZfqzp/WS5sQz+uTM= +github.com/gobuffalo/genny v0.0.0-20181005145118-318a41a134cc/go.mod h1:WAd8HmjMVrnkAZbmfgH5dLBUchsZfqzp/WS5sQz+uTM= +github.com/gobuffalo/genny v0.0.0-20181007153042-b8de7d566757/go.mod h1:+oG5Ljrw04czAHbPXREwaFojJbpUvcIy4DiOnbEJFTA= +github.com/gobuffalo/genny v0.0.0-20181012161047-33e5f43d83a6/go.mod h1:+oG5Ljrw04czAHbPXREwaFojJbpUvcIy4DiOnbEJFTA= +github.com/gobuffalo/genny v0.0.0-20181017160347-90a774534246/go.mod h1:+oG5Ljrw04czAHbPXREwaFojJbpUvcIy4DiOnbEJFTA= +github.com/gobuffalo/genny v0.0.0-20181019144442-df0a36fdd146/go.mod h1:IyRrGrQb/sbHu/0z9i5mbpZroIsdxjCYfj+zFiFiWZQ= +github.com/gobuffalo/genny v0.0.0-20181024195656-51392254bf53/go.mod h1:o9GEH5gn5sCKLVB5rHFC4tq40rQ3VRUzmx6WwmaqISE= +github.com/gobuffalo/genny v0.0.0-20181025145300-af3f81d526b8/go.mod h1:uZ1fFYvdcP8mu0B/Ynarf6dsGvp7QFIpk/QACUuFUVI= +github.com/gobuffalo/genny v0.0.0-20181027191429-94d6cfb5c7fc/go.mod h1:x7SkrQQBx204Y+O9EwRXeszLJDTaWN0GnEasxgLrQTA= +github.com/gobuffalo/genny v0.0.0-20181027195209-3887b7171c4f/go.mod h1:JbKx8HSWICu5zyqWOa0dVV1pbbXOHusrSzQUprW6g+w= +github.com/gobuffalo/genny v0.0.0-20181030163439-ed103521b8ec/go.mod h1:3Xm9z7/2oRxlB7PSPLxvadZ60/0UIek1YWmcC7QSaVs= +github.com/gobuffalo/genny v0.0.0-20181106193839-7dcb0924caf1/go.mod h1:x61yHxvbDCgQ/7cOAbJCacZQuHgB0KMSzoYcw5debjU= +github.com/gobuffalo/genny v0.0.0-20181107223128-f18346459dbe/go.mod h1:utQD3aKKEsdb03oR+Vi/6ztQb1j7pO10N3OBoowRcSU= +github.com/gobuffalo/genny v0.0.0-20181109163038-9539921b620f/go.mod h1:118bnhJR2oviiji++mZj0IH/IaFBCzwkWHaI4OQq5hQ= +github.com/gobuffalo/genny v0.0.0-20181110202416-7b7d8756a9e2/go.mod h1:118bnhJR2oviiji++mZj0IH/IaFBCzwkWHaI4OQq5hQ= +github.com/gobuffalo/genny v0.0.0-20181111200257-599b33630ab4/go.mod h1:w+iD/cdtIpPDFax6LlUFuCdXFD0DLRUXsfp3IeT/Doc= +github.com/gobuffalo/genny v0.0.0-20181114215459-0a4decd77f5d/go.mod h1:kN2KZ8VgXF9VIIOj/GM0Eo7YK+un4Q3tTreKOf0q1ng= +github.com/gobuffalo/genny v0.0.0-20181119162812-e8ff4adce8bb/go.mod h1:BA9htSe4bZwBDJLe8CUkoqkypq3hn3+CkoHqVOW718E= +github.com/gobuffalo/genny v0.0.0-20181127225641-2d959acc795b/go.mod h1:l54xLXNkteX/PdZ+HlgPk1qtcrgeOr3XUBBPDbH+7CQ= +github.com/gobuffalo/genny v0.0.0-20181128191930-77e34f71ba2a/go.mod h1:FW/D9p7cEEOqxYA71/hnrkOWm62JZ5ZNxcNIVJEaWBU= +github.com/gobuffalo/genny v0.0.0-20181203165245-fda8bcce96b1/go.mod h1:wpNSANu9UErftfiaAlz1pDZclrYzLtO5lALifODyjuM= +github.com/gobuffalo/genny v0.0.0-20181203201232-849d2c9534ea/go.mod h1:wpNSANu9UErftfiaAlz1pDZclrYzLtO5lALifODyjuM= +github.com/gobuffalo/genny v0.0.0-20181206121324-d6fb8a0dbe36/go.mod h1:wpNSANu9UErftfiaAlz1pDZclrYzLtO5lALifODyjuM= +github.com/gobuffalo/genny v0.0.0-20181207164119-84844398a37d/go.mod h1:y0ysCHGGQf2T3vOhCrGHheYN54Y/REj0ayd0Suf4C/8= +github.com/gobuffalo/genny v0.0.0-20181211165820-e26c8466f14d/go.mod h1:sHnK+ZSU4e2feXP3PA29ouij6PUEiN+RCwECjCTB3yM= +github.com/gobuffalo/genny v0.0.0-20190104222617-a71664fc38e7/go.mod h1:QPsQ1FnhEsiU8f+O0qKWXz2RE4TiDqLVChWkBuh1WaY= +github.com/gobuffalo/genny v0.0.0-20190112155932-f31a84fcacf5/go.mod h1:CIaHCrSIuJ4il6ka3Hub4DR4adDrGoXGEEt2FbBxoIo= +github.com/gobuffalo/genny v0.0.0-20190124191459-3310289fa4b4/go.mod h1:yIRqxhZV2sAzb+B3iPUMLauTRrYP8tJUlZ1zV9teKik= +github.com/gobuffalo/genny v0.0.0-20190131150032-1045e97d19fb/go.mod h1:yIRqxhZV2sAzb+B3iPUMLauTRrYP8tJUlZ1zV9teKik= +github.com/gobuffalo/genny v0.0.0-20190131190646-008a76242145/go.mod h1:NJvPZJxb9M4z790P6N2SMZKSUYpASpEvLuUWnHGKzb4= +github.com/gobuffalo/genny v0.0.0-20190219203444-c95082806342/go.mod h1:3BLT+Vs94EEz3fKR8WWOkYpL6c1tdJcZUNCe3LZAnvQ= +github.com/gobuffalo/genny v0.0.0-20190315121735-8b38fb089e88/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= +github.com/gobuffalo/genny v0.0.0-20190315124720-e16e52a93c79/go.mod h1:nKeefjbhYowo36ys9nG9VUvD9FRIS0p3BC2JFfcOucM= +github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= +github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28= +github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo= +github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk= +github.com/gobuffalo/genny v0.2.0/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= +github.com/gobuffalo/genny v0.3.0/go.mod h1:ywJ2CoXrTZj7rbS8HTbzv7uybnLKlsNSBhEQ+yFI3E8= +github.com/gobuffalo/genny v0.4.0/go.mod h1:Kdo8wsw5zmooVvEfMkfv4JI9Ogz/PMvBNvl133soylI= +github.com/gobuffalo/genny v0.4.1 h1:ylgRyFoVGtfq92Ziq0kyi0Sdwh//pqWEwg+vD3eK1ZA= +github.com/gobuffalo/genny v0.4.1/go.mod h1:dpded+KBgICFciAb+6R5Lo+1VxzofjqHgKqFYIL8M7U= +github.com/gobuffalo/gitgen v0.0.0-20190219185555-91c2c5f0aad5/go.mod h1:ZzGIrxBvCJEluaU4i3CN0GFlu1Qmb3yK8ziV02evJ1E= +github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211 h1:mSVZ4vj4khv+oThUfS+SQU3UuFIZ5Zo6UNcvK8E8Mz8= +github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw= +github.com/gobuffalo/github_flavored_markdown v1.0.4/go.mod h1:uRowCdK+q8d/RF0Kt3/DSalaIXbb0De/dmTqMQdkQ4I= +github.com/gobuffalo/github_flavored_markdown v1.0.5/go.mod h1:U0643QShPF+OF2tJvYNiYDLDGDuQmJZXsf/bHOJPsMY= +github.com/gobuffalo/github_flavored_markdown v1.0.7/go.mod h1:w93Pd9Lz6LvyQXEG6DktTPHkOtCbr+arAD5mkwMzXLI= +github.com/gobuffalo/github_flavored_markdown v1.1.0 h1:8Zzj4fTRl/OP2R7sGerzSf6g2nEJnaBEJe7UAOiEvbQ= +github.com/gobuffalo/github_flavored_markdown v1.1.0/go.mod h1:TSpTKWcRTI0+v7W3x8dkSKMLJSUpuVitlptCkpeY8ic= +github.com/gobuffalo/gogen v0.0.0-20190219194924-d32a17ad9761/go.mod h1:v47C8sid+ZM2qK+YpQ2MGJKssKAqyTsH1wl/pTCPdz8= +github.com/gobuffalo/gogen v0.0.0-20190224213239-1c6076128bbc/go.mod h1:tQqPADZKflmJCR4FHRHYNPP79cXPICyxUiUHyhuXtqg= +github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= +github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= +github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= +github.com/gobuffalo/gogen v0.2.0 h1:Xx7NCe+/y++eII2aWAFZ09/81MhDCsZwvMzIFJoQRnU= +github.com/gobuffalo/gogen v0.2.0/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= +github.com/gobuffalo/helpers v0.0.0-20190422082217-384f90c6579f/go.mod h1:g0I3qKQEyJxwnHtEmLugD75eoOiWxEtibcV62tYah9w= +github.com/gobuffalo/helpers v0.0.0-20190506214229-8e6f634af7c3/go.mod h1:HlNpmw2+Rjx882VUf6hJfNJs5wpNRzX02KcqCXDlLGc= +github.com/gobuffalo/helpers v0.2.1/go.mod h1:5UhA1EfGvyPZfzo9PqhKkSgmLolaTpnWYDbqCJcmiAE= +github.com/gobuffalo/helpers v0.2.2/go.mod h1:xYbzUdCUpVzLwLnqV8HIjT6hmG0Cs7YIBCJkNM597jw= +github.com/gobuffalo/helpers v0.2.4/go.mod h1:NX7v27yxPDOPTgUFYmJ5ow37EbxdoLraucOGvMNawyk= +github.com/gobuffalo/helpers v0.4.0 h1:DR/iYihrVCXv1cYeIGSK3EZz2CljO+DqDLQPWZAod9c= +github.com/gobuffalo/helpers v0.4.0/go.mod h1:2q/ZnVxCehM4/y1bNz3+wXsvWvWUY+iTUr7mPC6QqGQ= +github.com/gobuffalo/here v0.2.3 h1:1xamq7i4CKjGgICCXY0qpxPeXGdB8oVNSevkpqwd5X4= +github.com/gobuffalo/here v0.2.3/go.mod h1:2a6G14FaAKOGJMK/5UNa4Og/+iyFS5cq3MnlvFR7YDk= +github.com/gobuffalo/httptest v1.0.2/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E= +github.com/gobuffalo/httptest v1.0.3/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E= +github.com/gobuffalo/httptest v1.0.4/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E= +github.com/gobuffalo/httptest v1.0.5/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E= +github.com/gobuffalo/httptest v1.0.6/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E= +github.com/gobuffalo/httptest v1.1.0/go.mod h1:BIfCgiqCOotRc5xYwCcZN7IFYag4277Ynqjar/Ra3iI= +github.com/gobuffalo/httptest v1.2.0/go.mod h1:0KfourZCsapuvkljDMSr7YM+66kCt/rXv54YcWRWwhc= +github.com/gobuffalo/httptest v1.3.0/go.mod h1:Y4qebOsMH91XdB0cZuS8OUdAKHGV7hVDcjgzGupoYlk= +github.com/gobuffalo/httptest v1.4.0 h1:DaoTl/2iFRTk9Uau6b0Lh644tcbRtBNMHcWg6WhieS8= +github.com/gobuffalo/httptest v1.4.0/go.mod h1:VDkgCFmIxAunkLNts49TC949NRLTtvyLKuN67o6hrXM= +github.com/gobuffalo/licenser v0.0.0-20180924033006-eae28e638a42/go.mod h1:Ubo90Np8gpsSZqNScZZkVXXAo5DGhTb+WYFIjlnog8w= +github.com/gobuffalo/licenser v0.0.0-20181025145548-437d89de4f75/go.mod h1:x3lEpYxkRG/XtGCUNkio+6RZ/dlOvLzTI9M1auIwFcw= +github.com/gobuffalo/licenser v0.0.0-20181027200154-58051a75da95/go.mod h1:BzhaaxGd1tq1+OLKObzgdCV9kqVhbTulxOpYbvMQWS0= +github.com/gobuffalo/licenser v0.0.0-20181109171355-91a2a7aac9a7/go.mod h1:m+Ygox92pi9bdg+gVaycvqE8RVSjZp7mWw75+K5NPHk= +github.com/gobuffalo/licenser v0.0.0-20181116224424-1b7fd3f9cbb4/go.mod h1:icHYfF2FVDi6CpI8BK9Sy1ChkSijz/0GNN7Qzzdk6JE= +github.com/gobuffalo/licenser v0.0.0-20181128165715-cc7305f8abed/go.mod h1:oU9F9UCE+AzI/MueCKZamsezGOOHfSirltllOVeRTAE= +github.com/gobuffalo/licenser v0.0.0-20181128170751-82cc989582b9/go.mod h1:oU9F9UCE+AzI/MueCKZamsezGOOHfSirltllOVeRTAE= +github.com/gobuffalo/licenser v0.0.0-20181203160806-fe900bbede07/go.mod h1:ph6VDNvOzt1CdfaWC+9XwcBnlSTBz2j49PBwum6RFaU= +github.com/gobuffalo/licenser v0.0.0-20181211173111-f8a311c51159/go.mod h1:ve/Ue99DRuvnTaLq2zKa6F4KtHiYf7W046tDjuGYPfM= +github.com/gobuffalo/licenser v0.0.0-20190224205124-37799bc2ebf6/go.mod h1:ve/Ue99DRuvnTaLq2zKa6F4KtHiYf7W046tDjuGYPfM= +github.com/gobuffalo/licenser v0.0.0-20190329153211-c35c0a2813b2/go.mod h1:ZVWE6uKUE3rGf7sedUHWVjNWrEgxaUQLVFL+pQiWpfY= +github.com/gobuffalo/licenser v1.1.0/go.mod h1:ZVWE6uKUE3rGf7sedUHWVjNWrEgxaUQLVFL+pQiWpfY= +github.com/gobuffalo/licenser v1.2.0/go.mod h1:ZqDQ+UOqsXPovl65rbCr3Tye6+nKjT4ovwurjVxvMQM= +github.com/gobuffalo/licenser v1.4.0 h1:S8WY0nLT9zkBTjFYcbJ0E9MEK7SgE86aMfjsnuThQjY= +github.com/gobuffalo/licenser v1.4.0/go.mod h1:YkyTh2T/d7KECTh32j65auPV876gkJJk55aAdBfDehg= +github.com/gobuffalo/logger v0.0.0-20181022175615-46cfb361fc27/go.mod h1:8sQkgyhWipz1mIctHF4jTxmJh1Vxhp7mP8IqbljgJZo= +github.com/gobuffalo/logger v0.0.0-20181027144941-73d08d2bb969/go.mod h1:7uGg2duHKpWnN4+YmyKBdLXfhopkAdVM6H3nKbyFbz8= +github.com/gobuffalo/logger v0.0.0-20181027193913-9cf4dd0efe46/go.mod h1:7uGg2duHKpWnN4+YmyKBdLXfhopkAdVM6H3nKbyFbz8= +github.com/gobuffalo/logger v0.0.0-20181109185836-3feeab578c17/go.mod h1:oNErH0xLe+utO+OW8ptXMSA5DkiSEDW1u3zGIt8F9Ew= +github.com/gobuffalo/logger v0.0.0-20181117211126-8e9b89b7c264/go.mod h1:5etB91IE0uBlw9k756fVKZJdS+7M7ejVhmpXXiSFj0I= +github.com/gobuffalo/logger v0.0.0-20181127160119-5b956e21995c/go.mod h1:+HxKANrR9VGw9yN3aOAppJKvhO05ctDi63w4mDnKv2U= +github.com/gobuffalo/logger v0.0.0-20190224201004-be78ebfea0fa/go.mod h1:+HxKANrR9VGw9yN3aOAppJKvhO05ctDi63w4mDnKv2U= +github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= +github.com/gobuffalo/logger v1.0.0/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs= +github.com/gobuffalo/logger v1.0.1 h1:ZEgyRGgAm4ZAhAO45YXMs5Fp+bzGLESFewzAVBMKuTg= +github.com/gobuffalo/logger v1.0.1/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs= +github.com/gobuffalo/makr v1.1.5/go.mod h1:Y+o0btAH1kYAMDJW/TX3+oAXEu0bmSLLoC9mIFxtzOw= +github.com/gobuffalo/makr v1.2.0 h1:TA6ThoZEcq0F9FCrc/7xS1ycdCIL0K6Ux+5wmwYV7BY= +github.com/gobuffalo/makr v1.2.0/go.mod h1:SFQUrDtwDpmQ6BxKJqxg0emc4KkNzzvUtAtnHiVK/QQ= +github.com/gobuffalo/mapi v1.0.0/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/mapi v1.1.0 h1:VEhxtd2aoPXFqVmliLXGSmqPh541OprxYYZFwgNcjn4= +github.com/gobuffalo/mapi v1.1.0/go.mod h1:pqQ1XAqvpy/JYtRwoieNps2yU8MFiMxBUpAm2FBtQ50= +github.com/gobuffalo/meta v0.0.0-20181018155829-df62557efcd3/go.mod h1:XTTOhwMNryif3x9LkTTBO/Llrveezd71u3quLd0u7CM= +github.com/gobuffalo/meta v0.0.0-20181018192820-8c6cef77dab3/go.mod h1:E94EPzx9NERGCY69UWlcj6Hipf2uK/vnfrF4QD0plVE= +github.com/gobuffalo/meta v0.0.0-20181025145500-3a985a084b0a/go.mod h1:YDAKBud2FP7NZdruCSlmTmDOZbVSa6bpK7LJ/A/nlKg= +github.com/gobuffalo/meta v0.0.0-20181109154556-f76929ccd5fa/go.mod h1:1rYI5QsanV6cLpT1BlTAkrFi9rtCZrGkvSK8PglwfS8= +github.com/gobuffalo/meta v0.0.0-20181114191255-b130ebedd2f7/go.mod h1:K6cRZ29ozr4Btvsqkjvg5nDFTLOgTqf03KA70Ks0ypE= +github.com/gobuffalo/meta v0.0.0-20181116202903-8850e47774f5/go.mod h1:K6cRZ29ozr4Btvsqkjvg5nDFTLOgTqf03KA70Ks0ypE= +github.com/gobuffalo/meta v0.0.0-20181127070345-0d7e59dd540b/go.mod h1:RLO7tMvE0IAKAM8wny1aN12pvEKn7EtkBLkUZR00Qf8= +github.com/gobuffalo/meta v0.0.0-20190120163247-50bbb1fa260d/go.mod h1:KKsH44nIK2gA8p0PJmRT9GvWJUdphkDUA8AJEvFWiqM= +github.com/gobuffalo/meta v0.0.0-20190121163014-ecaa953cbfb3/go.mod h1:KLfkGnS+Tucc+iTkUcAUBtxpwOJGfhw2pHRLddPxMQY= +github.com/gobuffalo/meta v0.0.0-20190126124307-c8fb6f4eb5a9/go.mod h1:zoh6GLgkk9+iI/62dST4amAuVAczZrBXoAk/t64n7Ew= +github.com/gobuffalo/meta v0.0.0-20190207205153-50a99e08b8cf/go.mod h1:+VGfK9Jm9I7oJyFeJzIT6omCPvrDktzAtpHJKaieugY= +github.com/gobuffalo/meta v0.0.0-20190320152240-a5320142224a/go.mod h1:+VGfK9Jm9I7oJyFeJzIT6omCPvrDktzAtpHJKaieugY= +github.com/gobuffalo/meta v0.0.0-20190329152330-e161e8a93e3b/go.mod h1:mCRSy5F47tjK8yaIDcJad4oe9fXxY5gLrx3Xx2spK+0= +github.com/gobuffalo/meta v0.1.0/go.mod h1:vAgu28tKdaPIkt8j60wYv1dLuJ1UwOmAjZtYOnLJlko= +github.com/gobuffalo/meta v0.2.0 h1:QSDlR2nbGewl0OVL9kqtU8SeKq6zSonrKWB6G3EgADs= +github.com/gobuffalo/meta v0.2.0/go.mod h1:KZ9Hk/o+kFpwRhzUO95EOuxf3jXU4GleCTUDSTpe3hQ= +github.com/gobuffalo/mw-basicauth v1.0.3/go.mod h1:dg7+ilMZOKnQFHDefUzUHufNyTswVUviCBgF244C1+0= +github.com/gobuffalo/mw-basicauth v1.0.6/go.mod h1:RFyeGeDLZlVgp/eBflqu2eavFqyv0j0fVVP87WPYFwY= +github.com/gobuffalo/mw-basicauth v1.0.7 h1:9zTxCpu0ozzwpwvw5MO31w8nEoySNRNfZwM1YAWfGZs= +github.com/gobuffalo/mw-basicauth v1.0.7/go.mod h1:xJ9/OSiOWl+kZkjaSun62srODr3Cx8OB4AKr+G4FlS4= +github.com/gobuffalo/mw-contenttype v0.0.0-20180802152300-74f5a47f4d56/go.mod h1:7EvcmzBbeCvFtQm5GqF9ys6QnCxz2UM1x0moiWLq1No= +github.com/gobuffalo/mw-contenttype v0.0.0-20190129203934-2554e742333b h1:6LKJWRvshByPo/dvV4B1E2wvsqXp1uoynVndvuuOZZc= +github.com/gobuffalo/mw-contenttype v0.0.0-20190129203934-2554e742333b/go.mod h1:7x87+mDrr9Peh7AqhOtESyJLanMd2zQNz2Hts+vtBoE= +github.com/gobuffalo/mw-csrf v0.0.0-20180802151833-446ff26e108b/go.mod h1:sbGtb8DmDZuDUQoxjr8hG1ZbLtZboD9xsn6p77ppcHo= +github.com/gobuffalo/mw-csrf v0.0.0-20190129204204-25460a055517 h1:pOOXwl1xPLLP8oZw3e3t2wwrc/KSzmlRBcaQwGpG9oo= +github.com/gobuffalo/mw-csrf v0.0.0-20190129204204-25460a055517/go.mod h1:o5u+nnN0Oa7LBeDYH9QP36qeMPnXV9qbVnbZ4D+Kb0Q= +github.com/gobuffalo/mw-forcessl v0.0.0-20180802152810-73921ae7a130 h1:v94+IGhlBro0Lz1gOR3lrdAVSZ0mJF2NxsdppKd7FnI= +github.com/gobuffalo/mw-forcessl v0.0.0-20180802152810-73921ae7a130/go.mod h1:JvNHRj7bYNAMUr/5XMkZaDcw3jZhUZpsmzhd//FFWmQ= +github.com/gobuffalo/mw-i18n v0.0.0-20180802152014-e3060b7e13d6/go.mod h1:91AQfukc52A6hdfIfkxzyr+kpVYDodgAeT5cjX1UIj4= +github.com/gobuffalo/mw-i18n v0.0.0-20181027200759-09e0c99be4d3/go.mod h1:1PpGPgqP8VsfUppgBA9FrTOXjI6X9gjqhh/8dmg48lg= +github.com/gobuffalo/mw-i18n v0.0.0-20190129204410-552713a3ebb4 h1:c1fFPCxA7SozZPqMhpfZoOVa3wUpCl11gyCEZ4nYqUE= +github.com/gobuffalo/mw-i18n v0.0.0-20190129204410-552713a3ebb4/go.mod h1:rBg2eHxsyxVjtYra6fGy4GSF5C8NysOvz+Znnzk42EM= +github.com/gobuffalo/mw-paramlogger v0.0.0-20181005191442-d6ee392ec72e/go.mod h1:6OJr6VwSzgJMqWMj7TYmRUqzNe2LXu/W1rRW4MAz/ME= +github.com/gobuffalo/mw-paramlogger v0.0.0-20190129202837-395da1998525 h1:2QoD5giw2UrYJu65UKDEo9HFcz9yun387twL2zzn+/Q= +github.com/gobuffalo/mw-paramlogger v0.0.0-20190129202837-395da1998525/go.mod h1:gEo/ABCsKqvpp/KCxN2AIzDEe0OJUXbJ9293FYrXw+w= +github.com/gobuffalo/mw-tokenauth v0.0.0-20181001105134-8545f626c189/go.mod h1:UqBF00IfKvd39ni5+yI5MLMjAf4gX7cDKN/26zDOD6c= +github.com/gobuffalo/mw-tokenauth v0.0.0-20190129201951-95847f29c5c8 h1:dqwRMSzfhe3rL0vMDaRvc2ozLqxapWFBEDH6/f0nQT0= +github.com/gobuffalo/mw-tokenauth v0.0.0-20190129201951-95847f29c5c8/go.mod h1:n2oa93LHGD94hGI+PoJO+6cf60DNrXrAIv9L/Ke3GXc= +github.com/gobuffalo/nulls v0.0.0-20190305142546-85f3c9250d87/go.mod h1:KhaLCW+kFA/G97tZkmVkIxhRw3gvZszJn7JjPLI3gtI= +github.com/gobuffalo/nulls v0.1.0 h1:pR3SDzXyFcQrzyPreZj+OzNHSxI4DphSOFaQuidxrfw= +github.com/gobuffalo/nulls v0.1.0/go.mod h1:/HRtuDRoVoN5fABk3J6jzZaGEdcIZEMs0qczj71eKZY= +github.com/gobuffalo/packd v0.0.0-20181027182251-01ad393492c8/go.mod h1:SmdBdhj6uhOsg1Ui4SFAyrhuc7U4VCildosO5IDJ3lc= +github.com/gobuffalo/packd v0.0.0-20181027190505-aafc0d02c411/go.mod h1:SmdBdhj6uhOsg1Ui4SFAyrhuc7U4VCildosO5IDJ3lc= +github.com/gobuffalo/packd v0.0.0-20181027194105-7ae579e6d213/go.mod h1:SmdBdhj6uhOsg1Ui4SFAyrhuc7U4VCildosO5IDJ3lc= +github.com/gobuffalo/packd v0.0.0-20181028162033-6d52e0eabf41/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= +github.com/gobuffalo/packd v0.0.0-20181029140631-cf76bd87a5a6/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= +github.com/gobuffalo/packd v0.0.0-20181031195726-c82734870264/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= +github.com/gobuffalo/packd v0.0.0-20181103221656-16c4ed88b296/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= +github.com/gobuffalo/packd v0.0.0-20181104210303-d376b15f8e96/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= +github.com/gobuffalo/packd v0.0.0-20181111195323-b2e760a5f0ff/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= +github.com/gobuffalo/packd v0.0.0-20181114190715-f25c5d2471d7/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= +github.com/gobuffalo/packd v0.0.0-20181124090624-311c6248e5fb/go.mod h1:Foenia9ZvITEvG05ab6XpiD5EfBHPL8A6hush8SJ0o8= +github.com/gobuffalo/packd v0.0.0-20181207120301-c49825f8f6f4/go.mod h1:LYc0TGKFBBFTRC9dg2pcRcMqGCTMD7T2BIMP7OBuQAA= +github.com/gobuffalo/packd v0.0.0-20181212173646-eca3b8fd6687/go.mod h1:LYc0TGKFBBFTRC9dg2pcRcMqGCTMD7T2BIMP7OBuQAA= +github.com/gobuffalo/packd v0.0.0-20190224160250-d04dd98aca5b/go.mod h1:LYc0TGKFBBFTRC9dg2pcRcMqGCTMD7T2BIMP7OBuQAA= +github.com/gobuffalo/packd v0.0.0-20190315122247-83d601d65093/go.mod h1:LpEu7OkoplvlhztyAEePkS6JwcGgANdgGL5pB4Knxaw= +github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packd v0.2.0/go.mod h1:k2CkHP3bjbqL2GwxwhxUy1DgnlbW644hkLC9iIUvZwY= +github.com/gobuffalo/packd v0.3.0 h1:eMwymTkA1uXsqxS0Tpoop3Lc0u3kTfiMBE6nKtQU4g4= +github.com/gobuffalo/packd v0.3.0/go.mod h1:zC7QkmNkYVGKPw4tHpBQ+ml7W/3tIebgeo1b36chA3Q= +github.com/gobuffalo/packr v1.13.7/go.mod h1:KkinLIn/n6+3tVXMwg6KkNvWwVsrRAz4ph+jgpk3Z24= +github.com/gobuffalo/packr v1.15.0/go.mod h1:t5gXzEhIviQwVlNx/+3SfS07GS+cZ2hn76WLzPp6MGI= +github.com/gobuffalo/packr v1.15.1/go.mod h1:IeqicJ7jm8182yrVmNbM6PR4g79SjN9tZLH8KduZZwE= +github.com/gobuffalo/packr v1.16.0/go.mod h1:Yx/lcR/7mDLXhuJSzsz2MauD/HUwSc+EK6oigMRGGsM= +github.com/gobuffalo/packr v1.19.0/go.mod h1:MstrNkfCQhd5o+Ct4IJ0skWlxN8emOq8DsoT1G98VIU= +github.com/gobuffalo/packr v1.20.0/go.mod h1:JDytk1t2gP+my1ig7iI4NcVaXr886+N0ecUga6884zw= +github.com/gobuffalo/packr v1.21.0/go.mod h1:H00jGfj1qFKxscFJSw8wcL4hpQtPe1PfU2wa6sg/SR0= +github.com/gobuffalo/packr v1.21.5/go.mod h1:zCvDxrZzFmq5Xd7Jw4vaGe/OYwzuXnma31D2EbTHMWk= +github.com/gobuffalo/packr v1.21.7/go.mod h1:73tmYjwi4Cvb1eNiAwpmrzZ0gxVA4KBqVSZ2FNeJodM= +github.com/gobuffalo/packr v1.21.9/go.mod h1:GC76q6nMzRtR+AEN/VV4w0z2/4q7SOaEmXh3Ooa8sOE= +github.com/gobuffalo/packr v1.22.0/go.mod h1:Qr3Wtxr3+HuQEwWqlLnNW4t1oTvK+7Gc/Rnoi/lDFvA= +github.com/gobuffalo/packr v1.24.0/go.mod h1:p9Sgang00I1hlr1ub+tgI9AQdFd4f+WH1h62jYpzetM= +github.com/gobuffalo/packr v1.24.1/go.mod h1:absPnW/XUUa4DmIh5ga7AipGXXg0DOcd5YWKk5RZs8Y= +github.com/gobuffalo/packr v1.25.0 h1:NtPK45yOKFdTKHTvRGKL+UIKAKmJVWIVJOZBDI/qEdY= +github.com/gobuffalo/packr v1.25.0/go.mod h1:NqsGg8CSB2ZD+6RBIRs18G7aZqdYDlYNNvsSqP6T4/U= +github.com/gobuffalo/packr/v2 v2.0.0-rc.5/go.mod h1:e6gmOfhf3KmT4zl2X/NDRSfBXk2oV4TXZ+NNOM0xwt8= +github.com/gobuffalo/packr/v2 v2.0.0-rc.7/go.mod h1:BzhceHWfF3DMAkbPUONHYWs63uacCZxygFY1b4H9N2A= +github.com/gobuffalo/packr/v2 v2.0.0-rc.8/go.mod h1:y60QCdzwuMwO2R49fdQhsjCPv7tLQFR0ayzxxla9zes= +github.com/gobuffalo/packr/v2 v2.0.0-rc.9/go.mod h1:fQqADRfZpEsgkc7c/K7aMew3n4aF1Kji7+lIZeR98Fc= +github.com/gobuffalo/packr/v2 v2.0.0-rc.10/go.mod h1:4CWWn4I5T3v4c1OsJ55HbHlUEKNWMITG5iIkdr4Px4w= +github.com/gobuffalo/packr/v2 v2.0.0-rc.11/go.mod h1:JoieH/3h3U4UmatmV93QmqyPUdf4wVM9HELaHEu+3fk= +github.com/gobuffalo/packr/v2 v2.0.0-rc.12/go.mod h1:FV1zZTsVFi1DSCboO36Xgs4pzCZBjB/tDV9Cz/lSaR8= +github.com/gobuffalo/packr/v2 v2.0.0-rc.13/go.mod h1:2Mp7GhBFMdJlOK8vGfl7SYtfMP3+5roE39ejlfjw0rA= +github.com/gobuffalo/packr/v2 v2.0.0-rc.14/go.mod h1:06otbrNvDKO1eNQ3b8hst+1010UooI2MFg+B2Ze4MV8= +github.com/gobuffalo/packr/v2 v2.0.0-rc.15/go.mod h1:IMe7H2nJvcKXSF90y4X1rjYIRlNMJYCxEhssBXNZwWs= +github.com/gobuffalo/packr/v2 v2.0.0/go.mod h1:7McfLpSxaPUoSQm7gYpTZRQSK63mX8EKzzYSEFKvfkM= +github.com/gobuffalo/packr/v2 v2.0.1/go.mod h1:tp5/5A2e67F1lUGTiNadtA2ToP045+mvkWzaqMCsZr4= +github.com/gobuffalo/packr/v2 v2.0.2/go.mod h1:6Y+2NY9cHDlrz96xkJG8bfPwLlCdJVS/irhNJmwD7kM= +github.com/gobuffalo/packr/v2 v2.0.6/go.mod h1:/TYKOjadT7P9jRWZtj4BRTgeXy2tIYntifGkD+aM2KY= +github.com/gobuffalo/packr/v2 v2.0.7/go.mod h1:1SBFAIr3YnxYdJRyrceR7zhOrhV/YhHzOjDwA9LLZ5Y= +github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= +github.com/gobuffalo/packr/v2 v2.0.10/go.mod h1:n90ZuXIc2KN2vFAOQascnPItp9A2g9QYSvYvS3AjQEM= +github.com/gobuffalo/packr/v2 v2.1.0/go.mod h1:n90ZuXIc2KN2vFAOQascnPItp9A2g9QYSvYvS3AjQEM= +github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= +github.com/gobuffalo/packr/v2 v2.3.2/go.mod h1:93elRVdDhpUgox9GnXswWK5dzpVBQsnlQjnnncSLoiU= +github.com/gobuffalo/packr/v2 v2.4.0/go.mod h1:ra341gygw9/61nSjAbfwcwh8IrYL4WmR4IsPkPBhQiY= +github.com/gobuffalo/packr/v2 v2.5.1/go.mod h1:8f9c96ITobJlPzI44jj+4tHnEKNt0xXWSVlXRN9X1Iw= +github.com/gobuffalo/packr/v2 v2.5.2/go.mod h1:sgEE1xNZ6G0FNN5xn9pevVu4nywaxHvgup67xisti08= +github.com/gobuffalo/packr/v2 v2.5.3/go.mod h1:sgEE1xNZ6G0FNN5xn9pevVu4nywaxHvgup67xisti08= +github.com/gobuffalo/packr/v2 v2.6.0/go.mod h1:sgEE1xNZ6G0FNN5xn9pevVu4nywaxHvgup67xisti08= +github.com/gobuffalo/packr/v2 v2.7.1 h1:n3CIW5T17T8v4GGK5sWXLVWJhCz7b5aNLSxW6gYim4o= +github.com/gobuffalo/packr/v2 v2.7.1/go.mod h1:qYEvAazPaVxy7Y7KR0W8qYEE+RymX74kETFqjFoFlOc= +github.com/gobuffalo/plush v3.7.16+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plush v3.7.20+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plush v3.7.21+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plush v3.7.22+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plush v3.7.23+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plush v3.7.30+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plush v3.7.31+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plush v3.7.32+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plush v3.7.33+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plush v3.7.34+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plush v3.8.0+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plush v3.8.2+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plush v3.8.3+incompatible h1:kzvUTnFPhwyfPEsx7U7LI05/IIslZVGnAlMA1heWub8= +github.com/gobuffalo/plush v3.8.3+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plushgen v0.0.0-20181128164830-d29dcb966cb2/go.mod h1:r9QwptTFnuvSaSRjpSp4S2/4e2D3tJhARYbvEBcKSb4= +github.com/gobuffalo/plushgen v0.0.0-20181203163832-9fc4964505c2/go.mod h1:opEdT33AA2HdrIwK1aibqnTJDVVKXC02Bar/GT1YRVs= +github.com/gobuffalo/plushgen v0.0.0-20181207152837-eedb135bd51b/go.mod h1:Lcw7HQbEVm09sAQrCLzIxuhFbB3nAgp4c55E+UlynR0= +github.com/gobuffalo/plushgen v0.0.0-20190104222512-177cd2b872b3/go.mod h1:tYxCozi8X62bpZyKXYHw1ncx2ZtT2nFvG42kuLwYjoc= +github.com/gobuffalo/plushgen v0.0.0-20190224160205-347ea233336e/go.mod h1:tYxCozi8X62bpZyKXYHw1ncx2ZtT2nFvG42kuLwYjoc= +github.com/gobuffalo/plushgen v0.0.0-20190329152458-0555238fe0d9/go.mod h1:3U71v6HWZpVER1nInTXeAwdoRNsRd4W8aeIa1Lyp+Bk= +github.com/gobuffalo/plushgen v0.1.0/go.mod h1:NK33QLkRK/xKexiPFSxlWRT286F4yStZUa/Fbx0guvo= +github.com/gobuffalo/plushgen v0.1.2 h1:s4yAgNdfNMyMQ7o+Is4f1VlH2L1tKosT+m7BF28C8H4= +github.com/gobuffalo/plushgen v0.1.2/go.mod h1:3U71v6HWZpVER1nInTXeAwdoRNsRd4W8aeIa1Lyp+Bk= +github.com/gobuffalo/pop v4.8.2+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.8.3+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.8.4+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.8.5+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.8.7+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.8.8+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.9.0+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.9.1+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.9.2+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.9.3+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.9.5+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.9.6+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.9.8+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.9.9+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.10.0+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.11.0+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.11.1+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.11.2+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.11.3+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.12.0+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.12.1+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.12.2+incompatible h1:WFHMzzHbVLulZnEium1VlYRnWkzHz39FzVLov6rZdDI= +github.com/gobuffalo/pop v4.12.2+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/release v1.0.35/go.mod h1:VtHFAKs61vO3wboCec5xr9JPTjYyWYcvaM3lclkc4x4= +github.com/gobuffalo/release v1.0.38/go.mod h1:VtHFAKs61vO3wboCec5xr9JPTjYyWYcvaM3lclkc4x4= +github.com/gobuffalo/release v1.0.42/go.mod h1:RPs7EtafH4oylgetOJpGP0yCZZUiO4vqHfTHJjSdpug= +github.com/gobuffalo/release v1.0.51/go.mod h1:RPs7EtafH4oylgetOJpGP0yCZZUiO4vqHfTHJjSdpug= +github.com/gobuffalo/release v1.0.52/go.mod h1:RPs7EtafH4oylgetOJpGP0yCZZUiO4vqHfTHJjSdpug= +github.com/gobuffalo/release v1.0.53/go.mod h1:FdF257nd8rqhNaqtDWFGhxdJ/Ig4J7VcS3KL7n/a+aA= +github.com/gobuffalo/release v1.0.54/go.mod h1:Pe5/RxRa/BE8whDpGfRqSI7D1a0evGK1T4JDm339tJc= +github.com/gobuffalo/release v1.0.61/go.mod h1:mfIO38ujUNVDlBziIYqXquYfBF+8FDHUjKZgYC1Hj24= +github.com/gobuffalo/release v1.0.63/go.mod h1:/7hQAikt0l8Iu/tAX7slC1qiOhD6Nb+3KMmn/htiUfc= +github.com/gobuffalo/release v1.0.72/go.mod h1:NP5NXgg/IX3M5XmHmWR99D687/3Dt9qZtTK/Lbwc1hU= +github.com/gobuffalo/release v1.0.74/go.mod h1:NP5NXgg/IX3M5XmHmWR99D687/3Dt9qZtTK/Lbwc1hU= +github.com/gobuffalo/release v1.1.1/go.mod h1:Sluak1Xd6kcp6snkluR1jeXAogdJZpFFRzTYRs/2uwg= +github.com/gobuffalo/release v1.1.3/go.mod h1:CuXc5/m+4zuq8idoDt1l4va0AXAn/OSs08uHOfMVr8E= +github.com/gobuffalo/release v1.1.6/go.mod h1:18naWa3kBsqO0cItXZNJuefCKOENpbbUIqRL1g+p6z0= +github.com/gobuffalo/release v1.2.2/go.mod h1:tkFFZua2N5WRxyGDk2cSwQjzkZ/apKKXl5T8P+kEO+E= +github.com/gobuffalo/release v1.2.5/go.mod h1:tkFFZua2N5WRxyGDk2cSwQjzkZ/apKKXl5T8P+kEO+E= +github.com/gobuffalo/release v1.4.0/go.mod h1:f4uUPnD9dxrWxVy9yy0k/mvDf3EzhFtf7/byl0tTdY4= +github.com/gobuffalo/release v1.7.0/go.mod h1:xH2NjAueVSY89XgC4qx24ojEQ4zQ9XCGVs5eXwJTkEs= +github.com/gobuffalo/release v1.8.3/go.mod h1:gCk/x5WD+aIGkPodO4CuLxdnhYn9Jgp7yFYxntK/8mk= +github.com/gobuffalo/release v1.13.4/go.mod h1:5Cc4TSNxP4QFV2ZUYcgPiBBV7YyRomHecGTQuuy26G4= +github.com/gobuffalo/release v1.14.0 h1:+Jy7eLN5md6Fg+AMuFRUiK4sTNq4+zXxRho7/wJe1HU= +github.com/gobuffalo/release v1.14.0/go.mod h1:5Cc4TSNxP4QFV2ZUYcgPiBBV7YyRomHecGTQuuy26G4= +github.com/gobuffalo/shoulders v1.0.1/go.mod h1:V33CcVmaQ4gRUmHKwq1fiTXuf8Gp/qjQBUL5tHPmvbA= +github.com/gobuffalo/shoulders v1.0.3/go.mod h1:LqMcHhKRuBPMAYElqOe3POHiZ1x7Ry0BE8ZZ84Bx+k4= +github.com/gobuffalo/shoulders v1.0.4/go.mod h1:LqMcHhKRuBPMAYElqOe3POHiZ1x7Ry0BE8ZZ84Bx+k4= +github.com/gobuffalo/shoulders v1.1.0/go.mod h1:kcIJs3p7VqoBJ36Mzs+x767NyzTx0pxBvzZdWTWZYF8= +github.com/gobuffalo/shoulders v1.2.0 h1:XcPmWbzN7944VXS/I//R7o2eupUHEp3mLFWbUlk1Sco= +github.com/gobuffalo/shoulders v1.2.0/go.mod h1:Ia3oFybQWg4711cb2S5JkFSt9V4rMiLGusWZ6mRAdNM= +github.com/gobuffalo/syncx v0.0.0-20181120191700-98333ab04150/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= +github.com/gobuffalo/syncx v0.0.0-20181120194010-558ac7de985f/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= +github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754 h1:tpom+2CJmpzAWj5/VEHync2rJGi+epHNIeRSWjzGA+4= +github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= +github.com/gobuffalo/tags v2.0.11+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= +github.com/gobuffalo/tags v2.0.14+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= +github.com/gobuffalo/tags v2.0.15+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= +github.com/gobuffalo/tags v2.0.16+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= +github.com/gobuffalo/tags v2.1.0+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= +github.com/gobuffalo/tags v2.1.5+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= +github.com/gobuffalo/tags v2.1.6+incompatible h1:xaWOM48Xz8lBh+C8l5R7vSmLAZJK4KeWcLo+0pJ516g= +github.com/gobuffalo/tags v2.1.6+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= +github.com/gobuffalo/uuid v2.0.3+incompatible/go.mod h1:ErhIzkRhm0FtRuiE/PeORqcw4cVi1RtSpnwYrxuvkfE= +github.com/gobuffalo/uuid v2.0.4+incompatible/go.mod h1:ErhIzkRhm0FtRuiE/PeORqcw4cVi1RtSpnwYrxuvkfE= +github.com/gobuffalo/uuid v2.0.5+incompatible h1:c5uWRuEnYggYCrT9AJm0U2v1QTG7OVDAvxhj8tIV5Gc= +github.com/gobuffalo/uuid v2.0.5+incompatible/go.mod h1:ErhIzkRhm0FtRuiE/PeORqcw4cVi1RtSpnwYrxuvkfE= +github.com/gobuffalo/validate v2.0.3+incompatible h1:6f4JCEz11Zi6iIlexMv7Jz10RBPvgI795AOaubtCwTE= +github.com/gobuffalo/validate v2.0.3+incompatible/go.mod h1:N+EtDe0J8252BgfzQUChBgfd6L93m9weay53EWFVsMM= +github.com/gobuffalo/x v0.0.0-20181003152136-452098b06085/go.mod h1:WevpGD+5YOreDJznWevcn8NTmQEW5STSBgIkpkjzqXc= +github.com/gobuffalo/x v0.0.0-20181007152206-913e47c59ca7/go.mod h1:9rDPXaB3kXdKWzMc4odGQQdG2e2DIEmANy5aSJ9yesY= +github.com/gobuffalo/x v0.0.0-20181025165825-f204f550da9d/go.mod h1:Qh2Pb/Ak1Ko2mzHlGPigrnxkhO4WTTCI1jJM58sbgtE= +github.com/gobuffalo/x v0.0.0-20181025192250-1ef645d63fe8/go.mod h1:AIlnMGlYXOCsoCntLPFLYtrJNS/pc2HD4IdSXH62TpU= +github.com/gobuffalo/x v0.0.0-20181109195216-5b3131238124/go.mod h1:GpdLUY6/Ztf/3FfxfwsLkDqAGZ0brhlh7LzIibHyZp0= +github.com/gobuffalo/x v0.0.0-20181110221217-14085ca3e1a9/go.mod h1:ig5vdn4+5IPtxgESlZWo1SSDyHKKef8EjVVKhY9kkIQ= +github.com/gobuffalo/x v0.0.0-20190224155809-6bb134105960 h1:DoUD23uwnzKJ3t5HH2SeTIszWmc13AV9TAdMhtXQts8= +github.com/gobuffalo/x v0.0.0-20190224155809-6bb134105960/go.mod h1:ig5vdn4+5IPtxgESlZWo1SSDyHKKef8EjVVKhY9kkIQ= +github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/gocql/gocql v0.0.0-20191102131523-9faa4c08d962 h1:+YAUiFOQF5pIjD9FYvk0xqpyuzDdJkgP9uzSC3pBk0E= +github.com/gocql/gocql v0.0.0-20191102131523-9faa4c08d962/go.mod h1:DL0ekTmBSTdlNF25Orwt/JMzqIq3EJ4MVa/J/uK64OY= +github.com/godbus/dbus v4.1.0+incompatible h1:WqqLRTsQic3apZUK9qC5sGNfXthmPXzUZ7nQPrNITa4= +github.com/godbus/dbus v4.1.0+incompatible/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= +github.com/gofrs/uuid v3.1.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE= +github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/googleapis v1.3.0 h1:M695OaDJ5ipWvDPcoAg/YL9c3uORAegkEfBqTQF/fTQ= +github.com/gogo/googleapis v1.3.0/go.mod h1:d+q1s/xVJxZGKWwC/6UfPIF33J+G1Tq4GYv9Y+Tg/EU= +github.com/gogo/protobuf v0.0.0-20171007142547-342cbe0a0415/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.2.2-0.20190730201129-28a6bbf47e48/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.0 h1:G8O7TerXerS4F6sx9OV7/nRfJdnXgHZu/S/7F2SN+UE= +github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/goji/param v0.0.0-20160927210335-d7f49fd7d1ed h1:4ZXAJ/IvcryiUPDddal4P7mu6V0+PoBe+2tKG6TNQtc= +github.com/goji/param v0.0.0-20160927210335-d7f49fd7d1ed/go.mod h1:GZJblUu7ACjguvQUK2un6nQBlnZk7H1MzXZdfrFUd8Q= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/lint v0.0.0-20180702182130-06c8688daad7 h1:2hRPrmiwPrp3fQX967rNJIhQPtiGXdlQWAxKbKw3VHA= +github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= +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 h1:qGJ6qTW+x6xX/my+8YUVl4WNpX9B7+/l2tRsHGZ7f2s= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +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 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0= +github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= +github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac h1:Q0Jsdxl5jbxouNs1TQYt0gxesYMU4VXRbsTlgDloZ50= +github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= +github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82 h1:EvokxLQsaaQjcWVWSV38221VAK7qc2zhaO17bKys/18= +github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82/go.mod h1:PxC8OnwL11+aosOB5+iEPoV3picfs8tUpkVd0pDo+Kg= +github.com/gonum/internal v0.0.0-20181124074243-f884aa714029 h1:8jtTdc+Nfj9AR+0soOeia9UZSvYBvETVHZrugUowJ7M= +github.com/gonum/internal v0.0.0-20181124074243-f884aa714029/go.mod h1:Pu4dmpkhSyOzRwuXkOgAvijx4o+4YMUJJo9OvPYMkks= +github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9 h1:7qnwS9+oeSiOIsiUMajT+0R7HR6hw5NegnKPmn/94oI= +github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9/go.mod h1:XA3DeT6rxh2EAE789SSiSJNqxPaC0aE9J8NTOI0Jo/A= +github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9 h1:V2IgdyerlBa/MxaEFRbV5juy/C3MGdj4ePi+g6ePIp4= +github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9/go.mod h1:0EXg4mc1CNP0HCqCz+K4ts155PXIlUywf0wqN+GfPZw= +github.com/google/addlicense v0.0.0-20190510175307-22550fa7c1b0 h1:ydbHzabf84uucKri5fcfiqYxGg+rYgP/zQfLLN8lyP0= +github.com/google/addlicense v0.0.0-20190510175307-22550fa7c1b0/go.mod h1:QtPG26W17m+OIQgE6gQ24gC1M6pUaMBAbFrTIDtwG/E= +github.com/google/btree v0.0.0-20160524151835-7d79101e329e/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/flatbuffers v1.11.0 h1:O7CEyB8Cb3/DmtxODGtLHcEvpr81Jm5qLg/hsHnxA2A= +github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +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 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY= +github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= +github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= +github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= +github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +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-20190723021845-34ac40c74b70 h1:XTnP8fJpa4Kvpw2qARB4KS9izqxPS0Sd92cDlY3uk+w= +github.com/google/pprof v0.0.0-20190723021845-34ac40c74b70/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go v2.0.0+incompatible h1:j0GKcs05QVmm7yesiZq2+9cxHkNK9YM6zKx4D2qucQU= +github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= +github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gnostic v0.0.0-20170426233943-68f4ded48ba9/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.3.0 h1:CcQijm0XKekKjP/YCz28LXVSpgguuB+nCxaSjCe09y0= +github.com/googleapis/gnostic v0.3.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/gophercloud/gophercloud v0.0.0-20190126172459-c818fa66e4c8/go.mod h1:3WdhXV3rUYy9p6AUW8d94kr+HS62Y4VL9mBnFxsD8q4= +github.com/gophercloud/gophercloud v0.3.0 h1:6sjpKIpVwRIIwmcEGp+WwNovNsem+c+2vm6oxshRpL8= +github.com/gophercloud/gophercloud v0.3.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/goreleaser/goreleaser v0.94.0 h1:2CFMxMTLODjYfNOx2sADNzpgCwH9ltMqvQYtj+ntK1Q= +github.com/goreleaser/goreleaser v0.94.0/go.mod h1:OjbYR2NhOI6AEUWCowMSBzo9nP1aRif3sYtx+rhp+Zo= +github.com/goreleaser/nfpm v0.9.7 h1:h8RQMDztu6cW7b0/s4PGbdeMYykAbJG0UMXaWG5uBMI= +github.com/goreleaser/nfpm v0.9.7/go.mod h1:F2yzin6cBAL9gb+mSiReuXdsfTrOQwDMsuSpULof+y4= +github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg= +github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/pat v0.0.0-20180118222023-199c85a7f6d1 h1:LqbZZ9sNMWVjeXS4NN5oVvhMjDyLhmA1LG86oSo+IqY= +github.com/gorilla/pat v0.0.0-20180118222023-199c85a7f6d1/go.mod h1:YeAe0gNeiNT5hoiZRI4yiOky6jVdNvfO2N6Kav/HmxY= +github.com/gorilla/schema v1.1.0 h1:CamqUDOFUBqzrvxuz2vEwo8+SUdwsluFh7IlzJh30LY= +github.com/gorilla/schema v1.1.0/go.mod h1:kgLaKoK1FELgZqMAVxx/5cbj0kT+57qxUrAlIO2eleU= +github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= +github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= +github.com/gorilla/sessions v1.1.2/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w= +github.com/gorilla/sessions v1.1.3/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w= +github.com/gorilla/sessions v1.2.0 h1:S7P+1Hm5V/AT9cjEcUD5uDaQSX0OE577aCXgoaKpYbQ= +github.com/gorilla/sessions v1.2.0/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= +github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/graph-gophers/graphql-go v0.0.0-20191031232829-adde0d0f76a3 h1:HwRCZlPXN00r58jaIPE11HXn7EvhheQrE+Cxw0vkrH0= +github.com/graph-gophers/graphql-go v0.0.0-20191031232829-adde0d0f76a3/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= +github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7 h1:6TSoaYExHper8PYsJu23GWVNOyYRCSnIFyxKgLSZ54w= +github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0 h1:Iju5GlWwrvL6UBg4zJJt3btmonfrMlCDdsejg4CZE7c= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.4/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.11.1 h1:/dBYI+n4xIL+Y9SKXQrjlKTmJJDwCSlNLRwZ5nBhIek= +github.com/grpc-ecosystem/grpc-gateway v1.11.1/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8= +github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4= +github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/api v1.2.0 h1:oPsuzLp2uk7I7rojPKuncWbZ+m5TMoD4Ivs+2Rkeh4Y= +github.com/hashicorp/consul/api v1.2.0/go.mod h1:1SIkFYi2ZTXUE5Kgt179+4hH33djo11+0Eo2XgTAtkw= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.2.0 h1:GWFYFmry/k4b1hEoy7kSkmU8e30GAyI4VZHk0fRxeL4= +github.com/hashicorp/consul/sdk v0.2.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= +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.10.0 h1:b86HUuA126IcSHyC55WjPo7KtCOVeTCKIjr+3lBhPxI= +github.com/hashicorp/go-hclog v0.10.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.1.0 h1:vN9wG1D6KG6YHRTWr8512cxGOVgTMEfgEdSj/hr8MPc= +github.com/hashicorp/go-immutable-radix v1.1.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-msgpack v0.5.5 h1:i9R9JSrqIz0QVLz3sz+i3YJdT7TTSLcfLLzJi9aZTuI= +github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-plugin v1.0.1 h1:4OtAfUGbnKC6yS48p0CtMX2oFYtzFZVv6rok3cRWgnE= +github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY= +github.com/hashicorp/go-retryablehttp v0.5.3 h1:QlWt0KvWT0lq8MFppF9tsJGF+ynG7ztc2KIPhzRGk7s= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-rootcerts v1.0.1 h1:DMo4fmknnz0E0evoNYnV48RjWndOsmd6OW+09R3cEP8= +github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= +github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= +github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go.net v0.0.1 h1:sNCoNyDEvN1xa+X0baata4RdcpKwcMS6DH+xwfqPgjw= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= +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/golang-lru v0.5.3 h1:YPkqC67at8FYaadspW/6uE0COsBxS2656RLEr8Bppgk= +github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +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/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0 h1:WhIgCr5a7AaVH6jPUwjtRuuE7/RDufnUvzIr48smyxs= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/memberlist v0.1.4 h1:gkyML/r71w3FL8gUi74Vk76avkj/9lYAY9lvg0OcoGs= +github.com/hashicorp/memberlist v0.1.4/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/serf v0.8.3 h1:MWYcmct5EtKz0efYooPcL0yNkem+7kWxqXDi/UIh+8k= +github.com/hashicorp/serf v0.8.3/go.mod h1:UpNcs7fFbpKIyZaUuSW6EPiH+eZC7OuyFD+wc1oal+k= +github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb h1:b5rjCoWHc7eqmAS4/qyk21ZsHyb6Mxv/jykxvNTkU4M= +github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= +github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/hudl/fargo v1.3.0 h1:0U6+BtN6LhaYuTnIJq4Wyq5cpn6O2kWrxAtcqBmYY6w= +github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/iancoleman/strcase v0.0.0-20190422225806-e506e3ef7365 h1:ECW73yc9MY7935nNYXUkK7Dz17YuSUI9yqRqYS8aBww= +github.com/iancoleman/strcase v0.0.0-20190422225806-e506e3ef7365/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6 h1:UDMh68UUwekSh5iP2OMhRRZJiiBccgV7axzUG8vi56c= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.5 h1:JboBksRwiiAJWvIYJVo46AfV+IAIKZpfrSzVKj42R4Q= +github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28= +github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/inconshreveable/go-vhost v0.0.0-20160627193104-06d84117953b h1:IpLPmn6Re21F0MaV6Zsc5RdSE6KuoFpWmHiUSEs3PrE= +github.com/inconshreveable/go-vhost v0.0.0-20160627193104-06d84117953b/go.mod h1:aA6DnFhALT3zH0y+A39we+zbrdMC2N0X/q21e6FI0LU= +github.com/inconshreveable/log15 v0.0.0-20180818164646-67afb5ed74ec h1:CGkYB1Q7DSsH/ku+to+foV4agt2F2miquaLUgF6L178= +github.com/inconshreveable/log15 v0.0.0-20180818164646-67afb5ed74ec/go.mod h1:cOaXtrgN4ScfRrD9Bre7U1thNq5RtJ8ZoP4iXVGRj6o= +github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/influxdata/changelog v1.1.0 h1:HXhmLZDrbuC+Ca5YX7g8B8cH5DmJpaOjd844d9Y7aTQ= +github.com/influxdata/changelog v1.1.0/go.mod h1:uzpGWE/qehT8L426YuXwpMQub+a63vIINhIeEI9mnSM= +github.com/influxdata/flux v0.53.0 h1:pQCXohOPM9gAA+ahh+Wdi1sxjuGTnPbN/6btpv9vIMY= +github.com/influxdata/flux v0.53.0/go.mod h1:ZFf4F0c8ACFP/5BkfCwk9I/vUwcByr0vMdLxwgOk57E= +github.com/influxdata/influxdb v1.7.7 h1:UvNzAPfBrKMENVbQ4mr4ccA9sW+W1Ihl0Yh1s0BiVAg= +github.com/influxdata/influxdb v1.7.7/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= +github.com/influxdata/influxdb1-client v0.0.0-20190809212627-fc22c7df067e h1:txQltCyjXAqVVSZDArPEhUTg35hKwVIuXwtQo7eAMNQ= +github.com/influxdata/influxdb1-client v0.0.0-20190809212627-fc22c7df067e/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/influxdata/influxql v1.0.1 h1:6PGG0SunRmptIMIreNRolhQ38Sq4qDfi2dS3BS1YD8Y= +github.com/influxdata/influxql v1.0.1/go.mod h1:KpVI7okXjK6PRi3Z5B+mtKZli+R1DnZgb3N+tzevNgo= +github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e h1:/o3vQtpWJhvnIbXley4/jwzzqNeigJK9z+LZcJZ9zfM= +github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= +github.com/influxdata/promql/v2 v2.12.0 h1:kXn3p0D7zPw16rOtfDR+wo6aaiH8tSMfhPwONTxrlEc= +github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= +github.com/influxdata/roaring v0.4.12 h1:3DzTjKHcXFs4P3D7xRLpCqVrfK6eFRQT0c8BG99M3Ms= +github.com/influxdata/roaring v0.4.12/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= +github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9 h1:MHTrDWmQpHq/hkq+7cw9oYAt2PqUw52TZazRA0N7PGE= +github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= +github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368 h1:+TUUmaFa4YD1Q+7bH9o5NCHQGPMqZCYJiNW6lIIS9z4= +github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= +github.com/jackc/chunkreader v1.0.0 h1:4s39bBR8ByfqH+DKm8rQA3E1LHZWB9XWcrz8fqaZbe0= +github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= +github.com/jackc/chunkreader/v2 v2.0.0 h1:DUwgMQuuPnS0rhMXenUtZpqZqrR/30NWY+qQvTpSvEs= +github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= +github.com/jackc/fake v0.0.0-20150926172116-812a484cc733 h1:vr3AYkKovP8uR8AvSGGUK1IDqRa5lAAvEkZG1LKaCRc= +github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ= +github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA= +github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE= +github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s= +github.com/jackc/pgconn v1.0.1 h1:ZANo4pIkeHKIVD1cQMcxu8fwrwIICLblzi9HCjooZeQ= +github.com/jackc/pgconn v1.0.1/go.mod h1:GgY/Lbj1VonNaVdNUHs9AwWom3yP2eymFQ1C8z9r/Lk= +github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= +github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= +github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2 h1:JVX6jT/XfzNqIjye4717ITLaNwV9mWbJx0dLCpcRzdA= +github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= +github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgproto3 v1.1.0 h1:FYYE4yRw+AgI8wXIinMlNjBbp/UitDJwfj5LqqewP1A= +github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78= +github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA= +github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg= +github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= +github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= +github.com/jackc/pgproto3/v2 v2.0.0 h1:FApgMJ/GtaXfI0s8Lvd0kaLaRwMOhs4VH92pwkwQQvU= +github.com/jackc/pgproto3/v2 v2.0.0/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= +github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= +github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= +github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59 h1:xOamcCJ9MFJTxR5bvw3ZXmiP8evQMohdt2VJ57C0W8Q= +github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= +github.com/jackc/pgx v3.2.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= +github.com/jackc/pgx v3.3.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= +github.com/jackc/pgx v3.5.0+incompatible h1:BRJ4G3UPtvml5R1ey0biqqGuYUGayMYekm3woO75orY= +github.com/jackc/pgx v3.5.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= +github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= +github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= +github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186 h1:ZQM8qLT/E/CGD6XX0E6q9FAwxJYmWpJufzmLMaFuzgQ= +github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= +github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9 h1:KLBBPU++1T3DHtm1B1QaIHy80Vhu0wNMErIFCNgAL8Y= +github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jaegertracing/jaeger v1.14.0 h1:C0En+gfcxf3NsAriMAvQ6LcSFrQ5VQGXddqfty1EpTI= +github.com/jaegertracing/jaeger v1.14.0/go.mod h1:LUWPSnzNPGRubM8pk0inANGitpiMOOxihXx0+53llXI= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1 h1:ujPKutqRlJtcfWk6toYVYagwra7HQHbXOaS171b4Tg8= +github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= +github.com/jessevdk/go-flags v0.0.0-20180331124232-1c38ed7ad0cc h1:0L2sGkaj6MWuV1BfXsrLJ/+XA8RzKKVsYlLVXNkK1Lw= +github.com/jessevdk/go-flags v0.0.0-20180331124232-1c38ed7ad0cc/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= +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-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmoiron/sqlx v0.0.0-20180614180643-0dae4fefe7c0/go.mod h1:IiEW3SEiiErVyFdH8NTuWjSifiEQKUoyK3LNqr2kCHU= +github.com/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA= +github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= +github.com/joho/godotenv v1.2.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= +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 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7 h1:K//n/AqR5HjG3qxbrBCL4vJPW0MVFSs9CPK1OOJdRME= +github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0= +github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024 h1:rBMNdlhTLzJjJSDIjNEXX1Pz3Hmwmz91v+zycvx9PJc= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jsternberg/zap-logfmt v1.2.0 h1:1v+PK4/B48cy8cfQbxL4FmmNZrjnIMr2BsnyEmXqv2o= +github.com/jsternberg/zap-logfmt v1.2.0/go.mod h1:kz+1CUmCutPWABnNkOu9hOHKdT2q3TDYCcsFy9hpqb0= +github.com/julienschmidt/httprouter v1.2.0 h1:TDTW5Yz1mjftljbcKqRcrYhd4XeOoI98t+9HbQbYf7g= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/jung-kurt/gofpdf v1.13.0 h1:OrLyhb9VU2dNdxzDu5lpMhX5/vpfm6RY5Jlr4iPQ6ME= +github.com/jung-kurt/gofpdf v1.13.0/go.mod h1:1hl7y57EsiPAkLbOwzpzqgx1A30nQCk/YmFV8S2vmK0= +github.com/justinas/alice v1.2.0 h1:+MHSA/vccVCF4Uq37S42jwlkvI2Xzl7zTPCN5BnZNVo= +github.com/justinas/alice v1.2.0/go.mod h1:fN5HRH/reO/zrUflLfTN43t3vXvKzvZIENsNEe7i7qA= +github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef h1:2jNeR4YUziVtswNP9sEFAI913cVrzH85T+8Q6LpYbT0= +github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= +github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= +github.com/karrick/godirwalk v1.7.7/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= +github.com/karrick/godirwalk v1.7.8/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= +github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= +github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= +github.com/karrick/godirwalk v1.10.12/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= +github.com/karrick/godirwalk v1.12.0 h1:nkS4xxsjiZMvVlazd0mFyiwD4BR9f3m6LXGhM2TUx3Y= +github.com/karrick/godirwalk v1.12.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= +github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e h1:RgQk53JHp/Cjunrr1WlsXSZpqXn+uREuHvUVcK82CV8= +github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0 h1:reN85Pxc5larApoH1keMBiu2GWtPqXQ1nc9gx+jOU+E= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kisielk/sqlstruct v0.0.0-20150923205031-648daed35d49 h1:o/c0aWEP/m6n61xlYW2QP4t9424qlJOsxugn5Zds2Rg= +github.com/kisielk/sqlstruct v0.0.0-20150923205031-648daed35d49/go.mod h1:yyMNCyc/Ib3bDTKd379tNMpB/7/H5TjM2Y9QJ5THLbE= +github.com/klauspost/compress v1.9.1 h1:TWy0o9J9c6LK9C8t7Msh6IAJNXbsU/nvKLTQUU5HdaY= +github.com/klauspost/compress v1.9.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/pgzip v1.2.1 h1:oIPZROsWuPHpOdMVWLuJZXwgjhrW8r1yEX8UqMyeNHM= +github.com/klauspost/pgzip v1.2.1/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/konsorten/go-windows-terminal-sequences v0.0.0-20180402223658-b729f2633dfe/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= +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.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.5 h1:hyz3dwM5QLc1Rfoz4FuWJQG5BN7tc6K1MndAUnGpQr4= +github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= +github.com/kr/pty v1.1.8 h1:AkaSdXYQOWeaO3neb8EM634ahkXXe3jYbVh/F9lq+GI= +github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kylelemons/godebug v0.0.0-20160406211939-eadb3ce320cb h1:iiMILPl9HQFqdFXIuwfYT73NYtH0KApnCmyF7y5wYhs= +github.com/kylelemons/godebug v0.0.0-20160406211939-eadb3ce320cb/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0= +github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743 h1:143Bb8f8DuGWck/xpNUOckBVYfFbBTnLevfRZ1aVVqo= +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= +github.com/lightstep/lightstep-tracer-go v0.17.1 h1:PgitbgUDool2AcHopDNTlvwq7BQeZssTGs4EVwcGhr8= +github.com/lightstep/lightstep-tracer-go v0.17.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/lyft/protoc-gen-star v0.4.11 h1:zW6fJQBtCtVeSiO/Kbpzv32GO0J/Z8egSLeohES202w= +github.com/lyft/protoc-gen-star v0.4.11/go.mod h1:mE8fbna26u7aEA2QCVvvfBU/ZrPgocG1206xAFPcs94= +github.com/lyft/protoc-gen-validate v0.0.13 h1:KNt/RhmQTOLr7Aj8PsJ7mTronaFyx80mRTT9qF261dA= +github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= +github.com/lyft/protoc-gen-validate v0.1.0 h1:NytKd9K7UW7Szxn+9PYNsaJ/98TL/WsDq4ro4ZVuh5o= +github.com/m3db/prometheus_client_golang v0.8.1 h1:t7w/tcFws81JL1j5sqmpqcOyQOpH4RDOmIe3A3fdN3w= +github.com/m3db/prometheus_client_golang v0.8.1/go.mod h1:8R/f1xYhXWq59KD/mbRqoBulXejss7vYtYzWmruNUwI= +github.com/m3db/prometheus_client_model v0.1.0 h1:cg1+DiuyT6x8h9voibtarkH1KT6CmsewBSaBhe8wzLo= +github.com/m3db/prometheus_client_model v0.1.0/go.mod h1:Qfsxn+LypxzF+lNhak7cF7k0zxK7uB/ynGYoj80zcD4= +github.com/m3db/prometheus_common v0.1.0 h1:YJu6eCIV6MQlcwND24cRG/aRkZDX1jvYbsNNs1ZYr0w= +github.com/m3db/prometheus_common v0.1.0/go.mod h1:EBmDQaMAy4B8i+qsg1wMXAelLNVbp49i/JOeVszQ/rs= +github.com/m3db/prometheus_procfs v0.8.1 h1:LsxWzVELhDU9sLsZTaFLCeAwCn7bC7qecZcK4zobs/g= +github.com/m3db/prometheus_procfs v0.8.1/go.mod h1:N8lv8fLh3U3koZx1Bnisj60GYUMDpWb09x1R+dmMOJo= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq0y3QnmWAArdw9PqbmotexnWx/FU8= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/markbates/deplist v1.0.4/go.mod h1:gRRbPbbuA8TmMiRvaOzUlRfzfjeCCBqX2A6arxN01MM= +github.com/markbates/deplist v1.0.5/go.mod h1:gRRbPbbuA8TmMiRvaOzUlRfzfjeCCBqX2A6arxN01MM= +github.com/markbates/deplist v1.1.3/go.mod h1:BF7ioVzAJYEtzQN/os4rt8H8Ti3h0T7EoN+7eyALktE= +github.com/markbates/deplist v1.2.0/go.mod h1:dtsWLZ5bWoazbM0rCxZncQaAPifWbvHgBJk8UNI1Yfk= +github.com/markbates/deplist v1.3.0 h1:uPgoloPraPBPYtNSxj2UwZBh2EHW9TmMvQCP2FBiRlU= +github.com/markbates/deplist v1.3.0/go.mod h1:dtsWLZ5bWoazbM0rCxZncQaAPifWbvHgBJk8UNI1Yfk= +github.com/markbates/going v1.0.2/go.mod h1:UWCk3zm0UKefHZ7l8BNqi26UyiEMniznk8naLdTcy6c= +github.com/markbates/going v1.0.3 h1:mY45T5TvW+Xz5A6jY7lf4+NLg9D8+iuStIHyR7M8qsE= +github.com/markbates/going v1.0.3/go.mod h1:fQiT6v6yQar9UD6bd/D4Z5Afbk9J6BBVBtLiyY4gp2o= +github.com/markbates/grift v1.0.4/go.mod h1:wbmtW74veyx+cgfwFhlnnMWqhoz55rnHR47oMXzsyVs= +github.com/markbates/grift v1.0.5/go.mod h1:EHmVIjOQoj/OOBDzlZ8RW0ZkvOtQ4xRHjrPvmfoiFaU= +github.com/markbates/grift v1.0.6/go.mod h1:2AUYA/+pODhwonRbYwsltPVPIztBzw5nIJEGiWgKMPM= +github.com/markbates/grift v1.1.0 h1:DsljFKUSK1ELpU22ZE+Gi93jiQI3cYD/RQ+vHM/PpY8= +github.com/markbates/grift v1.1.0/go.mod h1:8N7ybWEcnMOvtSb0kW+dLJpYii9eq/FP3Gtu/cNPDTY= +github.com/markbates/hmax v1.0.0/go.mod h1:cOkR9dktiESxIMu+65oc/r/bdY4bE8zZw3OLhLx0X2c= +github.com/markbates/hmax v1.1.0 h1:MswE0ks4Iv1UAQNlvAyFpsyFQSBHolckas95gRUkka4= +github.com/markbates/hmax v1.1.0/go.mod h1:hhn8pJiRwNTEmNlxhfiTbL+CtEYiAX3wuhSf/kg/6wI= +github.com/markbates/inflect v1.0.0/go.mod h1:oTeZL2KHA7CUX6X+fovmK9OvIOFuqu0TwdQrZjLTh88= +github.com/markbates/inflect v1.0.1/go.mod h1:uv3UVNBe5qBIfCm8O8Q+DW+S1EopeyINj+Ikhc7rnCk= +github.com/markbates/inflect v1.0.3/go.mod h1:1fR9+pO2KHEO9ZRtto13gDwwZaAKstQzferVeWqbgNs= +github.com/markbates/inflect v1.0.4 h1:5fh1gzTFhfae06u3hzHYO9xe3l3v3nW5Pwt3naLTP5g= +github.com/markbates/inflect v1.0.4/go.mod h1:1fR9+pO2KHEO9ZRtto13gDwwZaAKstQzferVeWqbgNs= +github.com/markbates/oncer v0.0.0-20180924031910-e862a676800b/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= +github.com/markbates/oncer v0.0.0-20180924034138-723ad0170a46/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= +github.com/markbates/oncer v0.0.0-20181014194634-05fccaae8fc4/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= +github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= +github.com/markbates/oncer v1.0.0 h1:E83IaVAHygyndzPimgUYJjbshhDTALZyXxvk9FOlQRY= +github.com/markbates/oncer v1.0.0/go.mod h1:Z59JA581E9GP6w96jai+TGqafHPW+cPfRxz2aSZ0mcI= +github.com/markbates/refresh v1.4.10/go.mod h1:NDPHvotuZmTmesXxr95C9bjlw1/0frJwtME2dzcVKhc= +github.com/markbates/refresh v1.4.11/go.mod h1:awpJuyo4zgexB/JaHfmBX0sRdvOjo2dXwIayWIz9i3g= +github.com/markbates/refresh v1.5.0/go.mod h1:ZYMLkxV+x7wXQ2Xd7bXAPyF0EXiEWAMfiy/4URYb1+M= +github.com/markbates/refresh v1.6.0/go.mod h1:p8jWGABFUaFf/cSw0pxbo0MQVujiz5NTQ0bmCHLC4ac= +github.com/markbates/refresh v1.7.1/go.mod h1:hcGVJc3m5EeskliwSVJxcTHzUtMz2h8gBtCS0V94CgE= +github.com/markbates/refresh v1.8.0 h1:ELMS9kKyO/H6cJrqFo6qCyE0cRx2JeHWC9yusDkVeM8= +github.com/markbates/refresh v1.8.0/go.mod h1:ppl0l94oz3OKBAx3MV65vCDWPo51JQnypdtFUmps1NM= +github.com/markbates/safe v1.0.0/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= +github.com/markbates/safe v1.0.1 h1:yjZkbvRM6IzKj9tlu/zMJLS0n/V351OZWRnF3QfaUxI= +github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= +github.com/markbates/sigtx v1.0.0 h1:y/xtkBvNPRjD4KeEplf4w9rJVSc23/xl+jXYGowTwy0= +github.com/markbates/sigtx v1.0.0/go.mod h1:QF1Hv6Ic6Ca6W+T+DL0Y/ypborFKyvUY9HmuCD4VeTc= +github.com/markbates/willie v1.0.9 h1:394PpHImWjScL9X2VRCDXJAcc77sHsSr3w3sOnL/DVc= +github.com/markbates/willie v1.0.9/go.mod h1:fsrFVWl91+gXpx/6dv715j7i11fYPfZ9ZGfH0DQzY7w= +github.com/marstr/collection v1.0.1 h1:j61osRfyny7zxBlLRtoCvOZ2VX7HEyybkZcsLNLJ0z0= +github.com/marstr/collection v1.0.1/go.mod h1:HHDXVxjLO3UYCBXJWY+J/ZrxCUOYqrO66ob1AzIsmYA= +github.com/marstr/goalias v0.0.0-20180416201319-8dff9a14db64 h1:boT2QecCbBI45GoZDMlEFzSMQQFR4Yq+9v5XHt+XE00= +github.com/marstr/goalias v0.0.0-20180416201319-8dff9a14db64/go.mod h1:sFzSHdiOc23IPzkHolbVUGlnVBrTLPvx3B0uZ2uHAVc= +github.com/marstr/guid v1.1.0 h1:/M4H/1G4avsieL6BbUwCOBzulmoeKVP5ux/3mQNnbyI= +github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= +github.com/marstr/randname v0.0.0-20181206212954-d5b0f288ab8c h1:JE+MDz5rhFN5EC9Dj/N8dLYKboTWm6FXeWhnyKVj0vA= +github.com/marstr/randname v0.0.0-20181206212954-d5b0f288ab8c/go.mod h1:Xc224oUXd7/sKMjWKl17cfkYOKQ1S+HSOW7YHEGXauI= +github.com/martini-contrib/render v0.0.0-20150707142108-ec18f8345a11 h1:YFh+sjyJTMQSYjKwM4dFKhJPJC/wfo98tPUc17HdoYw= +github.com/martini-contrib/render v0.0.0-20150707142108-ec18f8345a11/go.mod h1:Ah2dBMoxZEqk118as2T4u4fjfXarE0pPnMJaArZQZsI= +github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-isatty v0.0.3 h1:ns/ykhmWi7G9O+8a448SecJU3nSMBXJfqQkl0upE1jI= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-runewidth v0.0.3 h1:a+kO+98RDGEfo6asOGMmpodZq4FNtnGP54yps8BzLR4= +github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-sqlite3 v1.10.0 h1:jbhqpg7tQe4SupckyijYiy0mJJ/pRyHvXf7JdWK860o= +github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104 h1:d8RFOZ2IiFtFWBcKEHAFYJcPTf0wY5q0exFNJZVWa1U= +github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= +github.com/mattn/go-zglob v0.0.0-20171230104132-4959821b4817/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= +github.com/mattn/go-zglob v0.0.0-20180803001819-2ea3427bfa53 h1:tGfIHhDghvEnneeRhODvGYOt305TPwingKt6p90F4MU= +github.com/mattn/go-zglob v0.0.0-20180803001819-2ea3427bfa53/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= +github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= +github.com/microcosm-cc/bluemonday v1.0.2 h1:5lPfLTTAvAbtS0VqT+94yOtFnGfUWYyx0+iToC3Os3s= +github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.15 h1:CSSIDtllwGLMoA6zjdKnaE6Tx6eVUxQ29LUgGetiDCI= +github.com/miekg/dns v1.1.15/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mitchellh/cli v1.0.0 h1:iGBIsUe3+HZ/AD/Vd7DErOt5sU9fa8Uj7A2s1aggv1Y= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= +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 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4= +github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= +github.com/mitchellh/gox v0.4.0 h1:lfGJxY7ToLJQjHHwi0EX6uYBdK78egf954SQl13PQJc= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.0.0/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mjibson/appstats v0.0.0-20151004071057-0542d5f0e87e h1:Jpn5gwt6vuJ9gcWP7sZdFQ6zDRjOU2UJHYb+iK1IC8c= +github.com/mjibson/appstats v0.0.0-20151004071057-0542d5f0e87e/go.mod h1:9oJenpYx/HCuJuv/fdEVpSb8PZ2t3tBFBbu+i6jU3UU= +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-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/monoculum/formam v0.0.0-20180901015400-4e68be1d79ba/go.mod h1:RKgILGEJq24YyJ2ban8EO0RUVSJlF1pGsEvoLEACr/Q= +github.com/monoculum/formam v0.0.0-20190307031628-bc555adff0cd/go.mod h1:JKa2av1XVkGjhxdLS59nDoXa2JpmIHpnURWNbzCtXtc= +github.com/monoculum/formam v0.0.0-20190730134247-0612307a4099/go.mod h1:JKa2av1XVkGjhxdLS59nDoXa2JpmIHpnURWNbzCtXtc= +github.com/monoculum/formam v0.0.0-20190830100315-7ff9597b1407 h1:ZU5O9BawmEx9Mu1lxn9NLIwO9DrqRfjE+HWKU+e9GKQ= +github.com/monoculum/formam v0.0.0-20190830100315-7ff9597b1407/go.mod h1:JKa2av1XVkGjhxdLS59nDoXa2JpmIHpnURWNbzCtXtc= +github.com/montanaflynn/stats v0.5.0 h1:2EkzeTSqBB4V4bJwWrt5gIIrZmpJBcoIRGS2kWLgzmk= +github.com/montanaflynn/stats v0.5.0/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d h1:7PxY7LVfSZm7PEeBTyK1rj1gABdCO2mbri6GKO1cMDs= +github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +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 h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/nats-io/jwt v0.3.0 h1:xdnzwFETV++jNc4W1mw//qFyJGb2ABOombmZJQS4+Qo= +github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= +github.com/nats-io/nats.go v1.9.1 h1:ik3HbLhZ0YABLto7iX80pZLPw/6dx3T+++MZJwLnMrQ= +github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nkeys v0.1.0 h1:qMd4+pRHgdr1nAClu+2h/2a5F2TmKcCzjCDazVgRoX4= +github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d h1:AREM5mwr4u1ORQBMvzfzBgpsctsbQikCVpvC+tX285E= +github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= +github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86 h1:D6paGObi5Wud7xg83MaEFyjxQB1W5bz5d0IFppr+ymk= +github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= +github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab h1:eFXv9Nu1lGbrNbj619aWwZfVF5HBrm9Plte8aNptuTI= +github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= +github.com/nicksnyder/go-i18n v1.10.0 h1:5AzlPKvXBH4qBzmZ09Ua9Gipyruv6uApMcrNZdo96+Q= +github.com/nicksnyder/go-i18n v1.10.0/go.mod h1:HrK7VCrbOvQoUAQ7Vpy7i87N7JZZZ7R2xBGjv0j365Q= +github.com/oklog/oklog v0.3.2 h1:wVfs8F+in6nTBMkA7CbRw+zZMIB7nNM825cM1wuzoTk= +github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= +github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= +github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/oklog/ulid v0.0.0-20170117200651-66bb6560562f/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.1 h1:b3iUnf1v+ppJiOfNX4yxxqfWKMQPZR5yoh8urCTFX88= +github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olivere/elastic v6.2.26+incompatible h1:3PjUHKyt8xKwbFQpRC5cgtEY7Qz6ejopBkukhI7UWvE= +github.com/olivere/elastic v6.2.26+incompatible/go.mod h1:J+q1zQJTgAz9woqsbVRqGeB5G1iqDKVBWLNSYW8yfJ8= +github.com/olivere/env v1.1.0 h1:owp/uwMwhru5668JjMDp8UTG3JGT27GTCk4ufYQfaTw= +github.com/olivere/env v1.1.0/go.mod h1:zaoXy53SjZfxqZBGiGrZCkuVLYPdwrc+vArPuUVhJdQ= +github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w= +github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.9.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo= +github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v0.0.0-20190113212917-5533ce8a0da3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.6.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= +github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb0c1d1e h1:poxNKN8teT8QjLK6LwKN52cNQEPqHIOEsmPJv5ssZUU= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb0c1d1e/go.mod h1:zZf9V+57o0Fd3ik5HzaHamVsWhudJTOwnKw9kJvWoDo= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 h1:lM6RxxfUMrYL/f8bWEUqdXrANWtrL7Nndbm9iFN0DlU= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= +github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9 h1:QsgXACQhd9QJhEmRumbsMQQvBtmdS0mafoVEBplWXEg= +github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9/go.mod h1:PLldrQSroqzH70Xl+1DQcGnefIbqsKR7UDaiux3zV+w= +github.com/opentracing/basictracer-go v1.0.0 h1:YyUAhaEfjoWXclZVJ9sGoNct7j4TVk7lZWlQw5UXuoo= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= +github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.4 h1:bzTJRoOZEN7uI1gq594S5HhMYNSud4FKUEwd4aFbsEI= +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.4/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= +github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= +github.com/openzipkin/zipkin-go v0.2.1 h1:noL5/5Uf1HpVl3wNsfkZhIKbSWCVi5jgqkONNx8PXcA= +github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/orijtech/prometheus-go-metrics-exporter v0.0.3-0.20190313163149-b321c5297f60 h1:vN7d/Zv6aOXqhspiqoEMkb6uFHNARVESmYn5XtNeyrk= +github.com/orijtech/prometheus-go-metrics-exporter v0.0.3-0.20190313163149-b321c5297f60/go.mod h1:+Mu9w51Uc2RNKSUTA95d6Pvy8cxFiRX3ANRPlCcnGLA= +github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw= +github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/paulbellamy/ratecounter v0.2.0 h1:2L/RhJq+HA8gBQImDXtLPrDXK5qAj6ozWVK/zFXVJGs= +github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= +github.com/pborman/getopt v0.0.0-20190409184431-ee0cd42419d3 h1:YtFkrqsMEj7YqpIhRteVxJxCeC3jJBieuLr0d4C4rSA= +github.com/pborman/getopt v0.0.0-20190409184431-ee0cd42419d3/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= +github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-buffruneio v0.2.0 h1:U4t4R6YkofJ5xHm3dJzuRpPZ0mr5MMCoAWooScCR7aA= +github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= +github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/performancecopilot/speed v3.0.0+incompatible h1:2WnRzIquHa5QxaJKShDkLM+sc0JPuwhXzK8OYOyt3Vg= +github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/peterh/liner v1.1.0 h1:f+aAedNJA6uk7+6rXsYBnhdo4Xux7ESLe+kcuVUF5os= +github.com/peterh/liner v1.1.0/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= +github.com/philhofer/fwd v1.0.0 h1:UbZqGr5Y38ApvM/V/jEljVxwocdweyH+vmYvRPBnbqQ= +github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +github.com/phpdave11/gofpdi v1.0.7 h1:k2oy4yhkQopCK+qW8KjCla0iU2RpDow+QUDmH9DDt44= +github.com/phpdave11/gofpdi v1.0.7/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= +github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= +github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I= +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 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/profile v1.2.1 h1:F++O52m40owAmADcojzM+9gyjmMOY/T4oYJkgFDH8RE= +github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pkg/sftp v1.10.1 h1:VasscCm72135zRysgrJDKsntdmPN+OuU3+nnHYA9wyc= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5 h1:tFwafIEMf0B7NlcxV/zJ6leBIa81D3hgGSgsE5hCkOQ= +github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= +github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +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 h1:ccV59UEOTzVDnDUEFdT95ZzHVZ+5+158q8+SJb2QV5w= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/prashantv/protectmem v0.0.0-20171002184600-e20412882b3a h1:AA9vgIBDjMHPC2McaGPojgV2dcI78ZC0TLNhYCXEKH8= +github.com/prashantv/protectmem v0.0.0-20171002184600-e20412882b3a/go.mod h1:lzZQ3Noex5pfAy7mkAeCjcBDteYU85uWWnJ/y6gKU8k= +github.com/pressly/chi v4.0.2+incompatible h1:IQCvpYSGI/zsVuwr8+Q2R/13k9EHaFi05M3g8thnyqs= +github.com/pressly/chi v4.0.2+incompatible/go.mod h1:s/kslmeFE633XtTPvfX2olbs4ymzIHxGGXmEJ/AvPT8= +github.com/prometheus/alertmanager v0.18.0 h1:sPppYFge7kdf9O96KIh3fd093D1xN8JxIp03wW6yAEE= +github.com/prometheus/alertmanager v0.18.0/go.mod h1:WcxHBl40VSPuOaqWae6l6HpnEOVRIycEJ7i9iYkadEE= +github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.1.0 h1:BQ53HtBmfOitExawJ6LokA4x8ov/z0SYYb0+HxJfRI8= +github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= +github.com/prometheus/common v0.7.0 h1:L+1lyG48J1zAQXA3RBX/nG/B3gjlHq0zTt2tlbJLyCY= +github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= +github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +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-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.3 h1:CTwfnzjQ+8dS6MhHHu4YswVAD99sL2wjPqP+VkURmKE= +github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= +github.com/prometheus/prometheus v0.0.0-20180315085919-58e2a31db8de/go.mod h1:oAIUtOny2rjMX0OWN5vPR5/q/twIROJvdqnQKDdil/s= +github.com/prometheus/prometheus v1.8.2-0.20190924101040-52e0504f83ea h1:DkijwrDmxCei6erPY2JZPJMOr8srbkbOJVkWbhSYWH4= +github.com/prometheus/prometheus v1.8.2-0.20190924101040-52e0504f83ea/go.mod h1:elNqjVbwD3sCZJqKzyN7uEuwGcCpeJvv67D6BrHsDbw= +github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a h1:9ZKAASQSHhDYGoxY8uLVpewe1GDZ2vu2Tr/vTdVAkFQ= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237 h1:HQagqIiBmr8YXawX/le3+O26N+vPPC1PtjaF3mwnook= +github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/retailnext/hllpp v1.0.0 h1:7+NffI2mo7lZG78NruEsf3jEnjJ6Z0n1otEyFqdK8zA= +github.com/retailnext/hllpp v1.0.0/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af h1:gu+uRPtBe88sKxUCEXRoeCvVG90TJmwhiqRpvdhQFng= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/go-charset v0.0.0-20190617161244-0dc95cdf6f31 h1:DE4LcMKyqAVa6a0CGmVxANbnVb7stzMmPkQiieyNmfQ= +github.com/rogpeppe/go-charset v0.0.0-20190617161244-0dc95cdf6f31/go.mod h1:qgYeAmZ5ZIpBWTGllZSQnw97Dj+woV0toclVaRGI8pc= +github.com/rogpeppe/go-internal v1.0.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.3.0 h1:RR9dF3JtopPvtkroDZuVD7qquD0bnHlKSqaQhgwt8yk= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.3.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.4.0 h1:LUa41nrWTQNGhzdsZ5lTnkwbNjj6rXTdazA1cSdjkOY= +github.com/rogpeppe/go-internal v1.4.0/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rs/cors v1.6.0 h1:G9tHG9lebljV9mfp9SNPDL36nCDxmo3zTlAf1YgvzmI= +github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc= +github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= +github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= +github.com/rs/zerolog v1.15.0 h1:uPRuwkWF4J6fGsJ2R0Gn2jB1EQiav9k3S6CSdygQJXY= +github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= +github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday v1.5.3-0.20190124082335-a477dd164691 h1:auJkuUc4uOuZNoH9jGLvqVaDLiuCOh/LY+Qw5NBFo4I= +github.com/russross/blackfriday v1.5.3-0.20190124082335-a477dd164691/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58 h1:nlG4Wa5+minh3S9LVFtNoY+GVRiudA2e3EVfcCi3RCA= +github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= +github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd h1:CmH9+J6ZSsIjUK3dcGsnCnO41eRBOnY12zwkn5qVwgc= +github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/ryanuber/columnize v2.1.0+incompatible h1:j1Wcmh8OrK4Q7GXY+V7SVSY8nUWQxHW5TkBe7YUl+2s= +github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/samuel/go-thrift v0.0.0-20190219015601-e8b6b52668fe h1:gD4vkYmuoWVgdV6UwI3tPo9MtMfVoIRY+Xn9919SJBg= +github.com/samuel/go-thrift v0.0.0-20190219015601-e8b6b52668fe/go.mod h1:Vrkh1pnjV9Bl8c3P9zH0/D4NlOHWP5d4/hF4YTULaec= +github.com/samuel/go-zookeeper v0.0.0-20190810000440-0ceca61e4d75 h1:cA+Ubq9qEVIQhIWvP2kNuSZ2CmnfBJFSRq+kO1pu2cc= +github.com/samuel/go-zookeeper v0.0.0-20190810000440-0ceca61e4d75/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/satori/go.uuid v0.0.0-20160603004225-b111a074d5ef h1:RoeI7K0oZIcUirMHsFpQjTVDrl1ouNh8T7v3eNsUxL0= +github.com/satori/go.uuid v0.0.0-20160603004225-b111a074d5ef/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/segmentio/kafka-go v0.1.0 h1:IXCHG+sXPNiIR5pC/vTEItZduPKu4cnpr85YgxpxlW0= +github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= +github.com/serenize/snaker v0.0.0-20171204205717-a683aaf2d516 h1:ofR1ZdrNSkiWcMsRrubK9tb2/SlZVWttAfqUjJi6QYc= +github.com/serenize/snaker v0.0.0-20171204205717-a683aaf2d516/go.mod h1:Yow6lPLSAXx2ifx470yD/nUe22Dv5vBvxK/UK9UUTVs= +github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= +github.com/shopspring/decimal v0.0.0-20191009025716-f1972eb1d1f5 h1:Gojs/hac/DoYEM7WEICT45+hNWczIeuL5D21e5/HPAw= +github.com/shopspring/decimal v0.0.0-20191009025716-f1972eb1d1f5/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= +github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4 h1:Fth6mevc5rX7glNLpbAMJnqKlfIkcTjZCSHEeqvKbcI= +github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= +github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48 h1:vabduItPAIz9px5iryD5peyx7O3Ya8TBThapgXim98o= +github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= +github.com/shurcooL/frontend v0.0.0-20180531171852-7e359e4b7b17 h1:IXoSIR8kdcag4uLYYWHu7meIZOE6Z1fF0njklq5EKiE= +github.com/shurcooL/frontend v0.0.0-20180531171852-7e359e4b7b17/go.mod h1:ALtiPMc4jQz4RRgcPDF3/+NYQrVW2jjP9W1hPxSoK7c= +github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470 h1:qb9IthCFBmROJ6YBS31BEMeSYjOscSiG+EO+JVNTz64= +github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= +github.com/shurcooL/githubv4 v0.0.0-20191102174205-af46314aec7b h1:Cocq9/ZZxCoiybhygOR7hX4E3/PkV8eNbd1AEcUvaHM= +github.com/shurcooL/githubv4 v0.0.0-20191102174205-af46314aec7b/go.mod h1:hAF0iLZy4td2EX+/8Tw+4nodhlMrwN3HupfaXj3zkGo= +github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e h1:MZM7FHLqUHYI0Y/mQAt3d2aYa0SiNms/hFqC9qJYolM= +github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041 h1:llrF3Fs4018ePo4+G/HV/uQUqEI1HMDjCeOf2V6puPc= +github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= +github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d h1:Yoy/IzG4lULT6qZg62sVC+qyBL8DQkmD2zv6i7OImrc= +github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d/go.mod h1:05UtEgK5zq39gLST6uB0cf3NEHjETfB4Fgr3Gx5R9Vw= +github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c h1:UOk+nlt1BJtTcH15CT7iNO7YVWTfTv/DNwEAQHLIaDQ= +github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c/go.mod h1:8d3azKNyqcHP1GaQE/c6dDgjkgSx2BZ4IoEi4F1reUI= +github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f h1:tygelZueB1EtXkPI6mQ4o9DQ0+FKW41hTbunoXZCTqk= +github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f/go.mod h1:AuYgA5Kyo4c7HfUmvRGs/6rGlMMV/6B1bVnB9JxJEEg= +github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b h1:vYEG87HxbU6dXj5npkeulCS96Dtz5xg3jcfCgpcvbIw= +github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b/go.mod h1:ZpfEhSmds4ytuByIcDnOLkTHGUI6KNqRNPDLHDk+mUU= +github.com/shurcooL/highlight_go v0.0.0-20170515013102-78fb10f4a5f8/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= +github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20 h1:7pDq9pAMCQgRohFmd25X8hIH8VxmT3TaDm+r9LHxgBk= +github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= +github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9 h1:MPblCbqA5+z6XARjScMfz1TqtJC7TuTRj0U9VqIBs6k= +github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9/go.mod h1:+rgNQw2P9ARFAs37qieuu7ohDNQ3gds9msbT2yn85sg= +github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50 h1:crYRwvwjdVh1biHzzciFHe8DrZcYrVcZFlJtykhRctg= +github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50/go.mod h1:zPn1wHpTIePGnXSHpsVPWEktKXHr6+SS6x/IKRb7cpw= +github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc h1:eHRtZoIi6n9Wo1uR+RU44C247msLWwyA89hVKwRLkMk= +github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc/go.mod h1:aYMfkZ6DWSJPJ6c4Wwz3QtW22G7mf/PEgaB9k/ik5+Y= +github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= +github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 h1:bUGsEnyNbVPw06Bs80sCeARAlK8lhwqGyi6UT8ymuGk= +github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= +github.com/shurcooL/httpgzip v0.0.0-20180522190206-b1c53ac65af9/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= +github.com/shurcooL/httpgzip v0.0.0-20190720172056-320755c1c1b0 h1:mj/nMDAwTBiaCqMEs4cYCqF7pO6Np7vhy1D1wcQGz+E= +github.com/shurcooL/httpgzip v0.0.0-20190720172056-320755c1c1b0/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= +github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191 h1:T4wuULTrzCKMFlg3HmKHgXAF8oStFb/+lOIupLV2v+o= +github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191/go.mod h1:e2qWDig5bLteJ4fwvDAc2NHzqFEthkqn7aOZAOpj+PQ= +github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241 h1:Y+TeIabU8sJD10Qwd/zMty2/LEaT9GNDaA6nyZf+jgo= +github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241/go.mod h1:NPpHK2TI7iSaM0buivtFUc9offApnI0Alt/K8hcHy0I= +github.com/shurcooL/markdownfmt v0.0.0-20190409060426-3438a10682f5 h1:1X30SFo6Em9oCyrReNh9//zC7uE6IDoc+XgVy/iFdlE= +github.com/shurcooL/markdownfmt v0.0.0-20190409060426-3438a10682f5/go.mod h1:wwC6+1FOCAA/hK8+pmBir20vneHxr8Nh0OGQNkyo2a8= +github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122 h1:TQVQrsyNaimGwF7bIhzoVC9QkKm4KsWd8cECGzFx8gI= +github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b5uSkrEVM1jQUspwbixRBhaIjIzL2xazXp6kntxYle0= +github.com/shurcooL/notificationsapp v0.0.0-20181114034014-0a6e54cc4198 h1:7QgoOp3Mt75G/Us+x63zoMpes773uWLpzYaVOJ+nUNs= +github.com/shurcooL/notificationsapp v0.0.0-20181114034014-0a6e54cc4198/go.mod h1:hk3wHCCz8slz+eGBb4+DQIy5nVnPH72adj2s9lMFfQo= +github.com/shurcooL/octicon v0.0.0-20180602230221-c42b0e3b24d9/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= +github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2 h1:bu666BQci+y4S0tVRVjsHUeRon6vUXmsGBwdowgMrg4= +github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= +github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82 h1:LneqU9PHDsg/AkPDU3AkqMxnMYL+imaqkpflHu73us8= +github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk= +github.com/shurcooL/resume v0.0.0-20190824223711-dc47c8f77a80 h1:vPvEqkxGS5EIFJKIc+F/FSPacFcyoGmD0DTv+/uJNfs= +github.com/shurcooL/resume v0.0.0-20190824223711-dc47c8f77a80/go.mod h1:PE5QMqQGr8EdiigTVrcorvUhBeSgd/PsCBWoq9L6foM= +github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537 h1:YGaxtkYjb8mnTvtufv2LKLwCQu2/C7qFB7UtrOlTWOY= +github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= +github.com/shurcooL/vfsgen v0.0.0-20180825020608-02ddb050ef6b/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= +github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd h1:ug7PpSOB5RBPK1Kg6qskGBoP3Vnj/aNYFTznWvlkGo0= +github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= +github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133 h1:JtcyT0rk/9PKOdnKQzuDR+FSjh7SGtJwpgVpfZBRKlQ= +github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= +github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= +github.com/sirupsen/logrus v1.1.0/go.mod h1:zrgwTnHtNr00buQ1vSptGe8m1f/BbgsPukg8qsT7A+A= +github.com/sirupsen/logrus v1.1.1/go.mod h1:zrgwTnHtNr00buQ1vSptGe8m1f/BbgsPukg8qsT7A+A= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9 h1:hp2CYQUINdZMHdvTdXtPOY2ainKl4IoMcpAXEf2xj3Q= +github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= +github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sony/gobreaker v0.4.1 h1:oMnRNZXX5j85zso6xCPRNPtmAycat+WcoKbklScLDgQ= +github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d h1:yKm7XZV6j9Ev6lojP2XaIshpT4ymkqhMeSghO5Ps00E= +github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= +github.com/sourcegraph/go-diff v0.5.1 h1:gO6i5zugwzo1RVTvgvfwCOSVegNuvnNi6bAD1QCmkHs= +github.com/sourcegraph/go-diff v0.5.1/go.mod h1:j2dHj3m8aZgQO8lMTcTnBcXkRRRqi34cd2MNlA9u1mE= +github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e h1:qpG93cPwA5f7s/ZPBJnGOYQNK/vKsaDaseuKT5Asee8= +github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.2.0/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/afero v1.2.1/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= +github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.4/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +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/spf13/viper v1.2.1/go.mod h1:P4AexN0a+C9tGAnUFNwDMYYZv3pjFuvmeiMyKRaNVlI= +github.com/spf13/viper v1.3.0/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.3.1/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/spf13/viper v1.4.1-0.20190911140308-99520c81d86e h1:D4jmJ9BqzeMv7BvAqjooNtXH2PXG7m+pcYRnj2Ojlrk= +github.com/spf13/viper v1.4.1-0.20190911140308-99520c81d86e/go.mod h1:jUyf+v/KTOnRyUy2/AsjF537WfJWVv3AnlcKSNd+AIg= +github.com/src-d/gcfg v1.4.0 h1:xXbNR5AlLSA315x2UO+fTSSAXCDf+Ar38/6oyGbDKQ4= +github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= +github.com/stathat/go v1.0.0 h1:HFIS5YkyaI6tXu7JXIRRZBLRvYstdNZm034zcCeaybI= +github.com/stathat/go v1.0.0/go.mod h1:+9Eg2szqkcOGWv6gfheJmBBsmq9Qf5KDbzy8/aYYR0c= +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94 h1:0ngsPmuP6XIjiFRNFYlvKwSr5zff2v+uPHaffZ6/M4k= +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a h1:AhmOdSHeswKHBjhsLs/7+1voOxT+LLrSk/Nxvk35fug= +github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +github.com/streadway/quantile v0.0.0-20150917103942-b0c588724d25 h1:7z3LSn867ex6VSaahyKadf4WtSsJIgne6A1WLOAGM8A= +github.com/streadway/quantile v0.0.0-20150917103942-b0c588724d25/go.mod h1:lbP8tGiBjZ5YWIc2fzuRpTaz0b/53vT6PEs3QuAWzuU= +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.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +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 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= +github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= +github.com/tambet/go-asana v0.0.0-20161015030314-6c0cb7090a14 h1:mv5oIIbRcPh6r80jbRM+9zYs4erKCx4700JaYqNBxKM= +github.com/tambet/go-asana v0.0.0-20161015030314-6c0cb7090a14/go.mod h1:erM8VNXdx5GeFvs939dYq4nfzij6d2Lzdc8COCDYZ6w= +github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07 h1:UyzmZLoiDWMRywV4DUYb9Fbt8uiOSooupjTq10vpvnU= +github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= +github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= +github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tinylib/msgp v1.1.0 h1:9fQd+ICuRIu/ue4vxJZu6/LzxN0HwMds2nq/0cFvxHU= +github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= +github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2 h1:eGaGNxrtoZf/mBURsnNQKDR7u50Klgcf2eFDQEnc8Bc= +github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eNAjXGDx2yma7uG2XoyRZTq1uv3M/o7imD0= +github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b h1:m74UWYy+HBs+jMFR9mdZU6shPewugMyH5+GV6LNgW8w= +github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b/go.mod h1:/yhzCV0xPfx6jb1bBgRFjl5lytqVqZXEaeqWP8lTEao= +github.com/tj/go-spin v1.1.0 h1:lhdWZsvImxvZ3q1C5OIB7d72DuOwP4O2NdBg9PyzNds= +github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31 h1:OXcKh35JaYsGMRzpvFkLv/MEyPuL49CThT1pZ8aSml4= +github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926 h1:G3dpKMzFDjgEh2q1Z7zUUtKa8ViPtH+ocF0bE0g00O8= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/uber-go/atomic v1.4.0 h1:yOuPqEq4ovnhEjpHmfFwsqBXDYbQeT6Nb0bwD6XnD5o= +github.com/uber-go/atomic v1.4.0/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g= +github.com/uber-go/tally v3.3.12+incompatible h1:Qa0XrHsKXclmhEpHmBHTTEZotwvQHAbm3lvtJ6RNn+0= +github.com/uber-go/tally v3.3.12+incompatible/go.mod h1:YDTIBxdXyOU/sCWilKB4bgyufu1cEi0jdVnRdxvjnmU= +github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-client-go v2.16.0+incompatible h1:Q2Pp6v3QYiocMxomCaJuwQGFt7E53bPYqEgug/AoBtY= +github.com/uber/jaeger-client-go v2.16.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v2.0.0+incompatible h1:iMSCV0rmXEogjNWPh2D0xk9YVKvrtGoHJNe9ebLu/pw= +github.com/uber/jaeger-lib v2.0.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/uber/tchannel-go v1.10.0 h1:YOihLHuvkwT3nzvpgqFtexFW+pb5vD1Tz7h/bIWApgE= +github.com/uber/tchannel-go v1.10.0/go.mod h1:Rrgz1eL8kMjW/nEzZos0t+Heq0O4LhnUJVA32OvWKHo= +github.com/ugorji/go v1.1.4 h1:j4s+tAvLfL3bZyefP2SEWmhBzmuIlH/eqNuPdFPgngw= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8 h1:3SVOIvH7Ae1KRYyQWRjXWJEA9sS/c/pjvH++55Gr648= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/unknwon/cae v1.0.0 h1:i39lOFaBXZxhGjQOy/RNbi8uzettCs6OQxpR0xXohGU= +github.com/unknwon/cae v1.0.0/go.mod h1:QaSeRctcea9fK6piJpAMCCPKxzJ01+xFcr2k1m3WRPU= +github.com/unrolled/secure v0.0.0-20180918153822-f340ee86eb8b/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= +github.com/unrolled/secure v0.0.0-20181005190816-ff9db2ff917f/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= +github.com/unrolled/secure v0.0.0-20181022170031-4b6b7cf51606/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= +github.com/unrolled/secure v0.0.0-20190103195806-76e6d4e9b90c h1:ZY4dowVsuIAQtXXwKJ9ezfonDQ2YT7pcXRpPF2iAy3Y= +github.com/unrolled/secure v0.0.0-20190103195806-76e6d4e9b90c/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= +github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/negroni v1.0.0 h1:kIimOitoypq34K7TG7DUaJ9kq/N4Ofuwi1sjz0KipXc= +github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= +github.com/xanzy/ssh-agent v0.2.0 h1:Adglfbi5p9Z0BmK2oKU9nTG+zKfniSfnaMYB+ULd+Ro= +github.com/xanzy/ssh-agent v0.2.0/go.mod h1:0NyE30eGUDliuLEHJgYte/zncp2zdTStcOnWhgSqHD8= +github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c h1:u40Z8hqBAAQyv+vATcGgV0YCnDjqSL7/q/JyPhhJSPk= +github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= +github.com/xdg/stringprep v1.0.0 h1:d9X0esnoa3dFsV0FG35rAT0RIhYFlPq7MiP+DW89La0= +github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6 h1:YdYsPAZ2pC6Tow/nPZOPQ96O3hm/ToAkGsPLzedXERk= +github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77 h1:ESFSdwYZvkeru3RtdrYueztKhOBCSAAzS4Gf+k0tEow= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/zenazn/goji v0.9.0 h1:RSQQAbXGArQ0dIDEq+PI6WqN6if+5KHu6x2Cx/GXLTQ= +github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= +go.etcd.io/bbolt v1.3.2 h1:Z/90sZLPOeCy2PwprqkFa25PdkusRzaj9P8zm/KNyvk= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/etcd v3.3.17+incompatible h1:g8iRku1SID8QAW8cDlV0L/PkZlw63LSiYEHYHoE6j/s= +go.etcd.io/etcd v3.3.17+incompatible/go.mod h1:yaeTdrJi5lOmYerz05bd8+V7KubZs8YSFZfzsF9A6aI= +go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.0.4 h1:bHxbjH6iwh1uInchXadI6hQR107KEbgYsMzoblDONmQ= +go.mongodb.org/mongo-driver v1.0.4/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +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.1 h1:8dP3SGL7MPB94crU3bEPplMPe83FI4EouesJUeFHv50= +go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/automaxprocs v1.2.0 h1:+RUihKM+nmYUoB9w0D0Ov5TJ2PpFO2FgenTxMJiZBZA= +go.uber.org/automaxprocs v1.2.0/go.mod h1:YfO3fm683kQpzETxlTGZhGIVmXAhaw3gxeBADbpZtnU= +go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go4.org v0.0.0-20180809161055-417644f6feb5 h1:+hE86LblG4AyDgwMCLTE6FOlM9+qjHSYS+rKqxUVdsM= +go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= +golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d h1:E2M5QgjZ/Jg+ObCQAudsXxuTsLj7Nl5RV/lZcQZmKSo= +golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180910181607-0e37d006457b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181015023909-0c41d7ab0a0e/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181024171144-74cb1d3d52f4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181025113841-85e1b3f9139a/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181025213731-e84da0312774/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181106171534-e4dc69e5b2fd/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181112202954-3d3f9f413869/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181127143415-eb0de9b17e85/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190102171810-8d7daa0c54b3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190103213133-ff983b9c42bc/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190122013713-64072686203f/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190130090550-b01c7a725664/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/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-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190403202508-8e1b8d32e692/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190404164418-38d8ce5564a5/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +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-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 h1:HuIa8hRrWRSrqYzx1qI49NNxhdi2PrY7gxVSq1JjLDc= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522 h1:OeRHuibLsmZkFj773W4LcfAGsSxJgfPONhr8cmO+eLA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067 h1:KYGJGHOQy8oSi1fDlSpcZF0+juKwk/hEMv5SiwHogR0= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a h1:gHevYm0pO4QUbwy8Dmdr01R5r1BuKtfYqRqF0h/Cbh0= +golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +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 h1:QzoH/1pFpZguR8NrRHLcO6jKqfv2zpuSqZLgdm7ZmjI= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6 h1:Tus/Y4w3V77xDsGwKUC8a/QrV7jScpU557J77lFffNs= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e h1:JgcxKXxCjrA2tyDP/aNU9K0Ck5Czfk6C7e2tMw7+bSI= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180816102801-aaf60122140d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180921000356-2f5d2388922f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180926154720-4dfa2610cdf3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181017193950-04a2e542c03f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181102091132-c10e9556a7bc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181108082009-03003ca0c849/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-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181207154023-610586996380/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181213202711-891ebc4b82d6/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190119204137-ed066c81e75e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190206173232-65e2d4e15006/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-20190320064053-1272bf9dcd53/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-20190514140710-3ec191127204/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +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 h1:Ao/3l156eZf2AW5wK8a7/smtodRU+gha3+BeqJ69lRk= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 h1:fHDIZ2oxGnUZRN6WgWFCbYBjH9uqVPRCUVUDhs0wnbA= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/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-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852 h1:xYq6+9AtI+xP3M4r0N1hCkHrInHDBohhquRgx9Kk6gI= +golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= +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-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180816055513-1c9583448a9c/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +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-20180903190138-2b024373dcd9/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-20180906133057-8cf3aee42992/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180921163948-d47a0f339242/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180927150500-dad3d9fb7b6e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181005133103-4497e2df6f9e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181011152604-fa43e7bc11ba/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181019084534-8f1d3d21f81b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181022134430-8a28ead16f52/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181024145615-5cd93ef61a7c/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181025063200-d989b31c8746/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026064943-731415f00dce/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181030150119-7e31e0c00fa0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181106135930-3a76605856fd/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181128092732-4ed8d59d0b35/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181206074257-70b957f3b65e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181213150753-586ba8c9bb14/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181213200352-4d1cda033e06/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190102155601-82a175fd1598/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190116161447-11f53e031339/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190122071731-054c452bb702/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-20190209173611-3b5209105503/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-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190220154126-629670e5acc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/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-20190321052220-f7bb7a8bee54/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-20190419153524-e8e3143a4f4a/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-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be h1:QAcqgptGM8IQBC9K/RC4o+O9YmqEm0diQn9QmZw/0mU= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/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.20180805044716-cb6730876b98/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 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/time v0.0.0-20161028155119-f51c12702a4d/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181003024731-2f84ea8ef872/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181006002542-f60d9635b16a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181008205924-a2b3f7f249e9/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181013182035-5e66757b835f/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181017214349-06f26fdaaa28/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181019005945-6adeb8aab2de/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181024171208-a2dc47679d30/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181026183834-f60e5f99f081/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030151751-bb28844c46df/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181102223251-96e9e165b75e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181105230042-78dc5bac0cac/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181107215632-34b416bd17b3/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181109152631-138c20b93253/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181109202920-92d8274bd7b8/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181111003725-6d71ab8aade0/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181114190951-94339b83286c/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181119130350-139d099f6620/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181120060634-fc4f04983f62/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181122213734-04b5d21e00f1/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181127195227-b4e97c0ed882/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181127232545-e782529d0ddd/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181201035826-d0ca3933b724/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181203210056-e5f3ab76ea4b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181205224935-3576414c54a4/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181206194817-bcd4e47d0288/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181207183836-8bc39b988060/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181212172921-837e80568c09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181213190329-bbccd8cae4a9/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190102213336-ca9055ed7d04/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190104182027-498d95493402/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190111214448-fc1d57b08d7b/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-20190118193359-16909d206f00/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190122202912-9c309ee22fab/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190124004107-78ee07aa9465/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190131142011-8dbcc66f33bb/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206221403-44bcb96178d3/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190214204934-8dcb7bc8c7fe/go.mod h1:E6PF97AdD6v0s+fPshSmumCW1S1Ne85RbPQxELkKa44= +golang.org/x/tools v0.0.0-20190219135230-f000d56b39dc/go.mod h1:E6PF97AdD6v0s+fPshSmumCW1S1Ne85RbPQxELkKa44= +golang.org/x/tools v0.0.0-20190219185102-9394956cfdc5/go.mod h1:E6PF97AdD6v0s+fPshSmumCW1S1Ne85RbPQxELkKa44= +golang.org/x/tools v0.0.0-20190221204921-83362c3779f5/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +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-20190315044204-8b67d361bba2/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190318200714-bb1270c20edf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190404132500-923d25813098/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190407030857-0fdf0c73855b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/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-20190603152906-08e0b306e832/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190603231351-8aaa1484dc10/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190613204242-ed0dc450797f/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190617190820-da514acc4774/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-20190624180213-70d37148ca0c/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-20190809145639-6d4652c779c4/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190813034749-528a2984e271/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190825031127-d72b05d2b1b6/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190905035308-adb45749da8e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190906203814-12febf440ab1 h1:w4Q0TX3lC1NfGcWkzt5wG4ee4E5fUAPqh5myV0efeHI= +golang.org/x/tools v0.0.0-20190906203814-12febf440ab1/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191004055002-72853e10c5a3/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191015150414-f936694f27bf/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191030062658-86caa796c7ab h1:tpc/nJ4vD66vAk/2KN0sw/DvQIz2sKmCpWvyKtPmfMQ= +golang.org/x/tools v0.0.0-20191030062658-86caa796c7ab/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca h1:PupagGYwj8+I4ubCxcmcBRk3VlUWtTg5huQpZR9flmE= +gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6 h1:4WsZyVtkthqrHTbDCJfiTs8IWNYE4uvsSDgaV6xpp+o= +gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= +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.10.0 h1:7tmAxx3oKE98VMZ+SBZzvYYWRQ9HODBxmC8mXUsraSQ= +google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +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.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= +google.golang.org/genproto v0.0.0-20190201180003-4b09977fb922/go.mod h1:L3J43x8/uS+qIUoksaLKe6OS3nUKxOKuIFz1sl2/jx4= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/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-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64 h1:iKtrH9Y8mcbADOP0YFaEMth7OfuHY9xHOwNj4znpM1A= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +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.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.0 h1:AzbTB6ux+okLTzP8Ru1Xs41C303zdcfEht7MQnYJt5A= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.24.0 h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s= +gopkg.in/airbrake/gobrake.v2 v2.0.9 h1:7z2uVWwn7oVeeugY1DtlPAy5H+KYgB1KeKTnqjNatLo= +gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= +gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= +gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= +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 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/cheggaaa/pb.v1 v1.0.28 h1:n1tBJnnK2r7g9OW2btFH91V92STTUevLXYFb8gy9EMk= +gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/fsnotify/fsnotify.v1 v1.4.7 h1:XNNYLJHt73EyYiCZi6+xjupS9CpvmiDgjPTAjrBlQbo= +gopkg.in/fsnotify/fsnotify.v1 v1.4.7/go.mod h1:Fyux9zXlo4rWoMSIzpn9fDAYjalPqJ/K1qJ27s+7ltE= +gopkg.in/gcfg.v1 v1.2.3 h1:m8OOJ4ccYHnx2f4gQwpno8nAX5OGOh7RLaaz0pj3Ogs= +gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2 h1:OAj3g0cR6Dx/R07QgQe8wkA9RNjB2u4i700xBkIT4e0= +gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= +gopkg.in/go-playground/assert.v1 v1.2.1 h1:xoYuJVE7KT85PYWrN730RguIQO0ePzVRfFMXadIrXTM= +gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= +gopkg.in/go-playground/validator.v8 v8.18.2 h1:lFB4DoMU6B626w8ny76MV7VX6W2VHct2GVOI3xgiMrQ= +gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= +gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE= +gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw= +gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec h1:RlWgLqCMMIYYEVcAR5MDsuHlVkaIPDAF+5Dehzg8L5A= +gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= +gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/mail.v2 v2.0.0-20180731213649-a0242b2233b4 h1:a3llQg4+Czqaf+QH4diHuHiKv4j1abMwuRXwaRNHTPU= +gopkg.in/mail.v2 v2.0.0-20180731213649-a0242b2233b4/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw= +gopkg.in/pipe.v2 v2.0.0-20140414041502-3c2ca4d52544 h1:WJH1qsOB4/zb/li+zLMn0vaAUJ5FqPv6HYLI3aQVg1k= +gopkg.in/pipe.v2 v2.0.0-20140414041502-3c2ca4d52544/go.mod h1:UhTeH/yXCK/KY7TX24mqPkaQ7gZeqmWd/8SSS8B3aHw= +gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/src-d/go-billy.v4 v4.2.1 h1:omN5CrMrMcQ+4I8bJ0wEhOBPanIRWzFC953IiXKdYzo= +gopkg.in/src-d/go-billy.v4 v4.2.1/go.mod h1:tm33zBoOwxjYHZIE+OV8bxTWFMJLrconzFMd38aARFk= +gopkg.in/src-d/go-git-fixtures.v3 v3.1.1 h1:XWW/s5W18RaJpmo1l0IYGqXKuJITWRFuA45iOf1dKJs= +gopkg.in/src-d/go-git-fixtures.v3 v3.1.1/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= +gopkg.in/src-d/go-git.v4 v4.8.1 h1:aAyBmkdE1QUUEHcP4YFCGKmsMQRAuRmUcPEQR7lOAa0= +gopkg.in/src-d/go-git.v4 v4.8.1/go.mod h1:Vtut8izDyrM8BUVQnzJ+YvmNcem2J89EmfZYCkLokZk= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/tomb.v2 v2.0.0-20161208151619-d5d1b5820637 h1:yiW+nvdHb9LVqSHQBXfZCieqV4fzYhNBql77zY0ykqs= +gopkg.in/tomb.v2 v2.0.0-20161208151619-d5d1b5820637/go.mod h1:BHsqpu/nsuzkT5BpiH1EMZPLyqSMM8JbIavyFACoFNk= +gopkg.in/validator.v2 v2.0.0-20191029180049-30e574a82075 h1:ZkdLG20PbbXJaM0hn3WOp6PDUEyai71k/0lK8XR8UY4= +gopkg.in/validator.v2 v2.0.0-20191029180049-30e574a82075/go.mod h1:o4V0GXN9/CAmCsvJ0oXYZvrZOe7syiDZSN1GWGZTGzc= +gopkg.in/vmihailenco/msgpack.v2 v2.9.1 h1:kb0VV7NuIojvRfzwslQeP3yArBqJHW9tOl4t38VS1jM= +gopkg.in/vmihailenco/msgpack.v2 v2.9.1/go.mod h1:/3Dn1Npt9+MYyLpYYXjInO/5jvMLamn+AEGwNEOatn8= +gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0 h1:POO/ycCATvegFmVuPpQzZFJ+pGZeX22Ufu6fibxDVjU= +gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +grpc.go4.org v0.0.0-20170609214715-11d0a25b4919 h1:tmXTu+dfa+d9Evp8NpJdgOy6+rt8/x4yG7qPBrtNfLY= +grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= +honnef.co/go/js/dom v0.0.0-20190526011328-ebc4cf92d81f h1:b3Q9PqH+5NYHfIjNUEN+f8lYvBh9A25AX+kPh8dpYmc= +honnef.co/go/js/dom v0.0.0-20190526011328-ebc4cf92d81f/go.mod h1:sUMDUKNB2ZcVjt92UnLy3cdGs+wDAcrPdV3JP6sVgA4= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +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 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +istio.io/gogo-genproto v0.0.0-20191024203824-d079cc8b1d55 h1:nvpx66mnuGvXYP4IfCWfUqB9YhiXBF3MvUDsclNnDzI= +istio.io/gogo-genproto v0.0.0-20191024203824-d079cc8b1d55/go.mod h1:OzpAts7jljZceG4Vqi5/zXy/pOg1b209T3jb7Nv5wIs= +k8s.io/api v0.0.0-20190620084959-7cf5895f2711/go.mod h1:TBhBqb1AWbBQbW3XRusr7n7E4v2+5ZY8r8sAMnyFC5A= +k8s.io/api v0.0.0-20190813020757-36bff7324fb7 h1:4uJOjRn9kWq4AqJRE8+qzmAy+lJd9rh8TY455dNef4U= +k8s.io/api v0.0.0-20190813020757-36bff7324fb7/go.mod h1:3Iy+myeAORNCLgjd/Xu9ebwN7Vh59Bw0vh9jhoX+V58= +k8s.io/apimachinery v0.0.0-20190612205821-1799e75a0719/go.mod h1:I4A+glKBHiTgiEjQiCCQfCAIcIMFGt291SmsvcrFzJA= +k8s.io/apimachinery v0.0.0-20190809020650-423f5d784010 h1:pyoq062NftC1y/OcnbSvgolyZDJ8y4fmUPWMkdA6gfU= +k8s.io/apimachinery v0.0.0-20190809020650-423f5d784010/go.mod h1:Waf/xTS2FGRrgXCkO5FP3XxTOWh0qLf2QhL1qFZZ/R8= +k8s.io/client-go v0.0.0-20190620085101-78d2af792bab/go.mod h1:E95RaSlHr79aHaX0aGSwcPNfygDiPKOVXdmivCIZT0k= +k8s.io/client-go v12.0.0+incompatible h1:YlJxncpeVUC98/WMZKC3JZGk/OXQWCZjAB4Xr3B17RY= +k8s.io/client-go v12.0.0+incompatible/go.mod h1:E95RaSlHr79aHaX0aGSwcPNfygDiPKOVXdmivCIZT0k= +k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6 h1:4s3/R4+OYYYUKptXPhZKjQ04WJ6EhQQVFdjOFvCazDk= +k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.3.1/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.4.0 h1:lCJCxf/LIowc2IGS9TPjWDyXY4nOmdGdfcwwDQCOURQ= +k8s.io/klog v0.4.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= +k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= +k8s.io/kube-openapi v0.0.0-20190709113604-33be087ad058/go.mod h1:nfDlWeOsu3pUf4yWGL+ERqohP4YsZcBJXWMK+gkzOA4= +k8s.io/kube-openapi v0.0.0-20190722073852-5e22f3d471e6 h1:s9IxTKe9GwDH0S/WaX62nFYr0or32DsTWex9AileL7U= +k8s.io/kube-openapi v0.0.0-20190722073852-5e22f3d471e6/go.mod h1:RZvgC8MSN6DjiMV6oIfEE9pDL9CYXokkfaCKZeHm3nc= +k8s.io/utils v0.0.0-20190221042446-c2654d5206da/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3oVhZz7sSzSiPnVZayjIX0= +k8s.io/utils v0.0.0-20190809000727-6c36bc71fc4a h1:uy5HAgt4Ha5rEMbhZA+aM1j2cq5LmR6LQ71EYC2sVH4= +k8s.io/utils v0.0.0-20190809000727-6c36bc71fc4a/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e h1:4Z09Hglb792X0kfOBBJUPFEyvVfQWrYT/l8h5EKA6JQ= +sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= +sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 h1:ucqkfpjg9WzSUubAO62csmucvxl4/JeW3F4I4909XkM= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= +sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67 h1:e1sMhtVq9AfcEy8AXNb8eSg6gbzfdpYhoNqnPJa+GzI= +sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67/go.mod h1:L5q+DGLGOQFpo1snNEkLOJT2d1YTW66rWNzatr3He1k= +sourcegraph.com/sourcegraph/go-diff v0.5.0 h1:eTiIR0CoWjGzJcnQ3OkhIl/b9GJovq4lSAVRt0ZFEG8= +sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= +sourcegraph.com/sourcegraph/go-git v0.0.0-20190828120159-87e0e4ab9e95 h1:BXXbBIn17eUjrezW34vwkuHuMlLLjbHX+FqEaXkH9xo= +sourcegraph.com/sourcegraph/go-git v0.0.0-20190828120159-87e0e4ab9e95/go.mod h1:wuMupdBPOKq56tE4fMCsXV+Ouau8I/u45E7RnwPUvac= +sourcegraph.com/sourcegraph/go-vcs v0.0.0-20190409071845-d784c9520ccd h1:OUJzsDqNQQ0LULa4jkmL8zOi3POVWlIoLdI5l0mFOic= +sourcegraph.com/sourcegraph/go-vcs v0.0.0-20190409071845-d784c9520ccd/go.mod h1:rFelUayJfYYMJDKiqwmLc8YIWivajdW1a494kJsfXRg= +sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4 h1:JPJh2pk3+X4lXAkZIk2RuE/7/FoK9maXw+TNPJhVS/c= +sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= diff --git a/exporter/awsxrayexporter/http.go b/exporter/awsxrayexporter/http.go new file mode 100644 index 000000000000..d31a5ad7cdc7 --- /dev/null +++ b/exporter/awsxrayexporter/http.go @@ -0,0 +1,147 @@ +// 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 awsxrayexporter + +import ( + "go.opencensus.io/plugin/ochttp" + "go.opencensus.io/trace" + "net/http" +) + +// httpRequest – Information about an http request. +type httpRequest struct { + // Method – The request method. For example, GET. + Method string `json:"method,omitempty"` + + // URL – The full URL of the request, compiled from the protocol, hostname, + // and path of the request. + URL string `json:"url,omitempty"` + + // UserAgent – The user agent string from the requester's client. + UserAgent string `json:"user_agent,omitempty"` + + // ClientIP – The IP address of the requester. Can be retrieved from the IP + // packet's Source Address or, for forwarded requests, from an X-Forwarded-For + // header. + ClientIP string `json:"client_ip,omitempty"` + + // XForwardedFor – (segments only) boolean indicating that the client_ip was + // read from an X-Forwarded-For header and is not reliable as it could have + // been forged. + XForwardedFor string `json:"x_forwarded_for,omitempty"` + + // Traced – (subsegments only) boolean indicating that the downstream call + // is to another traced service. If this field is set to true, X-Ray considers + // the trace to be broken until the downstream service uploads a segment with + // a parent_id that matches the id of the subsegment that contains this block. + // + // TODO - need to understand the impact of this field + //Traced bool `json:"traced"` +} + +// httpResponse - Information about an http response. +type httpResponse struct { + // Status – number indicating the HTTP status of the response. + Status int64 `json:"status,omitempty"` + + // ContentLength – number indicating the length of the response body in bytes. + ContentLength int64 `json:"content_length,omitempty"` +} + +type httpInfo struct { + Request httpRequest `json:"request"` + Response httpResponse `json:"response"` +} + +func convertToStatusCode(code int32) int64 { + // https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto + // Status codes for use with Span.SetStatus. These correspond to the status + // codes used by gRPC defined here: https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto + switch code { + case trace.StatusCodeOK: + return http.StatusOK + case trace.StatusCodeCancelled: + return 499 // Client Closed Request + case trace.StatusCodeUnknown: + return http.StatusInternalServerError + case trace.StatusCodeInvalidArgument: + return http.StatusBadRequest + case trace.StatusCodeDeadlineExceeded: + return http.StatusGatewayTimeout + case trace.StatusCodeNotFound: + return http.StatusNotFound + case trace.StatusCodeAlreadyExists: + return http.StatusConflict + case trace.StatusCodePermissionDenied: + return http.StatusForbidden + case trace.StatusCodeResourceExhausted: + return http.StatusTooManyRequests + case trace.StatusCodeFailedPrecondition: + return http.StatusBadRequest + case trace.StatusCodeAborted: + return http.StatusConflict + case trace.StatusCodeOutOfRange: + return http.StatusBadRequest + case trace.StatusCodeUnimplemented: + return http.StatusNotImplemented + case trace.StatusCodeInternal: + return http.StatusInternalServerError + case trace.StatusCodeUnavailable: + return http.StatusServiceUnavailable + case trace.StatusCodeDataLoss: + return http.StatusInternalServerError + case trace.StatusCodeUnauthenticated: + return http.StatusUnauthorized + default: + return http.StatusInternalServerError + } +} + +func makeHttp(spanName string, code int32, attributes map[string]interface{}) (map[string]interface{}, *httpInfo) { + var ( + info httpInfo + filtered = map[string]interface{}{} + ) + + for key, value := range attributes { + switch key { + case ochttp.MethodAttribute: + info.Request.Method, _ = value.(string) + + case ochttp.UserAgentAttribute: + info.Request.UserAgent, _ = value.(string) + + case ochttp.StatusCodeAttribute: + info.Response.Status, _ = value.(int64) + + default: + filtered[key] = value + } + } + + info.Request.URL = spanName + + if info.Response.Status == 0 { + // this is a fallback because the ochttp.StatusCodeAttribute isn't being set by opencensus-go + // https://github.com/census-instrumentation/opencensus-go/issues/899 + info.Response.Status = convertToStatusCode(code) + } + + if len(filtered) == len(attributes) { + return attributes, nil + } + + return filtered, &info +} diff --git a/exporter/awsxrayexporter/segment.go b/exporter/awsxrayexporter/segment.go new file mode 100644 index 000000000000..12b34d971488 --- /dev/null +++ b/exporter/awsxrayexporter/segment.go @@ -0,0 +1,475 @@ +// 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 awsxrayexporter + +import ( + "bytes" + "encoding/binary" + "encoding/hex" + "encoding/json" + "fmt" + "go.opencensus.io/trace" + "math/rand" + "os" + "regexp" + "sync" + "time" +) + +// origin contains the support aws origin values, +// https://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html +type origin string + +const ( + // OriginEC2 span originated from EC2 + OriginEC2 origin = "AWS::EC2::Instance" + + // OriginECS span originated from Elastic Container Service (ECS) + OriginECS origin = "AWS::ECS::Container" + + // OriginEB span originated from Elastic Beanstalk (EB) + OriginEB origin = "AWS::ElasticBeanstalk::Environment" +) + +const ( + httpHeaderMaxSize = 200 + httpHeader = `X-Amzn-Trace-Id` + prefixRoot = "Root=" + prefixParent = "Parent=" + prefixSampled = "Sampled=" + separator = ";" // separator used by x-ray to split parts of X-Amzn-Trace-Id header +) + +var ( + zeroSpanID = trace.SpanID{} + r = rand.New(rand.NewSource(time.Now().UnixNano())) // random, not secure + mutex = &sync.Mutex{} +) + +var ( + // reInvalidSpanCharacters defines the invalid letters in a span name as per + // https://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html + reInvalidSpanCharacters = regexp.MustCompile(`[^ 0-9\p{L}N_.:/%&#=+,\-@]`) + // reInvalidAnnotationCharacters defines the invalid letters in an annotation key as per + // https://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html + reInvalidAnnotationCharacters = regexp.MustCompile(`[^a-zA-Z0-9_]`) +) + +const ( + // defaultSpanName will be used if there are no valid xray characters in the + // span name + defaultSegmentName = "span" + + // maxSegmentNameLength the maximum length of a segment name + maxSegmentNameLength = 200 +) + +const ( + traceIDLength = 35 // fixed length of aws trace id + spanIDLength = 16 // fixed length of aws span id + epochOffset = 2 // offset of epoch secs + identifierOffset = 11 // offset of identifier within traceID +) + +type segment struct { + // ID - A 64-bit identifier for the segment, unique among segments in the same trace, + // in 16 hexadecimal digits. + ID string `json:"id"` + + // Name - The logical name of the service that handled the request, up to 200 characters. + // For example, your application's name or domain name. Names can contain Unicode + // letters, numbers, and whitespace, and the following symbols: _, ., :, /, %, &, #, =, + // +, \, -, @ + Name string `json:"name,omitempty"` + + // StartTime - number that is the time the segment was created, in floating point seconds + // in epoch time.. For example, 1480615200.010 or 1.480615200010E9. Use as many decimal + // places as you need. Microsecond resolution is recommended when available. + StartTime float64 `json:"start_time"` + + // TraceID - A unique identifier that connects all segments and subsegments originating + // from a single client request. + // * The version number, that is, 1. + // * The time of the original request, in Unix epoch time, in 8 hexadecimal digits. + // * For example, 10:00AM December 2nd, 2016 PST in epoch time is 1480615200 seconds, or 58406520 in hexadecimal. + // * A 96-bit identifier for the trace, globally unique, in 24 hexadecimal digits. + TraceID string `json:"trace_id,omitempty"` + + // EndTime - number that is the time the segment was closed. For example, 1480615200.090 + // or 1.480615200090E9. Specify either an end_time or in_progress. + EndTime float64 `json:"end_time"` + + /* ---------------------------------------------------- */ + + // Service - An object with information about your application. + //Service service `json:"service,omitempty"` + + // User - A string that identifies the user who sent the request. + //User string `json:"user,omitempty"` + + // Origin - The type of AWS resource running your application. + Origin string `json:"origin,omitempty"` + + // Namespace - aws for AWS SDK calls; remote for other downstream calls. + Namespace string `json:"namespace,omitempty"` + + // ParentID – A subsegment ID you specify if the request originated from an instrumented + // application. The X-Ray SDK adds the parent subsegment ID to the tracing header for + // downstream HTTP calls. + ParentID string `json:"parent_id,omitempty"` + + // Annotations - object with key-value pairs that you want X-Ray to index for search + Annotations map[string]interface{} `json:"annotations,omitempty"` + + // SubSegments contains the list of child segments + SubSegments []*segment `json:"subsegments,omitempty"` + + // Service - optional service definition + Service *service `json:"service,omitempty"` + + // Http - optional xray specific http settings + Http *httpInfo `json:"http,omitempty"` + + // Error - boolean indicating that a client error occurred + // (response status code was 4XX Client Error). + Error bool `json:"error,omitempty"` + + // Fault - boolean indicating that a server error occurred + // (response status code was 5XX Server Error). + Fault bool `json:"fault,omitempty"` + + // Cause + Cause *errCause `json:"cause,omitempty"` + + /* -- Used by SubSegments only ------------------------ */ + + // Type indicates span is a subsegment; should either be subsegment or blank + Type string `json:"type,omitempty"` +} + +type service struct { + // Version - A string that identifies the version of your application that served the request. + Version string `json:"version,omitempty"` +} + +// TraceHeader converts an OpenTelemetry span context to AWS X-Ray trace header. +func TraceHeader(sc trace.SpanContext) string { + header := make([]byte, 0, 64) + amazonTraceID := convertToAmazonTraceID(sc.TraceID) + amazonSpanID := convertToAmazonSpanID(sc.SpanID) + + header = append(header, prefixRoot...) + header = append(header, amazonTraceID...) + header = append(header, ";"...) + header = append(header, prefixParent...) + header = append(header, amazonSpanID...) + header = append(header, ";"...) + header = append(header, prefixSampled...) + + if sc.TraceOptions&0x1 == 1 { + header = append(header, "1"...) + } else { + header = append(header, "0"...) + } + + return string(header) +} + +// convertToAmazonTraceID converts a trace ID to the Amazon format. +// +// A trace ID unique identifier that connects all segments and subsegments +// originating from a single client request. +// * A trace_id consists of three numbers separated by hyphens. For example, +// 1-58406520-a006649127e371903a2de979. This includes: +// * The version number, that is, 1. +// * The time of the original request, in Unix epoch time, in 8 hexadecimal digits. +// * For example, 10:00AM December 2nd, 2016 PST in epoch time is 1480615200 seconds, +// or 58406520 in hexadecimal. +// * A 96-bit identifier for the trace, globally unique, in 24 hexadecimal digits. +func convertToAmazonTraceID(traceID trace.TraceID) string { + const ( + // maxAge of 28 days. AWS has a 30 day limit, let's be conservative rather than + // hit the limit + maxAge = 60 * 60 * 24 * 28 + + // maxSkew allows for 5m of clock skew + maxSkew = 60 * 5 + ) + + var ( + content = [traceIDLength]byte{} + epochNow = time.Now().Unix() + epoch = int64(binary.BigEndian.Uint32(traceID[0:4])) + b = [4]byte{} + ) + + // If AWS traceID originally came from AWS, no problem. However, if oc generated + // the traceID, then the epoch may be outside the accepted AWS range of within the + // past 30 days. + // + // In that case, we use the current time as the epoch and accept that a new span + // may be created + if delta := epochNow - epoch; delta > maxAge || delta < -maxSkew { + epoch = epochNow + } + + binary.BigEndian.PutUint32(b[0:4], uint32(epoch)) + + content[0] = '1' + content[1] = '-' + hex.Encode(content[2:10], b[0:4]) + content[10] = '-' + hex.Encode(content[identifierOffset:], traceID[4:16]) // overwrite with identifier + + return string(content[0:traceIDLength]) +} + +// parseAmazonTraceID parses an amazon traceID string in the format 1-5759e988-bd862e3fe1be46a994272793 +func parseAmazonTraceID(t string) (trace.TraceID, error) { + if v := len(t); v != traceIDLength { + return trace.TraceID{}, fmt.Errorf("invalid amazon trace id; got length %v, want %v", v, traceIDLength) + } + + epoch, err := hex.DecodeString(t[epochOffset : epochOffset+8]) + if err != nil { + return trace.TraceID{}, fmt.Errorf("unable to decode epoch from amazon trace id, %v", err) + } + + identifier, err := hex.DecodeString(t[identifierOffset:]) + if err != nil { + return trace.TraceID{}, fmt.Errorf("unable to decode identifier from amazon trace id, %v", err) + } + + var traceID trace.TraceID + binary.BigEndian.PutUint32(traceID[0:4], binary.BigEndian.Uint32(epoch)) + for index, b := range identifier { + traceID[index+4] = b + } + + return traceID, nil +} + +// convertToAmazonSpanID generates an Amazon spanID from a trace.SpanID - a 64-bit identifier +// for the segment, unique among segments in the same trace, in 16 hexadecimal digits. +func convertToAmazonSpanID(v trace.SpanID) string { + if v == zeroSpanID { + return "" + } + return hex.EncodeToString(v[0:8]) +} + +// parseAmazonSpanID parses an amazon spanID +func parseAmazonSpanID(v string) (trace.SpanID, error) { + if v == "" { + return zeroSpanID, nil + } + + if len(v) != spanIDLength { + return trace.SpanID{}, fmt.Errorf("invalid amazon span id; got length %v, want %v", v, spanIDLength) + } + + data, err := hex.DecodeString(v) + if err != nil { + return trace.SpanID{}, fmt.Errorf("unable to decode epoch from amazon trace id, %v", err) + } + + var spanID trace.SpanID + copy(spanID[:], data) + + return spanID, nil +} + +// mergeAnnotations all string, bool, and numeric values from src to dest, fixing keys as needed +func mergeAnnotations(dest, src map[string]interface{}) { + for key, value := range src { + key = fixAnnotationKey(key) + switch value.(type) { + case bool: + dest[key] = value + case string: + dest[key] = value + case int, int8, int16, int32, int64: + dest[key] = value + case uint, uint8, uint16, uint32, uint64: + dest[key] = value + case float32, float64: + dest[key] = value + } + } +} + +func makeAnnotations(annotations []trace.Annotation, attributes map[string]interface{}) map[string]interface{} { + var result = map[string]interface{}{} + + for _, annotation := range annotations { + mergeAnnotations(result, annotation.Attributes) + } + mergeAnnotations(result, attributes) + + if len(result) == 0 { + return nil + } + return result +} + +func makeCause(status trace.Status) (isError, isFault bool, cause *errCause) { + if status.Code == 0 { + return + } + + if status.Message != "" { + id := make([]byte, 8) + mutex.Lock() + r.Read(id) // rand.Read always returns nil + mutex.Unlock() + + hexID := hex.EncodeToString(id) + + cause = &errCause{ + Exceptions: []exception{ + { + ID: hexID, + Message: status.Message, + }, + }, + } + + if dir, err := os.Getwd(); err == nil { + cause.WorkingDirectory = dir + } + } + + if status.Code >= 400 && status.Code < 500 { + isError = true + return + } + + isFault = true + return +} + +// fixSegmentName removes any invalid characters from the span name. AWS X-Ray defines +// the list of valid characters here: +// https://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html +func fixSegmentName(name string) string { + if reInvalidSpanCharacters.MatchString(name) { + // only allocate for ReplaceAllString if we need to + name = reInvalidSpanCharacters.ReplaceAllString(name, "") + } + + if length := len(name); length > maxSegmentNameLength { + name = name[0:maxSegmentNameLength] + } else if length == 0 { + name = defaultSegmentName + } + + return name +} + +// fixAnnotationKey removes any invalid characters from the annotaiton key. AWS X-Ray defines +// the list of valid characters here: +// https://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html +func fixAnnotationKey(key string) string { + if reInvalidAnnotationCharacters.MatchString(key) { + // only allocate for ReplaceAllString if we need to + key = reInvalidAnnotationCharacters.ReplaceAllString(key, "_") + } + + return key +} + +func rawSegment(name string, span *trace.SpanData) segment { + var ( + traceID = convertToAmazonTraceID(span.TraceID) + startMicros = span.StartTime.UnixNano() / int64(time.Microsecond) + startTime = float64(startMicros) / 1e6 + endMicros = span.EndTime.UnixNano() / int64(time.Microsecond) + endTime = float64(endMicros) / 1e6 + filtered, http = makeHttp(span.Name, span.Code, span.Attributes) + isError, isFault, cause = makeCause(span.Status) + annotations = makeAnnotations(span.Annotations, filtered) + namespace string + ) + + if name == "" { + name = fixSegmentName(span.Name) + } + if span.HasRemoteParent { + namespace = "remote" + } + + return segment{ + ID: convertToAmazonSpanID(span.SpanID), + TraceID: traceID, + Name: name, + StartTime: startTime, + EndTime: endTime, + Namespace: namespace, + ParentID: convertToAmazonSpanID(span.ParentSpanID), + Annotations: annotations, + Http: http, + Error: isError, + Fault: isFault, + Cause: cause, + } +} + +type writer struct { + buffer *bytes.Buffer + encoder *json.Encoder +} + +func (w *writer) Reset() { + w.buffer.Reset() +} + +func (w *writer) Encode(v interface{}) error { + return w.encoder.Encode(v) +} + +func (w *writer) String() string { + return w.buffer.String() +} + +const ( + maxBufSize = 256e3 +) + +var ( + writers = &sync.Pool{ + New: func() interface{} { + var ( + buffer = bytes.NewBuffer(make([]byte, 0, 8192)) + encoder = json.NewEncoder(buffer) + ) + + return &writer{ + buffer: buffer, + encoder: encoder, + } + }, + } +) + +func borrow() *writer { + return writers.Get().(*writer) +} + +func release(w *writer) { + if w.buffer.Cap() < maxBufSize { + w.buffer.Reset() + writers.Put(w) + } +} diff --git a/exporter/awsxrayexporter/testdata/config.yaml b/exporter/awsxrayexporter/testdata/config.yaml new file mode 100644 index 000000000000..28df7dfc11ae --- /dev/null +++ b/exporter/awsxrayexporter/testdata/config.yaml @@ -0,0 +1,21 @@ +receivers: + examplereceiver: + +processors: + exampleprocessor: + +exporters: + awsxray: + awsxray/customname: + region: us-east-1 + origin: "AWS::ECS::Container" + awsxray/disabled: # will be ignored + disabled: true + +service: + pipelines: + traces: + receivers: [examplereceiver] + processors: [exampleprocessor] + exporters: [awsxray] + From f5079de0a173f5af0e8574757081b0ac0938c4f3 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Wed, 13 Nov 2019 15:52:11 -0600 Subject: [PATCH 02/59] initial dev of xray data structures and converters --- exporter/awsxrayexporter/config.go | 10 +- exporter/awsxrayexporter/config_test.go | 5 +- exporter/awsxrayexporter/conn/conn.go | 271 +++++++++++++++++++ exporter/awsxrayexporter/conn/conn_test.go | 111 ++++++++ exporter/awsxrayexporter/conn/xray_client.go | 82 ++++++ exporter/awsxrayexporter/converter.go | 29 ++ exporter/awsxrayexporter/factory.go | 19 +- exporter/awsxrayexporter/go.mod | 3 + exporter/awsxrayexporter/http.go | 195 ++++++++++--- exporter/awsxrayexporter/http_test.go | 162 +++++++++++ exporter/awsxrayexporter/segment.go | 168 +++++------- 11 files changed, 891 insertions(+), 164 deletions(-) create mode 100644 exporter/awsxrayexporter/conn/conn.go create mode 100644 exporter/awsxrayexporter/conn/conn_test.go create mode 100644 exporter/awsxrayexporter/conn/xray_client.go create mode 100644 exporter/awsxrayexporter/converter.go create mode 100644 exporter/awsxrayexporter/http_test.go diff --git a/exporter/awsxrayexporter/config.go b/exporter/awsxrayexporter/config.go index 8b403a7e0060..a1a42e06450f 100644 --- a/exporter/awsxrayexporter/config.go +++ b/exporter/awsxrayexporter/config.go @@ -23,6 +23,12 @@ type Config struct { Concurrency int `mapstructure:"num_workers"` // X-Ray service endpoint to which the daemon sends segment documents. Endpoint string `mapstructure:"endpoint"` + // Number of seconds before timing out a request. + RequestTimeout int `mapstructure:"request_timeout"` + // Enable or disable TLS certificate verification. + NoVerifySSL bool `mapstructure:"no_verify_ssl"` + // Upload segments to AWS X-Ray through a proxy. + ProxyAddress string `mapstructure:"proxy_address"` // Send segments to AWS X-Ray service in a specific region. Region string `mapstructure:"region"` // Local mode to skip EC2 instance metadata check. @@ -31,10 +37,6 @@ type Config struct { ResourceARN string `mapstructure:"resource_arn"` // IAM role to upload segments to a different account. RoleARN string `mapstructure:"role_arn"` - // Enable or disable TLS certificate verification. - NoVerifySSL bool `mapstructure:"no_verify_ssl"` - // Upload segments to AWS X-Ray through a proxy. - ProxyAddress string `mapstructure:"proxy_address"` // Default AWS resource type of trace data origin // [AWS::EC2::Instance | AWS::ECS::Container | AWS::ElasticBeanstalk::Environment] Origin string `mapstructure:"origin"` diff --git a/exporter/awsxrayexporter/config_test.go b/exporter/awsxrayexporter/config_test.go index da686ff4cbfe..fe9949d2c9d7 100644 --- a/exporter/awsxrayexporter/config_test.go +++ b/exporter/awsxrayexporter/config_test.go @@ -49,12 +49,13 @@ func TestLoadConfig(t *testing.T) { ExporterSettings: configmodels.ExporterSettings{TypeVal: typeStr, NameVal: "awsxray/customname"}, Concurrency: 8, Endpoint: "", + RequestTimeout: 30, + NoVerifySSL: false, + ProxyAddress: "", Region: "us-east-1", LocalMode: false, ResourceARN: "", RoleARN: "", - NoVerifySSL: false, - ProxyAddress: "", Origin: "AWS::ECS::Container", }) } diff --git a/exporter/awsxrayexporter/conn/conn.go b/exporter/awsxrayexporter/conn/conn.go new file mode 100644 index 000000000000..64b0d14b3169 --- /dev/null +++ b/exporter/awsxrayexporter/conn/conn.go @@ -0,0 +1,271 @@ +// 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 conn + +import ( + "crypto/tls" + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/credentials/stscreds" + "github.com/aws/aws-sdk-go/aws/ec2metadata" + "github.com/aws/aws-sdk-go/aws/endpoints" + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/sts" + "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter" + "go.uber.org/zap" + "golang.org/x/net/http2" + "net/http" + "net/url" + "os" + "time" +) + +type connAttr interface { + newAWSSession(roleArn string, region string) *session.Session + getEC2Region(s *session.Session) (string, error) +} + +// Conn implements connAttr interface. +type Conn struct{} + +func (c *Conn) getEC2Region(s *session.Session) (string, error) { + return ec2metadata.New(s).Region() +} + +const ( + STSEndpointPrefix = "https://sts." + STSEndpointSuffix = ".amazonaws.com" + STSAwsCnPartitionIDSuffix = ".amazonaws.com.cn" // AWS China partition. +) + +// getNewHTTPClient returns new HTTP client instance with provided configuration. +func getNewHTTPClient(logger *zap.Logger, maxIdle int, requestTimeout int, noVerify bool, proxyAddress string) *http.Client { + logger.Debug("Using proxy address: ", + zap.String("proxyAddr", proxyAddress), + ) + tls := &tls.Config{ + InsecureSkipVerify: false, + } + + finalProxyAddress := getProxyAddress(proxyAddress) + proxyURL := getProxyURL(finalProxyAddress) + transport := &http.Transport{ + MaxIdleConnsPerHost: maxIdle, + TLSClientConfig: tls, + Proxy: http.ProxyURL(proxyURL), + } + + // is not enabled by default as we configure TLSClientConfig for supporting SSL to data plane. + // http2.ConfigureTransport will setup transport layer to use HTTP2 + http2.ConfigureTransport(transport) + http := &http.Client{ + Transport: transport, + Timeout: time.Second * time.Duration(requestTimeout), + } + return http +} + +func getProxyAddress(proxyAddress string) string { + var finalProxyAddress string + if proxyAddress != "" { + finalProxyAddress = proxyAddress + } else if proxyAddress == "" && os.Getenv("HTTPS_PROXY") != "" { + finalProxyAddress = os.Getenv("HTTPS_PROXY") + } else { + finalProxyAddress = "" + } + return finalProxyAddress +} + +func getProxyURL(finalProxyAddress string) *url.URL { + var proxyURL *url.URL + var err error + if finalProxyAddress != "" { + proxyURL, err = url.Parse(finalProxyAddress) + if err != nil { + //log.Errorf("Bad proxy URL: %v", err) + os.Exit(1) + } + } else { + proxyURL = nil + } + return proxyURL +} + +// GetAWSConfigSession returns AWS config and session instances. +func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *awsxrayexporter.Config) (*aws.Config, *session.Session) { + var s *session.Session + var err error + var awsRegion string + http := getNewHTTPClient(logger, cfg.Concurrency, cfg.RequestTimeout, cfg.NoVerifySSL, cfg.ProxyAddress) + regionEnv := os.Getenv("AWS_REGION") + if cfg.Region == "" && regionEnv != "" { + awsRegion = regionEnv + logger.Debug("Fetch region %v from environment variables", zap.String("region", awsRegion)) + } else if cfg.Region != "" { + awsRegion = cfg.Region + logger.Debug("Fetch region %v from commandline/config file", zap.String("region", awsRegion)) + } else if !cfg.NoVerifySSL { + es := getDefaultSession(logger) + awsRegion, err = cn.getEC2Region(es) + if err != nil { + logger.Error("Unable to retrieve the region from the EC2 instance %v\n", zap.Error(err)) + } else { + logger.Debug("Fetch region %v from ec2 metadata", zap.String("region", awsRegion)) + } + } + if awsRegion == "" { + //log.Error("Cannot fetch region variable from config file, environment variables and ec2 metadata.") + os.Exit(1) + } + s = cn.newAWSSession(cfg.RoleARN, awsRegion) + + config := &aws.Config{ + Region: aws.String(awsRegion), + DisableParamValidation: aws.Bool(true), + MaxRetries: aws.Int(2), + Endpoint: aws.String(cfg.Endpoint), + HTTPClient: http, + } + return config, s +} + +// ProxyServerTransport configures HTTP transport for TCP Proxy Server. +func ProxyServerTransport(config *awsxrayexporter.Config) *http.Transport { + tls := &tls.Config{ + InsecureSkipVerify: config.NoVerifySSL, + } + + proxyAddr := getProxyAddress(config.ProxyAddress) + proxyURL := getProxyURL(proxyAddr) + + // Connection timeout in seconds + idleConnTimeout := time.Duration(config.RequestTimeout) * time.Second + + transport := &http.Transport{ + MaxIdleConns: config.Concurrency, + MaxIdleConnsPerHost: config.Concurrency, + IdleConnTimeout: idleConnTimeout, + Proxy: http.ProxyURL(proxyURL), + TLSClientConfig: tls, + + // If not disabled the transport will add a gzip encoding header + // to requests with no `accept-encoding` header value. The header + // is added after we sign the request which invalidates the + // signature. + DisableCompression: true, + } + + return transport +} + +func (c *Conn) newAWSSession(logger *zap.Logger, roleArn string, region string) *session.Session { + var s *session.Session + var err error + if roleArn == "" { + s = getDefaultSession(logger) + } else { + stsCreds := getSTSCreds(logger, region, roleArn) + + s, err = session.NewSession(&aws.Config{ + Credentials: stsCreds, + }) + + if err != nil { + logger.Error("Error in creating session object : ", zap.Error(err)) + os.Exit(1) + } + } + return s +} + +// getSTSCreds gets STS credentials from regional endpoint. ErrCodeRegionDisabledException is received if the +// STS regional endpoint is disabled. In this case STS credentials are fetched from STS primary regional endpoint +// in the respective AWS partition. +func getSTSCreds(logger *zap.Logger, region string, roleArn string) *credentials.Credentials { + t := getDefaultSession(logger) + + stsCred := getSTSCredsFromRegionEndpoint(logger, t, region, roleArn) + // Make explicit call to fetch credentials. + _, err := stsCred.Get() + if err != nil { + if aerr, ok := err.(awserr.Error); ok { + switch aerr.Code() { + case sts.ErrCodeRegionDisabledException: + logger.Error("Region : %v - %v", zap.String("region", region), zap.String("error", aerr.Error())) + logger.Info("Credentials for provided RoleARN will be fetched from STS primary region endpoint instead of regional endpoint.") + stsCred = getSTSCredsFromPrimaryRegionEndpoint(logger, t, roleArn, region) + } + } + } + return stsCred +} + +// getSTSCredsFromRegionEndpoint fetches STS credentials for provided roleARN from regional endpoint. +// AWS STS recommends that you provide both the Region and endpoint when you make calls to a Regional endpoint. +// Reference: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html#id_credentials_temp_enable-regions_writing_code +func getSTSCredsFromRegionEndpoint(logger *zap.Logger, sess *session.Session, region string, roleArn string) *credentials.Credentials { + regionalEndpoint := getSTSRegionalEndpoint(region) + // if regionalEndpoint is "", the STS endpoint is Global endpoint for classic regions except ap-east-1 - (HKG) + // for other opt-in regions, region value will create STS regional endpoint. + // This will be only in the case, if provided region is not present in aws_regions.go + c := &aws.Config{Region: aws.String(region), Endpoint: ®ionalEndpoint} + st := sts.New(sess, c) + logger.Info("STS Endpoint : %v", zap.String("endpoint", st.Endpoint)) + return stscreds.NewCredentialsWithClient(st, roleArn) +} + +// getSTSCredsFromPrimaryRegionEndpoint fetches STS credentials for provided roleARN from primary region endpoint in the +// respective partition. +func getSTSCredsFromPrimaryRegionEndpoint(logger *zap.Logger, t *session.Session, roleArn string, region string) *credentials.Credentials { + partitionId := getPartition(region) + if partitionId == endpoints.AwsPartitionID { + return getSTSCredsFromRegionEndpoint(logger, t, endpoints.UsEast1RegionID, roleArn) + } else if partitionId == endpoints.AwsCnPartitionID { + return getSTSCredsFromRegionEndpoint(logger, t, endpoints.CnNorth1RegionID, roleArn) + } else if partitionId == endpoints.AwsUsGovPartitionID { + return getSTSCredsFromRegionEndpoint(logger, t, endpoints.UsGovWest1RegionID, roleArn) + } + + return nil +} + +func getSTSRegionalEndpoint(r string) string { + p := getPartition(r) + + var e string + if p == endpoints.AwsPartitionID || p == endpoints.AwsUsGovPartitionID { + e = STSEndpointPrefix + r + STSEndpointSuffix + } else if p == endpoints.AwsCnPartitionID { + e = STSEndpointPrefix + r + STSAwsCnPartitionIDSuffix + } + return e +} + +func getDefaultSession(logger *zap.Logger) *session.Session { + result, serr := session.NewSession() + if serr != nil { + logger.Error("Error in creating session object : %v\n.", zap.Error(serr)) + os.Exit(1) + } + return result +} + +// getPartition return AWS Partition for the provided region. +func getPartition(region string) string { + p, _ := endpoints.PartitionForRegion(endpoints.DefaultPartitions(), region) + return p.ID() +} diff --git a/exporter/awsxrayexporter/conn/conn_test.go b/exporter/awsxrayexporter/conn/conn_test.go new file mode 100644 index 000000000000..12e50575b92c --- /dev/null +++ b/exporter/awsxrayexporter/conn/conn_test.go @@ -0,0 +1,111 @@ +// 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 conn + +import ( + "errors" + "github.com/aws/aws-sdk-go/aws/session" + "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter" + "github.com/open-telemetry/opentelemetry-collector/config" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "go.uber.org/zap" + "os" + "path" + "strings" + "testing" +) + +var ec2Region = "us-east-1" + +type mockConn struct { + mock.Mock + sn *session.Session +} + +func (c *mockConn) getEC2Region(s *session.Session) (string, error) { + args := c.Called(nil) + errorStr := args.String(0) + var err error + if errorStr != "" { + err = errors.New(errorStr) + return "", err + } + return ec2Region, nil +} + +func (c *mockConn) newAWSSession(roleArn string, region string) *session.Session { + return c.sn +} + +// fetch region value from ec2 meta data service +func TestEC2Session(t *testing.T) { + logger := zap.NewNop() + xrayExporterCfg := loadExporterConfig(t) + m := new(mockConn) + m.On("getEC2Region", nil).Return("").Once() + var expectedSession *session.Session + expectedSession, _ = session.NewSession() + m.sn = expectedSession + cfg, s := GetAWSConfigSession(logger, m, xrayExporterCfg) + assert.Equal(t, s, expectedSession, "Expect the session object is not overridden") + assert.Equal(t, *cfg.Region, ec2Region, "Region value fetched from ec2-metadata service") +} + +// fetch region value from environment variable +func TestRegionEnv(t *testing.T) { + logger := zap.NewNop() + xrayExporterCfg := loadExporterConfig(t) + region := "us-west-2" + env := stashEnv() + defer popEnv(env) + os.Setenv("AWS_REGION", region) + + var m = &mockConn{} + var expectedSession *session.Session + expectedSession, _ = session.NewSession() + m.sn = expectedSession + cfg, s := GetAWSConfigSession(logger, m, xrayExporterCfg) + assert.Equal(t, s, expectedSession, "Expect the session object is not overridden") + assert.Equal(t, *cfg.Region, region, "Region value fetched from environment") +} + +func loadExporterConfig(t *testing.T) *awsxrayexporter.Config { + factories, err := config.ExampleComponents() + assert.Nil(t, err) + factory := &awsxrayexporter.Factory{} + factories.Exporters[factory.Type()] = factory + otelcfg, err := config.LoadConfigFile( + t, path.Join(".", "../testdata", "config.yaml"), factories, + ) + xrayExporterCfg := otelcfg.Exporters["awsxray"].(*awsxrayexporter.Config) + return xrayExporterCfg +} + +func stashEnv() []string { + env := os.Environ() + os.Clearenv() + + return env +} + +func popEnv(env []string) { + os.Clearenv() + + for _, e := range env { + p := strings.SplitN(e, "=", 2) + os.Setenv(p[0], p[1]) + } +} diff --git a/exporter/awsxrayexporter/conn/xray_client.go b/exporter/awsxrayexporter/conn/xray_client.go new file mode 100644 index 000000000000..0bb501481385 --- /dev/null +++ b/exporter/awsxrayexporter/conn/xray_client.go @@ -0,0 +1,82 @@ +// 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 conn + +import ( + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/xray" + "go.uber.org/zap" + "os" + "strconv" + "strings" + "time" +) + +// XRay defines X-Ray api call structure. +type XRay interface { + PutTraceSegments(input *xray.PutTraceSegmentsInput) (*xray.PutTraceSegmentsOutput, error) + PutTelemetryRecords(input *xray.PutTelemetryRecordsInput) (*xray.PutTelemetryRecordsOutput, error) +} + +// XRayClient represents X-Ray client. +type XRayClient struct { + xRay *xray.XRay +} + +// PutTraceSegments makes PutTraceSegments api call on X-Ray client. +func (c *XRayClient) PutTraceSegments(input *xray.PutTraceSegmentsInput) (*xray.PutTraceSegmentsOutput, error) { + return c.xRay.PutTraceSegments(input) +} + +// PutTelemetryRecords makes PutTelemetryRecords api call on X-Ray client. +func (c *XRayClient) PutTelemetryRecords(input *xray.PutTelemetryRecordsInput) (*xray.PutTelemetryRecordsOutput, error) { + return c.xRay.PutTelemetryRecords(input) +} + +// NewXRay creates a new instance of the XRay client with a aws configuration and session . +func NewXRay(logger *zap.Logger, awsConfig *aws.Config, s *session.Session) XRay { + x := xray.New(s, awsConfig) + logger.Debug("Using Endpoint: %s", zap.String("endpoint", x.Endpoint)) + + x.Handlers.Build.PushBackNamed(request.NamedHandler{ + Name: "tracing.XRayVersionUserAgentHandler", + Fn: request.MakeAddToUserAgentHandler("xray", "1.0", os.Getenv("AWS_EXECUTION_ENV")), + }) + + x.Handlers.Sign.PushFrontNamed(request.NamedHandler{ + Name: "tracing.TimestampHandler", + Fn: func(r *request.Request) { + r.HTTPRequest.Header.Set("X-Amzn-Xray-Timestamp", strconv.FormatFloat(float64(time.Now().UnixNano())/float64(time.Second), 'f', 9, 64)) + }, + }) + + return &XRayClient{ + xRay: x, + } +} + +// IsTimeoutError checks whether error is timeout error. +func IsTimeoutError(err error) bool { + awsError, ok := err.(awserr.Error) + if ok { + if strings.Contains(awsError.Error(), "net/http: request canceled") { + return true + } + } + return false +} diff --git a/exporter/awsxrayexporter/converter.go b/exporter/awsxrayexporter/converter.go new file mode 100644 index 000000000000..acf7cee0caac --- /dev/null +++ b/exporter/awsxrayexporter/converter.go @@ -0,0 +1,29 @@ +// 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 awsxrayexporter + +import ( + "github.com/aws/aws-sdk-go/service/xray" + "github.com/open-telemetry/opentelemetry-collector/consumer/consumerdata" +) + +func ConvertTraceDataToXRay(td consumerdata.TraceData) *xray.PutTraceSegmentsInput { + documents := make([]*string, len(td.Spans)) + //for i, span := range td.Spans { + // seg := segment{} + //} + input := xray.PutTraceSegmentsInput{TraceSegmentDocuments: documents} + return &input +} diff --git a/exporter/awsxrayexporter/factory.go b/exporter/awsxrayexporter/factory.go index bc229610c4e7..1c69ad264689 100644 --- a/exporter/awsxrayexporter/factory.go +++ b/exporter/awsxrayexporter/factory.go @@ -41,15 +41,16 @@ func (f *Factory) CreateDefaultConfig() configmodels.Exporter { TypeVal: typeStr, NameVal: typeStr, }, - Concurrency: 8, - Endpoint: "", - Region: "", - LocalMode: false, - ResourceARN: "", - RoleARN: "", - NoVerifySSL: false, - ProxyAddress: "", - Origin: "AWS::EC2::Instance", + Concurrency: 8, + Endpoint: "", + RequestTimeout: 30, + NoVerifySSL: false, + ProxyAddress: "", + Region: "", + LocalMode: false, + ResourceARN: "", + RoleARN: "", + Origin: "AWS::EC2::Instance", } } diff --git a/exporter/awsxrayexporter/go.mod b/exporter/awsxrayexporter/go.mod index 60dcf2fa3a0a..56c4eec5af3f 100644 --- a/exporter/awsxrayexporter/go.mod +++ b/exporter/awsxrayexporter/go.mod @@ -27,6 +27,7 @@ require ( github.com/bsm/sarama-cluster v2.1.15+incompatible // indirect github.com/cactus/go-statsd-client/statsd v0.0.0-20191030180650-a68a2246f89c // indirect github.com/casbin/casbin v1.9.1 // indirect + github.com/census-instrumentation/opencensus-proto v0.2.1 github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec // indirect github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0 // indirect @@ -63,6 +64,7 @@ require ( github.com/godbus/dbus v4.1.0+incompatible // indirect github.com/goji/param v0.0.0-20160927210335-d7f49fd7d1ed // indirect github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect + github.com/golang/protobuf v1.3.2 github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac // indirect github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82 // indirect github.com/gonum/internal v0.0.0-20181124074243-f884aa714029 // indirect @@ -157,6 +159,7 @@ require ( go.opencensus.io v0.22.1 go.uber.org/automaxprocs v1.2.0 // indirect go.uber.org/zap v1.10.0 + golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 gopkg.in/cheggaaa/pb.v1 v1.0.28 // indirect gopkg.in/gcfg.v1 v1.2.3 // indirect gopkg.in/pipe.v2 v2.0.0-20140414041502-3c2ca4d52544 // indirect diff --git a/exporter/awsxrayexporter/http.go b/exporter/awsxrayexporter/http.go index d31a5ad7cdc7..0f53b3168fcf 100644 --- a/exporter/awsxrayexporter/http.go +++ b/exporter/awsxrayexporter/http.go @@ -15,11 +15,29 @@ package awsxrayexporter import ( - "go.opencensus.io/plugin/ochttp" - "go.opencensus.io/trace" + tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" "net/http" ) +const ( + // Attributes recorded on the span for the requests. + // Only trace exporters will need them. + MethodAttribute = "http.method" + URLAttribute = "http.url" + TargetAttribute = "http.target" + HostAttribute = "http.host" + SchemeAttribute = "http.scheme" + StatusCodeAttribute = "http.status_code" + StatusTextAttribute = "http.status_text" + FlavorAttribute = "http.flavor" + ServerNameAttribute = "http.server_name" + PortAttribute = "http.port" + RouteAttribute = "http.route" + ClientIpAttribute = "http.client_ip" + UserAgentAttribute = "http.user_agent" +) + // httpRequest – Information about an http request. type httpRequest struct { // Method – The request method. For example, GET. @@ -40,15 +58,13 @@ type httpRequest struct { // XForwardedFor – (segments only) boolean indicating that the client_ip was // read from an X-Forwarded-For header and is not reliable as it could have // been forged. - XForwardedFor string `json:"x_forwarded_for,omitempty"` + XForwardedFor bool `json:"x_forwarded_for,omitempty"` // Traced – (subsegments only) boolean indicating that the downstream call // is to another traced service. If this field is set to true, X-Ray considers // the trace to be broken until the downstream service uploads a segment with // a parent_id that matches the id of the subsegment that contains this block. - // - // TODO - need to understand the impact of this field - //Traced bool `json:"traced"` + Traced bool `json:"traced,omitempty"` } // httpResponse - Information about an http response. @@ -66,82 +82,173 @@ type httpInfo struct { } func convertToStatusCode(code int32) int64 { - // https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto - // Status codes for use with Span.SetStatus. These correspond to the status - // codes used by gRPC defined here: https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto switch code { - case trace.StatusCodeOK: + case tracetranslator.OCOK: return http.StatusOK - case trace.StatusCodeCancelled: + case tracetranslator.OCCancelled: return 499 // Client Closed Request - case trace.StatusCodeUnknown: + case tracetranslator.OCUnknown: return http.StatusInternalServerError - case trace.StatusCodeInvalidArgument: + case tracetranslator.OCInvalidArgument: return http.StatusBadRequest - case trace.StatusCodeDeadlineExceeded: + case tracetranslator.OCDeadlineExceeded: return http.StatusGatewayTimeout - case trace.StatusCodeNotFound: + case tracetranslator.OCNotFound: return http.StatusNotFound - case trace.StatusCodeAlreadyExists: + case tracetranslator.OCAlreadyExists: return http.StatusConflict - case trace.StatusCodePermissionDenied: + case tracetranslator.OCPermissionDenied: return http.StatusForbidden - case trace.StatusCodeResourceExhausted: + case tracetranslator.OCResourceExhausted: return http.StatusTooManyRequests - case trace.StatusCodeFailedPrecondition: + case tracetranslator.OCFailedPrecondition: return http.StatusBadRequest - case trace.StatusCodeAborted: + case tracetranslator.OCAborted: return http.StatusConflict - case trace.StatusCodeOutOfRange: + case tracetranslator.OCOutOfRange: return http.StatusBadRequest - case trace.StatusCodeUnimplemented: + case tracetranslator.OCUnimplemented: return http.StatusNotImplemented - case trace.StatusCodeInternal: + case tracetranslator.OCInternal: return http.StatusInternalServerError - case trace.StatusCodeUnavailable: + case tracetranslator.OCUnavailable: return http.StatusServiceUnavailable - case trace.StatusCodeDataLoss: + case tracetranslator.OCDataLoss: return http.StatusInternalServerError - case trace.StatusCodeUnauthenticated: + case tracetranslator.OCUnauthenticated: return http.StatusUnauthorized default: return http.StatusInternalServerError } } -func makeHttp(spanName string, code int32, attributes map[string]interface{}) (map[string]interface{}, *httpInfo) { +func makeHttp(spanKind tracepb.Span_SpanKind, code int32, attributes map[string]*tracepb.AttributeValue) (map[string]string, *httpInfo) { var ( info httpInfo - filtered = map[string]interface{}{} + filtered = make(map[string]string) + urlParts = make(map[string]string) ) for key, value := range attributes { switch key { - case ochttp.MethodAttribute: - info.Request.Method, _ = value.(string) - - case ochttp.UserAgentAttribute: - info.Request.UserAgent, _ = value.(string) - - case ochttp.StatusCodeAttribute: - info.Response.Status, _ = value.(int64) - + case MethodAttribute: + info.Request.Method = value.String() + case UserAgentAttribute: + info.Request.UserAgent = value.String() + case ClientIpAttribute: + info.Request.ClientIP = value.String() + info.Request.XForwardedFor = true + case StatusCodeAttribute: + info.Response.Status = value.GetIntValue() + case URLAttribute: + urlParts[key] = value.String() + case SchemeAttribute: + urlParts[key] = value.String() + case HostAttribute: + urlParts[key] = value.String() + case TargetAttribute: + urlParts[key] = value.String() + case PeerHostAttribute: + urlParts[key] = value.String() + case PeerPortAttribute: + urlParts[key] = value.String() + case PeerIpv4Attribute: + urlParts[key] = value.String() + case PeerIpv6Attribute: + urlParts[key] = value.String() default: - filtered[key] = value + filtered[key] = value.String() } } - info.Request.URL = spanName + if tracepb.Span_SERVER == spanKind { + info.Request.URL = constructServerUrl(urlParts) + } else { + info.Request.URL = constructClientUrl(urlParts) + } if info.Response.Status == 0 { - // this is a fallback because the ochttp.StatusCodeAttribute isn't being set by opencensus-go - // https://github.com/census-instrumentation/opencensus-go/issues/899 info.Response.Status = convertToStatusCode(code) } - if len(filtered) == len(attributes) { - return attributes, nil + return filtered, &info +} + +func constructClientUrl(urlParts map[string]string) string { + // follows OpenTelemetry specification-defined combinations for client spans described in + // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/data-http.md + url, ok := urlParts[URLAttribute] + if ok { + // full URL available so no need to assemble + return url } - return filtered, &info + scheme, ok := urlParts[SchemeAttribute] + if !ok { + scheme = "http" + } + port := "" + host, ok := urlParts[HostAttribute] + if !ok { + host, ok = urlParts[PeerHostAttribute] + if !ok { + host, ok = urlParts[PeerIpv4Attribute] + if !ok { + host = urlParts[PeerIpv6Attribute] + } + } + port, ok = urlParts[PeerPortAttribute] + if !ok { + port = "" + } + } + url = scheme + "://" + host + if len(port) > 0 { + url += ":" + port + } + target, ok := urlParts[TargetAttribute] + if ok { + url += target + } else { + url += "/" + } + return url +} + +func constructServerUrl(urlParts map[string]string) string { + // follows OpenTelemetry specification-defined combinations for server spans described in + // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/data-http.md + url, ok := urlParts[URLAttribute] + if ok { + // full URL available so no need to assemble + return url + } + + scheme, ok := urlParts[SchemeAttribute] + if !ok { + scheme = "http" + } + port := "" + host, ok := urlParts[HostAttribute] + if !ok { + host, ok = urlParts[ServerNameAttribute] + if !ok { + host, ok = urlParts[HostNameAttribute] + } + port, ok = urlParts[PortAttribute] + if !ok { + port = "" + } + } + url = scheme + "://" + host + if len(port) > 0 { + url += ":" + port + } + target, ok := urlParts[TargetAttribute] + if ok { + url += target + } else { + url += "/" + } + return url } diff --git a/exporter/awsxrayexporter/http_test.go b/exporter/awsxrayexporter/http_test.go new file mode 100644 index 000000000000..42da6236c4b8 --- /dev/null +++ b/exporter/awsxrayexporter/http_test.go @@ -0,0 +1,162 @@ +// 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 awsxrayexporter + +import ( + "fmt" + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + "github.com/golang/protobuf/ptypes/timestamp" + "github.com/golang/protobuf/ptypes/wrappers" + "github.com/stretchr/testify/assert" + "reflect" + "testing" + "time" +) + +func TestClientSpanWithUrlAttribute(t *testing.T) { + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "GET" + attributes[URLAttribute] = "https://api.example.com/users/junit" + attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" + attributes[ClientIpAttribute] = "192.168.15.32" + attributes[StatusCodeAttribute] = 200 + span := constructClientSpan(attributes) + + filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + assert.NotNil(t, httpInfo) + assert.NotNil(t, filtered) +} + +func TestClientSpanWithSchemeHostTargetAttributes(t *testing.T) { + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "GET" + attributes[SchemeAttribute] = "https" + attributes[HostAttribute] = "api.example.com" + attributes[TargetAttribute] = "/users/junit" + attributes[StatusCodeAttribute] = 200 + attributes["user.id"] = "junit" + span := constructClientSpan(attributes) + + filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + assert.NotNil(t, httpInfo) + assert.NotNil(t, filtered) +} + +func TestClientSpanWithPeerAttributes(t *testing.T) { + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "GET" + attributes[URLAttribute] = "https://api.example.com/users/junit" + attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" + attributes[ClientIpAttribute] = "192.168.15.32" + attributes[StatusCodeAttribute] = 200 + span := constructClientSpan(attributes) + + filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + assert.NotNil(t, httpInfo) + assert.NotNil(t, filtered) +} + +func TestServerSpanWithUrlAttribute(t *testing.T) { +} + +func TestServerSpanWithSchemeHostTargetAttributes(t *testing.T) { +} + +func constructClientSpan(attributes map[string]interface{}) *tracepb.Span { + endTime := time.Now().Round(time.Second) + startTime := endTime.Add(-90 * time.Second) + spanAttributes := constructSpanAttributes(attributes) + + return &tracepb.Span{ + TraceId: []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}, + SpanId: []byte{0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8}, + ParentSpanId: []byte{0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA, 0xE9, 0xE8}, + Name: &tracepb.TruncatableString{Value: "/users/junit"}, + Kind: tracepb.Span_CLIENT, + StartTime: convertTimeToTimestamp(startTime), + EndTime: convertTimeToTimestamp(endTime), + Status: &tracepb.Status{ + Code: 0, + Message: "OK", + }, + SameProcessAsParentSpan: &wrappers.BoolValue{Value: false}, + Tracestate: &tracepb.Span_Tracestate{ + Entries: []*tracepb.Span_Tracestate_Entry{ + {Key: "foo", Value: "bar"}, + {Key: "a", Value: "b"}, + }, + }, + Attributes: &tracepb.Span_Attributes{ + AttributeMap: spanAttributes, + }, + Resource: &resourcepb.Resource{ + Type: "container", + Labels: constructResourceLabels(), + }, + } +} + +func constructSpanAttributes(attributes map[string]interface{}) map[string]*tracepb.AttributeValue { + attrs := make(map[string]*tracepb.AttributeValue) + for key, value := range attributes { + valType := reflect.TypeOf(value) + var attrVal tracepb.AttributeValue + if valType.Kind() == reflect.Int { + attrVal = tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: int64(value.(int)), + }} + } else if valType.Kind() == reflect.Int64 { + attrVal = tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: value.(int64), + }} + } else { + attrVal = tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ + StringValue: &tracepb.TruncatableString{Value: fmt.Sprintf("%v", value)}, + }} + } + attrs[key] = &attrVal + } + return attrs +} + +func constructResourceLabels() map[string]string { + labels := make(map[string]string) + labels[ServiceNameAttribute] = "signup_aggregator" + labels[ServiceVersionAttribute] = "1.1.12" + labels[ContainerNameAttribute] = "signup_aggregator" + labels[ContainerImageAttribute] = "otel/signupaggregator" + labels[ContainerTagAttribute] = "v1" + labels[K8sClusterAttribute] = "production" + labels[K8sNamespaceAttribute] = "default" + labels[K8sDeploymentAttribute] = "signup_aggregator" + labels[K8sPodAttribute] = "signup_aggregator-x82ufje83" + labels[CloudProviderAttribute] = "aws" + labels[CloudAccountAttribute] = "123456789" + labels[CloudRegionAttribute] = "us-east-1" + labels[CloudZoneAttribute] = "us-east-1c" + return labels +} + +func convertTimeToTimestamp(t time.Time) *timestamp.Timestamp { + if t.IsZero() { + return nil + } + nanoTime := t.UnixNano() + return ×tamp.Timestamp{ + Seconds: nanoTime / 1e9, + Nanos: int32(nanoTime % 1e9), + } +} diff --git a/exporter/awsxrayexporter/segment.go b/exporter/awsxrayexporter/segment.go index 12b34d971488..16750f5385f3 100644 --- a/exporter/awsxrayexporter/segment.go +++ b/exporter/awsxrayexporter/segment.go @@ -19,10 +19,10 @@ import ( "encoding/binary" "encoding/hex" "encoding/json" - "fmt" - "go.opencensus.io/trace" + tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" "math/rand" "os" + "reflect" "regexp" "sync" "time" @@ -32,6 +32,48 @@ import ( // https://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html type origin string +const ( + // Attributes recorded on the span for the requests. + // Only trace exporters will need them. + ComponentAttribute = "component" + HttpComponentType = "http" + RpcComponentType = "rpc" + DbComponentType = "db" + MsgComponentType = "messaging" + PeerAddressAttribute = "peer.address" + PeerHostAttribute = "peer.hostname" + PeerIpv4Attribute = "peer.ipv4" + PeerIpv6Attribute = "peer.ipv6" + PeerPortAttribute = "peer.port" + PeerServiceAttribute = "peer.service" + DbTypeAttribute = "db.type" + DbInstanceAttribute = "db.instance" + DbStatementAttribute = "db.statement" + DbUserAttribute = "db.user" +) + +const ( + ServiceNameAttribute = "service.name" + ServiceNamespaceAttribute = "service.namespace" + ServiceInstanceAttribute = "service.instance.id" + ServiceVersionAttribute = "service.version" + ContainerNameAttribute = "container.name" + ContainerImageAttribute = "container.image.name" + ContainerTagAttribute = "container.image.tag" + K8sClusterAttribute = "k8s.cluster.name" + K8sNamespaceAttribute = "k8s.namespace.name" + K8sPodAttribute = "k8s.pod.name" + K8sDeploymentAttribute = "k8s.deployment.name" + HostHostnameAttribute = "host.hostname" + HostIdAttribute = "host.id" + HostNameAttribute = "host.name" + HostTypeAttribute = "host.type" + CloudProviderAttribute = "cloud.provider" + CloudAccountAttribute = "cloud.account.id" + CloudRegionAttribute = "cloud.region" + CloudZoneAttribute = "cloud.zone" +) + const ( // OriginEC2 span originated from EC2 OriginEC2 origin = "AWS::EC2::Instance" @@ -53,7 +95,7 @@ const ( ) var ( - zeroSpanID = trace.SpanID{} + zeroSpanID = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} r = rand.New(rand.NewSource(time.Now().UnixNano())) // random, not secure mutex = &sync.Mutex{} ) @@ -164,29 +206,6 @@ type service struct { Version string `json:"version,omitempty"` } -// TraceHeader converts an OpenTelemetry span context to AWS X-Ray trace header. -func TraceHeader(sc trace.SpanContext) string { - header := make([]byte, 0, 64) - amazonTraceID := convertToAmazonTraceID(sc.TraceID) - amazonSpanID := convertToAmazonSpanID(sc.SpanID) - - header = append(header, prefixRoot...) - header = append(header, amazonTraceID...) - header = append(header, ";"...) - header = append(header, prefixParent...) - header = append(header, amazonSpanID...) - header = append(header, ";"...) - header = append(header, prefixSampled...) - - if sc.TraceOptions&0x1 == 1 { - header = append(header, "1"...) - } else { - header = append(header, "0"...) - } - - return string(header) -} - // convertToAmazonTraceID converts a trace ID to the Amazon format. // // A trace ID unique identifier that connects all segments and subsegments @@ -198,7 +217,7 @@ func TraceHeader(sc trace.SpanContext) string { // * For example, 10:00AM December 2nd, 2016 PST in epoch time is 1480615200 seconds, // or 58406520 in hexadecimal. // * A 96-bit identifier for the trace, globally unique, in 24 hexadecimal digits. -func convertToAmazonTraceID(traceID trace.TraceID) string { +func convertToAmazonTraceID(traceID []byte) string { const ( // maxAge of 28 days. AWS has a 30 day limit, let's be conservative rather than // hit the limit @@ -236,86 +255,25 @@ func convertToAmazonTraceID(traceID trace.TraceID) string { return string(content[0:traceIDLength]) } -// parseAmazonTraceID parses an amazon traceID string in the format 1-5759e988-bd862e3fe1be46a994272793 -func parseAmazonTraceID(t string) (trace.TraceID, error) { - if v := len(t); v != traceIDLength { - return trace.TraceID{}, fmt.Errorf("invalid amazon trace id; got length %v, want %v", v, traceIDLength) - } - - epoch, err := hex.DecodeString(t[epochOffset : epochOffset+8]) - if err != nil { - return trace.TraceID{}, fmt.Errorf("unable to decode epoch from amazon trace id, %v", err) - } - - identifier, err := hex.DecodeString(t[identifierOffset:]) - if err != nil { - return trace.TraceID{}, fmt.Errorf("unable to decode identifier from amazon trace id, %v", err) - } - - var traceID trace.TraceID - binary.BigEndian.PutUint32(traceID[0:4], binary.BigEndian.Uint32(epoch)) - for index, b := range identifier { - traceID[index+4] = b - } - - return traceID, nil -} - // convertToAmazonSpanID generates an Amazon spanID from a trace.SpanID - a 64-bit identifier // for the segment, unique among segments in the same trace, in 16 hexadecimal digits. -func convertToAmazonSpanID(v trace.SpanID) string { - if v == zeroSpanID { +func convertToAmazonSpanID(v []byte) string { + if reflect.DeepEqual(v, zeroSpanID) { return "" } return hex.EncodeToString(v[0:8]) } -// parseAmazonSpanID parses an amazon spanID -func parseAmazonSpanID(v string) (trace.SpanID, error) { - if v == "" { - return zeroSpanID, nil - } - - if len(v) != spanIDLength { - return trace.SpanID{}, fmt.Errorf("invalid amazon span id; got length %v, want %v", v, spanIDLength) - } - - data, err := hex.DecodeString(v) - if err != nil { - return trace.SpanID{}, fmt.Errorf("unable to decode epoch from amazon trace id, %v", err) - } - - var spanID trace.SpanID - copy(spanID[:], data) - - return spanID, nil -} - -// mergeAnnotations all string, bool, and numeric values from src to dest, fixing keys as needed -func mergeAnnotations(dest, src map[string]interface{}) { +func mergeAnnotations(dest map[string]interface{}, src map[string]string) { for key, value := range src { key = fixAnnotationKey(key) - switch value.(type) { - case bool: - dest[key] = value - case string: - dest[key] = value - case int, int8, int16, int32, int64: - dest[key] = value - case uint, uint8, uint16, uint32, uint64: - dest[key] = value - case float32, float64: - dest[key] = value - } + dest[key] = value } } -func makeAnnotations(annotations []trace.Annotation, attributes map[string]interface{}) map[string]interface{} { +func makeAnnotations(attributes map[string]string) map[string]interface{} { var result = map[string]interface{}{} - for _, annotation := range annotations { - mergeAnnotations(result, annotation.Attributes) - } mergeAnnotations(result, attributes) if len(result) == 0 { @@ -324,7 +282,7 @@ func makeAnnotations(annotations []trace.Annotation, attributes map[string]inter return result } -func makeCause(status trace.Status) (isError, isFault bool, cause *errCause) { +func makeCause(status *tracepb.Status, attributes map[string]string) (isError, isFault bool, cause *errCause) { if status.Code == 0 { return } @@ -390,34 +348,34 @@ func fixAnnotationKey(key string) string { return key } -func rawSegment(name string, span *trace.SpanData) segment { +func rawSegment(name string, span *tracepb.Span) segment { var ( - traceID = convertToAmazonTraceID(span.TraceID) - startMicros = span.StartTime.UnixNano() / int64(time.Microsecond) + traceID = convertToAmazonTraceID(span.TraceId) + startMicros = span.StartTime.Nanos / int32(time.Microsecond) startTime = float64(startMicros) / 1e6 - endMicros = span.EndTime.UnixNano() / int64(time.Microsecond) + endMicros = span.EndTime.Nanos / int32(time.Microsecond) endTime = float64(endMicros) / 1e6 - filtered, http = makeHttp(span.Name, span.Code, span.Attributes) - isError, isFault, cause = makeCause(span.Status) - annotations = makeAnnotations(span.Annotations, filtered) + filtered, http = makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + isError, isFault, cause = makeCause(span.Status, filtered) + annotations = makeAnnotations(span.Resource.GetLabels()) namespace string ) if name == "" { - name = fixSegmentName(span.Name) + name = fixSegmentName(span.Name.String()) } - if span.HasRemoteParent { + if span.ParentSpanId != nil { namespace = "remote" } return segment{ - ID: convertToAmazonSpanID(span.SpanID), + ID: convertToAmazonSpanID(span.SpanId), TraceID: traceID, Name: name, StartTime: startTime, EndTime: endTime, Namespace: namespace, - ParentID: convertToAmazonSpanID(span.ParentSpanID), + ParentID: convertToAmazonSpanID(span.ParentSpanId), Annotations: annotations, Http: http, Error: isError, From b0b69010016d3c680a4d99506dc6ab6adffe162e Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Thu, 14 Nov 2019 11:02:27 -0600 Subject: [PATCH 03/59] initial dev of xray data structures and converters --- exporter/awsxrayexporter/http.go | 44 +++-- exporter/awsxrayexporter/http_test.go | 221 +++++++++++++++++++++++++- 2 files changed, 246 insertions(+), 19 deletions(-) diff --git a/exporter/awsxrayexporter/http.go b/exporter/awsxrayexporter/http.go index 0f53b3168fcf..1a38c6f2d044 100644 --- a/exporter/awsxrayexporter/http.go +++ b/exporter/awsxrayexporter/http.go @@ -18,6 +18,7 @@ import ( tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" "net/http" + "strconv" ) const ( @@ -36,6 +37,7 @@ const ( RouteAttribute = "http.route" ClientIpAttribute = "http.client_ip" UserAgentAttribute = "http.user_agent" + ContentLenAttribute = "http.resp.content_length" ) // httpRequest – Information about an http request. @@ -132,32 +134,46 @@ func makeHttp(spanKind tracepb.Span_SpanKind, code int32, attributes map[string] for key, value := range attributes { switch key { case MethodAttribute: - info.Request.Method = value.String() + info.Request.Method = value.GetStringValue().GetValue() case UserAgentAttribute: - info.Request.UserAgent = value.String() + info.Request.UserAgent = value.GetStringValue().GetValue() case ClientIpAttribute: - info.Request.ClientIP = value.String() + info.Request.ClientIP = value.GetStringValue().GetValue() info.Request.XForwardedFor = true case StatusCodeAttribute: info.Response.Status = value.GetIntValue() case URLAttribute: - urlParts[key] = value.String() + urlParts[key] = value.GetStringValue().GetValue() case SchemeAttribute: - urlParts[key] = value.String() + urlParts[key] = value.GetStringValue().GetValue() case HostAttribute: - urlParts[key] = value.String() + urlParts[key] = value.GetStringValue().GetValue() case TargetAttribute: - urlParts[key] = value.String() + urlParts[key] = value.GetStringValue().GetValue() + case ServerNameAttribute: + urlParts[key] = value.GetStringValue().GetValue() + case HostNameAttribute: + urlParts[key] = value.GetStringValue().GetValue() + case PortAttribute: + urlParts[key] = value.GetStringValue().GetValue() + if len(urlParts[key]) == 0 { + urlParts[key] = strconv.FormatInt(value.GetIntValue(), 10) + } case PeerHostAttribute: - urlParts[key] = value.String() + urlParts[key] = value.GetStringValue().GetValue() case PeerPortAttribute: - urlParts[key] = value.String() + urlParts[key] = value.GetStringValue().GetValue() + if len(urlParts[key]) == 0 { + urlParts[key] = strconv.FormatInt(value.GetIntValue(), 10) + } case PeerIpv4Attribute: - urlParts[key] = value.String() + urlParts[key] = value.GetStringValue().GetValue() case PeerIpv6Attribute: - urlParts[key] = value.String() + urlParts[key] = value.GetStringValue().GetValue() + case ContentLenAttribute: + info.Response.ContentLength = value.GetIntValue() default: - filtered[key] = value.String() + filtered[key] = value.GetStringValue().GetValue() } } @@ -203,7 +219,7 @@ func constructClientUrl(urlParts map[string]string) string { } } url = scheme + "://" + host - if len(port) > 0 { + if len(port) > 0 && !(scheme == "http" && port == "80") && !(scheme == "https" && port == "443") { url += ":" + port } target, ok := urlParts[TargetAttribute] @@ -241,7 +257,7 @@ func constructServerUrl(urlParts map[string]string) string { } } url = scheme + "://" + host - if len(port) > 0 { + if len(port) > 0 && !(scheme == "http" && port == "80") && !(scheme == "https" && port == "443") { url += ":" + port } target, ok := urlParts[TargetAttribute] diff --git a/exporter/awsxrayexporter/http_test.go b/exporter/awsxrayexporter/http_test.go index 42da6236c4b8..7b7f0df8aca9 100644 --- a/exporter/awsxrayexporter/http_test.go +++ b/exporter/awsxrayexporter/http_test.go @@ -22,6 +22,7 @@ import ( "github.com/golang/protobuf/ptypes/wrappers" "github.com/stretchr/testify/assert" "reflect" + "strings" "testing" "time" ) @@ -30,14 +31,20 @@ func TestClientSpanWithUrlAttribute(t *testing.T) { attributes := make(map[string]interface{}) attributes[MethodAttribute] = "GET" attributes[URLAttribute] = "https://api.example.com/users/junit" - attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[ClientIpAttribute] = "192.168.15.32" attributes[StatusCodeAttribute] = 200 span := constructClientSpan(attributes) filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + assert.NotNil(t, httpInfo) assert.NotNil(t, filtered) + w := borrow() + if err := w.Encode(httpInfo); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } func TestClientSpanWithSchemeHostTargetAttributes(t *testing.T) { @@ -51,28 +58,198 @@ func TestClientSpanWithSchemeHostTargetAttributes(t *testing.T) { span := constructClientSpan(attributes) filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + assert.NotNil(t, httpInfo) assert.NotNil(t, filtered) + w := borrow() + if err := w.Encode(httpInfo); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } func TestClientSpanWithPeerAttributes(t *testing.T) { attributes := make(map[string]interface{}) attributes[MethodAttribute] = "GET" - attributes[URLAttribute] = "https://api.example.com/users/junit" - attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[ClientIpAttribute] = "192.168.15.32" + attributes[SchemeAttribute] = "http" + attributes[PeerHostAttribute] = "kb234.example.com" + attributes[PeerPortAttribute] = 8080 + attributes[PeerIpv4Attribute] = "10.8.17.36" + attributes[TargetAttribute] = "/users/junit" attributes[StatusCodeAttribute] = 200 span := constructClientSpan(attributes) + filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + + assert.NotNil(t, httpInfo) + assert.NotNil(t, filtered) + w := borrow() + if err := w.Encode(httpInfo); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, "http://kb234.example.com:8080/users/junit")) +} + +func TestClientSpanWithPeerIp4Attributes(t *testing.T) { + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "GET" + attributes[SchemeAttribute] = "http" + attributes[PeerIpv4Attribute] = "10.8.17.36" + attributes[PeerPortAttribute] = "8080" + attributes[TargetAttribute] = "/users/junit" + span := constructClientSpan(attributes) + filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) assert.NotNil(t, httpInfo) assert.NotNil(t, filtered) + w := borrow() + if err := w.Encode(httpInfo); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, "http://10.8.17.36:8080/users/junit")) +} + +func TestClientSpanWithPeerIp6Attributes(t *testing.T) { + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "GET" + attributes[SchemeAttribute] = "https" + attributes[PeerIpv6Attribute] = "2001:db8:85a3::8a2e:370:7334" + attributes[PeerPortAttribute] = "443" + attributes[TargetAttribute] = "/users/junit" + span := constructClientSpan(attributes) + + filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + assert.NotNil(t, httpInfo) + assert.NotNil(t, filtered) + w := borrow() + if err := w.Encode(httpInfo); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, "https://2001:db8:85a3::8a2e:370:7334/users/junit")) } func TestServerSpanWithUrlAttribute(t *testing.T) { + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "GET" + attributes[URLAttribute] = "https://api.example.com/users/junit" + attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" + attributes[ClientIpAttribute] = "192.168.15.32" + attributes[StatusCodeAttribute] = 200 + span := constructServerSpan(attributes) + + filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + + assert.NotNil(t, httpInfo) + assert.NotNil(t, filtered) + w := borrow() + if err := w.Encode(httpInfo); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } func TestServerSpanWithSchemeHostTargetAttributes(t *testing.T) { + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "GET" + attributes[SchemeAttribute] = "https" + attributes[HostAttribute] = "api.example.com" + attributes[TargetAttribute] = "/users/junit" + attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" + attributes[ClientIpAttribute] = "192.168.15.32" + attributes[StatusCodeAttribute] = 200 + span := constructServerSpan(attributes) + + filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + + assert.NotNil(t, httpInfo) + assert.NotNil(t, filtered) + w := borrow() + if err := w.Encode(httpInfo); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) +} + +func TestServerSpanWithSchemeServernamePortTargetAttributes(t *testing.T) { + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "GET" + attributes[SchemeAttribute] = "https" + attributes[ServerNameAttribute] = "api.example.com" + attributes[PortAttribute] = 443 + attributes[TargetAttribute] = "/users/junit" + attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" + attributes[ClientIpAttribute] = "192.168.15.32" + attributes[StatusCodeAttribute] = 200 + span := constructServerSpan(attributes) + + filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + + assert.NotNil(t, httpInfo) + assert.NotNil(t, filtered) + w := borrow() + if err := w.Encode(httpInfo); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) +} + +func TestServerSpanWithSchemeNamePortTargetAttributes(t *testing.T) { + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "GET" + attributes[SchemeAttribute] = "http" + attributes[HostNameAttribute] = "kb234.example.com" + attributes[PortAttribute] = 8080 + attributes[TargetAttribute] = "/users/junit" + attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" + attributes[ClientIpAttribute] = "192.168.15.32" + attributes[StatusCodeAttribute] = 200 + attributes[ContentLenAttribute] = 21378 + span := constructServerSpan(attributes) + + filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + + assert.NotNil(t, httpInfo) + assert.NotNil(t, filtered) + w := borrow() + if err := w.Encode(httpInfo); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, "http://kb234.example.com:8080/users/junit")) +} + +func TestHttpStatusFromSpanStatus(t *testing.T) { + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "GET" + attributes[URLAttribute] = "https://api.example.com/users/junit" + span := constructClientSpan(attributes) + + filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + + assert.NotNil(t, httpInfo) + assert.NotNil(t, filtered) + w := borrow() + if err := w.Encode(httpInfo); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, "200")) } func constructClientSpan(attributes map[string]interface{}) *tracepb.Span { @@ -109,6 +286,40 @@ func constructClientSpan(attributes map[string]interface{}) *tracepb.Span { } } +func constructServerSpan(attributes map[string]interface{}) *tracepb.Span { + endTime := time.Now().Round(time.Second) + startTime := endTime.Add(-90 * time.Second) + spanAttributes := constructSpanAttributes(attributes) + + return &tracepb.Span{ + TraceId: []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}, + SpanId: []byte{0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8}, + ParentSpanId: []byte{0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA, 0xE9, 0xE8}, + Name: &tracepb.TruncatableString{Value: "/users/junit"}, + Kind: tracepb.Span_SERVER, + StartTime: convertTimeToTimestamp(startTime), + EndTime: convertTimeToTimestamp(endTime), + Status: &tracepb.Status{ + Code: 0, + Message: "OK", + }, + SameProcessAsParentSpan: &wrappers.BoolValue{Value: false}, + Tracestate: &tracepb.Span_Tracestate{ + Entries: []*tracepb.Span_Tracestate_Entry{ + {Key: "foo", Value: "bar"}, + {Key: "a", Value: "b"}, + }, + }, + Attributes: &tracepb.Span_Attributes{ + AttributeMap: spanAttributes, + }, + Resource: &resourcepb.Resource{ + Type: "container", + Labels: constructResourceLabels(), + }, + } +} + func constructSpanAttributes(attributes map[string]interface{}) map[string]*tracepb.AttributeValue { attrs := make(map[string]*tracepb.AttributeValue) for key, value := range attributes { From 72a06833f556c8352e7db25c7da9d4c9c7939906 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Thu, 14 Nov 2019 15:53:29 -0600 Subject: [PATCH 04/59] initial dev of xray data structures and converters --- exporter/awsxrayexporter/cause.go | 120 ++++++++++++++++++++++++ exporter/awsxrayexporter/cause_test.go | 124 +++++++++++++++++++++++++ exporter/awsxrayexporter/error.go | 33 ------- exporter/awsxrayexporter/http.go | 57 ++++-------- exporter/awsxrayexporter/http_test.go | 60 ++++++------ exporter/awsxrayexporter/segment.go | 41 +------- 6 files changed, 294 insertions(+), 141 deletions(-) create mode 100644 exporter/awsxrayexporter/cause.go create mode 100644 exporter/awsxrayexporter/cause_test.go delete mode 100644 exporter/awsxrayexporter/error.go diff --git a/exporter/awsxrayexporter/cause.go b/exporter/awsxrayexporter/cause.go new file mode 100644 index 000000000000..6d40e85f7175 --- /dev/null +++ b/exporter/awsxrayexporter/cause.go @@ -0,0 +1,120 @@ +// 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 awsxrayexporter + +import ( + "encoding/hex" + tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + "os" + "strings" +) + +const ( + ErrorObjectAttribute = "error.object" + ErrorMessageAttribute = "error.message" + ErrorStackAttribute = "error.stack" + ErrorKindAttribute = "error.kind" +) + +// CauseData provides the shape for unmarshalling data that records exception. +type CauseData struct { + WorkingDirectory string `json:"working_directory,omitempty"` + Paths []string `json:"paths,omitempty"` + Exceptions []Exception `json:"exceptions,omitempty"` +} + +// Exception provides the shape for unmarshalling an exception. +type Exception struct { + ID string `json:"id,omitempty"` + Type string `json:"type,omitempty"` + Message string `json:"message,omitempty"` + Stack []Stack `json:"stack,omitempty"` + Remote bool `json:"remote,omitempty"` +} + +// Stack provides the shape for unmarshalling an stack. +type Stack struct { + Path string `json:"path,omitempty"` + Line int `json:"line,omitempty"` + Label string `json:"label,omitempty"` +} + +func makeCause(status *tracepb.Status, attributes map[string]string) (isError, isFault bool, cause *CauseData) { + if status.Code == 0 { + return + } + + message := status.GetMessage() + if message == "" { + message = attributes[ErrorMessageAttribute] + } + if message == "" { + message = attributes[StatusTextAttribute] + } + if message == "" { + message = attributes[ErrorObjectAttribute] + } + + if message != "" { + id := make([]byte, 8) + mutex.Lock() + r.Read(id) // rand.Read always returns nil + mutex.Unlock() + + hexID := hex.EncodeToString(id) + + cause = &CauseData{ + Exceptions: []Exception{ + { + ID: hexID, + Type: attributes[ErrorKindAttribute], + Message: message, + }, + }, + } + + stackStr := attributes[ErrorStackAttribute] + if stackStr != "" { + cause.Exceptions[0].Stack = parseStackData(stackStr) + } + + if dir, err := os.Getwd(); err == nil { + cause.WorkingDirectory = dir + } + } + + if isClientError(status.Code) { + isError = true + return + } + + isFault = true + return +} + +func parseStackData(stackStr string) []Stack { + parts := strings.Split(stackStr, "|") + stacks := make([]Stack, len(parts)) + for i, part := range parts { + stacks[i] = Stack{ + Label: part, + } + } + return stacks +} + +func isClientError(code int32) bool { + return false +} diff --git a/exporter/awsxrayexporter/cause_test.go b/exporter/awsxrayexporter/cause_test.go new file mode 100644 index 000000000000..d4ae904d8650 --- /dev/null +++ b/exporter/awsxrayexporter/cause_test.go @@ -0,0 +1,124 @@ +// 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 awsxrayexporter + +import ( + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + "github.com/stretchr/testify/assert" + "strings" + "testing" + "time" +) + +func TestCauseWithStatusMessage(t *testing.T) { + errorMsg := "this is a test" + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "POST" + attributes[URLAttribute] = "https://api.example.com/widgets" + attributes[StatusCodeAttribute] = 500 + span := constructExceptionServerSpan(attributes) + span.Status.Message = errorMsg + filtered, _ := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + + isError, isFault, cause := makeCause(span.Status, filtered) + + assert.False(t, isError) + assert.True(t, isFault) + assert.NotNil(t, cause) + w := borrow() + if err := w.Encode(cause); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, errorMsg)) +} + +func TestCauseWithHttpStatusMessage(t *testing.T) { + errorMsg := "this is a test" + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "POST" + attributes[URLAttribute] = "https://api.example.com/widgets" + attributes[StatusCodeAttribute] = 500 + attributes[StatusTextAttribute] = errorMsg + span := constructExceptionServerSpan(attributes) + filtered, _ := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + + isError, isFault, cause := makeCause(span.Status, filtered) + + assert.False(t, isError) + assert.True(t, isFault) + assert.NotNil(t, cause) + w := borrow() + if err := w.Encode(cause); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, errorMsg)) +} + +func TestCauseWithErrorMessage(t *testing.T) { + errorMsg := "this is a test" + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "POST" + attributes[URLAttribute] = "https://api.example.com/widgets" + attributes[StatusCodeAttribute] = 500 + attributes[ErrorMessageAttribute] = errorMsg + attributes[ErrorStackAttribute] = "org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749)" + span := constructExceptionServerSpan(attributes) + filtered, _ := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + + isError, isFault, cause := makeCause(span.Status, filtered) + + assert.False(t, isError) + assert.True(t, isFault) + assert.NotNil(t, cause) + w := borrow() + if err := w.Encode(cause); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, errorMsg)) + assert.True(t, strings.Contains(jsonStr, "ConstructorResolver")) +} + +func constructExceptionServerSpan(attributes map[string]interface{}) *tracepb.Span { + endTime := time.Now().Round(time.Second) + startTime := endTime.Add(-90 * time.Second) + spanAttributes := constructSpanAttributes(attributes) + + return &tracepb.Span{ + TraceId: []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}, + SpanId: []byte{0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8}, + ParentSpanId: []byte{0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA, 0xE9, 0xE8}, + Name: &tracepb.TruncatableString{Value: "/widgets"}, + Kind: tracepb.Span_SERVER, + StartTime: convertTimeToTimestamp(startTime), + EndTime: convertTimeToTimestamp(endTime), + Status: &tracepb.Status{ + Code: 13, + }, + Attributes: &tracepb.Span_Attributes{ + AttributeMap: spanAttributes, + }, + Resource: &resourcepb.Resource{ + Type: "container", + Labels: constructResourceLabels(), + }, + } +} diff --git a/exporter/awsxrayexporter/error.go b/exporter/awsxrayexporter/error.go deleted file mode 100644 index 0dacc67800eb..000000000000 --- a/exporter/awsxrayexporter/error.go +++ /dev/null @@ -1,33 +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 awsxrayexporter - -type exception struct { - // ID – A 64-bit identifier for the exception, unique among segments in the same trace, - // in 16 hexadecimal digits. - ID string `json:"id"` - - // Message – The exception message. - Message string `json:"message,omitempty"` -} - -// cause - A cause can be either a 16 character exception ID or an object with the following fields: -type errCause struct { - // WorkingDirectory – The full path of the working directory when the exception occurred. - WorkingDirectory string `json:"working_directory"` - - // Exceptions - The array of exception objects. - Exceptions []exception `json:"exceptions,omitempty"` -} diff --git a/exporter/awsxrayexporter/http.go b/exporter/awsxrayexporter/http.go index 1a38c6f2d044..c4428f960636 100644 --- a/exporter/awsxrayexporter/http.go +++ b/exporter/awsxrayexporter/http.go @@ -40,47 +40,26 @@ const ( ContentLenAttribute = "http.resp.content_length" ) -// httpRequest – Information about an http request. -type httpRequest struct { - // Method – The request method. For example, GET. - Method string `json:"method,omitempty"` - - // URL – The full URL of the request, compiled from the protocol, hostname, - // and path of the request. - URL string `json:"url,omitempty"` - - // UserAgent – The user agent string from the requester's client. - UserAgent string `json:"user_agent,omitempty"` - - // ClientIP – The IP address of the requester. Can be retrieved from the IP - // packet's Source Address or, for forwarded requests, from an X-Forwarded-For - // header. - ClientIP string `json:"client_ip,omitempty"` - - // XForwardedFor – (segments only) boolean indicating that the client_ip was - // read from an X-Forwarded-For header and is not reliable as it could have - // been forged. - XForwardedFor bool `json:"x_forwarded_for,omitempty"` - - // Traced – (subsegments only) boolean indicating that the downstream call - // is to another traced service. If this field is set to true, X-Ray considers - // the trace to be broken until the downstream service uploads a segment with - // a parent_id that matches the id of the subsegment that contains this block. - Traced bool `json:"traced,omitempty"` +// HTTPData provides the shape for unmarshalling request and response data. +type HTTPData struct { + Request RequestData `json:"request,omitempty"` + Response ResponseData `json:"response,omitempty"` } -// httpResponse - Information about an http response. -type httpResponse struct { - // Status – number indicating the HTTP status of the response. - Status int64 `json:"status,omitempty"` - - // ContentLength – number indicating the length of the response body in bytes. - ContentLength int64 `json:"content_length,omitempty"` +// RequestData provides the shape for unmarshalling request data. +type RequestData struct { + Method string `json:"method,omitempty"` + URL string `json:"url,omitempty"` // http(s)://host/path + ClientIP string `json:"client_ip,omitempty"` + UserAgent string `json:"user_agent,omitempty"` + XForwardedFor bool `json:"x_forwarded_for,omitempty"` + Traced bool `json:"traced,omitempty"` } -type httpInfo struct { - Request httpRequest `json:"request"` - Response httpResponse `json:"response"` +// ResponseData provides the shape for unmarshalling response data. +type ResponseData struct { + Status int64 `json:"status,omitempty"` + ContentLength int64 `json:"content_length,omitempty"` } func convertToStatusCode(code int32) int64 { @@ -124,9 +103,9 @@ func convertToStatusCode(code int32) int64 { } } -func makeHttp(spanKind tracepb.Span_SpanKind, code int32, attributes map[string]*tracepb.AttributeValue) (map[string]string, *httpInfo) { +func makeHttp(spanKind tracepb.Span_SpanKind, code int32, attributes map[string]*tracepb.AttributeValue) (map[string]string, *HTTPData) { var ( - info httpInfo + info HTTPData filtered = make(map[string]string) urlParts = make(map[string]string) ) diff --git a/exporter/awsxrayexporter/http_test.go b/exporter/awsxrayexporter/http_test.go index 7b7f0df8aca9..60892eb47970 100644 --- a/exporter/awsxrayexporter/http_test.go +++ b/exporter/awsxrayexporter/http_test.go @@ -34,12 +34,12 @@ func TestClientSpanWithUrlAttribute(t *testing.T) { attributes[StatusCodeAttribute] = 200 span := constructClientSpan(attributes) - filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) - assert.NotNil(t, httpInfo) + assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() - if err := w.Encode(httpInfo); err != nil { + if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() @@ -57,12 +57,12 @@ func TestClientSpanWithSchemeHostTargetAttributes(t *testing.T) { attributes["user.id"] = "junit" span := constructClientSpan(attributes) - filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) - assert.NotNil(t, httpInfo) + assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() - if err := w.Encode(httpInfo); err != nil { + if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() @@ -81,12 +81,12 @@ func TestClientSpanWithPeerAttributes(t *testing.T) { attributes[StatusCodeAttribute] = 200 span := constructClientSpan(attributes) - filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) - assert.NotNil(t, httpInfo) + assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() - if err := w.Encode(httpInfo); err != nil { + if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() @@ -103,11 +103,11 @@ func TestClientSpanWithPeerIp4Attributes(t *testing.T) { attributes[TargetAttribute] = "/users/junit" span := constructClientSpan(attributes) - filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) - assert.NotNil(t, httpInfo) + filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() - if err := w.Encode(httpInfo); err != nil { + if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() @@ -124,11 +124,11 @@ func TestClientSpanWithPeerIp6Attributes(t *testing.T) { attributes[TargetAttribute] = "/users/junit" span := constructClientSpan(attributes) - filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) - assert.NotNil(t, httpInfo) + filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() - if err := w.Encode(httpInfo); err != nil { + if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() @@ -145,12 +145,12 @@ func TestServerSpanWithUrlAttribute(t *testing.T) { attributes[StatusCodeAttribute] = 200 span := constructServerSpan(attributes) - filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) - assert.NotNil(t, httpInfo) + assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() - if err := w.Encode(httpInfo); err != nil { + if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() @@ -169,12 +169,12 @@ func TestServerSpanWithSchemeHostTargetAttributes(t *testing.T) { attributes[StatusCodeAttribute] = 200 span := constructServerSpan(attributes) - filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) - assert.NotNil(t, httpInfo) + assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() - if err := w.Encode(httpInfo); err != nil { + if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() @@ -194,12 +194,12 @@ func TestServerSpanWithSchemeServernamePortTargetAttributes(t *testing.T) { attributes[StatusCodeAttribute] = 200 span := constructServerSpan(attributes) - filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) - assert.NotNil(t, httpInfo) + assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() - if err := w.Encode(httpInfo); err != nil { + if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() @@ -220,12 +220,12 @@ func TestServerSpanWithSchemeNamePortTargetAttributes(t *testing.T) { attributes[ContentLenAttribute] = 21378 span := constructServerSpan(attributes) - filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) - assert.NotNil(t, httpInfo) + assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() - if err := w.Encode(httpInfo); err != nil { + if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() @@ -239,12 +239,12 @@ func TestHttpStatusFromSpanStatus(t *testing.T) { attributes[URLAttribute] = "https://api.example.com/users/junit" span := constructClientSpan(attributes) - filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) - assert.NotNil(t, httpInfo) + assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() - if err := w.Encode(httpInfo); err != nil { + if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() diff --git a/exporter/awsxrayexporter/segment.go b/exporter/awsxrayexporter/segment.go index 16750f5385f3..954d66e6646b 100644 --- a/exporter/awsxrayexporter/segment.go +++ b/exporter/awsxrayexporter/segment.go @@ -21,7 +21,6 @@ import ( "encoding/json" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" "math/rand" - "os" "reflect" "regexp" "sync" @@ -182,7 +181,7 @@ type segment struct { Service *service `json:"service,omitempty"` // Http - optional xray specific http settings - Http *httpInfo `json:"http,omitempty"` + Http *HTTPData `json:"http,omitempty"` // Error - boolean indicating that a client error occurred // (response status code was 4XX Client Error). @@ -193,7 +192,7 @@ type segment struct { Fault bool `json:"fault,omitempty"` // Cause - Cause *errCause `json:"cause,omitempty"` + Cause *CauseData `json:"cause,omitempty"` /* -- Used by SubSegments only ------------------------ */ @@ -282,42 +281,6 @@ func makeAnnotations(attributes map[string]string) map[string]interface{} { return result } -func makeCause(status *tracepb.Status, attributes map[string]string) (isError, isFault bool, cause *errCause) { - if status.Code == 0 { - return - } - - if status.Message != "" { - id := make([]byte, 8) - mutex.Lock() - r.Read(id) // rand.Read always returns nil - mutex.Unlock() - - hexID := hex.EncodeToString(id) - - cause = &errCause{ - Exceptions: []exception{ - { - ID: hexID, - Message: status.Message, - }, - }, - } - - if dir, err := os.Getwd(); err == nil { - cause.WorkingDirectory = dir - } - } - - if status.Code >= 400 && status.Code < 500 { - isError = true - return - } - - isFault = true - return -} - // fixSegmentName removes any invalid characters from the span name. AWS X-Ray defines // the list of valid characters here: // https://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html From 9dee5a186594eb778d6e44142828a7b9be0d7615 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Fri, 15 Nov 2019 15:42:41 -0600 Subject: [PATCH 05/59] initial dev of xray data structures and converters --- .../awsxrayexporter/{ => otel2xray}/cause.go | 2 +- .../{ => otel2xray}/cause_test.go | 8 +- .../{ => otel2xray}/converter.go | 4 +- .../awsxrayexporter/{ => otel2xray}/http.go | 16 +- .../{ => otel2xray}/http_test.go | 56 +++-- .../{ => otel2xray}/segment.go | 234 ++++++++---------- exporter/awsxrayexporter/otel2xray/service.go | 48 ++++ .../awsxrayexporter/otel2xray/service_test.go | 48 ++++ exporter/awsxrayexporter/otel2xray/sql.go | 53 ++++ .../awsxrayexporter/otel2xray/sql_test.go | 60 +++++ 10 files changed, 359 insertions(+), 170 deletions(-) rename exporter/awsxrayexporter/{ => otel2xray}/cause.go (99%) rename exporter/awsxrayexporter/{ => otel2xray}/cause_test.go (98%) rename exporter/awsxrayexporter/{ => otel2xray}/converter.go (95%) rename exporter/awsxrayexporter/{ => otel2xray}/http.go (94%) rename exporter/awsxrayexporter/{ => otel2xray}/http_test.go (90%) rename exporter/awsxrayexporter/{ => otel2xray}/segment.go (64%) create mode 100644 exporter/awsxrayexporter/otel2xray/service.go create mode 100644 exporter/awsxrayexporter/otel2xray/service_test.go create mode 100644 exporter/awsxrayexporter/otel2xray/sql.go create mode 100644 exporter/awsxrayexporter/otel2xray/sql_test.go diff --git a/exporter/awsxrayexporter/cause.go b/exporter/awsxrayexporter/otel2xray/cause.go similarity index 99% rename from exporter/awsxrayexporter/cause.go rename to exporter/awsxrayexporter/otel2xray/cause.go index 6d40e85f7175..ae528254a90c 100644 --- a/exporter/awsxrayexporter/cause.go +++ b/exporter/awsxrayexporter/otel2xray/cause.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package awsxrayexporter +package otel2xray import ( "encoding/hex" diff --git a/exporter/awsxrayexporter/cause_test.go b/exporter/awsxrayexporter/otel2xray/cause_test.go similarity index 98% rename from exporter/awsxrayexporter/cause_test.go rename to exporter/awsxrayexporter/otel2xray/cause_test.go index d4ae904d8650..8a2cf093a47a 100644 --- a/exporter/awsxrayexporter/cause_test.go +++ b/exporter/awsxrayexporter/otel2xray/cause_test.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package awsxrayexporter +package otel2xray import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" @@ -43,7 +43,7 @@ func TestCauseWithStatusMessage(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, errorMsg)) } @@ -67,7 +67,7 @@ func TestCauseWithHttpStatusMessage(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, errorMsg)) } @@ -92,7 +92,7 @@ func TestCauseWithErrorMessage(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, errorMsg)) assert.True(t, strings.Contains(jsonStr, "ConstructorResolver")) } diff --git a/exporter/awsxrayexporter/converter.go b/exporter/awsxrayexporter/otel2xray/converter.go similarity index 95% rename from exporter/awsxrayexporter/converter.go rename to exporter/awsxrayexporter/otel2xray/converter.go index acf7cee0caac..cbc265d88356 100644 --- a/exporter/awsxrayexporter/converter.go +++ b/exporter/awsxrayexporter/otel2xray/converter.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package awsxrayexporter +package otel2xray import ( "github.com/aws/aws-sdk-go/service/xray" @@ -22,7 +22,7 @@ import ( func ConvertTraceDataToXRay(td consumerdata.TraceData) *xray.PutTraceSegmentsInput { documents := make([]*string, len(td.Spans)) //for i, span := range td.Spans { - // seg := segment{} + // seg := Segment{} //} input := xray.PutTraceSegmentsInput{TraceSegmentDocuments: documents} return &input diff --git a/exporter/awsxrayexporter/http.go b/exporter/awsxrayexporter/otel2xray/http.go similarity index 94% rename from exporter/awsxrayexporter/http.go rename to exporter/awsxrayexporter/otel2xray/http.go index c4428f960636..488e12be2d2b 100644 --- a/exporter/awsxrayexporter/http.go +++ b/exporter/awsxrayexporter/otel2xray/http.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package awsxrayexporter +package otel2xray import ( tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" @@ -105,13 +105,17 @@ func convertToStatusCode(code int32) int64 { func makeHttp(spanKind tracepb.Span_SpanKind, code int32, attributes map[string]*tracepb.AttributeValue) (map[string]string, *HTTPData) { var ( - info HTTPData - filtered = make(map[string]string) - urlParts = make(map[string]string) + info HTTPData + filtered = make(map[string]string) + urlParts = make(map[string]string) + componentValue string ) for key, value := range attributes { switch key { + case ComponentAttribute: + componentValue = value.GetStringValue().GetValue() + filtered[key] = componentValue case MethodAttribute: info.Request.Method = value.GetStringValue().GetValue() case UserAgentAttribute: @@ -156,6 +160,10 @@ func makeHttp(spanKind tracepb.Span_SpanKind, code int32, attributes map[string] } } + if (componentValue != HttpComponentType && componentValue != RpcComponentType) || info.Request.Method == "" { + return filtered, nil + } + if tracepb.Span_SERVER == spanKind { info.Request.URL = constructServerUrl(urlParts) } else { diff --git a/exporter/awsxrayexporter/http_test.go b/exporter/awsxrayexporter/otel2xray/http_test.go similarity index 90% rename from exporter/awsxrayexporter/http_test.go rename to exporter/awsxrayexporter/otel2xray/http_test.go index 60892eb47970..2dcad4b1d4de 100644 --- a/exporter/awsxrayexporter/http_test.go +++ b/exporter/awsxrayexporter/otel2xray/http_test.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package awsxrayexporter +package otel2xray import ( "fmt" @@ -29,10 +29,11 @@ import ( func TestClientSpanWithUrlAttribute(t *testing.T) { attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HttpComponentType attributes[MethodAttribute] = "GET" attributes[URLAttribute] = "https://api.example.com/users/junit" attributes[StatusCodeAttribute] = 200 - span := constructClientSpan(attributes) + span := constructHttpClientSpan(attributes) filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) @@ -43,19 +44,20 @@ func TestClientSpanWithUrlAttribute(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } func TestClientSpanWithSchemeHostTargetAttributes(t *testing.T) { attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HttpComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "https" attributes[HostAttribute] = "api.example.com" attributes[TargetAttribute] = "/users/junit" attributes[StatusCodeAttribute] = 200 attributes["user.id"] = "junit" - span := constructClientSpan(attributes) + span := constructHttpClientSpan(attributes) filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) @@ -66,12 +68,13 @@ func TestClientSpanWithSchemeHostTargetAttributes(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } func TestClientSpanWithPeerAttributes(t *testing.T) { attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HttpComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "http" attributes[PeerHostAttribute] = "kb234.example.com" @@ -79,7 +82,7 @@ func TestClientSpanWithPeerAttributes(t *testing.T) { attributes[PeerIpv4Attribute] = "10.8.17.36" attributes[TargetAttribute] = "/users/junit" attributes[StatusCodeAttribute] = 200 - span := constructClientSpan(attributes) + span := constructHttpClientSpan(attributes) filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) @@ -90,18 +93,19 @@ func TestClientSpanWithPeerAttributes(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, "http://kb234.example.com:8080/users/junit")) } func TestClientSpanWithPeerIp4Attributes(t *testing.T) { attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HttpComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "http" attributes[PeerIpv4Attribute] = "10.8.17.36" attributes[PeerPortAttribute] = "8080" attributes[TargetAttribute] = "/users/junit" - span := constructClientSpan(attributes) + span := constructHttpClientSpan(attributes) filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) assert.NotNil(t, httpData) @@ -111,18 +115,19 @@ func TestClientSpanWithPeerIp4Attributes(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, "http://10.8.17.36:8080/users/junit")) } func TestClientSpanWithPeerIp6Attributes(t *testing.T) { attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HttpComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "https" attributes[PeerIpv6Attribute] = "2001:db8:85a3::8a2e:370:7334" attributes[PeerPortAttribute] = "443" attributes[TargetAttribute] = "/users/junit" - span := constructClientSpan(attributes) + span := constructHttpClientSpan(attributes) filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) assert.NotNil(t, httpData) @@ -132,18 +137,19 @@ func TestClientSpanWithPeerIp6Attributes(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, "https://2001:db8:85a3::8a2e:370:7334/users/junit")) } func TestServerSpanWithUrlAttribute(t *testing.T) { attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HttpComponentType attributes[MethodAttribute] = "GET" attributes[URLAttribute] = "https://api.example.com/users/junit" attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" attributes[ClientIpAttribute] = "192.168.15.32" attributes[StatusCodeAttribute] = 200 - span := constructServerSpan(attributes) + span := constructHttpServerSpan(attributes) filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) @@ -154,12 +160,13 @@ func TestServerSpanWithUrlAttribute(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } func TestServerSpanWithSchemeHostTargetAttributes(t *testing.T) { attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HttpComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "https" attributes[HostAttribute] = "api.example.com" @@ -167,7 +174,7 @@ func TestServerSpanWithSchemeHostTargetAttributes(t *testing.T) { attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" attributes[ClientIpAttribute] = "192.168.15.32" attributes[StatusCodeAttribute] = 200 - span := constructServerSpan(attributes) + span := constructHttpServerSpan(attributes) filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) @@ -178,12 +185,13 @@ func TestServerSpanWithSchemeHostTargetAttributes(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } func TestServerSpanWithSchemeServernamePortTargetAttributes(t *testing.T) { attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HttpComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "https" attributes[ServerNameAttribute] = "api.example.com" @@ -192,7 +200,7 @@ func TestServerSpanWithSchemeServernamePortTargetAttributes(t *testing.T) { attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" attributes[ClientIpAttribute] = "192.168.15.32" attributes[StatusCodeAttribute] = 200 - span := constructServerSpan(attributes) + span := constructHttpServerSpan(attributes) filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) @@ -203,12 +211,13 @@ func TestServerSpanWithSchemeServernamePortTargetAttributes(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } func TestServerSpanWithSchemeNamePortTargetAttributes(t *testing.T) { attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HttpComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "http" attributes[HostNameAttribute] = "kb234.example.com" @@ -218,7 +227,7 @@ func TestServerSpanWithSchemeNamePortTargetAttributes(t *testing.T) { attributes[ClientIpAttribute] = "192.168.15.32" attributes[StatusCodeAttribute] = 200 attributes[ContentLenAttribute] = 21378 - span := constructServerSpan(attributes) + span := constructHttpServerSpan(attributes) filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) @@ -229,15 +238,16 @@ func TestServerSpanWithSchemeNamePortTargetAttributes(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, "http://kb234.example.com:8080/users/junit")) } func TestHttpStatusFromSpanStatus(t *testing.T) { attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HttpComponentType attributes[MethodAttribute] = "GET" attributes[URLAttribute] = "https://api.example.com/users/junit" - span := constructClientSpan(attributes) + span := constructHttpClientSpan(attributes) filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) @@ -248,11 +258,11 @@ func TestHttpStatusFromSpanStatus(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, "200")) } -func constructClientSpan(attributes map[string]interface{}) *tracepb.Span { +func constructHttpClientSpan(attributes map[string]interface{}) *tracepb.Span { endTime := time.Now().Round(time.Second) startTime := endTime.Add(-90 * time.Second) spanAttributes := constructSpanAttributes(attributes) @@ -286,7 +296,7 @@ func constructClientSpan(attributes map[string]interface{}) *tracepb.Span { } } -func constructServerSpan(attributes map[string]interface{}) *tracepb.Span { +func constructHttpServerSpan(attributes map[string]interface{}) *tracepb.Span { endTime := time.Now().Round(time.Second) startTime := endTime.Add(-90 * time.Second) spanAttributes := constructSpanAttributes(attributes) diff --git a/exporter/awsxrayexporter/segment.go b/exporter/awsxrayexporter/otel2xray/segment.go similarity index 64% rename from exporter/awsxrayexporter/segment.go rename to exporter/awsxrayexporter/otel2xray/segment.go index 954d66e6646b..ca66742d20ef 100644 --- a/exporter/awsxrayexporter/segment.go +++ b/exporter/awsxrayexporter/otel2xray/segment.go @@ -12,14 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -package awsxrayexporter +package otel2xray import ( "bytes" "encoding/binary" "encoding/hex" "encoding/json" + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + "github.com/golang/protobuf/ptypes/timestamp" "math/rand" "reflect" "regexp" @@ -27,10 +29,6 @@ import ( "time" ) -// origin contains the support aws origin values, -// https://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html -type origin string - const ( // Attributes recorded on the span for the requests. // Only trace exporters will need them. @@ -45,10 +43,6 @@ const ( PeerIpv6Attribute = "peer.ipv6" PeerPortAttribute = "peer.port" PeerServiceAttribute = "peer.service" - DbTypeAttribute = "db.type" - DbInstanceAttribute = "db.instance" - DbStatementAttribute = "db.statement" - DbUserAttribute = "db.user" ) const ( @@ -75,22 +69,9 @@ const ( const ( // OriginEC2 span originated from EC2 - OriginEC2 origin = "AWS::EC2::Instance" - - // OriginECS span originated from Elastic Container Service (ECS) - OriginECS origin = "AWS::ECS::Container" - - // OriginEB span originated from Elastic Beanstalk (EB) - OriginEB origin = "AWS::ElasticBeanstalk::Environment" -) - -const ( - httpHeaderMaxSize = 200 - httpHeader = `X-Amzn-Trace-Id` - prefixRoot = "Root=" - prefixParent = "Parent=" - prefixSampled = "Sampled=" - separator = ";" // separator used by x-ray to split parts of X-Amzn-Trace-Id header + OriginEC2 = "AWS::EC2::Instance" + OriginECS = "AWS::ECS::Container" + OriginEB = "AWS::ElasticBeanstalk::Environment" ) var ( @@ -113,7 +94,7 @@ const ( // span name defaultSegmentName = "span" - // maxSegmentNameLength the maximum length of a segment name + // maxSegmentNameLength the maximum length of a Segment name maxSegmentNameLength = 200 ) @@ -124,85 +105,88 @@ const ( identifierOffset = 11 // offset of identifier within traceID ) -type segment struct { - // ID - A 64-bit identifier for the segment, unique among segments in the same trace, - // in 16 hexadecimal digits. - ID string `json:"id"` - - // Name - The logical name of the service that handled the request, up to 200 characters. - // For example, your application's name or domain name. Names can contain Unicode - // letters, numbers, and whitespace, and the following symbols: _, ., :, /, %, &, #, =, - // +, \, -, @ - Name string `json:"name,omitempty"` - - // StartTime - number that is the time the segment was created, in floating point seconds - // in epoch time.. For example, 1480615200.010 or 1.480615200010E9. Use as many decimal - // places as you need. Microsecond resolution is recommended when available. +type Segment struct { + // Required + TraceID string `json:"trace_id,omitempty"` + ID string `json:"id"` + Name string `json:"name"` StartTime float64 `json:"start_time"` + EndTime float64 `json:"end_time,omitempty"` + + // Optional + InProgress bool `json:"in_progress,omitempty"` + ParentID string `json:"parent_id,omitempty"` + Fault bool `json:"fault,omitempty"` + Error bool `json:"error,omitempty"` + Throttle bool `json:"throttle,omitempty"` + Cause *CauseData `json:"cause,omitempty"` + ResourceARN string `json:"resource_arn,omitempty"` + Origin string `json:"origin,omitempty"` + + Type string `json:"type,omitempty"` + Namespace string `json:"namespace,omitempty"` + User string `json:"user,omitempty"` + PrecursorIDs []string `json:"precursor_ids,omitempty"` + + HTTP *HTTPData `json:"http,omitempty"` + AWS map[string]interface{} `json:"aws,omitempty"` + + Service *ServiceData `json:"service,omitempty"` + + // SQL + SQL *SQLData `json:"sql,omitempty"` + + // Metadata + Annotations map[string]interface{} `json:"annotations,omitempty"` + Metadata map[string]map[string]interface{} `json:"metadata,omitempty"` +} - // TraceID - A unique identifier that connects all segments and subsegments originating - // from a single client request. - // * The version number, that is, 1. - // * The time of the original request, in Unix epoch time, in 8 hexadecimal digits. - // * For example, 10:00AM December 2nd, 2016 PST in epoch time is 1480615200 seconds, or 58406520 in hexadecimal. - // * A 96-bit identifier for the trace, globally unique, in 24 hexadecimal digits. - TraceID string `json:"trace_id,omitempty"` - - // EndTime - number that is the time the segment was closed. For example, 1480615200.090 - // or 1.480615200090E9. Specify either an end_time or in_progress. - EndTime float64 `json:"end_time"` - - /* ---------------------------------------------------- */ - - // Service - An object with information about your application. - //Service service `json:"service,omitempty"` - - // User - A string that identifies the user who sent the request. - //User string `json:"user,omitempty"` - - // Origin - The type of AWS resource running your application. - Origin string `json:"origin,omitempty"` - - // Namespace - aws for AWS SDK calls; remote for other downstream calls. - Namespace string `json:"namespace,omitempty"` - - // ParentID – A subsegment ID you specify if the request originated from an instrumented - // application. The X-Ray SDK adds the parent subsegment ID to the tracing header for - // downstream HTTP calls. - ParentID string `json:"parent_id,omitempty"` - - // Annotations - object with key-value pairs that you want X-Ray to index for search - Annotations map[string]interface{} `json:"annotations,omitempty"` - - // SubSegments contains the list of child segments - SubSegments []*segment `json:"subsegments,omitempty"` - - // Service - optional service definition - Service *service `json:"service,omitempty"` - - // Http - optional xray specific http settings - Http *HTTPData `json:"http,omitempty"` - - // Error - boolean indicating that a client error occurred - // (response status code was 4XX Client Error). - Error bool `json:"error,omitempty"` - - // Fault - boolean indicating that a server error occurred - // (response status code was 5XX Server Error). - Fault bool `json:"fault,omitempty"` - - // Cause - Cause *CauseData `json:"cause,omitempty"` +func MakeSegment(name string, span *tracepb.Span) Segment { + var ( + traceID = convertToAmazonTraceID(span.TraceId) + startTime = timestampToFloatSeconds(span.StartTime, span.StartTime) + endTime = timestampToFloatSeconds(span.EndTime, span.StartTime) + filtered, http = makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + isError, isFault, cause = makeCause(span.Status, filtered) + annotations = makeAnnotations(span.Resource.GetLabels()) + namespace string + ) - /* -- Used by SubSegments only ------------------------ */ + if name == "" { + name = fixSegmentName(span.Name.String()) + } + if span.ParentSpanId != nil { + namespace = "remote" + } - // Type indicates span is a subsegment; should either be subsegment or blank - Type string `json:"type,omitempty"` + return Segment{ + ID: convertToAmazonSpanID(span.SpanId), + TraceID: traceID, + Name: name, + StartTime: startTime, + EndTime: endTime, + ParentID: convertToAmazonSpanID(span.ParentSpanId), + Fault: isFault, + Error: isError, + Cause: cause, + Origin: determineAwsOrigin(span.Resource), + Namespace: namespace, + HTTP: http, + Service: makeService(span.Resource), + Annotations: annotations, + } } -type service struct { - // Version - A string that identifies the version of your application that served the request. - Version string `json:"version,omitempty"` +func determineAwsOrigin(resource *resourcepb.Resource) string { + origin := OriginEC2 + if resource == nil { + return origin + } + _, ok := resource.Labels[ContainerNameAttribute] + if ok { + origin = OriginECS + } + return origin } // convertToAmazonTraceID converts a trace ID to the Amazon format. @@ -255,7 +239,7 @@ func convertToAmazonTraceID(traceID []byte) string { } // convertToAmazonSpanID generates an Amazon spanID from a trace.SpanID - a 64-bit identifier -// for the segment, unique among segments in the same trace, in 16 hexadecimal digits. +// for the Segment, unique among segments in the same trace, in 16 hexadecimal digits. func convertToAmazonSpanID(v []byte) string { if reflect.DeepEqual(v, zeroSpanID) { return "" @@ -263,6 +247,20 @@ func convertToAmazonSpanID(v []byte) string { return hex.EncodeToString(v[0:8]) } +func timestampToFloatSeconds(ts *timestamp.Timestamp, startTs *timestamp.Timestamp) float64 { + var ( + t time.Time + ) + if ts == nil { + t = time.Now() + } else if startTs == nil { + t = time.Unix(ts.Seconds, int64(ts.Nanos)) + } else { + t = time.Unix(startTs.Seconds, int64(ts.Nanos)) + } + return float64(t.UnixNano()) / 1e9 +} + func mergeAnnotations(dest map[string]interface{}, src map[string]string) { for key, value := range src { key = fixAnnotationKey(key) @@ -311,42 +309,6 @@ func fixAnnotationKey(key string) string { return key } -func rawSegment(name string, span *tracepb.Span) segment { - var ( - traceID = convertToAmazonTraceID(span.TraceId) - startMicros = span.StartTime.Nanos / int32(time.Microsecond) - startTime = float64(startMicros) / 1e6 - endMicros = span.EndTime.Nanos / int32(time.Microsecond) - endTime = float64(endMicros) / 1e6 - filtered, http = makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) - isError, isFault, cause = makeCause(span.Status, filtered) - annotations = makeAnnotations(span.Resource.GetLabels()) - namespace string - ) - - if name == "" { - name = fixSegmentName(span.Name.String()) - } - if span.ParentSpanId != nil { - namespace = "remote" - } - - return segment{ - ID: convertToAmazonSpanID(span.SpanId), - TraceID: traceID, - Name: name, - StartTime: startTime, - EndTime: endTime, - Namespace: namespace, - ParentID: convertToAmazonSpanID(span.ParentSpanId), - Annotations: annotations, - Http: http, - Error: isError, - Fault: isFault, - Cause: cause, - } -} - type writer struct { buffer *bytes.Buffer encoder *json.Encoder diff --git a/exporter/awsxrayexporter/otel2xray/service.go b/exporter/awsxrayexporter/otel2xray/service.go new file mode 100644 index 000000000000..05bee162d31d --- /dev/null +++ b/exporter/awsxrayexporter/otel2xray/service.go @@ -0,0 +1,48 @@ +// 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 otel2xray + +import ( + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" +) + +// ServiceData provides the shape for unmarshalling service version. +type ServiceData struct { + Version string `json:"version,omitempty"` + CompilerVersion string `json:"compiler_version,omitempty"` + Compiler string `json:"compiler,omitempty"` +} + +func makeService(resource *resourcepb.Resource) *ServiceData { + var ( + ver string + service *ServiceData + ) + if resource == nil { + return service + } + for key, value := range resource.Labels { + switch key { + case ServiceVersionAttribute: + ver = value + } + } + if ver != "" { + service = &ServiceData{ + Version: ver, + } + } + return service +} diff --git a/exporter/awsxrayexporter/otel2xray/service_test.go b/exporter/awsxrayexporter/otel2xray/service_test.go new file mode 100644 index 000000000000..5142666275ee --- /dev/null +++ b/exporter/awsxrayexporter/otel2xray/service_test.go @@ -0,0 +1,48 @@ +// 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 otel2xray + +import ( + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + "github.com/stretchr/testify/assert" + "strings" + "testing" +) + +func TestServiceFromResource(t *testing.T) { + resource := &resourcepb.Resource{ + Type: "container", + Labels: constructResourceLabels(), + } + + service := makeService(resource) + + assert.NotNil(t, service) + w := borrow() + if err := w.Encode(service); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + release(w) + assert.True(t, strings.Contains(jsonStr, "1.1.12")) +} + +func TestServiceFromNullResource(t *testing.T) { + var resource *resourcepb.Resource + + service := makeService(resource) + + assert.Nil(t, service) +} diff --git a/exporter/awsxrayexporter/otel2xray/sql.go b/exporter/awsxrayexporter/otel2xray/sql.go new file mode 100644 index 000000000000..a3f1e6125a59 --- /dev/null +++ b/exporter/awsxrayexporter/otel2xray/sql.go @@ -0,0 +1,53 @@ +// 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 otel2xray + +const ( + DbTypeAttribute = "db.type" + DbInstanceAttribute = "db.instance" + DbStatementAttribute = "db.statement" + DbUserAttribute = "db.user" +) + +// SQLData provides the shape for unmarshalling sql data. +type SQLData struct { + ConnectionString string `json:"connection_string,omitempty"` + URL string `json:"url,omitempty"` // host:port/database + DatabaseType string `json:"database_type,omitempty"` + DatabaseVersion string `json:"database_version,omitempty"` + DriverVersion string `json:"driver_version,omitempty"` + User string `json:"user,omitempty"` + Preparation string `json:"preparation,omitempty"` // "statement" / "call" + SanitizedQuery string `json:"sanitized_query,omitempty"` +} + +func makeSql(attributes map[string]string) *SQLData { + var ( + sqlData SQLData + ) + componentType := attributes[ComponentAttribute] + url := attributes[PeerAddressAttribute] + if componentType == HttpComponentType || componentType == RpcComponentType || url == "" { + return nil + } + url += "/" + attributes[DbInstanceAttribute] + sqlData = SQLData{ + URL: url, + DatabaseType: attributes[DbTypeAttribute], + User: attributes[DbUserAttribute], + SanitizedQuery: attributes[DbStatementAttribute], + } + return &sqlData +} diff --git a/exporter/awsxrayexporter/otel2xray/sql_test.go b/exporter/awsxrayexporter/otel2xray/sql_test.go new file mode 100644 index 000000000000..4019a78f9f59 --- /dev/null +++ b/exporter/awsxrayexporter/otel2xray/sql_test.go @@ -0,0 +1,60 @@ +// 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 otel2xray + +import ( + "github.com/stretchr/testify/assert" + "strings" + "testing" +) + +func TestClientSpanWithStatementAttribute(t *testing.T) { + attributes := make(map[string]string) + attributes[ComponentAttribute] = DbComponentType + attributes[DbTypeAttribute] = "sql" + attributes[DbInstanceAttribute] = "customers" + attributes[DbStatementAttribute] = "SELECT * FROM user WHERE user_id = ?" + attributes[DbUserAttribute] = "readonly_user" + attributes[PeerAddressAttribute] = "mysql://db.example.com:3306" + attributes[PeerHostAttribute] = "db.example.com" + attributes[PeerPortAttribute] = "3306" + + sqlData := makeSql(attributes) + + assert.NotNil(t, sqlData) + w := borrow() + if err := w.Encode(sqlData); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + release(w) + assert.True(t, strings.Contains(jsonStr, "mysql://db.example.com:3306/customers")) +} + +func TestClientSpanWithHttpComponentAttribute(t *testing.T) { + attributes := make(map[string]string) + attributes[ComponentAttribute] = HttpComponentType + attributes[DbTypeAttribute] = "sql" + attributes[DbInstanceAttribute] = "customers" + attributes[DbStatementAttribute] = "SELECT * FROM user WHERE user_id = ?" + attributes[DbUserAttribute] = "readonly_user" + attributes[PeerAddressAttribute] = "mysql://db.example.com:3306" + attributes[PeerHostAttribute] = "db.example.com" + attributes[PeerPortAttribute] = "3306" + + sqlData := makeSql(attributes) + + assert.Nil(t, sqlData) +} From 5e226894dc484658edc8912067a0c43d236e1fda Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Sat, 16 Nov 2019 11:31:02 -0600 Subject: [PATCH 06/59] initial dev of xray data structures and converters --- .../awsxrayexporter/otel2xray/converter.go | 29 ---- .../{otel2xray => translator}/cause.go | 2 +- .../{otel2xray => translator}/cause_test.go | 4 +- .../{otel2xray => translator}/http.go | 22 ++- .../{otel2xray => translator}/http_test.go | 61 +------- .../{otel2xray => translator}/segment.go | 68 +++------ .../translator/segment_test.go | 135 ++++++++++++++++++ .../{otel2xray => translator}/service.go | 2 +- .../{otel2xray => translator}/service_test.go | 4 +- .../{otel2xray => translator}/sql.go | 2 +- .../{otel2xray => translator}/sql_test.go | 2 +- .../awsxrayexporter/translator/writer_pool.go | 69 +++++++++ 12 files changed, 250 insertions(+), 150 deletions(-) delete mode 100644 exporter/awsxrayexporter/otel2xray/converter.go rename exporter/awsxrayexporter/{otel2xray => translator}/cause.go (99%) rename exporter/awsxrayexporter/{otel2xray => translator}/cause_test.go (98%) rename exporter/awsxrayexporter/{otel2xray => translator}/http.go (94%) rename exporter/awsxrayexporter/{otel2xray => translator}/http_test.go (85%) rename exporter/awsxrayexporter/{otel2xray => translator}/segment.go (92%) create mode 100644 exporter/awsxrayexporter/translator/segment_test.go rename exporter/awsxrayexporter/{otel2xray => translator}/service.go (98%) rename exporter/awsxrayexporter/{otel2xray => translator}/service_test.go (95%) rename exporter/awsxrayexporter/{otel2xray => translator}/sql.go (98%) rename exporter/awsxrayexporter/{otel2xray => translator}/sql_test.go (99%) create mode 100644 exporter/awsxrayexporter/translator/writer_pool.go diff --git a/exporter/awsxrayexporter/otel2xray/converter.go b/exporter/awsxrayexporter/otel2xray/converter.go deleted file mode 100644 index cbc265d88356..000000000000 --- a/exporter/awsxrayexporter/otel2xray/converter.go +++ /dev/null @@ -1,29 +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 otel2xray - -import ( - "github.com/aws/aws-sdk-go/service/xray" - "github.com/open-telemetry/opentelemetry-collector/consumer/consumerdata" -) - -func ConvertTraceDataToXRay(td consumerdata.TraceData) *xray.PutTraceSegmentsInput { - documents := make([]*string, len(td.Spans)) - //for i, span := range td.Spans { - // seg := Segment{} - //} - input := xray.PutTraceSegmentsInput{TraceSegmentDocuments: documents} - return &input -} diff --git a/exporter/awsxrayexporter/otel2xray/cause.go b/exporter/awsxrayexporter/translator/cause.go similarity index 99% rename from exporter/awsxrayexporter/otel2xray/cause.go rename to exporter/awsxrayexporter/translator/cause.go index ae528254a90c..38ab01c991f2 100644 --- a/exporter/awsxrayexporter/otel2xray/cause.go +++ b/exporter/awsxrayexporter/translator/cause.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package otel2xray +package translator import ( "encoding/hex" diff --git a/exporter/awsxrayexporter/otel2xray/cause_test.go b/exporter/awsxrayexporter/translator/cause_test.go similarity index 98% rename from exporter/awsxrayexporter/otel2xray/cause_test.go rename to exporter/awsxrayexporter/translator/cause_test.go index 8a2cf093a47a..3dafde55c5cb 100644 --- a/exporter/awsxrayexporter/otel2xray/cause_test.go +++ b/exporter/awsxrayexporter/translator/cause_test.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package otel2xray +package translator import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" @@ -118,7 +118,7 @@ func constructExceptionServerSpan(attributes map[string]interface{}) *tracepb.Sp }, Resource: &resourcepb.Resource{ Type: "container", - Labels: constructResourceLabels(), + Labels: constructDefaultResourceLabels(), }, } } diff --git a/exporter/awsxrayexporter/otel2xray/http.go b/exporter/awsxrayexporter/translator/http.go similarity index 94% rename from exporter/awsxrayexporter/otel2xray/http.go rename to exporter/awsxrayexporter/translator/http.go index 488e12be2d2b..277d96ee73be 100644 --- a/exporter/awsxrayexporter/otel2xray/http.go +++ b/exporter/awsxrayexporter/translator/http.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package otel2xray +package translator import ( tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" @@ -165,9 +165,9 @@ func makeHttp(spanKind tracepb.Span_SpanKind, code int32, attributes map[string] } if tracepb.Span_SERVER == spanKind { - info.Request.URL = constructServerUrl(urlParts) + info.Request.URL = constructServerUrl(componentValue, urlParts) } else { - info.Request.URL = constructClientUrl(urlParts) + info.Request.URL = constructClientUrl(componentValue, urlParts) } if info.Response.Status == 0 { @@ -177,7 +177,7 @@ func makeHttp(spanKind tracepb.Span_SpanKind, code int32, attributes map[string] return filtered, &info } -func constructClientUrl(urlParts map[string]string) string { +func constructClientUrl(component string, urlParts map[string]string) string { // follows OpenTelemetry specification-defined combinations for client spans described in // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/data-http.md url, ok := urlParts[URLAttribute] @@ -188,7 +188,11 @@ func constructClientUrl(urlParts map[string]string) string { scheme, ok := urlParts[SchemeAttribute] if !ok { - scheme = "http" + if component == RpcComponentType { + scheme = "dns" + } else { + scheme = "http" + } } port := "" host, ok := urlParts[HostAttribute] @@ -218,7 +222,7 @@ func constructClientUrl(urlParts map[string]string) string { return url } -func constructServerUrl(urlParts map[string]string) string { +func constructServerUrl(component string, urlParts map[string]string) string { // follows OpenTelemetry specification-defined combinations for server spans described in // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/data-http.md url, ok := urlParts[URLAttribute] @@ -229,7 +233,11 @@ func constructServerUrl(urlParts map[string]string) string { scheme, ok := urlParts[SchemeAttribute] if !ok { - scheme = "http" + if component == RpcComponentType { + scheme = "dns" + } else { + scheme = "http" + } } port := "" host, ok := urlParts[HostAttribute] diff --git a/exporter/awsxrayexporter/otel2xray/http_test.go b/exporter/awsxrayexporter/translator/http_test.go similarity index 85% rename from exporter/awsxrayexporter/otel2xray/http_test.go rename to exporter/awsxrayexporter/translator/http_test.go index 2dcad4b1d4de..09b719adcb38 100644 --- a/exporter/awsxrayexporter/otel2xray/http_test.go +++ b/exporter/awsxrayexporter/translator/http_test.go @@ -12,16 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -package otel2xray +package translator import ( - "fmt" resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" - "github.com/golang/protobuf/ptypes/timestamp" "github.com/golang/protobuf/ptypes/wrappers" "github.com/stretchr/testify/assert" - "reflect" "strings" "testing" "time" @@ -291,7 +288,7 @@ func constructHttpClientSpan(attributes map[string]interface{}) *tracepb.Span { }, Resource: &resourcepb.Resource{ Type: "container", - Labels: constructResourceLabels(), + Labels: constructDefaultResourceLabels(), }, } } @@ -325,59 +322,7 @@ func constructHttpServerSpan(attributes map[string]interface{}) *tracepb.Span { }, Resource: &resourcepb.Resource{ Type: "container", - Labels: constructResourceLabels(), + Labels: constructDefaultResourceLabels(), }, } } - -func constructSpanAttributes(attributes map[string]interface{}) map[string]*tracepb.AttributeValue { - attrs := make(map[string]*tracepb.AttributeValue) - for key, value := range attributes { - valType := reflect.TypeOf(value) - var attrVal tracepb.AttributeValue - if valType.Kind() == reflect.Int { - attrVal = tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ - IntValue: int64(value.(int)), - }} - } else if valType.Kind() == reflect.Int64 { - attrVal = tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ - IntValue: value.(int64), - }} - } else { - attrVal = tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ - StringValue: &tracepb.TruncatableString{Value: fmt.Sprintf("%v", value)}, - }} - } - attrs[key] = &attrVal - } - return attrs -} - -func constructResourceLabels() map[string]string { - labels := make(map[string]string) - labels[ServiceNameAttribute] = "signup_aggregator" - labels[ServiceVersionAttribute] = "1.1.12" - labels[ContainerNameAttribute] = "signup_aggregator" - labels[ContainerImageAttribute] = "otel/signupaggregator" - labels[ContainerTagAttribute] = "v1" - labels[K8sClusterAttribute] = "production" - labels[K8sNamespaceAttribute] = "default" - labels[K8sDeploymentAttribute] = "signup_aggregator" - labels[K8sPodAttribute] = "signup_aggregator-x82ufje83" - labels[CloudProviderAttribute] = "aws" - labels[CloudAccountAttribute] = "123456789" - labels[CloudRegionAttribute] = "us-east-1" - labels[CloudZoneAttribute] = "us-east-1c" - return labels -} - -func convertTimeToTimestamp(t time.Time) *timestamp.Timestamp { - if t.IsZero() { - return nil - } - nanoTime := t.UnixNano() - return ×tamp.Timestamp{ - Seconds: nanoTime / 1e9, - Nanos: int32(nanoTime % 1e9), - } -} diff --git a/exporter/awsxrayexporter/otel2xray/segment.go b/exporter/awsxrayexporter/translator/segment.go similarity index 92% rename from exporter/awsxrayexporter/otel2xray/segment.go rename to exporter/awsxrayexporter/translator/segment.go index ca66742d20ef..5132f7935d40 100644 --- a/exporter/awsxrayexporter/otel2xray/segment.go +++ b/exporter/awsxrayexporter/translator/segment.go @@ -12,13 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -package otel2xray +package translator import ( - "bytes" "encoding/binary" "encoding/hex" - "encoding/json" resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" "github.com/golang/protobuf/ptypes/timestamp" @@ -148,6 +146,8 @@ func MakeSegment(name string, span *tracepb.Span) Segment { endTime = timestampToFloatSeconds(span.EndTime, span.StartTime) filtered, http = makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) isError, isFault, cause = makeCause(span.Status, filtered) + origin = determineAwsOrigin(span.Resource) + service = makeService(span.Resource) annotations = makeAnnotations(span.Resource.GetLabels()) namespace string ) @@ -169,10 +169,10 @@ func MakeSegment(name string, span *tracepb.Span) Segment { Fault: isFault, Error: isError, Cause: cause, - Origin: determineAwsOrigin(span.Resource), + Origin: origin, Namespace: namespace, HTTP: http, - Service: makeService(span.Resource), + Service: service, Annotations: annotations, } } @@ -241,7 +241,7 @@ func convertToAmazonTraceID(traceID []byte) string { // convertToAmazonSpanID generates an Amazon spanID from a trace.SpanID - a 64-bit identifier // for the Segment, unique among segments in the same trace, in 16 hexadecimal digits. func convertToAmazonSpanID(v []byte) string { - if reflect.DeepEqual(v, zeroSpanID) { + if v == nil || reflect.DeepEqual(v, zeroSpanID) { return "" } return hex.EncodeToString(v[0:8]) @@ -309,50 +309,22 @@ func fixAnnotationKey(key string) string { return key } -type writer struct { - buffer *bytes.Buffer - encoder *json.Encoder -} - -func (w *writer) Reset() { - w.buffer.Reset() -} - -func (w *writer) Encode(v interface{}) error { - return w.encoder.Encode(v) -} - -func (w *writer) String() string { - return w.buffer.String() -} - -const ( - maxBufSize = 256e3 -) - -var ( - writers = &sync.Pool{ - New: func() interface{} { - var ( - buffer = bytes.NewBuffer(make([]byte, 0, 8192)) - encoder = json.NewEncoder(buffer) - ) - - return &writer{ - buffer: buffer, - encoder: encoder, - } - }, +func newTraceID() []byte { + var r [16]byte + epoch := time.Now().Unix() + binary.BigEndian.PutUint32(r[0:4], uint32(epoch)) + _, err := rand.Read(r[4:]) + if err != nil { + panic(err) } -) - -func borrow() *writer { - return writers.Get().(*writer) + return r[:] } -func release(w *writer) { - if w.buffer.Cap() < maxBufSize { - w.buffer.Reset() - writers.Put(w) +func newSegmentID() []byte { + var r [8]byte + _, err := rand.Read(r[:]) + if err != nil { + panic(err) } + return r[:] } diff --git a/exporter/awsxrayexporter/translator/segment_test.go b/exporter/awsxrayexporter/translator/segment_test.go new file mode 100644 index 000000000000..01b276458bd1 --- /dev/null +++ b/exporter/awsxrayexporter/translator/segment_test.go @@ -0,0 +1,135 @@ +// 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 translator + +import ( + "fmt" + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + "github.com/golang/protobuf/ptypes/timestamp" + "github.com/stretchr/testify/assert" + "reflect" + "strings" + "testing" + "time" +) + +func TestClientSpanWithRpcComponent(t *testing.T) { + spanName := "/widgets" + attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = RpcComponentType + attributes[MethodAttribute] = "GET" + attributes[SchemeAttribute] = "ipv6" + attributes[PeerIpv6Attribute] = "2607:f8b0:4000:80c::2004" + attributes[PeerPortAttribute] = "9443" + attributes[TargetAttribute] = spanName + labels := constructDefaultResourceLabels() + span := constructClientSpan(nil, spanName, 0, "OK", attributes, labels) + + segment := MakeSegment(spanName, span) + + assert.NotNil(t, segment) + assert.Equal(t, spanName, segment.Name) + w := borrow() + if err := w.Encode(segment); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + release(w) + assert.True(t, strings.Contains(jsonStr, spanName)) +} + +func constructClientSpan(parentSpanId []byte, name string, code int32, message string, attributes map[string]interface{}, rscLabels map[string]string) *tracepb.Span { + var ( + traceId = newTraceID() + spanId = newSegmentID() + endTime = time.Now() + startTime = endTime.Add(-215 * time.Millisecond) + spanAttributes = constructSpanAttributes(attributes) + ) + + return &tracepb.Span{ + TraceId: traceId, + SpanId: spanId, + ParentSpanId: parentSpanId, + Name: &tracepb.TruncatableString{Value: name}, + Kind: tracepb.Span_CLIENT, + StartTime: convertTimeToTimestamp(startTime), + EndTime: convertTimeToTimestamp(endTime), + Status: &tracepb.Status{ + Code: code, + Message: message, + }, + Attributes: &tracepb.Span_Attributes{ + AttributeMap: spanAttributes, + }, + Resource: &resourcepb.Resource{ + Type: "container", + Labels: rscLabels, + }, + } +} + +func constructSpanAttributes(attributes map[string]interface{}) map[string]*tracepb.AttributeValue { + attrs := make(map[string]*tracepb.AttributeValue) + for key, value := range attributes { + valType := reflect.TypeOf(value) + var attrVal tracepb.AttributeValue + if valType.Kind() == reflect.Int { + attrVal = tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: int64(value.(int)), + }} + } else if valType.Kind() == reflect.Int64 { + attrVal = tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: value.(int64), + }} + } else { + attrVal = tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ + StringValue: &tracepb.TruncatableString{Value: fmt.Sprintf("%v", value)}, + }} + } + attrs[key] = &attrVal + } + return attrs +} + +func constructDefaultResourceLabels() map[string]string { + labels := make(map[string]string) + labels[ServiceNameAttribute] = "signup_aggregator" + labels[ServiceVersionAttribute] = "1.1.12" + labels[ContainerNameAttribute] = "signup_aggregator" + labels[ContainerImageAttribute] = "otel/signupaggregator" + labels[ContainerTagAttribute] = "v1" + labels[K8sClusterAttribute] = "production" + labels[K8sNamespaceAttribute] = "default" + labels[K8sDeploymentAttribute] = "signup_aggregator" + labels[K8sPodAttribute] = "signup_aggregator-x82ufje83" + labels[CloudProviderAttribute] = "aws" + labels[CloudAccountAttribute] = "123456789" + labels[CloudRegionAttribute] = "us-east-1" + labels[CloudZoneAttribute] = "us-east-1c" + return labels +} + +func convertTimeToTimestamp(t time.Time) *timestamp.Timestamp { + if t.IsZero() { + return nil + } + nanoTime := t.UnixNano() + return ×tamp.Timestamp{ + Seconds: nanoTime / 1e9, + Nanos: int32(nanoTime % 1e9), + } +} diff --git a/exporter/awsxrayexporter/otel2xray/service.go b/exporter/awsxrayexporter/translator/service.go similarity index 98% rename from exporter/awsxrayexporter/otel2xray/service.go rename to exporter/awsxrayexporter/translator/service.go index 05bee162d31d..863d5cdb50f0 100644 --- a/exporter/awsxrayexporter/otel2xray/service.go +++ b/exporter/awsxrayexporter/translator/service.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package otel2xray +package translator import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" diff --git a/exporter/awsxrayexporter/otel2xray/service_test.go b/exporter/awsxrayexporter/translator/service_test.go similarity index 95% rename from exporter/awsxrayexporter/otel2xray/service_test.go rename to exporter/awsxrayexporter/translator/service_test.go index 5142666275ee..4ec6895beada 100644 --- a/exporter/awsxrayexporter/otel2xray/service_test.go +++ b/exporter/awsxrayexporter/translator/service_test.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package otel2xray +package translator import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" @@ -24,7 +24,7 @@ import ( func TestServiceFromResource(t *testing.T) { resource := &resourcepb.Resource{ Type: "container", - Labels: constructResourceLabels(), + Labels: constructDefaultResourceLabels(), } service := makeService(resource) diff --git a/exporter/awsxrayexporter/otel2xray/sql.go b/exporter/awsxrayexporter/translator/sql.go similarity index 98% rename from exporter/awsxrayexporter/otel2xray/sql.go rename to exporter/awsxrayexporter/translator/sql.go index a3f1e6125a59..430382550a0a 100644 --- a/exporter/awsxrayexporter/otel2xray/sql.go +++ b/exporter/awsxrayexporter/translator/sql.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package otel2xray +package translator const ( DbTypeAttribute = "db.type" diff --git a/exporter/awsxrayexporter/otel2xray/sql_test.go b/exporter/awsxrayexporter/translator/sql_test.go similarity index 99% rename from exporter/awsxrayexporter/otel2xray/sql_test.go rename to exporter/awsxrayexporter/translator/sql_test.go index 4019a78f9f59..e912ce80f2e7 100644 --- a/exporter/awsxrayexporter/otel2xray/sql_test.go +++ b/exporter/awsxrayexporter/translator/sql_test.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package otel2xray +package translator import ( "github.com/stretchr/testify/assert" diff --git a/exporter/awsxrayexporter/translator/writer_pool.go b/exporter/awsxrayexporter/translator/writer_pool.go new file mode 100644 index 000000000000..d57e2c510c06 --- /dev/null +++ b/exporter/awsxrayexporter/translator/writer_pool.go @@ -0,0 +1,69 @@ +// 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 translator + +import ( + "bytes" + "encoding/json" + "sync" +) + +type writer struct { + buffer *bytes.Buffer + encoder *json.Encoder +} + +func (w *writer) Reset() { + w.buffer.Reset() +} + +func (w *writer) Encode(v interface{}) error { + return w.encoder.Encode(v) +} + +func (w *writer) String() string { + return w.buffer.String() +} + +const ( + maxBufSize = 256e3 +) + +var ( + writers = &sync.Pool{ + New: func() interface{} { + var ( + buffer = bytes.NewBuffer(make([]byte, 0, 8192)) + encoder = json.NewEncoder(buffer) + ) + + return &writer{ + buffer: buffer, + encoder: encoder, + } + }, + } +) + +func borrow() *writer { + return writers.Get().(*writer) +} + +func release(w *writer) { + if w.buffer.Cap() < maxBufSize { + w.buffer.Reset() + writers.Put(w) + } +} From 2dc3c2cc27d778788954038cddbde55c827e069a Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Mon, 18 Nov 2019 17:48:11 -0600 Subject: [PATCH 07/59] initial dev of xray data structures and converters --- exporter/awsxrayexporter/translator/aws.go | 131 ++++++++++++++++++ .../awsxrayexporter/translator/aws_test.go | 115 +++++++++++++++ exporter/awsxrayexporter/translator/cause.go | 6 +- .../awsxrayexporter/translator/cause_test.go | 6 +- exporter/awsxrayexporter/translator/http.go | 71 +++++++--- .../awsxrayexporter/translator/http_test.go | 55 ++++++-- .../awsxrayexporter/translator/segment.go | 20 ++- .../translator/segment_test.go | 7 +- exporter/awsxrayexporter/translator/sql.go | 44 ++++-- .../awsxrayexporter/translator/sql_test.go | 6 +- 10 files changed, 398 insertions(+), 63 deletions(-) create mode 100644 exporter/awsxrayexporter/translator/aws.go create mode 100644 exporter/awsxrayexporter/translator/aws_test.go diff --git a/exporter/awsxrayexporter/translator/aws.go b/exporter/awsxrayexporter/translator/aws.go new file mode 100644 index 000000000000..e09e937f814f --- /dev/null +++ b/exporter/awsxrayexporter/translator/aws.go @@ -0,0 +1,131 @@ +// 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 translator + +import ( + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + "strconv" +) + +// AWSData provides the shape for unmarshalling AWS resource data. +type AWSData struct { + AccountID string `json:"account_id,omitempty"` + BeanstalkMetadata *BeanstalkMetadata `json:"elastic_beanstalk,omitempty"` + ECSMetadata *ECSMetadata `json:"ecs,omitempty"` + EC2Metadata *EC2Metadata `json:"ec2,omitempty"` +} + +// EC2Metadata provides the shape for unmarshalling EC2 metadata. +type EC2Metadata struct { + InstanceID string `json:"instance_id"` + AvailabilityZone string `json:"availability_zone"` +} + +// ECSMetadata provides the shape for unmarshalling ECS metadata. +type ECSMetadata struct { + ContainerName string `json:"container"` +} + +// BeanstalkMetadata provides the shape for unmarshalling Elastic Beanstalk environment metadata. +type BeanstalkMetadata struct { + Environment string `json:"environment_name"` + VersionLabel string `json:"version_label"` + DeploymentID int64 `json:"deployment_id"` +} + +func makeAws(resource *resourcepb.Resource) *AWSData { + var ( + cloud string + account string + zone string + hostId string + container string + namespace string + deployId string + ver string + origin string + ec2 *EC2Metadata + ecs *ECSMetadata + ebs *BeanstalkMetadata + awsData *AWSData + ) + if resource == nil { + return awsData + } + for key, value := range resource.Labels { + switch key { + case CloudProviderAttribute: + cloud = value + case CloudAccountAttribute: + account = value + case CloudZoneAttribute: + zone = value + case HostIdAttribute: + hostId = value + case ContainerNameAttribute: + if container == "" { + container = value + } + case K8sPodAttribute: + container = value + case ServiceNamespaceAttribute: + namespace = value + case ServiceInstanceAttribute: + deployId = value + case ServiceVersionAttribute: + ver = value + } + } + if cloud != "aws" && cloud != "" { + return awsData // not AWS so return nil + } + // progress from least specific to most specific origin so most specific ends up as origin + // as per X-Ray docs + if hostId != "" { + origin = OriginEC2 + ec2 = &EC2Metadata{ + InstanceID: hostId, + AvailabilityZone: zone, + } + } + if container != "" { + origin = OriginECS + ecs = &ECSMetadata{ + ContainerName: container, + } + } + if deployId != "" { + origin = OriginEB + deployNum, err := strconv.ParseInt(deployId, 10, 64) + if err != nil { + deployNum = 0 + } + ebs = &BeanstalkMetadata{ + Environment: namespace, + VersionLabel: ver, + DeploymentID: deployNum, + } + } + if origin == "" { + return awsData + } + awsData = &AWSData{ + AccountID: account, + BeanstalkMetadata: ebs, + ECSMetadata: ecs, + EC2Metadata: ec2, + } + return awsData +} diff --git a/exporter/awsxrayexporter/translator/aws_test.go b/exporter/awsxrayexporter/translator/aws_test.go new file mode 100644 index 000000000000..4391300bc22c --- /dev/null +++ b/exporter/awsxrayexporter/translator/aws_test.go @@ -0,0 +1,115 @@ +// 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 translator + +import ( + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + "github.com/stretchr/testify/assert" + "strings" + "testing" +) + +func TestAwsFromEc2Resource(t *testing.T) { + instanceId := "i-00f7c0bcb26da2a99" + labels := make(map[string]string) + labels[CloudProviderAttribute] = "aws" + labels[CloudAccountAttribute] = "123456789" + labels[CloudZoneAttribute] = "us-east-1c" + labels[HostIdAttribute] = instanceId + labels[HostTypeAttribute] = "m5.xlarge" + resource := &resourcepb.Resource{ + Type: "vm", + Labels: labels, + } + + awsData := makeAws(resource) + + assert.NotNil(t, awsData) + assert.NotNil(t, awsData.EC2Metadata) + assert.Nil(t, awsData.ECSMetadata) + assert.Nil(t, awsData.BeanstalkMetadata) + w := borrow() + if err := w.Encode(awsData); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + release(w) + assert.True(t, strings.Contains(jsonStr, instanceId)) +} + +func TestAwsFromEcsResource(t *testing.T) { + instanceId := "i-00f7c0bcb26da2a99" + containerId := "signup_aggregator-x82ufje83" + labels := make(map[string]string) + labels[CloudProviderAttribute] = "aws" + labels[CloudAccountAttribute] = "123456789" + labels[CloudZoneAttribute] = "us-east-1c" + labels[ContainerNameAttribute] = "signup_aggregator" + labels[ContainerImageAttribute] = "otel/signupaggregator" + labels[ContainerTagAttribute] = "v1" + labels[K8sClusterAttribute] = "production" + labels[K8sNamespaceAttribute] = "default" + labels[K8sDeploymentAttribute] = "signup_aggregator" + labels[K8sPodAttribute] = containerId + labels[HostIdAttribute] = instanceId + labels[HostTypeAttribute] = "m5.xlarge" + resource := &resourcepb.Resource{ + Type: "container", + Labels: labels, + } + + awsData := makeAws(resource) + + assert.NotNil(t, awsData) + assert.NotNil(t, awsData.EC2Metadata) + assert.NotNil(t, awsData.ECSMetadata) + assert.Nil(t, awsData.BeanstalkMetadata) + w := borrow() + if err := w.Encode(awsData); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + release(w) + assert.True(t, strings.Contains(jsonStr, containerId)) +} + +func TestAwsFromBeanstalkResource(t *testing.T) { + deployId := "232" + labels := make(map[string]string) + labels[CloudProviderAttribute] = "aws" + labels[CloudAccountAttribute] = "123456789" + labels[CloudZoneAttribute] = "us-east-1c" + labels[ServiceVersionAttribute] = "2.1.4" + labels[ServiceNamespaceAttribute] = "production" + labels[ServiceInstanceAttribute] = deployId + resource := &resourcepb.Resource{ + Type: "vm", + Labels: labels, + } + + awsData := makeAws(resource) + + assert.NotNil(t, awsData) + assert.Nil(t, awsData.EC2Metadata) + assert.Nil(t, awsData.ECSMetadata) + assert.NotNil(t, awsData.BeanstalkMetadata) + w := borrow() + if err := w.Encode(awsData); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + release(w) + assert.True(t, strings.Contains(jsonStr, deployId)) +} diff --git a/exporter/awsxrayexporter/translator/cause.go b/exporter/awsxrayexporter/translator/cause.go index 38ab01c991f2..3cefcc092320 100644 --- a/exporter/awsxrayexporter/translator/cause.go +++ b/exporter/awsxrayexporter/translator/cause.go @@ -68,11 +68,7 @@ func makeCause(status *tracepb.Status, attributes map[string]string) (isError, i } if message != "" { - id := make([]byte, 8) - mutex.Lock() - r.Read(id) // rand.Read always returns nil - mutex.Unlock() - + id := newSegmentID() hexID := hex.EncodeToString(id) cause = &CauseData{ diff --git a/exporter/awsxrayexporter/translator/cause_test.go b/exporter/awsxrayexporter/translator/cause_test.go index 3dafde55c5cb..60eb22bab169 100644 --- a/exporter/awsxrayexporter/translator/cause_test.go +++ b/exporter/awsxrayexporter/translator/cause_test.go @@ -31,7 +31,7 @@ func TestCauseWithStatusMessage(t *testing.T) { attributes[StatusCodeAttribute] = 500 span := constructExceptionServerSpan(attributes) span.Status.Message = errorMsg - filtered, _ := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, _ := makeHttp(span) isError, isFault, cause := makeCause(span.Status, filtered) @@ -55,7 +55,7 @@ func TestCauseWithHttpStatusMessage(t *testing.T) { attributes[StatusCodeAttribute] = 500 attributes[StatusTextAttribute] = errorMsg span := constructExceptionServerSpan(attributes) - filtered, _ := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, _ := makeHttp(span) isError, isFault, cause := makeCause(span.Status, filtered) @@ -80,7 +80,7 @@ func TestCauseWithErrorMessage(t *testing.T) { attributes[ErrorMessageAttribute] = errorMsg attributes[ErrorStackAttribute] = "org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749)" span := constructExceptionServerSpan(attributes) - filtered, _ := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, _ := makeHttp(span) isError, isFault, cause := makeCause(span.Status, filtered) diff --git a/exporter/awsxrayexporter/translator/http.go b/exporter/awsxrayexporter/translator/http.go index 277d96ee73be..928e8417585b 100644 --- a/exporter/awsxrayexporter/translator/http.go +++ b/exporter/awsxrayexporter/translator/http.go @@ -24,20 +24,23 @@ import ( const ( // Attributes recorded on the span for the requests. // Only trace exporters will need them. - MethodAttribute = "http.method" - URLAttribute = "http.url" - TargetAttribute = "http.target" - HostAttribute = "http.host" - SchemeAttribute = "http.scheme" - StatusCodeAttribute = "http.status_code" - StatusTextAttribute = "http.status_text" - FlavorAttribute = "http.flavor" - ServerNameAttribute = "http.server_name" - PortAttribute = "http.port" - RouteAttribute = "http.route" - ClientIpAttribute = "http.client_ip" - UserAgentAttribute = "http.user_agent" - ContentLenAttribute = "http.resp.content_length" + MethodAttribute = "http.method" + URLAttribute = "http.url" + TargetAttribute = "http.target" + HostAttribute = "http.host" + SchemeAttribute = "http.scheme" + StatusCodeAttribute = "http.status_code" + StatusTextAttribute = "http.status_text" + FlavorAttribute = "http.flavor" + ServerNameAttribute = "http.server_name" + PortAttribute = "http.port" + RouteAttribute = "http.route" + ClientIpAttribute = "http.client_ip" + UserAgentAttribute = "http.user_agent" + MessageTypeAttribute = "message.type" + MessageIdAttribute = "message.id" + MessageCompressedSizeAttribute = "message.compressed_size" + MessageUncompressedSizeAttribute = "message.uncompressed_size" ) // HTTPData provides the shape for unmarshalling request and response data. @@ -103,7 +106,7 @@ func convertToStatusCode(code int32) int64 { } } -func makeHttp(spanKind tracepb.Span_SpanKind, code int32, attributes map[string]*tracepb.AttributeValue) (map[string]string, *HTTPData) { +func makeHttp(span *tracepb.Span) (map[string]string, *HTTPData) { var ( info HTTPData filtered = make(map[string]string) @@ -111,7 +114,7 @@ func makeHttp(spanKind tracepb.Span_SpanKind, code int32, attributes map[string] componentValue string ) - for key, value := range attributes { + for key, value := range span.Attributes.AttributeMap { switch key { case ComponentAttribute: componentValue = value.GetStringValue().GetValue() @@ -153,30 +156,52 @@ func makeHttp(spanKind tracepb.Span_SpanKind, code int32, attributes map[string] urlParts[key] = value.GetStringValue().GetValue() case PeerIpv6Attribute: urlParts[key] = value.GetStringValue().GetValue() - case ContentLenAttribute: - info.Response.ContentLength = value.GetIntValue() default: filtered[key] = value.GetStringValue().GetValue() } } - if (componentValue != HttpComponentType && componentValue != RpcComponentType) || info.Request.Method == "" { + if (componentValue != HttpComponentType && componentValue != GrpcComponentType) || info.Request.Method == "" { return filtered, nil } - if tracepb.Span_SERVER == spanKind { + if tracepb.Span_SERVER == span.Kind { info.Request.URL = constructServerUrl(componentValue, urlParts) } else { info.Request.URL = constructClientUrl(componentValue, urlParts) } if info.Response.Status == 0 { - info.Response.Status = convertToStatusCode(code) + info.Response.Status = convertToStatusCode(span.Status.Code) } + info.Response.ContentLength = extractResponseSizeFromEvents(span) + return filtered, &info } +func extractResponseSizeFromEvents(span *tracepb.Span) int64 { + var size int64 + if span.TimeEvents != nil { + for _, te := range span.TimeEvents.TimeEvent { + anno := te.GetAnnotation() + if anno != nil { + attrMap := anno.Attributes.AttributeMap + typeVal := attrMap[MessageTypeAttribute] + if typeVal != nil { + if typeVal.GetStringValue().GetValue() == "RECEIVED" { + sizeVal := attrMap[MessageUncompressedSizeAttribute] + if sizeVal != nil { + size = sizeVal.GetIntValue() + } + } + } + } + } + } + return size +} + func constructClientUrl(component string, urlParts map[string]string) string { // follows OpenTelemetry specification-defined combinations for client spans described in // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/data-http.md @@ -188,7 +213,7 @@ func constructClientUrl(component string, urlParts map[string]string) string { scheme, ok := urlParts[SchemeAttribute] if !ok { - if component == RpcComponentType { + if component == GrpcComponentType { scheme = "dns" } else { scheme = "http" @@ -233,7 +258,7 @@ func constructServerUrl(component string, urlParts map[string]string) string { scheme, ok := urlParts[SchemeAttribute] if !ok { - if component == RpcComponentType { + if component == GrpcComponentType { scheme = "dns" } else { scheme = "http" diff --git a/exporter/awsxrayexporter/translator/http_test.go b/exporter/awsxrayexporter/translator/http_test.go index 09b719adcb38..b89d80865142 100644 --- a/exporter/awsxrayexporter/translator/http_test.go +++ b/exporter/awsxrayexporter/translator/http_test.go @@ -17,6 +17,7 @@ package translator import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + "github.com/golang/protobuf/ptypes/timestamp" "github.com/golang/protobuf/ptypes/wrappers" "github.com/stretchr/testify/assert" "strings" @@ -32,7 +33,7 @@ func TestClientSpanWithUrlAttribute(t *testing.T) { attributes[StatusCodeAttribute] = 200 span := constructHttpClientSpan(attributes) - filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -56,7 +57,7 @@ func TestClientSpanWithSchemeHostTargetAttributes(t *testing.T) { attributes["user.id"] = "junit" span := constructHttpClientSpan(attributes) - filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -81,7 +82,7 @@ func TestClientSpanWithPeerAttributes(t *testing.T) { attributes[StatusCodeAttribute] = 200 span := constructHttpClientSpan(attributes) - filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -104,7 +105,7 @@ func TestClientSpanWithPeerIp4Attributes(t *testing.T) { attributes[TargetAttribute] = "/users/junit" span := constructHttpClientSpan(attributes) - filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() @@ -126,7 +127,7 @@ func TestClientSpanWithPeerIp6Attributes(t *testing.T) { attributes[TargetAttribute] = "/users/junit" span := constructHttpClientSpan(attributes) - filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() @@ -148,7 +149,7 @@ func TestServerSpanWithUrlAttribute(t *testing.T) { attributes[StatusCodeAttribute] = 200 span := constructHttpServerSpan(attributes) - filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -173,7 +174,7 @@ func TestServerSpanWithSchemeHostTargetAttributes(t *testing.T) { attributes[StatusCodeAttribute] = 200 span := constructHttpServerSpan(attributes) - filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -199,7 +200,7 @@ func TestServerSpanWithSchemeServernamePortTargetAttributes(t *testing.T) { attributes[StatusCodeAttribute] = 200 span := constructHttpServerSpan(attributes) - filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -223,10 +224,11 @@ func TestServerSpanWithSchemeNamePortTargetAttributes(t *testing.T) { attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" attributes[ClientIpAttribute] = "192.168.15.32" attributes[StatusCodeAttribute] = 200 - attributes[ContentLenAttribute] = 21378 span := constructHttpServerSpan(attributes) + timeEvents := constructTimedEventsWithReceivedMessageEvent(span.EndTime) + span.TimeEvents = &timeEvents - filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -246,7 +248,7 @@ func TestHttpStatusFromSpanStatus(t *testing.T) { attributes[URLAttribute] = "https://api.example.com/users/junit" span := constructHttpClientSpan(attributes) - filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -326,3 +328,34 @@ func constructHttpServerSpan(attributes map[string]interface{}) *tracepb.Span { }, } } + +func constructTimedEventsWithReceivedMessageEvent(tm *timestamp.Timestamp) tracepb.Span_TimeEvents { + eventAttrMap := make(map[string]*tracepb.AttributeValue) + eventAttrMap[MessageTypeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ + StringValue: &tracepb.TruncatableString{Value: "RECEIVED"}, + }} + eventAttrMap[MessageUncompressedSizeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: 12452, + }} + eventAttrbutes := tracepb.Span_Attributes{ + AttributeMap: eventAttrMap, + DroppedAttributesCount: 0, + } + annotation := tracepb.Span_TimeEvent_Annotation{ + Attributes: &eventAttrbutes, + } + event := tracepb.Span_TimeEvent{ + Time: tm, + Value: &tracepb.Span_TimeEvent_Annotation_{ + Annotation: &annotation, + }, + } + events := make([]*tracepb.Span_TimeEvent, 1, 1) + events[0] = &event + timeEvents := tracepb.Span_TimeEvents{ + TimeEvent: events, + DroppedAnnotationsCount: 0, + DroppedMessageEventsCount: 0, + } + return timeEvents +} diff --git a/exporter/awsxrayexporter/translator/segment.go b/exporter/awsxrayexporter/translator/segment.go index 5132f7935d40..73123898a9d8 100644 --- a/exporter/awsxrayexporter/translator/segment.go +++ b/exporter/awsxrayexporter/translator/segment.go @@ -20,6 +20,7 @@ import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" "github.com/golang/protobuf/ptypes/timestamp" + tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" "math/rand" "reflect" "regexp" @@ -32,7 +33,7 @@ const ( // Only trace exporters will need them. ComponentAttribute = "component" HttpComponentType = "http" - RpcComponentType = "rpc" + GrpcComponentType = "grpc" DbComponentType = "db" MsgComponentType = "messaging" PeerAddressAttribute = "peer.address" @@ -126,8 +127,8 @@ type Segment struct { User string `json:"user,omitempty"` PrecursorIDs []string `json:"precursor_ids,omitempty"` - HTTP *HTTPData `json:"http,omitempty"` - AWS map[string]interface{} `json:"aws,omitempty"` + HTTP *HTTPData `json:"http,omitempty"` + AWS *AWSData `json:"aws,omitempty"` Service *ServiceData `json:"service,omitempty"` @@ -144,11 +145,14 @@ func MakeSegment(name string, span *tracepb.Span) Segment { traceID = convertToAmazonTraceID(span.TraceId) startTime = timestampToFloatSeconds(span.StartTime, span.StartTime) endTime = timestampToFloatSeconds(span.EndTime, span.StartTime) - filtered, http = makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) - isError, isFault, cause = makeCause(span.Status, filtered) + httpfiltered, http = makeHttp(span) + isError, isFault, cause = makeCause(span.Status, httpfiltered) + isThrottled = span.Status.Code == tracetranslator.OCResourceExhausted origin = determineAwsOrigin(span.Resource) + aws = makeAws(span.Resource) service = makeService(span.Resource) - annotations = makeAnnotations(span.Resource.GetLabels()) + sqlfiltered, sql = makeSql(httpfiltered) + annotations = makeAnnotations(sqlfiltered) namespace string ) @@ -168,12 +172,16 @@ func MakeSegment(name string, span *tracepb.Span) Segment { ParentID: convertToAmazonSpanID(span.ParentSpanId), Fault: isFault, Error: isError, + Throttle: isThrottled, Cause: cause, Origin: origin, Namespace: namespace, HTTP: http, + AWS: aws, Service: service, + SQL: sql, Annotations: annotations, + Metadata: nil, } } diff --git a/exporter/awsxrayexporter/translator/segment_test.go b/exporter/awsxrayexporter/translator/segment_test.go index 01b276458bd1..8a9a2450e1f4 100644 --- a/exporter/awsxrayexporter/translator/segment_test.go +++ b/exporter/awsxrayexporter/translator/segment_test.go @@ -27,9 +27,9 @@ import ( ) func TestClientSpanWithRpcComponent(t *testing.T) { - spanName := "/widgets" + spanName := "platformapi.widgets.searchWidgets" attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = RpcComponentType + attributes[ComponentAttribute] = GrpcComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "ipv6" attributes[PeerIpv6Attribute] = "2607:f8b0:4000:80c::2004" @@ -51,7 +51,8 @@ func TestClientSpanWithRpcComponent(t *testing.T) { assert.True(t, strings.Contains(jsonStr, spanName)) } -func constructClientSpan(parentSpanId []byte, name string, code int32, message string, attributes map[string]interface{}, rscLabels map[string]string) *tracepb.Span { +func constructClientSpan(parentSpanId []byte, name string, code int32, message string, + attributes map[string]interface{}, rscLabels map[string]string) *tracepb.Span { var ( traceId = newTraceID() spanId = newSegmentID() diff --git a/exporter/awsxrayexporter/translator/sql.go b/exporter/awsxrayexporter/translator/sql.go index 430382550a0a..7e27df76a1ed 100644 --- a/exporter/awsxrayexporter/translator/sql.go +++ b/exporter/awsxrayexporter/translator/sql.go @@ -33,21 +33,45 @@ type SQLData struct { SanitizedQuery string `json:"sanitized_query,omitempty"` } -func makeSql(attributes map[string]string) *SQLData { +func makeSql(attributes map[string]string) (map[string]string, *SQLData) { var ( - sqlData SQLData + filtered = make(map[string]string) + sqlData SQLData + dbUrl string + dbType string + dbInstance string + dbStatement string + dbUser string ) componentType := attributes[ComponentAttribute] - url := attributes[PeerAddressAttribute] - if componentType == HttpComponentType || componentType == RpcComponentType || url == "" { - return nil + if componentType == HttpComponentType || componentType == GrpcComponentType { + return attributes, nil } - url += "/" + attributes[DbInstanceAttribute] + for key, value := range attributes { + switch key { + case PeerAddressAttribute: + dbUrl = value + case DbTypeAttribute: + dbType = value + case DbInstanceAttribute: + dbInstance = value + case DbStatementAttribute: + dbStatement = value + case DbUserAttribute: + dbUser = value + default: + filtered[key] = value + } + } + if dbUrl == "" { + dbUrl = "localhost" + } + url := dbUrl + "/" + dbInstance sqlData = SQLData{ URL: url, - DatabaseType: attributes[DbTypeAttribute], - User: attributes[DbUserAttribute], - SanitizedQuery: attributes[DbStatementAttribute], + DatabaseType: dbType, + User: dbUser, + SanitizedQuery: dbStatement, } - return &sqlData + return filtered, &sqlData } diff --git a/exporter/awsxrayexporter/translator/sql_test.go b/exporter/awsxrayexporter/translator/sql_test.go index e912ce80f2e7..f772324fb070 100644 --- a/exporter/awsxrayexporter/translator/sql_test.go +++ b/exporter/awsxrayexporter/translator/sql_test.go @@ -31,8 +31,9 @@ func TestClientSpanWithStatementAttribute(t *testing.T) { attributes[PeerHostAttribute] = "db.example.com" attributes[PeerPortAttribute] = "3306" - sqlData := makeSql(attributes) + filtered, sqlData := makeSql(attributes) + assert.NotNil(t, filtered) assert.NotNil(t, sqlData) w := borrow() if err := w.Encode(sqlData); err != nil { @@ -54,7 +55,8 @@ func TestClientSpanWithHttpComponentAttribute(t *testing.T) { attributes[PeerHostAttribute] = "db.example.com" attributes[PeerPortAttribute] = "3306" - sqlData := makeSql(attributes) + filtered, sqlData := makeSql(attributes) + assert.NotNil(t, filtered) assert.Nil(t, sqlData) } From e98cd2e8851a38cdf90a30afcd2ed3783b9312f5 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Tue, 19 Nov 2019 15:20:04 -0600 Subject: [PATCH 08/59] initial dev of xray data structures and converters --- exporter/awsxrayexporter/README.md | 41 ++++ exporter/awsxrayexporter/translator/aws.go | 82 +++++-- .../awsxrayexporter/translator/aws_test.go | 100 ++++++++- exporter/awsxrayexporter/translator/cause.go | 74 +++---- .../awsxrayexporter/translator/cause_test.go | 11 +- exporter/awsxrayexporter/translator/http.go | 4 +- .../awsxrayexporter/translator/http_test.go | 32 --- .../awsxrayexporter/translator/segment.go | 59 +++-- .../translator/segment_test.go | 206 +++++++++++++++++- 9 files changed, 485 insertions(+), 124 deletions(-) create mode 100644 exporter/awsxrayexporter/README.md diff --git a/exporter/awsxrayexporter/README.md b/exporter/awsxrayexporter/README.md new file mode 100644 index 000000000000..3fee707dcf90 --- /dev/null +++ b/exporter/awsxrayexporter/README.md @@ -0,0 +1,41 @@ +# AWS X-Ray Tracing Exporter for OpenTelemetry Collector + +This exporter converts OpenTelemetry spans to +[AWS X-Ray Segment Documents](https://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html) +and then sends them directly to X-Ray using the +[PutTraceSegements](https://docs.aws.amazon.com/xray/latest/api/API_PutTraceSegments.html) API. + +## Data Conversion + +Trace IDs and Span IDs are expected to be originally generated by either AWS API Gateway or AWS ALB and +propagated by them using the `X-Amzn-Trace-Id` HTTP header. However, other generation sources are +supported by replacing Trace IDs where necessary. For consistency, you may want to consider using the +X-Ray approach if generating Trace IDs within the application. + +> AWS X-Ray IDs are the same size as W3C Trace Context IDs but differ in that the first 32 bits of a Trace ID +> is the Unix epoch time when the trace was started. Since X-Ray only allows submission of Trace IDs from the +> past 30 days, received Trace IDs are checked. If outside the allowed range, a replacement is generated using +> the current time. + +The `http` object is populated when the `component` attribute value is `grpc` as well as `http`. Other +synchronous call types should also result in the `http` object being populated. + +## AWS Specific Attributes + +The following AWS-specific Span attributes are supported in addition to the standard names and values +defined in the OpenTelemetry Semantic Conventions. + +| Attribute name | Notes and examples | Required? | +| :--------------- | :--------------------------------------------------------------------- | --------- | +| `aws.operation` | The name of the API action invoked against an AWS service or resource. | No | +| `aws.account_id` | The AWS account number if accessing resource in different account. | No | +| `aws.region` | The AWS region if accessing resource in different region from app. | No | +| `aws.request_id` | AWS-generated unique identifier for the request. | No | +| `aws.queue_url` | For operations on an Amazon SQS queue, the queue's URL. | No | +| `aws.table_name` | For operations on a DynamoDB table, the name of the table. | No | + +Any of these values supplied are used to populate the `aws` object in addition to any relevant data supplied +by the Span Resource object. X-Ray uses this data to generate inferred segments for the remote APIs. + +## Exporter Configuration + diff --git a/exporter/awsxrayexporter/translator/aws.go b/exporter/awsxrayexporter/translator/aws.go index e09e937f814f..39d026247ca8 100644 --- a/exporter/awsxrayexporter/translator/aws.go +++ b/exporter/awsxrayexporter/translator/aws.go @@ -19,12 +19,26 @@ import ( "strconv" ) +const ( + AwsOperationAttribute = "aws.operation" + AwsAccountAttribute = "aws.account_id" + AwsRegionAttribute = "aws.region" + AwsRequestIdAttribute = "aws.request_id" + AwsQueueUrlAttribute = "aws.queue_url" + AwsTableNameAttribute = "aws.table_name" +) + // AWSData provides the shape for unmarshalling AWS resource data. type AWSData struct { AccountID string `json:"account_id,omitempty"` BeanstalkMetadata *BeanstalkMetadata `json:"elastic_beanstalk,omitempty"` ECSMetadata *ECSMetadata `json:"ecs,omitempty"` EC2Metadata *EC2Metadata `json:"ec2,omitempty"` + Operation string `json:"operation,omitempty"` + RemoteRegion string `json:"region,omitempty"` + RequestID string `json:"request_id,omitempty"` + QueueURL string `json:"queue_url,omitempty"` + TableName string `json:"table_name,omitempty"` } // EC2Metadata provides the shape for unmarshalling EC2 metadata. @@ -45,25 +59,32 @@ type BeanstalkMetadata struct { DeploymentID int64 `json:"deployment_id"` } -func makeAws(resource *resourcepb.Resource) *AWSData { +func makeAws(attributes map[string]string, resource *resourcepb.Resource) (map[string]string, *AWSData) { var ( - cloud string - account string - zone string - hostId string - container string - namespace string - deployId string - ver string - origin string - ec2 *EC2Metadata - ecs *ECSMetadata - ebs *BeanstalkMetadata - awsData *AWSData + cloud string + account string + zone string + hostId string + container string + namespace string + deployId string + ver string + origin string + operation string + remoteRegion string + requestId string + queueUrl string + tableName string + ec2 *EC2Metadata + ecs *ECSMetadata + ebs *BeanstalkMetadata + awsData *AWSData + filtered map[string]string ) if resource == nil { - return awsData + return attributes, awsData } + filtered = make(map[string]string) for key, value := range resource.Labels { switch key { case CloudProviderAttribute: @@ -88,8 +109,28 @@ func makeAws(resource *resourcepb.Resource) *AWSData { ver = value } } + for key, value := range attributes { + switch key { + case AwsOperationAttribute: + operation = value + case AwsAccountAttribute: + if value != "" { + account = value + } + case AwsRegionAttribute: + remoteRegion = value + case AwsRequestIdAttribute: + requestId = value + case AwsQueueUrlAttribute: + queueUrl = value + case AwsTableNameAttribute: + tableName = value + default: + filtered[key] = value + } + } if cloud != "aws" && cloud != "" { - return awsData // not AWS so return nil + return filtered, awsData // not AWS so return nil } // progress from least specific to most specific origin so most specific ends up as origin // as per X-Ray docs @@ -119,13 +160,18 @@ func makeAws(resource *resourcepb.Resource) *AWSData { } } if origin == "" { - return awsData + return filtered, awsData } awsData = &AWSData{ AccountID: account, BeanstalkMetadata: ebs, ECSMetadata: ecs, EC2Metadata: ec2, + Operation: operation, + RemoteRegion: remoteRegion, + RequestID: requestId, + QueueURL: queueUrl, + TableName: tableName, } - return awsData + return filtered, awsData } diff --git a/exporter/awsxrayexporter/translator/aws_test.go b/exporter/awsxrayexporter/translator/aws_test.go index 4391300bc22c..88df715dac40 100644 --- a/exporter/awsxrayexporter/translator/aws_test.go +++ b/exporter/awsxrayexporter/translator/aws_test.go @@ -33,9 +33,11 @@ func TestAwsFromEc2Resource(t *testing.T) { Type: "vm", Labels: labels, } + attributes := make(map[string]string) - awsData := makeAws(resource) + filtered, awsData := makeAws(attributes, resource) + assert.NotNil(t, filtered) assert.NotNil(t, awsData) assert.NotNil(t, awsData.EC2Metadata) assert.Nil(t, awsData.ECSMetadata) @@ -69,9 +71,11 @@ func TestAwsFromEcsResource(t *testing.T) { Type: "container", Labels: labels, } + attributes := make(map[string]string) - awsData := makeAws(resource) + filtered, awsData := makeAws(attributes, resource) + assert.NotNil(t, filtered) assert.NotNil(t, awsData) assert.NotNil(t, awsData.EC2Metadata) assert.NotNil(t, awsData.ECSMetadata) @@ -98,9 +102,11 @@ func TestAwsFromBeanstalkResource(t *testing.T) { Type: "vm", Labels: labels, } + attributes := make(map[string]string) - awsData := makeAws(resource) + filtered, awsData := makeAws(attributes, resource) + assert.NotNil(t, filtered) assert.NotNil(t, awsData) assert.Nil(t, awsData.EC2Metadata) assert.Nil(t, awsData.ECSMetadata) @@ -113,3 +119,91 @@ func TestAwsFromBeanstalkResource(t *testing.T) { release(w) assert.True(t, strings.Contains(jsonStr, deployId)) } + +func TestAwsWithAwsSqsResources(t *testing.T) { + instanceId := "i-00f7c0bcb26da2a99" + containerId := "signup_aggregator-x82ufje83" + labels := make(map[string]string) + labels[CloudProviderAttribute] = "aws" + labels[CloudAccountAttribute] = "123456789" + labels[CloudZoneAttribute] = "us-east-1c" + labels[ContainerNameAttribute] = "signup_aggregator" + labels[ContainerImageAttribute] = "otel/signupaggregator" + labels[ContainerTagAttribute] = "v1" + labels[K8sClusterAttribute] = "production" + labels[K8sNamespaceAttribute] = "default" + labels[K8sDeploymentAttribute] = "signup_aggregator" + labels[K8sPodAttribute] = containerId + labels[HostIdAttribute] = instanceId + labels[HostTypeAttribute] = "m5.xlarge" + resource := &resourcepb.Resource{ + Type: "container", + Labels: labels, + } + queueUrl := "https://sqs.use1.amazonaws.com/Meltdown-Alerts" + attributes := make(map[string]string) + attributes[AwsOperationAttribute] = "SendMessage" + attributes[AwsAccountAttribute] = "987654321" + attributes[AwsRegionAttribute] = "us-east-2" + attributes[AwsQueueUrlAttribute] = queueUrl + attributes["employee.id"] = "XB477" + + filtered, awsData := makeAws(attributes, resource) + + assert.NotNil(t, filtered) + assert.NotNil(t, awsData) + assert.NotNil(t, awsData.EC2Metadata) + assert.NotNil(t, awsData.ECSMetadata) + assert.Nil(t, awsData.BeanstalkMetadata) + w := borrow() + if err := w.Encode(awsData); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + release(w) + assert.True(t, strings.Contains(jsonStr, containerId)) + assert.True(t, strings.Contains(jsonStr, queueUrl)) +} + +func TestAwsWithAwsDynamoDbResources(t *testing.T) { + instanceId := "i-00f7c0bcb26da2a99" + containerId := "signup_aggregator-x82ufje83" + labels := make(map[string]string) + labels[CloudProviderAttribute] = "aws" + labels[CloudAccountAttribute] = "123456789" + labels[CloudZoneAttribute] = "us-east-1c" + labels[ContainerNameAttribute] = "signup_aggregator" + labels[ContainerImageAttribute] = "otel/signupaggregator" + labels[ContainerTagAttribute] = "v1" + labels[K8sClusterAttribute] = "production" + labels[K8sNamespaceAttribute] = "default" + labels[K8sDeploymentAttribute] = "signup_aggregator" + labels[K8sPodAttribute] = containerId + labels[HostIdAttribute] = instanceId + labels[HostTypeAttribute] = "m5.xlarge" + resource := &resourcepb.Resource{ + Type: "container", + Labels: labels, + } + tableName := "WIDGET_TYPES" + attributes := make(map[string]string) + attributes[AwsOperationAttribute] = "PutItem" + attributes[AwsRequestIdAttribute] = "75107C82-EC8A-4F75-883F-4440B491B0AB" + attributes[AwsTableNameAttribute] = tableName + + filtered, awsData := makeAws(attributes, resource) + + assert.NotNil(t, filtered) + assert.NotNil(t, awsData) + assert.NotNil(t, awsData.EC2Metadata) + assert.NotNil(t, awsData.ECSMetadata) + assert.Nil(t, awsData.BeanstalkMetadata) + w := borrow() + if err := w.Encode(awsData); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + release(w) + assert.True(t, strings.Contains(jsonStr, containerId)) + assert.True(t, strings.Contains(jsonStr, tableName)) +} diff --git a/exporter/awsxrayexporter/translator/cause.go b/exporter/awsxrayexporter/translator/cause.go index 3cefcc092320..7abc73b79b60 100644 --- a/exporter/awsxrayexporter/translator/cause.go +++ b/exporter/awsxrayexporter/translator/cause.go @@ -17,14 +17,11 @@ package translator import ( "encoding/hex" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" - "os" - "strings" ) const ( ErrorObjectAttribute = "error.object" ErrorMessageAttribute = "error.message" - ErrorStackAttribute = "error.stack" ErrorKindAttribute = "error.kind" ) @@ -51,20 +48,38 @@ type Stack struct { Label string `json:"label,omitempty"` } -func makeCause(status *tracepb.Status, attributes map[string]string) (isError, isFault bool, cause *CauseData) { +func makeCause(status *tracepb.Status, attributes map[string]string) (bool, bool, map[string]string, *CauseData) { if status.Code == 0 { - return + return false, false, attributes, nil } - - message := status.GetMessage() - if message == "" { - message = attributes[ErrorMessageAttribute] - } - if message == "" { - message = attributes[StatusTextAttribute] + var ( + filtered = make(map[string]string) + cause *CauseData + message = status.GetMessage() + errorKind string + errorObject string + ) + + for key, value := range attributes { + switch key { + case ErrorKindAttribute: + errorKind = value + case ErrorMessageAttribute: + if message == "" { + message = value + } + case StatusTextAttribute: + if message == "" { + message = value + } + case ErrorObjectAttribute: + errorObject = value + default: + filtered[key] = value + } } if message == "" { - message = attributes[ErrorObjectAttribute] + message = errorObject } if message != "" { @@ -75,42 +90,21 @@ func makeCause(status *tracepb.Status, attributes map[string]string) (isError, i Exceptions: []Exception{ { ID: hexID, - Type: attributes[ErrorKindAttribute], + Type: errorKind, Message: message, }, }, } - - stackStr := attributes[ErrorStackAttribute] - if stackStr != "" { - cause.Exceptions[0].Stack = parseStackData(stackStr) - } - - if dir, err := os.Getwd(); err == nil { - cause.WorkingDirectory = dir - } } if isClientError(status.Code) { - isError = true - return - } - - isFault = true - return -} - -func parseStackData(stackStr string) []Stack { - parts := strings.Split(stackStr, "|") - stacks := make([]Stack, len(parts)) - for i, part := range parts { - stacks[i] = Stack{ - Label: part, - } + return true, false, filtered, cause + } else { + return false, true, filtered, cause } - return stacks } func isClientError(code int32) bool { - return false + httpStatus := convertToHttpStatusCode(code) + return httpStatus >= 400 && httpStatus < 500 } diff --git a/exporter/awsxrayexporter/translator/cause_test.go b/exporter/awsxrayexporter/translator/cause_test.go index 60eb22bab169..4cf8d3e37191 100644 --- a/exporter/awsxrayexporter/translator/cause_test.go +++ b/exporter/awsxrayexporter/translator/cause_test.go @@ -33,10 +33,11 @@ func TestCauseWithStatusMessage(t *testing.T) { span.Status.Message = errorMsg filtered, _ := makeHttp(span) - isError, isFault, cause := makeCause(span.Status, filtered) + isError, isFault, filtered, cause := makeCause(span.Status, filtered) assert.False(t, isError) assert.True(t, isFault) + assert.NotNil(t, filtered) assert.NotNil(t, cause) w := borrow() if err := w.Encode(cause); err != nil { @@ -57,10 +58,11 @@ func TestCauseWithHttpStatusMessage(t *testing.T) { span := constructExceptionServerSpan(attributes) filtered, _ := makeHttp(span) - isError, isFault, cause := makeCause(span.Status, filtered) + isError, isFault, filtered, cause := makeCause(span.Status, filtered) assert.False(t, isError) assert.True(t, isFault) + assert.NotNil(t, filtered) assert.NotNil(t, cause) w := borrow() if err := w.Encode(cause); err != nil { @@ -78,14 +80,14 @@ func TestCauseWithErrorMessage(t *testing.T) { attributes[URLAttribute] = "https://api.example.com/widgets" attributes[StatusCodeAttribute] = 500 attributes[ErrorMessageAttribute] = errorMsg - attributes[ErrorStackAttribute] = "org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749)" span := constructExceptionServerSpan(attributes) filtered, _ := makeHttp(span) - isError, isFault, cause := makeCause(span.Status, filtered) + isError, isFault, filtered, cause := makeCause(span.Status, filtered) assert.False(t, isError) assert.True(t, isFault) + assert.NotNil(t, filtered) assert.NotNil(t, cause) w := borrow() if err := w.Encode(cause); err != nil { @@ -94,7 +96,6 @@ func TestCauseWithErrorMessage(t *testing.T) { jsonStr := w.String() release(w) assert.True(t, strings.Contains(jsonStr, errorMsg)) - assert.True(t, strings.Contains(jsonStr, "ConstructorResolver")) } func constructExceptionServerSpan(attributes map[string]interface{}) *tracepb.Span { diff --git a/exporter/awsxrayexporter/translator/http.go b/exporter/awsxrayexporter/translator/http.go index 928e8417585b..40d32ae11d69 100644 --- a/exporter/awsxrayexporter/translator/http.go +++ b/exporter/awsxrayexporter/translator/http.go @@ -65,7 +65,7 @@ type ResponseData struct { ContentLength int64 `json:"content_length,omitempty"` } -func convertToStatusCode(code int32) int64 { +func convertToHttpStatusCode(code int32) int64 { switch code { case tracetranslator.OCOK: return http.StatusOK @@ -172,7 +172,7 @@ func makeHttp(span *tracepb.Span) (map[string]string, *HTTPData) { } if info.Response.Status == 0 { - info.Response.Status = convertToStatusCode(span.Status.Code) + info.Response.Status = convertToHttpStatusCode(span.Status.Code) } info.Response.ContentLength = extractResponseSizeFromEvents(span) diff --git a/exporter/awsxrayexporter/translator/http_test.go b/exporter/awsxrayexporter/translator/http_test.go index b89d80865142..35f9a1f967a4 100644 --- a/exporter/awsxrayexporter/translator/http_test.go +++ b/exporter/awsxrayexporter/translator/http_test.go @@ -17,7 +17,6 @@ package translator import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" - "github.com/golang/protobuf/ptypes/timestamp" "github.com/golang/protobuf/ptypes/wrappers" "github.com/stretchr/testify/assert" "strings" @@ -328,34 +327,3 @@ func constructHttpServerSpan(attributes map[string]interface{}) *tracepb.Span { }, } } - -func constructTimedEventsWithReceivedMessageEvent(tm *timestamp.Timestamp) tracepb.Span_TimeEvents { - eventAttrMap := make(map[string]*tracepb.AttributeValue) - eventAttrMap[MessageTypeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ - StringValue: &tracepb.TruncatableString{Value: "RECEIVED"}, - }} - eventAttrMap[MessageUncompressedSizeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ - IntValue: 12452, - }} - eventAttrbutes := tracepb.Span_Attributes{ - AttributeMap: eventAttrMap, - DroppedAttributesCount: 0, - } - annotation := tracepb.Span_TimeEvent_Annotation{ - Attributes: &eventAttrbutes, - } - event := tracepb.Span_TimeEvent{ - Time: tm, - Value: &tracepb.Span_TimeEvent_Annotation_{ - Annotation: &annotation, - }, - } - events := make([]*tracepb.Span_TimeEvent, 1, 1) - events[0] = &event - timeEvents := tracepb.Span_TimeEvents{ - TimeEvent: events, - DroppedAnnotationsCount: 0, - DroppedMessageEventsCount: 0, - } - return timeEvents -} diff --git a/exporter/awsxrayexporter/translator/segment.go b/exporter/awsxrayexporter/translator/segment.go index 73123898a9d8..21c119321120 100644 --- a/exporter/awsxrayexporter/translator/segment.go +++ b/exporter/awsxrayexporter/translator/segment.go @@ -89,18 +89,14 @@ var ( ) const ( - // defaultSpanName will be used if there are no valid xray characters in the - // span name + // defaultSpanName will be used if there are no valid xray characters in the span name defaultSegmentName = "span" - // maxSegmentNameLength the maximum length of a Segment name maxSegmentNameLength = 200 ) const ( traceIDLength = 35 // fixed length of aws trace id - spanIDLength = 16 // fixed length of aws span id - epochOffset = 2 // offset of epoch secs identifierOffset = 11 // offset of identifier within traceID ) @@ -140,20 +136,31 @@ type Segment struct { Metadata map[string]map[string]interface{} `json:"metadata,omitempty"` } -func MakeSegment(name string, span *tracepb.Span) Segment { +func MakeSegmentDocumentString(name string, span *tracepb.Span, userAttribute string) (string, error) { + segment := MakeSegment(name, span, userAttribute) + w := borrow() + if err := w.Encode(segment); err != nil { + return "", err + } + jsonStr := w.String() + release(w) + return jsonStr, nil +} + +func MakeSegment(name string, span *tracepb.Span, userAttribute string) Segment { var ( - traceID = convertToAmazonTraceID(span.TraceId) - startTime = timestampToFloatSeconds(span.StartTime, span.StartTime) - endTime = timestampToFloatSeconds(span.EndTime, span.StartTime) - httpfiltered, http = makeHttp(span) - isError, isFault, cause = makeCause(span.Status, httpfiltered) - isThrottled = span.Status.Code == tracetranslator.OCResourceExhausted - origin = determineAwsOrigin(span.Resource) - aws = makeAws(span.Resource) - service = makeService(span.Resource) - sqlfiltered, sql = makeSql(httpfiltered) - annotations = makeAnnotations(sqlfiltered) - namespace string + traceID = convertToAmazonTraceID(span.TraceId) + startTime = timestampToFloatSeconds(span.StartTime, span.StartTime) + endTime = timestampToFloatSeconds(span.EndTime, span.StartTime) + httpfiltered, http = makeHttp(span) + isError, isFault, causefiltered, cause = makeCause(span.Status, httpfiltered) + isThrottled = span.Status.Code == tracetranslator.OCResourceExhausted + origin = determineAwsOrigin(span.Resource) + awsfiltered, aws = makeAws(causefiltered, span.Resource) + service = makeService(span.Resource) + sqlfiltered, sql = makeSql(awsfiltered) + user, annotations = makeAnnotations(sqlfiltered, userAttribute) + namespace string ) if name == "" { @@ -176,6 +183,7 @@ func MakeSegment(name string, span *tracepb.Span) Segment { Cause: cause, Origin: origin, Namespace: namespace, + User: user, HTTP: http, AWS: aws, Service: service, @@ -276,15 +284,22 @@ func mergeAnnotations(dest map[string]interface{}, src map[string]string) { } } -func makeAnnotations(attributes map[string]string) map[string]interface{} { - var result = map[string]interface{}{} +func makeAnnotations(attributes map[string]string, userAttribute string) (string, map[string]interface{}) { + var ( + result = map[string]interface{}{} + user = attributes[userAttribute] + ) + if user != "" { + delete(attributes, userAttribute) + } + delete(attributes, ComponentAttribute) mergeAnnotations(result, attributes) if len(result) == 0 { - return nil + return user, nil } - return result + return user, result } // fixSegmentName removes any invalid characters from the span name. AWS X-Ray defines diff --git a/exporter/awsxrayexporter/translator/segment_test.go b/exporter/awsxrayexporter/translator/segment_test.go index 8a9a2450e1f4..4f1069d4e964 100644 --- a/exporter/awsxrayexporter/translator/segment_test.go +++ b/exporter/awsxrayexporter/translator/segment_test.go @@ -19,6 +19,7 @@ import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" "github.com/golang/protobuf/ptypes/timestamp" + tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" "github.com/stretchr/testify/assert" "reflect" "strings" @@ -26,7 +27,7 @@ import ( "time" ) -func TestClientSpanWithRpcComponent(t *testing.T) { +func TestClientSpanWithGrpcComponent(t *testing.T) { spanName := "platformapi.widgets.searchWidgets" attributes := make(map[string]interface{}) attributes[ComponentAttribute] = GrpcComponentType @@ -37,11 +38,69 @@ func TestClientSpanWithRpcComponent(t *testing.T) { attributes[TargetAttribute] = spanName labels := constructDefaultResourceLabels() span := constructClientSpan(nil, spanName, 0, "OK", attributes, labels) + timeEvents := constructTimedEventsWithSentMessageEvent(span.StartTime) + span.TimeEvents = &timeEvents - segment := MakeSegment(spanName, span) + jsonStr, err := MakeSegmentDocumentString(spanName, span, "user.id") + + assert.NotNil(t, jsonStr) + assert.Nil(t, err) + assert.True(t, strings.Contains(jsonStr, spanName)) +} + +func TestClientSpanWithAwsSdkClient(t *testing.T) { + spanName := "AmazonDynamoDB.getItem" + parentSpanId := newSegmentID() + userAttribute := "originating.user" + user := "testing" + attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HttpComponentType + attributes[MethodAttribute] = "POST" + attributes[SchemeAttribute] = "https" + attributes[HostAttribute] = "dynamodb.us-east-1.amazonaws.com" + attributes[TargetAttribute] = "/" + attributes[UserAgentAttribute] = "aws-sdk-java/1.11.613 Windows_10/10.0 OpenJDK_64-Bit_server_VM/11.0.4+11-LTS" + attributes[AwsOperationAttribute] = "GetItem" + attributes[AwsRequestIdAttribute] = "18BO1FEPJSSAOGNJEDPTPCMIU7VV4KQNSO5AEMVJF66Q9ASUAAJG" + attributes[AwsTableNameAttribute] = "otel-dev-Testing" + attributes[userAttribute] = user + labels := constructDefaultResourceLabels() + span := constructClientSpan(parentSpanId, spanName, 0, "OK", attributes, labels) + + jsonStr, err := MakeSegmentDocumentString(spanName, span, userAttribute) + + assert.NotNil(t, jsonStr) + assert.Nil(t, err) + assert.True(t, strings.Contains(jsonStr, spanName)) + assert.True(t, strings.Contains(jsonStr, user)) + assert.False(t, strings.Contains(jsonStr, ComponentAttribute)) +} + +func TestServerSpanWithInternalServerError(t *testing.T) { + spanName := "/api/locations" + parentSpanId := newSegmentID() + userAttribute := "originating.user" + user := "testing" + errorMessage := "java.lang.NullPointerException" + attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HttpComponentType + attributes[MethodAttribute] = "POST" + attributes[URLAttribute] = "https://api.example.org/api/locations" + attributes[TargetAttribute] = "/api/locations" + attributes[StatusCodeAttribute] = 500 + attributes[userAttribute] = user + attributes[ErrorKindAttribute] = "java.lang.NullPointerException" + labels := constructDefaultResourceLabels() + span := constructServerSpan(parentSpanId, spanName, tracetranslator.OCInternal, errorMessage, attributes, labels) + timeEvents := constructTimedEventsWithSentMessageEvent(span.StartTime) + span.TimeEvents = &timeEvents + + segment := MakeSegment(spanName, span, "originating.user") assert.NotNil(t, segment) + assert.NotNil(t, segment.Cause) assert.Equal(t, spanName, segment.Name) + assert.True(t, segment.Fault) w := borrow() if err := w.Encode(segment); err != nil { assert.Fail(t, "invalid json") @@ -49,6 +108,46 @@ func TestClientSpanWithRpcComponent(t *testing.T) { jsonStr := w.String() release(w) assert.True(t, strings.Contains(jsonStr, spanName)) + assert.True(t, strings.Contains(jsonStr, errorMessage)) + assert.False(t, strings.Contains(jsonStr, userAttribute)) +} + +func TestClientSpanWithDbComponent(t *testing.T) { + spanName := "call update_user_preference( ?, ?, ? )" + enterpriseAppId := "25F2E73B-4769-4C79-9DF3-7EBE85D571EA" + attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = DbComponentType + attributes[DbTypeAttribute] = "sql" + attributes[DbInstanceAttribute] = "customers" + attributes[DbStatementAttribute] = spanName + attributes[DbUserAttribute] = "userprefsvc" + attributes[PeerAddressAttribute] = "mysql://db.dev.example.com:3306" + attributes[PeerHostAttribute] = "db.dev.example.com" + attributes[PeerPortAttribute] = "3306" + attributes["enterprise.app.id"] = enterpriseAppId + labels := constructDefaultResourceLabels() + span := constructClientSpan(nil, spanName, 0, "OK", attributes, labels) + + segment := MakeSegment(spanName, span, "originating.user") + + assert.NotNil(t, segment) + assert.NotNil(t, segment.SQL) + assert.NotNil(t, segment.Service) + assert.NotNil(t, segment.AWS) + assert.NotNil(t, segment.Annotations) + assert.Nil(t, segment.Cause) + assert.Nil(t, segment.HTTP) + assert.Equal(t, spanName, segment.Name) + assert.False(t, segment.Fault) + assert.False(t, segment.Error) + w := borrow() + if err := w.Encode(segment); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + release(w) + assert.True(t, strings.Contains(jsonStr, spanName)) + assert.True(t, strings.Contains(jsonStr, enterpriseAppId)) } func constructClientSpan(parentSpanId []byte, name string, code int32, message string, @@ -83,6 +182,38 @@ func constructClientSpan(parentSpanId []byte, name string, code int32, message s } } +func constructServerSpan(parentSpanId []byte, name string, code int32, message string, + attributes map[string]interface{}, rscLabels map[string]string) *tracepb.Span { + var ( + traceId = newTraceID() + spanId = newSegmentID() + endTime = time.Now() + startTime = endTime.Add(-215 * time.Millisecond) + spanAttributes = constructSpanAttributes(attributes) + ) + + return &tracepb.Span{ + TraceId: traceId, + SpanId: spanId, + ParentSpanId: parentSpanId, + Name: &tracepb.TruncatableString{Value: name}, + Kind: tracepb.Span_SERVER, + StartTime: convertTimeToTimestamp(startTime), + EndTime: convertTimeToTimestamp(endTime), + Status: &tracepb.Status{ + Code: code, + Message: message, + }, + Attributes: &tracepb.Span_Attributes{ + AttributeMap: spanAttributes, + }, + Resource: &resourcepb.Resource{ + Type: "container", + Labels: rscLabels, + }, + } +} + func constructSpanAttributes(attributes map[string]interface{}) map[string]*tracepb.AttributeValue { attrs := make(map[string]*tracepb.AttributeValue) for key, value := range attributes { @@ -134,3 +265,74 @@ func convertTimeToTimestamp(t time.Time) *timestamp.Timestamp { Nanos: int32(nanoTime % 1e9), } } + +func constructTimedEventsWithReceivedMessageEvent(tm *timestamp.Timestamp) tracepb.Span_TimeEvents { + eventAttrMap := make(map[string]*tracepb.AttributeValue) + eventAttrMap[MessageTypeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ + StringValue: &tracepb.TruncatableString{Value: "RECEIVED"}, + }} + eventAttrMap[MessageIdAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: 1, + }} + eventAttrMap[MessageCompressedSizeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: 6478, + }} + eventAttrMap[MessageUncompressedSizeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: 12452, + }} + eventAttrbutes := tracepb.Span_Attributes{ + AttributeMap: eventAttrMap, + DroppedAttributesCount: 0, + } + annotation := tracepb.Span_TimeEvent_Annotation{ + Attributes: &eventAttrbutes, + } + event := tracepb.Span_TimeEvent{ + Time: tm, + Value: &tracepb.Span_TimeEvent_Annotation_{ + Annotation: &annotation, + }, + } + events := make([]*tracepb.Span_TimeEvent, 1, 1) + events[0] = &event + timeEvents := tracepb.Span_TimeEvents{ + TimeEvent: events, + DroppedAnnotationsCount: 0, + DroppedMessageEventsCount: 0, + } + return timeEvents +} + +func constructTimedEventsWithSentMessageEvent(tm *timestamp.Timestamp) tracepb.Span_TimeEvents { + eventAttrMap := make(map[string]*tracepb.AttributeValue) + eventAttrMap[MessageTypeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ + StringValue: &tracepb.TruncatableString{Value: "SENT"}, + }} + eventAttrMap[MessageIdAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: 1, + }} + eventAttrMap[MessageUncompressedSizeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: 7480, + }} + eventAttrbutes := tracepb.Span_Attributes{ + AttributeMap: eventAttrMap, + DroppedAttributesCount: 0, + } + annotation := tracepb.Span_TimeEvent_Annotation{ + Attributes: &eventAttrbutes, + } + event := tracepb.Span_TimeEvent{ + Time: tm, + Value: &tracepb.Span_TimeEvent_Annotation_{ + Annotation: &annotation, + }, + } + events := make([]*tracepb.Span_TimeEvent, 1, 1) + events[0] = &event + timeEvents := tracepb.Span_TimeEvents{ + TimeEvent: events, + DroppedAnnotationsCount: 0, + DroppedMessageEventsCount: 0, + } + return timeEvents +} From 31e123ec162ba8eb0e4b2f759ba2d725e38b5e8c Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Wed, 20 Nov 2019 10:32:25 -0600 Subject: [PATCH 09/59] initial dev of export handler --- exporter/awsxrayexporter/awsxray.go | 29 ++- exporter/awsxrayexporter/awsxray_test.go | 188 ++++++++++++++++++ exporter/awsxrayexporter/config.go | 5 +- exporter/awsxrayexporter/config_test.go | 8 +- exporter/awsxrayexporter/factory.go | 5 +- exporter/awsxrayexporter/factory_test.go | 38 ++++ exporter/awsxrayexporter/testdata/config.yaml | 6 +- exporter/awsxrayexporter/translator/cause.go | 2 +- .../awsxrayexporter/translator/cause_test.go | 6 +- .../awsxrayexporter/translator/http_test.go | 12 +- .../awsxrayexporter/translator/segment.go | 9 +- .../translator/segment_test.go | 73 ++++++- 12 files changed, 348 insertions(+), 33 deletions(-) create mode 100644 exporter/awsxrayexporter/awsxray_test.go diff --git a/exporter/awsxrayexporter/awsxray.go b/exporter/awsxrayexporter/awsxray.go index a740ef095b49..4b5d98aecf47 100644 --- a/exporter/awsxrayexporter/awsxray.go +++ b/exporter/awsxrayexporter/awsxray.go @@ -16,6 +16,8 @@ package awsxrayexporter import ( "context" + "github.com/aws/aws-sdk-go/service/xray" + "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter/translator" "github.com/open-telemetry/opentelemetry-collector/config/configmodels" "github.com/open-telemetry/opentelemetry-collector/consumer/consumerdata" "github.com/open-telemetry/opentelemetry-collector/exporter" @@ -28,15 +30,38 @@ import ( func NewTraceExporter(config configmodels.Exporter, logger *zap.Logger) (exporter.TraceExporter, error) { typeLog := zap.String("type", config.Type()) nameLog := zap.String("name", config.Name()) + userAttribute := config.(*Config).UserAttribute return exporterhelper.NewTraceExporter( config, func(ctx context.Context, td consumerdata.TraceData) (int, error) { logger.Info("TraceExporter", typeLog, nameLog, zap.Int("#spans", len(td.Spans))) - // TODO: Add ability to record the received data - return 0, nil + droppedSpans, input := assembleRequest(userAttribute, td, logger) + logger.Info("request: " + input.String()) + return droppedSpans, nil }, exporterhelper.WithTracing(true), exporterhelper.WithMetrics(false), exporterhelper.WithShutdown(logger.Sync), ) } + +func assembleRequest(userAttribute string, td consumerdata.TraceData, + logger *zap.Logger) (int, *xray.PutTraceSegmentsInput) { + documents := make([]*string, len(td.Spans)) + droppedSpans := int(0) + for i, span := range td.Spans { + if span == nil || span.Name == nil { + droppedSpans++ + continue + } + spanName := span.Name.Value + jsonStr, err := translator.MakeSegmentDocumentString(spanName, span, userAttribute) + if err != nil { + droppedSpans++ + logger.Warn("Unable to convert span", zap.Error(err)) + } + logger.Debug(jsonStr) + documents[i] = &jsonStr + } + return droppedSpans, &xray.PutTraceSegmentsInput{TraceSegmentDocuments: documents} +} diff --git a/exporter/awsxrayexporter/awsxray_test.go b/exporter/awsxrayexporter/awsxray_test.go new file mode 100644 index 000000000000..d3b74b4a8586 --- /dev/null +++ b/exporter/awsxrayexporter/awsxray_test.go @@ -0,0 +1,188 @@ +// 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 awsxrayexporter + +import ( + "context" + "fmt" + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + "github.com/golang/protobuf/ptypes/timestamp" + "github.com/golang/protobuf/ptypes/wrappers" + "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter/translator" + "github.com/open-telemetry/opentelemetry-collector/consumer/consumerdata" + "github.com/open-telemetry/opentelemetry-collector/exporter" + "github.com/stretchr/testify/assert" + "go.uber.org/zap" + "reflect" + "testing" + "time" +) + +func TestTraceExport(t *testing.T) { + traceExporter := initializeTraceExporter() + ctx := context.Background() + td := constructSpanData() + err := traceExporter.ConsumeTraceData(ctx, td) + assert.Nil(t, err) +} + +func initializeTraceExporter() exporter.TraceExporter { + logger := zap.NewNop() + factory := Factory{} + traceExporter, err := factory.CreateTraceExporter(logger, factory.CreateDefaultConfig()) + if err != nil { + panic(err) + } + return traceExporter +} + +func constructSpanData() consumerdata.TraceData { + resource := constructResource() + spans := make([]*tracepb.Span, 2) + spans[0] = constructHttpClientSpan() + spans[0].Resource = resource + spans[1] = constructHttpServerSpan() + spans[1].Resource = resource + return consumerdata.TraceData{ + Node: nil, + Resource: resource, + Spans: spans, + SourceFormat: "oc", + } +} + +func constructResource() *resourcepb.Resource { + labels := make(map[string]string) + labels[translator.ServiceNameAttribute] = "signup_aggregator" + labels[translator.ServiceVersionAttribute] = "1.1.12" + labels[translator.ContainerNameAttribute] = "signup_aggregator" + labels[translator.ContainerImageAttribute] = "otel/signupaggregator" + labels[translator.ContainerTagAttribute] = "v1" + labels[translator.CloudProviderAttribute] = "aws" + labels[translator.CloudAccountAttribute] = "999999998" + labels[translator.CloudRegionAttribute] = "us-west-2" + labels[translator.CloudZoneAttribute] = "us-west-1b" + return &resourcepb.Resource{ + Type: "container", + Labels: labels, + } +} + +func constructHttpClientSpan() *tracepb.Span { + attributes := make(map[string]interface{}) + attributes[translator.ComponentAttribute] = translator.HttpComponentType + attributes[translator.MethodAttribute] = "GET" + attributes[translator.URLAttribute] = "https://api.example.com/users/junit" + attributes[translator.StatusCodeAttribute] = 200 + endTime := time.Now().Round(time.Second) + startTime := endTime.Add(-90 * time.Second) + spanAttributes := constructSpanAttributes(attributes) + + return &tracepb.Span{ + TraceId: translator.NewTraceID(), + SpanId: translator.NewSegmentID(), + ParentSpanId: translator.NewSegmentID(), + Name: &tracepb.TruncatableString{Value: "/users/junit"}, + Kind: tracepb.Span_CLIENT, + StartTime: convertTimeToTimestamp(startTime), + EndTime: convertTimeToTimestamp(endTime), + Status: &tracepb.Status{ + Code: 0, + Message: "OK", + }, + SameProcessAsParentSpan: &wrappers.BoolValue{Value: false}, + Tracestate: &tracepb.Span_Tracestate{ + Entries: []*tracepb.Span_Tracestate_Entry{ + {Key: "foo", Value: "bar"}, + {Key: "a", Value: "b"}, + }, + }, + Attributes: &tracepb.Span_Attributes{ + AttributeMap: spanAttributes, + }, + } +} + +func constructHttpServerSpan() *tracepb.Span { + attributes := make(map[string]interface{}) + attributes[translator.ComponentAttribute] = translator.HttpComponentType + attributes[translator.MethodAttribute] = "GET" + attributes[translator.URLAttribute] = "https://api.example.com/users/junit" + attributes[translator.UserAgentAttribute] = "PostmanRuntime/7.16.3" + attributes[translator.ClientIpAttribute] = "192.168.15.32" + attributes[translator.StatusCodeAttribute] = 200 + endTime := time.Now().Round(time.Second) + startTime := endTime.Add(-90 * time.Second) + spanAttributes := constructSpanAttributes(attributes) + + return &tracepb.Span{ + TraceId: translator.NewTraceID(), + SpanId: translator.NewSegmentID(), + ParentSpanId: translator.NewSegmentID(), + Name: &tracepb.TruncatableString{Value: "/users/junit"}, + Kind: tracepb.Span_SERVER, + StartTime: convertTimeToTimestamp(startTime), + EndTime: convertTimeToTimestamp(endTime), + Status: &tracepb.Status{ + Code: 0, + Message: "OK", + }, + SameProcessAsParentSpan: &wrappers.BoolValue{Value: false}, + Tracestate: &tracepb.Span_Tracestate{ + Entries: []*tracepb.Span_Tracestate_Entry{ + {Key: "foo", Value: "bar"}, + {Key: "a", Value: "b"}, + }, + }, + Attributes: &tracepb.Span_Attributes{ + AttributeMap: spanAttributes, + }, + } +} + +func convertTimeToTimestamp(t time.Time) *timestamp.Timestamp { + if t.IsZero() { + return nil + } + nanoTime := t.UnixNano() + return ×tamp.Timestamp{ + Seconds: nanoTime / 1e9, + Nanos: int32(nanoTime % 1e9), + } +} + +func constructSpanAttributes(attributes map[string]interface{}) map[string]*tracepb.AttributeValue { + attrs := make(map[string]*tracepb.AttributeValue) + for key, value := range attributes { + valType := reflect.TypeOf(value) + var attrVal tracepb.AttributeValue + if valType.Kind() == reflect.Int { + attrVal = tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: int64(value.(int)), + }} + } else if valType.Kind() == reflect.Int64 { + attrVal = tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: value.(int64), + }} + } else { + attrVal = tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ + StringValue: &tracepb.TruncatableString{Value: fmt.Sprintf("%v", value)}, + }} + } + attrs[key] = &attrVal + } + return attrs +} diff --git a/exporter/awsxrayexporter/config.go b/exporter/awsxrayexporter/config.go index a1a42e06450f..a9c6e2cf80f2 100644 --- a/exporter/awsxrayexporter/config.go +++ b/exporter/awsxrayexporter/config.go @@ -37,7 +37,6 @@ type Config struct { ResourceARN string `mapstructure:"resource_arn"` // IAM role to upload segments to a different account. RoleARN string `mapstructure:"role_arn"` - // Default AWS resource type of trace data origin - // [AWS::EC2::Instance | AWS::ECS::Container | AWS::ElasticBeanstalk::Environment] - Origin string `mapstructure:"origin"` + // Span attribute name which holds the originating user's login + UserAttribute string `mapstructure:"user_attribute"` } diff --git a/exporter/awsxrayexporter/config_test.go b/exporter/awsxrayexporter/config_test.go index fe9949d2c9d7..e03c7b2f50af 100644 --- a/exporter/awsxrayexporter/config_test.go +++ b/exporter/awsxrayexporter/config_test.go @@ -52,10 +52,10 @@ func TestLoadConfig(t *testing.T) { RequestTimeout: 30, NoVerifySSL: false, ProxyAddress: "", - Region: "us-east-1", + Region: "eu-west-1", LocalMode: false, - ResourceARN: "", - RoleARN: "", - Origin: "AWS::ECS::Container", + ResourceARN: "arn:aws:ec2:us-east1:123456789:instance/i-293hiuhe0u", + RoleARN: "arn:aws:iam::123456789:role/monitoring-EKS-NodeInstanceRole", + UserAttribute: "user.id", }) } diff --git a/exporter/awsxrayexporter/factory.go b/exporter/awsxrayexporter/factory.go index 1c69ad264689..2fec4d3db0f1 100644 --- a/exporter/awsxrayexporter/factory.go +++ b/exporter/awsxrayexporter/factory.go @@ -50,7 +50,7 @@ func (f *Factory) CreateDefaultConfig() configmodels.Exporter { LocalMode: false, ResourceARN: "", RoleARN: "", - Origin: "AWS::EC2::Instance", + UserAttribute: "", } } @@ -60,6 +60,7 @@ func (f *Factory) CreateTraceExporter(logger *zap.Logger, cfg configmodels.Expor return NewTraceExporter(eCfg, logger) } -func (f *Factory) CreateMetricsExporter(logger *zap.Logger, cfg configmodels.Exporter) (exporter.MetricsExporter, error) { +func (f *Factory) CreateMetricsExporter(logger *zap.Logger, + cfg configmodels.Exporter) (exporter.MetricsExporter, error) { return nil, nil } diff --git a/exporter/awsxrayexporter/factory_test.go b/exporter/awsxrayexporter/factory_test.go index 99a30ef25149..3f8e1eb87243 100644 --- a/exporter/awsxrayexporter/factory_test.go +++ b/exporter/awsxrayexporter/factory_test.go @@ -15,8 +15,12 @@ package awsxrayexporter import ( + "github.com/open-telemetry/opentelemetry-collector/config" "github.com/open-telemetry/opentelemetry-collector/config/configcheck" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.uber.org/zap" + "path" "testing" ) @@ -26,3 +30,37 @@ func TestCreateDefaultConfig(t *testing.T) { assert.NotNil(t, cfg, "failed to create default config") assert.NoError(t, configcheck.ValidateConfig(cfg)) } + +func TestCreateTraceExporter(t *testing.T) { + logger := zap.NewNop() + + factories, err := config.ExampleComponents() + require.NoError(t, err) + factory := Factory{} + factories.Exporters[typeStr] = &factory + cfg, err := config.LoadConfigFile( + t, path.Join(".", "testdata", "config.yaml"), factories, + ) + require.NoError(t, err) + + exporter, err := factory.CreateTraceExporter(logger, cfg.Exporters["awsxray/customname"]) + assert.Nil(t, err) + assert.NotNil(t, exporter) +} + +func TestCreateMetricsExporter(t *testing.T) { + logger := zap.NewNop() + + factories, err := config.ExampleComponents() + require.NoError(t, err) + factory := Factory{} + factories.Exporters[typeStr] = &factory + cfg, err := config.LoadConfigFile( + t, path.Join(".", "testdata", "config.yaml"), factories, + ) + require.NoError(t, err) + + exporter, err := factory.CreateMetricsExporter(logger, cfg.Exporters["awsxray/customname"]) + assert.Nil(t, err) + assert.Nil(t, exporter) +} diff --git a/exporter/awsxrayexporter/testdata/config.yaml b/exporter/awsxrayexporter/testdata/config.yaml index 28df7dfc11ae..fb52abc20175 100644 --- a/exporter/awsxrayexporter/testdata/config.yaml +++ b/exporter/awsxrayexporter/testdata/config.yaml @@ -7,8 +7,10 @@ processors: exporters: awsxray: awsxray/customname: - region: us-east-1 - origin: "AWS::ECS::Container" + region: eu-west-1 + resource_arn: "arn:aws:ec2:us-east1:123456789:instance/i-293hiuhe0u" + role_arn: "arn:aws:iam::123456789:role/monitoring-EKS-NodeInstanceRole" + user_attribute: "user.id" awsxray/disabled: # will be ignored disabled: true diff --git a/exporter/awsxrayexporter/translator/cause.go b/exporter/awsxrayexporter/translator/cause.go index 7abc73b79b60..fb84a57eb57c 100644 --- a/exporter/awsxrayexporter/translator/cause.go +++ b/exporter/awsxrayexporter/translator/cause.go @@ -83,7 +83,7 @@ func makeCause(status *tracepb.Status, attributes map[string]string) (bool, bool } if message != "" { - id := newSegmentID() + id := NewSegmentID() hexID := hex.EncodeToString(id) cause = &CauseData{ diff --git a/exporter/awsxrayexporter/translator/cause_test.go b/exporter/awsxrayexporter/translator/cause_test.go index 4cf8d3e37191..1849150100de 100644 --- a/exporter/awsxrayexporter/translator/cause_test.go +++ b/exporter/awsxrayexporter/translator/cause_test.go @@ -104,9 +104,9 @@ func constructExceptionServerSpan(attributes map[string]interface{}) *tracepb.Sp spanAttributes := constructSpanAttributes(attributes) return &tracepb.Span{ - TraceId: []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}, - SpanId: []byte{0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8}, - ParentSpanId: []byte{0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA, 0xE9, 0xE8}, + TraceId: NewTraceID(), + SpanId: NewSegmentID(), + ParentSpanId: NewSegmentID(), Name: &tracepb.TruncatableString{Value: "/widgets"}, Kind: tracepb.Span_SERVER, StartTime: convertTimeToTimestamp(startTime), diff --git a/exporter/awsxrayexporter/translator/http_test.go b/exporter/awsxrayexporter/translator/http_test.go index 35f9a1f967a4..dd415489668e 100644 --- a/exporter/awsxrayexporter/translator/http_test.go +++ b/exporter/awsxrayexporter/translator/http_test.go @@ -266,9 +266,9 @@ func constructHttpClientSpan(attributes map[string]interface{}) *tracepb.Span { spanAttributes := constructSpanAttributes(attributes) return &tracepb.Span{ - TraceId: []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}, - SpanId: []byte{0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8}, - ParentSpanId: []byte{0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA, 0xE9, 0xE8}, + TraceId: NewTraceID(), + SpanId: NewSegmentID(), + ParentSpanId: NewSegmentID(), Name: &tracepb.TruncatableString{Value: "/users/junit"}, Kind: tracepb.Span_CLIENT, StartTime: convertTimeToTimestamp(startTime), @@ -300,9 +300,9 @@ func constructHttpServerSpan(attributes map[string]interface{}) *tracepb.Span { spanAttributes := constructSpanAttributes(attributes) return &tracepb.Span{ - TraceId: []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}, - SpanId: []byte{0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8}, - ParentSpanId: []byte{0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA, 0xE9, 0xE8}, + TraceId: NewTraceID(), + SpanId: NewSegmentID(), + ParentSpanId: NewSegmentID(), Name: &tracepb.TruncatableString{Value: "/users/junit"}, Kind: tracepb.Span_SERVER, StartTime: convertTimeToTimestamp(startTime), diff --git a/exporter/awsxrayexporter/translator/segment.go b/exporter/awsxrayexporter/translator/segment.go index 21c119321120..72f1754912bf 100644 --- a/exporter/awsxrayexporter/translator/segment.go +++ b/exporter/awsxrayexporter/translator/segment.go @@ -287,10 +287,11 @@ func mergeAnnotations(dest map[string]interface{}, src map[string]string) { func makeAnnotations(attributes map[string]string, userAttribute string) (string, map[string]interface{}) { var ( result = map[string]interface{}{} - user = attributes[userAttribute] + user string ) - if user != "" { + if userAttribute != "" { + user = attributes[userAttribute] delete(attributes, userAttribute) } delete(attributes, ComponentAttribute) @@ -332,7 +333,7 @@ func fixAnnotationKey(key string) string { return key } -func newTraceID() []byte { +func NewTraceID() []byte { var r [16]byte epoch := time.Now().Unix() binary.BigEndian.PutUint32(r[0:4], uint32(epoch)) @@ -343,7 +344,7 @@ func newTraceID() []byte { return r[:] } -func newSegmentID() []byte { +func NewSegmentID() []byte { var r [8]byte _, err := rand.Read(r[:]) if err != nil { diff --git a/exporter/awsxrayexporter/translator/segment_test.go b/exporter/awsxrayexporter/translator/segment_test.go index 4f1069d4e964..819c072d8647 100644 --- a/exporter/awsxrayexporter/translator/segment_test.go +++ b/exporter/awsxrayexporter/translator/segment_test.go @@ -50,7 +50,7 @@ func TestClientSpanWithGrpcComponent(t *testing.T) { func TestClientSpanWithAwsSdkClient(t *testing.T) { spanName := "AmazonDynamoDB.getItem" - parentSpanId := newSegmentID() + parentSpanId := NewSegmentID() userAttribute := "originating.user" user := "testing" attributes := make(map[string]interface{}) @@ -78,7 +78,7 @@ func TestClientSpanWithAwsSdkClient(t *testing.T) { func TestServerSpanWithInternalServerError(t *testing.T) { spanName := "/api/locations" - parentSpanId := newSegmentID() + parentSpanId := NewSegmentID() userAttribute := "originating.user" user := "testing" errorMessage := "java.lang.NullPointerException" @@ -150,11 +150,72 @@ func TestClientSpanWithDbComponent(t *testing.T) { assert.True(t, strings.Contains(jsonStr, enterpriseAppId)) } +func TestClientSpanWithBlankUserAttribute(t *testing.T) { + spanName := "call update_user_preference( ?, ?, ? )" + enterpriseAppId := "25F2E73B-4769-4C79-9DF3-7EBE85D571EA" + attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = DbComponentType + attributes[DbTypeAttribute] = "sql" + attributes[DbInstanceAttribute] = "customers" + attributes[DbStatementAttribute] = spanName + attributes[DbUserAttribute] = "userprefsvc" + attributes[PeerAddressAttribute] = "mysql://db.dev.example.com:3306" + attributes[PeerHostAttribute] = "db.dev.example.com" + attributes[PeerPortAttribute] = "3306" + attributes["enterprise.app.id"] = enterpriseAppId + labels := constructDefaultResourceLabels() + span := constructClientSpan(nil, spanName, 0, "OK", attributes, labels) + + segment := MakeSegment(spanName, span, "") + + assert.NotNil(t, segment) + assert.NotNil(t, segment.SQL) + assert.NotNil(t, segment.Service) + assert.NotNil(t, segment.AWS) + assert.NotNil(t, segment.Annotations) + assert.Nil(t, segment.Cause) + assert.Nil(t, segment.HTTP) + assert.Equal(t, spanName, segment.Name) + assert.False(t, segment.Fault) + assert.False(t, segment.Error) + w := borrow() + if err := w.Encode(segment); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + release(w) + assert.True(t, strings.Contains(jsonStr, spanName)) + assert.True(t, strings.Contains(jsonStr, enterpriseAppId)) +} + +func TestSpanWithInvalidTraceId(t *testing.T) { + spanName := "platformapi.widgets.searchWidgets" + attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = GrpcComponentType + attributes[MethodAttribute] = "GET" + attributes[SchemeAttribute] = "ipv6" + attributes[PeerIpv6Attribute] = "2607:f8b0:4000:80c::2004" + attributes[PeerPortAttribute] = "9443" + attributes[TargetAttribute] = spanName + labels := constructDefaultResourceLabels() + span := constructClientSpan(nil, spanName, 0, "OK", attributes, labels) + timeEvents := constructTimedEventsWithSentMessageEvent(span.StartTime) + span.TimeEvents = &timeEvents + span.TraceId[0] = 0x11 + + jsonStr, err := MakeSegmentDocumentString(spanName, span, "user.id") + + assert.NotNil(t, jsonStr) + assert.Nil(t, err) + assert.True(t, strings.Contains(jsonStr, spanName)) + assert.False(t, strings.Contains(jsonStr, "1-11")) +} + func constructClientSpan(parentSpanId []byte, name string, code int32, message string, attributes map[string]interface{}, rscLabels map[string]string) *tracepb.Span { var ( - traceId = newTraceID() - spanId = newSegmentID() + traceId = NewTraceID() + spanId = NewSegmentID() endTime = time.Now() startTime = endTime.Add(-215 * time.Millisecond) spanAttributes = constructSpanAttributes(attributes) @@ -185,8 +246,8 @@ func constructClientSpan(parentSpanId []byte, name string, code int32, message s func constructServerSpan(parentSpanId []byte, name string, code int32, message string, attributes map[string]interface{}, rscLabels map[string]string) *tracepb.Span { var ( - traceId = newTraceID() - spanId = newSegmentID() + traceId = NewTraceID() + spanId = NewSegmentID() endTime = time.Now() startTime = endTime.Add(-215 * time.Millisecond) spanAttributes = constructSpanAttributes(attributes) From 7bea1a55bab52a9c5c4015d9597c56490b8c1d9f Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Wed, 20 Nov 2019 11:58:37 -0600 Subject: [PATCH 10/59] fix formatting and lint errors --- exporter/awsxrayexporter/Makefile | 2 +- exporter/awsxrayexporter/awsxray.go | 1 + exporter/awsxrayexporter/awsxray_test.go | 21 ++--- exporter/awsxrayexporter/conn/conn.go | 18 +++-- exporter/awsxrayexporter/conn/conn_test.go | 9 ++- exporter/awsxrayexporter/conn/xray_client.go | 9 ++- exporter/awsxrayexporter/factory.go | 1 + exporter/awsxrayexporter/factory_test.go | 5 +- exporter/awsxrayexporter/translator/aws.go | 42 +++++----- .../awsxrayexporter/translator/aws_test.go | 55 ++++++------- exporter/awsxrayexporter/translator/cause.go | 7 +- .../awsxrayexporter/translator/cause_test.go | 13 +-- exporter/awsxrayexporter/translator/http.go | 30 +++---- .../awsxrayexporter/translator/http_test.go | 79 ++++++++++--------- .../awsxrayexporter/translator/segment.go | 78 ++++++++++-------- .../translator/segment_test.go | 63 +++++++-------- .../translator/service_test.go | 5 +- exporter/awsxrayexporter/translator/sql.go | 15 ++-- .../awsxrayexporter/translator/sql_test.go | 9 ++- 19 files changed, 245 insertions(+), 217 deletions(-) diff --git a/exporter/awsxrayexporter/Makefile b/exporter/awsxrayexporter/Makefile index c1496226e590..ded7a36092dc 100644 --- a/exporter/awsxrayexporter/Makefile +++ b/exporter/awsxrayexporter/Makefile @@ -1 +1 @@ -include ../../Makefile.Common \ No newline at end of file +include ../../Makefile.Common diff --git a/exporter/awsxrayexporter/awsxray.go b/exporter/awsxrayexporter/awsxray.go index 4b5d98aecf47..89f6c5dfd541 100644 --- a/exporter/awsxrayexporter/awsxray.go +++ b/exporter/awsxrayexporter/awsxray.go @@ -16,6 +16,7 @@ package awsxrayexporter import ( "context" + "github.com/aws/aws-sdk-go/service/xray" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter/translator" "github.com/open-telemetry/opentelemetry-collector/config/configmodels" diff --git a/exporter/awsxrayexporter/awsxray_test.go b/exporter/awsxrayexporter/awsxray_test.go index d3b74b4a8586..de5d9bb0f67f 100644 --- a/exporter/awsxrayexporter/awsxray_test.go +++ b/exporter/awsxrayexporter/awsxray_test.go @@ -17,6 +17,10 @@ package awsxrayexporter import ( "context" "fmt" + "reflect" + "testing" + "time" + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" "github.com/golang/protobuf/ptypes/timestamp" @@ -26,9 +30,6 @@ import ( "github.com/open-telemetry/opentelemetry-collector/exporter" "github.com/stretchr/testify/assert" "go.uber.org/zap" - "reflect" - "testing" - "time" ) func TestTraceExport(t *testing.T) { @@ -52,9 +53,9 @@ func initializeTraceExporter() exporter.TraceExporter { func constructSpanData() consumerdata.TraceData { resource := constructResource() spans := make([]*tracepb.Span, 2) - spans[0] = constructHttpClientSpan() + spans[0] = constructHTTPClientSpan() spans[0].Resource = resource - spans[1] = constructHttpServerSpan() + spans[1] = constructHTTPServerSpan() spans[1].Resource = resource return consumerdata.TraceData{ Node: nil, @@ -81,9 +82,9 @@ func constructResource() *resourcepb.Resource { } } -func constructHttpClientSpan() *tracepb.Span { +func constructHTTPClientSpan() *tracepb.Span { attributes := make(map[string]interface{}) - attributes[translator.ComponentAttribute] = translator.HttpComponentType + attributes[translator.ComponentAttribute] = translator.HTTPComponentType attributes[translator.MethodAttribute] = "GET" attributes[translator.URLAttribute] = "https://api.example.com/users/junit" attributes[translator.StatusCodeAttribute] = 200 @@ -116,13 +117,13 @@ func constructHttpClientSpan() *tracepb.Span { } } -func constructHttpServerSpan() *tracepb.Span { +func constructHTTPServerSpan() *tracepb.Span { attributes := make(map[string]interface{}) - attributes[translator.ComponentAttribute] = translator.HttpComponentType + attributes[translator.ComponentAttribute] = translator.HTTPComponentType attributes[translator.MethodAttribute] = "GET" attributes[translator.URLAttribute] = "https://api.example.com/users/junit" attributes[translator.UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[translator.ClientIpAttribute] = "192.168.15.32" + attributes[translator.ClientIPAttribute] = "192.168.15.32" attributes[translator.StatusCodeAttribute] = 200 endTime := time.Now().Round(time.Second) startTime := endTime.Add(-90 * time.Second) diff --git a/exporter/awsxrayexporter/conn/conn.go b/exporter/awsxrayexporter/conn/conn.go index 64b0d14b3169..175738a39aa3 100644 --- a/exporter/awsxrayexporter/conn/conn.go +++ b/exporter/awsxrayexporter/conn/conn.go @@ -16,6 +16,11 @@ package conn import ( "crypto/tls" + "net/http" + "net/url" + "os" + "time" + "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/credentials" @@ -27,10 +32,6 @@ import ( "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter" "go.uber.org/zap" "golang.org/x/net/http2" - "net/http" - "net/url" - "os" - "time" ) type connAttr interface { @@ -45,6 +46,7 @@ func (c *Conn) getEC2Region(s *session.Session) (string, error) { return ec2metadata.New(s).Region() } +// AWS STS endpoint constants const ( STSEndpointPrefix = "https://sts." STSEndpointSuffix = ".amazonaws.com" @@ -231,12 +233,12 @@ func getSTSCredsFromRegionEndpoint(logger *zap.Logger, sess *session.Session, re // getSTSCredsFromPrimaryRegionEndpoint fetches STS credentials for provided roleARN from primary region endpoint in the // respective partition. func getSTSCredsFromPrimaryRegionEndpoint(logger *zap.Logger, t *session.Session, roleArn string, region string) *credentials.Credentials { - partitionId := getPartition(region) - if partitionId == endpoints.AwsPartitionID { + partitionID := getPartition(region) + if partitionID == endpoints.AwsPartitionID { return getSTSCredsFromRegionEndpoint(logger, t, endpoints.UsEast1RegionID, roleArn) - } else if partitionId == endpoints.AwsCnPartitionID { + } else if partitionID == endpoints.AwsCnPartitionID { return getSTSCredsFromRegionEndpoint(logger, t, endpoints.CnNorth1RegionID, roleArn) - } else if partitionId == endpoints.AwsUsGovPartitionID { + } else if partitionID == endpoints.AwsUsGovPartitionID { return getSTSCredsFromRegionEndpoint(logger, t, endpoints.UsGovWest1RegionID, roleArn) } diff --git a/exporter/awsxrayexporter/conn/conn_test.go b/exporter/awsxrayexporter/conn/conn_test.go index 12e50575b92c..c9fcdb477182 100644 --- a/exporter/awsxrayexporter/conn/conn_test.go +++ b/exporter/awsxrayexporter/conn/conn_test.go @@ -16,16 +16,17 @@ package conn import ( "errors" + "os" + "path" + "strings" + "testing" + "github.com/aws/aws-sdk-go/aws/session" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter" "github.com/open-telemetry/opentelemetry-collector/config" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "go.uber.org/zap" - "os" - "path" - "strings" - "testing" ) var ec2Region = "us-east-1" diff --git a/exporter/awsxrayexporter/conn/xray_client.go b/exporter/awsxrayexporter/conn/xray_client.go index 0bb501481385..c79d7a2cd075 100644 --- a/exporter/awsxrayexporter/conn/xray_client.go +++ b/exporter/awsxrayexporter/conn/xray_client.go @@ -15,16 +15,17 @@ package conn import ( + "os" + "strconv" + "strings" + "time" + "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/request" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/xray" "go.uber.org/zap" - "os" - "strconv" - "strings" - "time" ) // XRay defines X-Ray api call structure. diff --git a/exporter/awsxrayexporter/factory.go b/exporter/awsxrayexporter/factory.go index 2fec4d3db0f1..7e00086fd41c 100644 --- a/exporter/awsxrayexporter/factory.go +++ b/exporter/awsxrayexporter/factory.go @@ -60,6 +60,7 @@ func (f *Factory) CreateTraceExporter(logger *zap.Logger, cfg configmodels.Expor return NewTraceExporter(eCfg, logger) } +// CreateMetricsExporter always returns nil. func (f *Factory) CreateMetricsExporter(logger *zap.Logger, cfg configmodels.Exporter) (exporter.MetricsExporter, error) { return nil, nil diff --git a/exporter/awsxrayexporter/factory_test.go b/exporter/awsxrayexporter/factory_test.go index 3f8e1eb87243..0ee945cff364 100644 --- a/exporter/awsxrayexporter/factory_test.go +++ b/exporter/awsxrayexporter/factory_test.go @@ -15,13 +15,14 @@ package awsxrayexporter import ( + "path" + "testing" + "github.com/open-telemetry/opentelemetry-collector/config" "github.com/open-telemetry/opentelemetry-collector/config/configcheck" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.uber.org/zap" - "path" - "testing" ) func TestCreateDefaultConfig(t *testing.T) { diff --git a/exporter/awsxrayexporter/translator/aws.go b/exporter/awsxrayexporter/translator/aws.go index 39d026247ca8..f24ff7ad8375 100644 --- a/exporter/awsxrayexporter/translator/aws.go +++ b/exporter/awsxrayexporter/translator/aws.go @@ -15,16 +15,18 @@ package translator import ( - resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" "strconv" + + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" ) +// AWS-specific OpenTelemetry attribute names const ( AwsOperationAttribute = "aws.operation" AwsAccountAttribute = "aws.account_id" AwsRegionAttribute = "aws.region" - AwsRequestIdAttribute = "aws.request_id" - AwsQueueUrlAttribute = "aws.queue_url" + AwsRequestIDAttribute = "aws.request_id" + AwsQueueURLAttribute = "aws.queue_url" AwsTableNameAttribute = "aws.table_name" ) @@ -64,16 +66,16 @@ func makeAws(attributes map[string]string, resource *resourcepb.Resource) (map[s cloud string account string zone string - hostId string + hostID string container string namespace string - deployId string + deployID string ver string origin string operation string remoteRegion string - requestId string - queueUrl string + requestID string + queueURL string tableName string ec2 *EC2Metadata ecs *ECSMetadata @@ -93,8 +95,8 @@ func makeAws(attributes map[string]string, resource *resourcepb.Resource) (map[s account = value case CloudZoneAttribute: zone = value - case HostIdAttribute: - hostId = value + case HostIDAttribute: + hostID = value case ContainerNameAttribute: if container == "" { container = value @@ -104,7 +106,7 @@ func makeAws(attributes map[string]string, resource *resourcepb.Resource) (map[s case ServiceNamespaceAttribute: namespace = value case ServiceInstanceAttribute: - deployId = value + deployID = value case ServiceVersionAttribute: ver = value } @@ -119,10 +121,10 @@ func makeAws(attributes map[string]string, resource *resourcepb.Resource) (map[s } case AwsRegionAttribute: remoteRegion = value - case AwsRequestIdAttribute: - requestId = value - case AwsQueueUrlAttribute: - queueUrl = value + case AwsRequestIDAttribute: + requestID = value + case AwsQueueURLAttribute: + queueURL = value case AwsTableNameAttribute: tableName = value default: @@ -134,10 +136,10 @@ func makeAws(attributes map[string]string, resource *resourcepb.Resource) (map[s } // progress from least specific to most specific origin so most specific ends up as origin // as per X-Ray docs - if hostId != "" { + if hostID != "" { origin = OriginEC2 ec2 = &EC2Metadata{ - InstanceID: hostId, + InstanceID: hostID, AvailabilityZone: zone, } } @@ -147,9 +149,9 @@ func makeAws(attributes map[string]string, resource *resourcepb.Resource) (map[s ContainerName: container, } } - if deployId != "" { + if deployID != "" { origin = OriginEB - deployNum, err := strconv.ParseInt(deployId, 10, 64) + deployNum, err := strconv.ParseInt(deployID, 10, 64) if err != nil { deployNum = 0 } @@ -169,8 +171,8 @@ func makeAws(attributes map[string]string, resource *resourcepb.Resource) (map[s EC2Metadata: ec2, Operation: operation, RemoteRegion: remoteRegion, - RequestID: requestId, - QueueURL: queueUrl, + RequestID: requestID, + QueueURL: queueURL, TableName: tableName, } return filtered, awsData diff --git a/exporter/awsxrayexporter/translator/aws_test.go b/exporter/awsxrayexporter/translator/aws_test.go index 88df715dac40..00b5070d97a3 100644 --- a/exporter/awsxrayexporter/translator/aws_test.go +++ b/exporter/awsxrayexporter/translator/aws_test.go @@ -15,19 +15,20 @@ package translator import ( - resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" - "github.com/stretchr/testify/assert" "strings" "testing" + + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + "github.com/stretchr/testify/assert" ) func TestAwsFromEc2Resource(t *testing.T) { - instanceId := "i-00f7c0bcb26da2a99" + instanceID := "i-00f7c0bcb26da2a99" labels := make(map[string]string) labels[CloudProviderAttribute] = "aws" labels[CloudAccountAttribute] = "123456789" labels[CloudZoneAttribute] = "us-east-1c" - labels[HostIdAttribute] = instanceId + labels[HostIDAttribute] = instanceID labels[HostTypeAttribute] = "m5.xlarge" resource := &resourcepb.Resource{ Type: "vm", @@ -48,12 +49,12 @@ func TestAwsFromEc2Resource(t *testing.T) { } jsonStr := w.String() release(w) - assert.True(t, strings.Contains(jsonStr, instanceId)) + assert.True(t, strings.Contains(jsonStr, instanceID)) } func TestAwsFromEcsResource(t *testing.T) { - instanceId := "i-00f7c0bcb26da2a99" - containerId := "signup_aggregator-x82ufje83" + instanceID := "i-00f7c0bcb26da2a99" + containerID := "signup_aggregator-x82ufje83" labels := make(map[string]string) labels[CloudProviderAttribute] = "aws" labels[CloudAccountAttribute] = "123456789" @@ -64,8 +65,8 @@ func TestAwsFromEcsResource(t *testing.T) { labels[K8sClusterAttribute] = "production" labels[K8sNamespaceAttribute] = "default" labels[K8sDeploymentAttribute] = "signup_aggregator" - labels[K8sPodAttribute] = containerId - labels[HostIdAttribute] = instanceId + labels[K8sPodAttribute] = containerID + labels[HostIDAttribute] = instanceID labels[HostTypeAttribute] = "m5.xlarge" resource := &resourcepb.Resource{ Type: "container", @@ -86,18 +87,18 @@ func TestAwsFromEcsResource(t *testing.T) { } jsonStr := w.String() release(w) - assert.True(t, strings.Contains(jsonStr, containerId)) + assert.True(t, strings.Contains(jsonStr, containerID)) } func TestAwsFromBeanstalkResource(t *testing.T) { - deployId := "232" + deployID := "232" labels := make(map[string]string) labels[CloudProviderAttribute] = "aws" labels[CloudAccountAttribute] = "123456789" labels[CloudZoneAttribute] = "us-east-1c" labels[ServiceVersionAttribute] = "2.1.4" labels[ServiceNamespaceAttribute] = "production" - labels[ServiceInstanceAttribute] = deployId + labels[ServiceInstanceAttribute] = deployID resource := &resourcepb.Resource{ Type: "vm", Labels: labels, @@ -117,12 +118,12 @@ func TestAwsFromBeanstalkResource(t *testing.T) { } jsonStr := w.String() release(w) - assert.True(t, strings.Contains(jsonStr, deployId)) + assert.True(t, strings.Contains(jsonStr, deployID)) } func TestAwsWithAwsSqsResources(t *testing.T) { - instanceId := "i-00f7c0bcb26da2a99" - containerId := "signup_aggregator-x82ufje83" + instanceID := "i-00f7c0bcb26da2a99" + containerID := "signup_aggregator-x82ufje83" labels := make(map[string]string) labels[CloudProviderAttribute] = "aws" labels[CloudAccountAttribute] = "123456789" @@ -133,19 +134,19 @@ func TestAwsWithAwsSqsResources(t *testing.T) { labels[K8sClusterAttribute] = "production" labels[K8sNamespaceAttribute] = "default" labels[K8sDeploymentAttribute] = "signup_aggregator" - labels[K8sPodAttribute] = containerId - labels[HostIdAttribute] = instanceId + labels[K8sPodAttribute] = containerID + labels[HostIDAttribute] = instanceID labels[HostTypeAttribute] = "m5.xlarge" resource := &resourcepb.Resource{ Type: "container", Labels: labels, } - queueUrl := "https://sqs.use1.amazonaws.com/Meltdown-Alerts" + queueURL := "https://sqs.use1.amazonaws.com/Meltdown-Alerts" attributes := make(map[string]string) attributes[AwsOperationAttribute] = "SendMessage" attributes[AwsAccountAttribute] = "987654321" attributes[AwsRegionAttribute] = "us-east-2" - attributes[AwsQueueUrlAttribute] = queueUrl + attributes[AwsQueueURLAttribute] = queueURL attributes["employee.id"] = "XB477" filtered, awsData := makeAws(attributes, resource) @@ -161,13 +162,13 @@ func TestAwsWithAwsSqsResources(t *testing.T) { } jsonStr := w.String() release(w) - assert.True(t, strings.Contains(jsonStr, containerId)) - assert.True(t, strings.Contains(jsonStr, queueUrl)) + assert.True(t, strings.Contains(jsonStr, containerID)) + assert.True(t, strings.Contains(jsonStr, queueURL)) } func TestAwsWithAwsDynamoDbResources(t *testing.T) { - instanceId := "i-00f7c0bcb26da2a99" - containerId := "signup_aggregator-x82ufje83" + instanceID := "i-00f7c0bcb26da2a99" + containerID := "signup_aggregator-x82ufje83" labels := make(map[string]string) labels[CloudProviderAttribute] = "aws" labels[CloudAccountAttribute] = "123456789" @@ -178,8 +179,8 @@ func TestAwsWithAwsDynamoDbResources(t *testing.T) { labels[K8sClusterAttribute] = "production" labels[K8sNamespaceAttribute] = "default" labels[K8sDeploymentAttribute] = "signup_aggregator" - labels[K8sPodAttribute] = containerId - labels[HostIdAttribute] = instanceId + labels[K8sPodAttribute] = containerID + labels[HostIDAttribute] = instanceID labels[HostTypeAttribute] = "m5.xlarge" resource := &resourcepb.Resource{ Type: "container", @@ -188,7 +189,7 @@ func TestAwsWithAwsDynamoDbResources(t *testing.T) { tableName := "WIDGET_TYPES" attributes := make(map[string]string) attributes[AwsOperationAttribute] = "PutItem" - attributes[AwsRequestIdAttribute] = "75107C82-EC8A-4F75-883F-4440B491B0AB" + attributes[AwsRequestIDAttribute] = "75107C82-EC8A-4F75-883F-4440B491B0AB" attributes[AwsTableNameAttribute] = tableName filtered, awsData := makeAws(attributes, resource) @@ -204,6 +205,6 @@ func TestAwsWithAwsDynamoDbResources(t *testing.T) { } jsonStr := w.String() release(w) - assert.True(t, strings.Contains(jsonStr, containerId)) + assert.True(t, strings.Contains(jsonStr, containerID)) assert.True(t, strings.Contains(jsonStr, tableName)) } diff --git a/exporter/awsxrayexporter/translator/cause.go b/exporter/awsxrayexporter/translator/cause.go index fb84a57eb57c..f580b9af0e42 100644 --- a/exporter/awsxrayexporter/translator/cause.go +++ b/exporter/awsxrayexporter/translator/cause.go @@ -16,9 +16,11 @@ package translator import ( "encoding/hex" + tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" ) +// OpenTelemetry Semantic Convention attribute names for error/fault/exception related attributes const ( ErrorObjectAttribute = "error.object" ErrorMessageAttribute = "error.message" @@ -99,12 +101,11 @@ func makeCause(status *tracepb.Status, attributes map[string]string) (bool, bool if isClientError(status.Code) { return true, false, filtered, cause - } else { - return false, true, filtered, cause } + return false, true, filtered, cause } func isClientError(code int32) bool { - httpStatus := convertToHttpStatusCode(code) + httpStatus := convertToHTTPStatusCode(code) return httpStatus >= 400 && httpStatus < 500 } diff --git a/exporter/awsxrayexporter/translator/cause_test.go b/exporter/awsxrayexporter/translator/cause_test.go index 1849150100de..6e410447912a 100644 --- a/exporter/awsxrayexporter/translator/cause_test.go +++ b/exporter/awsxrayexporter/translator/cause_test.go @@ -15,12 +15,13 @@ package translator import ( - resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" - tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" - "github.com/stretchr/testify/assert" "strings" "testing" "time" + + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + "github.com/stretchr/testify/assert" ) func TestCauseWithStatusMessage(t *testing.T) { @@ -31,7 +32,7 @@ func TestCauseWithStatusMessage(t *testing.T) { attributes[StatusCodeAttribute] = 500 span := constructExceptionServerSpan(attributes) span.Status.Message = errorMsg - filtered, _ := makeHttp(span) + filtered, _ := makeHTTP(span) isError, isFault, filtered, cause := makeCause(span.Status, filtered) @@ -56,7 +57,7 @@ func TestCauseWithHttpStatusMessage(t *testing.T) { attributes[StatusCodeAttribute] = 500 attributes[StatusTextAttribute] = errorMsg span := constructExceptionServerSpan(attributes) - filtered, _ := makeHttp(span) + filtered, _ := makeHTTP(span) isError, isFault, filtered, cause := makeCause(span.Status, filtered) @@ -81,7 +82,7 @@ func TestCauseWithErrorMessage(t *testing.T) { attributes[StatusCodeAttribute] = 500 attributes[ErrorMessageAttribute] = errorMsg span := constructExceptionServerSpan(attributes) - filtered, _ := makeHttp(span) + filtered, _ := makeHTTP(span) isError, isFault, filtered, cause := makeCause(span.Status, filtered) diff --git a/exporter/awsxrayexporter/translator/http.go b/exporter/awsxrayexporter/translator/http.go index 40d32ae11d69..b33ef4f4fd0a 100644 --- a/exporter/awsxrayexporter/translator/http.go +++ b/exporter/awsxrayexporter/translator/http.go @@ -15,15 +15,15 @@ package translator import ( - tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" - tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" "net/http" "strconv" + + tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" ) +// OpenTelemetry Semantic Convention attribute names for HTTP and gRPC related attributes const ( - // Attributes recorded on the span for the requests. - // Only trace exporters will need them. MethodAttribute = "http.method" URLAttribute = "http.url" TargetAttribute = "http.target" @@ -35,10 +35,10 @@ const ( ServerNameAttribute = "http.server_name" PortAttribute = "http.port" RouteAttribute = "http.route" - ClientIpAttribute = "http.client_ip" + ClientIPAttribute = "http.client_ip" UserAgentAttribute = "http.user_agent" MessageTypeAttribute = "message.type" - MessageIdAttribute = "message.id" + MessageIDAttribute = "message.id" MessageCompressedSizeAttribute = "message.compressed_size" MessageUncompressedSizeAttribute = "message.uncompressed_size" ) @@ -65,7 +65,7 @@ type ResponseData struct { ContentLength int64 `json:"content_length,omitempty"` } -func convertToHttpStatusCode(code int32) int64 { +func convertToHTTPStatusCode(code int32) int64 { switch code { case tracetranslator.OCOK: return http.StatusOK @@ -106,7 +106,7 @@ func convertToHttpStatusCode(code int32) int64 { } } -func makeHttp(span *tracepb.Span) (map[string]string, *HTTPData) { +func makeHTTP(span *tracepb.Span) (map[string]string, *HTTPData) { var ( info HTTPData filtered = make(map[string]string) @@ -123,7 +123,7 @@ func makeHttp(span *tracepb.Span) (map[string]string, *HTTPData) { info.Request.Method = value.GetStringValue().GetValue() case UserAgentAttribute: info.Request.UserAgent = value.GetStringValue().GetValue() - case ClientIpAttribute: + case ClientIPAttribute: info.Request.ClientIP = value.GetStringValue().GetValue() info.Request.XForwardedFor = true case StatusCodeAttribute: @@ -161,18 +161,18 @@ func makeHttp(span *tracepb.Span) (map[string]string, *HTTPData) { } } - if (componentValue != HttpComponentType && componentValue != GrpcComponentType) || info.Request.Method == "" { + if (componentValue != HTTPComponentType && componentValue != GrpcComponentType) || info.Request.Method == "" { return filtered, nil } if tracepb.Span_SERVER == span.Kind { - info.Request.URL = constructServerUrl(componentValue, urlParts) + info.Request.URL = constructServerURL(componentValue, urlParts) } else { - info.Request.URL = constructClientUrl(componentValue, urlParts) + info.Request.URL = constructClientURL(componentValue, urlParts) } if info.Response.Status == 0 { - info.Response.Status = convertToHttpStatusCode(span.Status.Code) + info.Response.Status = convertToHTTPStatusCode(span.Status.Code) } info.Response.ContentLength = extractResponseSizeFromEvents(span) @@ -202,7 +202,7 @@ func extractResponseSizeFromEvents(span *tracepb.Span) int64 { return size } -func constructClientUrl(component string, urlParts map[string]string) string { +func constructClientURL(component string, urlParts map[string]string) string { // follows OpenTelemetry specification-defined combinations for client spans described in // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/data-http.md url, ok := urlParts[URLAttribute] @@ -247,7 +247,7 @@ func constructClientUrl(component string, urlParts map[string]string) string { return url } -func constructServerUrl(component string, urlParts map[string]string) string { +func constructServerURL(component string, urlParts map[string]string) string { // follows OpenTelemetry specification-defined combinations for server spans described in // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/data-http.md url, ok := urlParts[URLAttribute] diff --git a/exporter/awsxrayexporter/translator/http_test.go b/exporter/awsxrayexporter/translator/http_test.go index dd415489668e..5f4dfb32190b 100644 --- a/exporter/awsxrayexporter/translator/http_test.go +++ b/exporter/awsxrayexporter/translator/http_test.go @@ -15,24 +15,25 @@ package translator import ( + "strings" + "testing" + "time" + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" "github.com/golang/protobuf/ptypes/wrappers" "github.com/stretchr/testify/assert" - "strings" - "testing" - "time" ) func TestClientSpanWithUrlAttribute(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "GET" attributes[URLAttribute] = "https://api.example.com/users/junit" attributes[StatusCodeAttribute] = 200 - span := constructHttpClientSpan(attributes) + span := constructHTTPClientSpan(attributes) - filtered, httpData := makeHttp(span) + filtered, httpData := makeHTTP(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -47,16 +48,16 @@ func TestClientSpanWithUrlAttribute(t *testing.T) { func TestClientSpanWithSchemeHostTargetAttributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "https" attributes[HostAttribute] = "api.example.com" attributes[TargetAttribute] = "/users/junit" attributes[StatusCodeAttribute] = 200 attributes["user.id"] = "junit" - span := constructHttpClientSpan(attributes) + span := constructHTTPClientSpan(attributes) - filtered, httpData := makeHttp(span) + filtered, httpData := makeHTTP(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -71,7 +72,7 @@ func TestClientSpanWithSchemeHostTargetAttributes(t *testing.T) { func TestClientSpanWithPeerAttributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "http" attributes[PeerHostAttribute] = "kb234.example.com" @@ -79,9 +80,9 @@ func TestClientSpanWithPeerAttributes(t *testing.T) { attributes[PeerIpv4Attribute] = "10.8.17.36" attributes[TargetAttribute] = "/users/junit" attributes[StatusCodeAttribute] = 200 - span := constructHttpClientSpan(attributes) + span := constructHTTPClientSpan(attributes) - filtered, httpData := makeHttp(span) + filtered, httpData := makeHTTP(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -96,15 +97,15 @@ func TestClientSpanWithPeerAttributes(t *testing.T) { func TestClientSpanWithPeerIp4Attributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "http" attributes[PeerIpv4Attribute] = "10.8.17.36" attributes[PeerPortAttribute] = "8080" attributes[TargetAttribute] = "/users/junit" - span := constructHttpClientSpan(attributes) + span := constructHTTPClientSpan(attributes) - filtered, httpData := makeHttp(span) + filtered, httpData := makeHTTP(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() @@ -118,15 +119,15 @@ func TestClientSpanWithPeerIp4Attributes(t *testing.T) { func TestClientSpanWithPeerIp6Attributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "https" attributes[PeerIpv6Attribute] = "2001:db8:85a3::8a2e:370:7334" attributes[PeerPortAttribute] = "443" attributes[TargetAttribute] = "/users/junit" - span := constructHttpClientSpan(attributes) + span := constructHTTPClientSpan(attributes) - filtered, httpData := makeHttp(span) + filtered, httpData := makeHTTP(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() @@ -140,15 +141,15 @@ func TestClientSpanWithPeerIp6Attributes(t *testing.T) { func TestServerSpanWithUrlAttribute(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "GET" attributes[URLAttribute] = "https://api.example.com/users/junit" attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[ClientIpAttribute] = "192.168.15.32" + attributes[ClientIPAttribute] = "192.168.15.32" attributes[StatusCodeAttribute] = 200 - span := constructHttpServerSpan(attributes) + span := constructHTTPServerSpan(attributes) - filtered, httpData := makeHttp(span) + filtered, httpData := makeHTTP(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -163,17 +164,17 @@ func TestServerSpanWithUrlAttribute(t *testing.T) { func TestServerSpanWithSchemeHostTargetAttributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "https" attributes[HostAttribute] = "api.example.com" attributes[TargetAttribute] = "/users/junit" attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[ClientIpAttribute] = "192.168.15.32" + attributes[ClientIPAttribute] = "192.168.15.32" attributes[StatusCodeAttribute] = 200 - span := constructHttpServerSpan(attributes) + span := constructHTTPServerSpan(attributes) - filtered, httpData := makeHttp(span) + filtered, httpData := makeHTTP(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -188,18 +189,18 @@ func TestServerSpanWithSchemeHostTargetAttributes(t *testing.T) { func TestServerSpanWithSchemeServernamePortTargetAttributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "https" attributes[ServerNameAttribute] = "api.example.com" attributes[PortAttribute] = 443 attributes[TargetAttribute] = "/users/junit" attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[ClientIpAttribute] = "192.168.15.32" + attributes[ClientIPAttribute] = "192.168.15.32" attributes[StatusCodeAttribute] = 200 - span := constructHttpServerSpan(attributes) + span := constructHTTPServerSpan(attributes) - filtered, httpData := makeHttp(span) + filtered, httpData := makeHTTP(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -214,20 +215,20 @@ func TestServerSpanWithSchemeServernamePortTargetAttributes(t *testing.T) { func TestServerSpanWithSchemeNamePortTargetAttributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "http" attributes[HostNameAttribute] = "kb234.example.com" attributes[PortAttribute] = 8080 attributes[TargetAttribute] = "/users/junit" attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[ClientIpAttribute] = "192.168.15.32" + attributes[ClientIPAttribute] = "192.168.15.32" attributes[StatusCodeAttribute] = 200 - span := constructHttpServerSpan(attributes) + span := constructHTTPServerSpan(attributes) timeEvents := constructTimedEventsWithReceivedMessageEvent(span.EndTime) span.TimeEvents = &timeEvents - filtered, httpData := makeHttp(span) + filtered, httpData := makeHTTP(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -242,12 +243,12 @@ func TestServerSpanWithSchemeNamePortTargetAttributes(t *testing.T) { func TestHttpStatusFromSpanStatus(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "GET" attributes[URLAttribute] = "https://api.example.com/users/junit" - span := constructHttpClientSpan(attributes) + span := constructHTTPClientSpan(attributes) - filtered, httpData := makeHttp(span) + filtered, httpData := makeHTTP(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -260,7 +261,7 @@ func TestHttpStatusFromSpanStatus(t *testing.T) { assert.True(t, strings.Contains(jsonStr, "200")) } -func constructHttpClientSpan(attributes map[string]interface{}) *tracepb.Span { +func constructHTTPClientSpan(attributes map[string]interface{}) *tracepb.Span { endTime := time.Now().Round(time.Second) startTime := endTime.Add(-90 * time.Second) spanAttributes := constructSpanAttributes(attributes) @@ -294,7 +295,7 @@ func constructHttpClientSpan(attributes map[string]interface{}) *tracepb.Span { } } -func constructHttpServerSpan(attributes map[string]interface{}) *tracepb.Span { +func constructHTTPServerSpan(attributes map[string]interface{}) *tracepb.Span { endTime := time.Now().Round(time.Second) startTime := endTime.Add(-90 * time.Second) spanAttributes := constructSpanAttributes(attributes) diff --git a/exporter/awsxrayexporter/translator/segment.go b/exporter/awsxrayexporter/translator/segment.go index 72f1754912bf..1f605d9ade42 100644 --- a/exporter/awsxrayexporter/translator/segment.go +++ b/exporter/awsxrayexporter/translator/segment.go @@ -17,25 +17,21 @@ package translator import ( "encoding/binary" "encoding/hex" - resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" - tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" - "github.com/golang/protobuf/ptypes/timestamp" - tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" "math/rand" "reflect" "regexp" "sync" "time" + + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + "github.com/golang/protobuf/ptypes/timestamp" + tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" ) +// OpenTelemetry Semantic Convention values for general Span attribute names. const ( - // Attributes recorded on the span for the requests. - // Only trace exporters will need them. ComponentAttribute = "component" - HttpComponentType = "http" - GrpcComponentType = "grpc" - DbComponentType = "db" - MsgComponentType = "messaging" PeerAddressAttribute = "peer.address" PeerHostAttribute = "peer.hostname" PeerIpv4Attribute = "peer.ipv4" @@ -44,6 +40,15 @@ const ( PeerServiceAttribute = "peer.service" ) +// OpenTelemetry Semantic Convention values for component attribute values. +const ( + HTTPComponentType = "http" + GrpcComponentType = "grpc" + DbComponentType = "db" + MsgComponentType = "messaging" +) + +// OpenTelemetry Semantic Convention values for Resource attribute names. const ( ServiceNameAttribute = "service.name" ServiceNamespaceAttribute = "service.namespace" @@ -57,7 +62,7 @@ const ( K8sPodAttribute = "k8s.pod.name" K8sDeploymentAttribute = "k8s.deployment.name" HostHostnameAttribute = "host.hostname" - HostIdAttribute = "host.id" + HostIDAttribute = "host.id" HostNameAttribute = "host.name" HostTypeAttribute = "host.type" CloudProviderAttribute = "cloud.provider" @@ -66,8 +71,8 @@ const ( CloudZoneAttribute = "cloud.zone" ) +// AWS X-Ray acceptable values for origin field. const ( - // OriginEC2 span originated from EC2 OriginEC2 = "AWS::EC2::Instance" OriginECS = "AWS::ECS::Container" OriginEB = "AWS::ElasticBeanstalk::Environment" @@ -100,6 +105,7 @@ const ( identifierOffset = 11 // offset of identifier within traceID ) +// Segment provides the shape for unmarshalling segment data. type Segment struct { // Required TraceID string `json:"trace_id,omitempty"` @@ -136,6 +142,7 @@ type Segment struct { Metadata map[string]map[string]interface{} `json:"metadata,omitempty"` } +// MakeSegmentDocumentString converts an Otel Span to an X-Ray Segment and then serialzies to JSON func MakeSegmentDocumentString(name string, span *tracepb.Span, userAttribute string) (string, error) { segment := MakeSegment(name, span, userAttribute) w := borrow() @@ -147,18 +154,19 @@ func MakeSegmentDocumentString(name string, span *tracepb.Span, userAttribute st return jsonStr, nil } +// MakeSegment converts an Otel Span to an X-Ray Segment func MakeSegment(name string, span *tracepb.Span, userAttribute string) Segment { var ( traceID = convertToAmazonTraceID(span.TraceId) startTime = timestampToFloatSeconds(span.StartTime, span.StartTime) endTime = timestampToFloatSeconds(span.EndTime, span.StartTime) - httpfiltered, http = makeHttp(span) + httpfiltered, http = makeHTTP(span) isError, isFault, causefiltered, cause = makeCause(span.Status, httpfiltered) isThrottled = span.Status.Code == tracetranslator.OCResourceExhausted origin = determineAwsOrigin(span.Resource) awsfiltered, aws = makeAws(causefiltered, span.Resource) service = makeService(span.Resource) - sqlfiltered, sql = makeSql(awsfiltered) + sqlfiltered, sql = makeSQL(awsfiltered) user, annotations = makeAnnotations(sqlfiltered, userAttribute) namespace string ) @@ -193,6 +201,28 @@ func MakeSegment(name string, span *tracepb.Span, userAttribute string) Segment } } +// NewTraceID generates a new valid X-Ray TraceID +func NewTraceID() []byte { + var r [16]byte + epoch := time.Now().Unix() + binary.BigEndian.PutUint32(r[0:4], uint32(epoch)) + _, err := rand.Read(r[4:]) + if err != nil { + panic(err) + } + return r[:] +} + +// NewSegmentID generates a new valid X-Ray SegmentID +func NewSegmentID() []byte { + var r [8]byte + _, err := rand.Read(r[:]) + if err != nil { + panic(err) + } + return r[:] +} + func determineAwsOrigin(resource *resourcepb.Resource) string { origin := OriginEC2 if resource == nil { @@ -332,23 +362,3 @@ func fixAnnotationKey(key string) string { return key } - -func NewTraceID() []byte { - var r [16]byte - epoch := time.Now().Unix() - binary.BigEndian.PutUint32(r[0:4], uint32(epoch)) - _, err := rand.Read(r[4:]) - if err != nil { - panic(err) - } - return r[:] -} - -func NewSegmentID() []byte { - var r [8]byte - _, err := rand.Read(r[:]) - if err != nil { - panic(err) - } - return r[:] -} diff --git a/exporter/awsxrayexporter/translator/segment_test.go b/exporter/awsxrayexporter/translator/segment_test.go index 819c072d8647..33f41df774dd 100644 --- a/exporter/awsxrayexporter/translator/segment_test.go +++ b/exporter/awsxrayexporter/translator/segment_test.go @@ -16,15 +16,16 @@ package translator import ( "fmt" + "reflect" + "strings" + "testing" + "time" + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" "github.com/golang/protobuf/ptypes/timestamp" tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" "github.com/stretchr/testify/assert" - "reflect" - "strings" - "testing" - "time" ) func TestClientSpanWithGrpcComponent(t *testing.T) { @@ -50,22 +51,22 @@ func TestClientSpanWithGrpcComponent(t *testing.T) { func TestClientSpanWithAwsSdkClient(t *testing.T) { spanName := "AmazonDynamoDB.getItem" - parentSpanId := NewSegmentID() + parentSpanID := NewSegmentID() userAttribute := "originating.user" user := "testing" attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "POST" attributes[SchemeAttribute] = "https" attributes[HostAttribute] = "dynamodb.us-east-1.amazonaws.com" attributes[TargetAttribute] = "/" attributes[UserAgentAttribute] = "aws-sdk-java/1.11.613 Windows_10/10.0 OpenJDK_64-Bit_server_VM/11.0.4+11-LTS" attributes[AwsOperationAttribute] = "GetItem" - attributes[AwsRequestIdAttribute] = "18BO1FEPJSSAOGNJEDPTPCMIU7VV4KQNSO5AEMVJF66Q9ASUAAJG" + attributes[AwsRequestIDAttribute] = "18BO1FEPJSSAOGNJEDPTPCMIU7VV4KQNSO5AEMVJF66Q9ASUAAJG" attributes[AwsTableNameAttribute] = "otel-dev-Testing" attributes[userAttribute] = user labels := constructDefaultResourceLabels() - span := constructClientSpan(parentSpanId, spanName, 0, "OK", attributes, labels) + span := constructClientSpan(parentSpanID, spanName, 0, "OK", attributes, labels) jsonStr, err := MakeSegmentDocumentString(spanName, span, userAttribute) @@ -78,12 +79,12 @@ func TestClientSpanWithAwsSdkClient(t *testing.T) { func TestServerSpanWithInternalServerError(t *testing.T) { spanName := "/api/locations" - parentSpanId := NewSegmentID() + parentSpanID := NewSegmentID() userAttribute := "originating.user" user := "testing" errorMessage := "java.lang.NullPointerException" attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "POST" attributes[URLAttribute] = "https://api.example.org/api/locations" attributes[TargetAttribute] = "/api/locations" @@ -91,7 +92,7 @@ func TestServerSpanWithInternalServerError(t *testing.T) { attributes[userAttribute] = user attributes[ErrorKindAttribute] = "java.lang.NullPointerException" labels := constructDefaultResourceLabels() - span := constructServerSpan(parentSpanId, spanName, tracetranslator.OCInternal, errorMessage, attributes, labels) + span := constructServerSpan(parentSpanID, spanName, tracetranslator.OCInternal, errorMessage, attributes, labels) timeEvents := constructTimedEventsWithSentMessageEvent(span.StartTime) span.TimeEvents = &timeEvents @@ -114,7 +115,7 @@ func TestServerSpanWithInternalServerError(t *testing.T) { func TestClientSpanWithDbComponent(t *testing.T) { spanName := "call update_user_preference( ?, ?, ? )" - enterpriseAppId := "25F2E73B-4769-4C79-9DF3-7EBE85D571EA" + enterpriseAppID := "25F2E73B-4769-4C79-9DF3-7EBE85D571EA" attributes := make(map[string]interface{}) attributes[ComponentAttribute] = DbComponentType attributes[DbTypeAttribute] = "sql" @@ -124,7 +125,7 @@ func TestClientSpanWithDbComponent(t *testing.T) { attributes[PeerAddressAttribute] = "mysql://db.dev.example.com:3306" attributes[PeerHostAttribute] = "db.dev.example.com" attributes[PeerPortAttribute] = "3306" - attributes["enterprise.app.id"] = enterpriseAppId + attributes["enterprise.app.id"] = enterpriseAppID labels := constructDefaultResourceLabels() span := constructClientSpan(nil, spanName, 0, "OK", attributes, labels) @@ -147,12 +148,12 @@ func TestClientSpanWithDbComponent(t *testing.T) { jsonStr := w.String() release(w) assert.True(t, strings.Contains(jsonStr, spanName)) - assert.True(t, strings.Contains(jsonStr, enterpriseAppId)) + assert.True(t, strings.Contains(jsonStr, enterpriseAppID)) } func TestClientSpanWithBlankUserAttribute(t *testing.T) { spanName := "call update_user_preference( ?, ?, ? )" - enterpriseAppId := "25F2E73B-4769-4C79-9DF3-7EBE85D571EA" + enterpriseAppID := "25F2E73B-4769-4C79-9DF3-7EBE85D571EA" attributes := make(map[string]interface{}) attributes[ComponentAttribute] = DbComponentType attributes[DbTypeAttribute] = "sql" @@ -162,7 +163,7 @@ func TestClientSpanWithBlankUserAttribute(t *testing.T) { attributes[PeerAddressAttribute] = "mysql://db.dev.example.com:3306" attributes[PeerHostAttribute] = "db.dev.example.com" attributes[PeerPortAttribute] = "3306" - attributes["enterprise.app.id"] = enterpriseAppId + attributes["enterprise.app.id"] = enterpriseAppID labels := constructDefaultResourceLabels() span := constructClientSpan(nil, spanName, 0, "OK", attributes, labels) @@ -185,7 +186,7 @@ func TestClientSpanWithBlankUserAttribute(t *testing.T) { jsonStr := w.String() release(w) assert.True(t, strings.Contains(jsonStr, spanName)) - assert.True(t, strings.Contains(jsonStr, enterpriseAppId)) + assert.True(t, strings.Contains(jsonStr, enterpriseAppID)) } func TestSpanWithInvalidTraceId(t *testing.T) { @@ -211,20 +212,20 @@ func TestSpanWithInvalidTraceId(t *testing.T) { assert.False(t, strings.Contains(jsonStr, "1-11")) } -func constructClientSpan(parentSpanId []byte, name string, code int32, message string, +func constructClientSpan(parentSpanID []byte, name string, code int32, message string, attributes map[string]interface{}, rscLabels map[string]string) *tracepb.Span { var ( - traceId = NewTraceID() - spanId = NewSegmentID() + traceID = NewTraceID() + spanID = NewSegmentID() endTime = time.Now() startTime = endTime.Add(-215 * time.Millisecond) spanAttributes = constructSpanAttributes(attributes) ) return &tracepb.Span{ - TraceId: traceId, - SpanId: spanId, - ParentSpanId: parentSpanId, + TraceId: traceID, + SpanId: spanID, + ParentSpanId: parentSpanID, Name: &tracepb.TruncatableString{Value: name}, Kind: tracepb.Span_CLIENT, StartTime: convertTimeToTimestamp(startTime), @@ -243,20 +244,20 @@ func constructClientSpan(parentSpanId []byte, name string, code int32, message s } } -func constructServerSpan(parentSpanId []byte, name string, code int32, message string, +func constructServerSpan(parentSpanID []byte, name string, code int32, message string, attributes map[string]interface{}, rscLabels map[string]string) *tracepb.Span { var ( - traceId = NewTraceID() - spanId = NewSegmentID() + traceID = NewTraceID() + spanID = NewSegmentID() endTime = time.Now() startTime = endTime.Add(-215 * time.Millisecond) spanAttributes = constructSpanAttributes(attributes) ) return &tracepb.Span{ - TraceId: traceId, - SpanId: spanId, - ParentSpanId: parentSpanId, + TraceId: traceID, + SpanId: spanID, + ParentSpanId: parentSpanID, Name: &tracepb.TruncatableString{Value: name}, Kind: tracepb.Span_SERVER, StartTime: convertTimeToTimestamp(startTime), @@ -332,7 +333,7 @@ func constructTimedEventsWithReceivedMessageEvent(tm *timestamp.Timestamp) trace eventAttrMap[MessageTypeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ StringValue: &tracepb.TruncatableString{Value: "RECEIVED"}, }} - eventAttrMap[MessageIdAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + eventAttrMap[MessageIDAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ IntValue: 1, }} eventAttrMap[MessageCompressedSizeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ @@ -369,7 +370,7 @@ func constructTimedEventsWithSentMessageEvent(tm *timestamp.Timestamp) tracepb.S eventAttrMap[MessageTypeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ StringValue: &tracepb.TruncatableString{Value: "SENT"}, }} - eventAttrMap[MessageIdAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + eventAttrMap[MessageIDAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ IntValue: 1, }} eventAttrMap[MessageUncompressedSizeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ diff --git a/exporter/awsxrayexporter/translator/service_test.go b/exporter/awsxrayexporter/translator/service_test.go index 4ec6895beada..0a6fb6f87462 100644 --- a/exporter/awsxrayexporter/translator/service_test.go +++ b/exporter/awsxrayexporter/translator/service_test.go @@ -15,10 +15,11 @@ package translator import ( - resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" - "github.com/stretchr/testify/assert" "strings" "testing" + + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + "github.com/stretchr/testify/assert" ) func TestServiceFromResource(t *testing.T) { diff --git a/exporter/awsxrayexporter/translator/sql.go b/exporter/awsxrayexporter/translator/sql.go index 7e27df76a1ed..1b20757c8cd0 100644 --- a/exporter/awsxrayexporter/translator/sql.go +++ b/exporter/awsxrayexporter/translator/sql.go @@ -14,6 +14,7 @@ package translator +// OpenTelemetry Semantic Convention attribute names for database related attributes const ( DbTypeAttribute = "db.type" DbInstanceAttribute = "db.instance" @@ -33,24 +34,24 @@ type SQLData struct { SanitizedQuery string `json:"sanitized_query,omitempty"` } -func makeSql(attributes map[string]string) (map[string]string, *SQLData) { +func makeSQL(attributes map[string]string) (map[string]string, *SQLData) { var ( filtered = make(map[string]string) sqlData SQLData - dbUrl string + dbURL string dbType string dbInstance string dbStatement string dbUser string ) componentType := attributes[ComponentAttribute] - if componentType == HttpComponentType || componentType == GrpcComponentType { + if componentType == HTTPComponentType || componentType == GrpcComponentType { return attributes, nil } for key, value := range attributes { switch key { case PeerAddressAttribute: - dbUrl = value + dbURL = value case DbTypeAttribute: dbType = value case DbInstanceAttribute: @@ -63,10 +64,10 @@ func makeSql(attributes map[string]string) (map[string]string, *SQLData) { filtered[key] = value } } - if dbUrl == "" { - dbUrl = "localhost" + if dbURL == "" { + dbURL = "localhost" } - url := dbUrl + "/" + dbInstance + url := dbURL + "/" + dbInstance sqlData = SQLData{ URL: url, DatabaseType: dbType, diff --git a/exporter/awsxrayexporter/translator/sql_test.go b/exporter/awsxrayexporter/translator/sql_test.go index f772324fb070..234ef9a27782 100644 --- a/exporter/awsxrayexporter/translator/sql_test.go +++ b/exporter/awsxrayexporter/translator/sql_test.go @@ -15,9 +15,10 @@ package translator import ( - "github.com/stretchr/testify/assert" "strings" "testing" + + "github.com/stretchr/testify/assert" ) func TestClientSpanWithStatementAttribute(t *testing.T) { @@ -31,7 +32,7 @@ func TestClientSpanWithStatementAttribute(t *testing.T) { attributes[PeerHostAttribute] = "db.example.com" attributes[PeerPortAttribute] = "3306" - filtered, sqlData := makeSql(attributes) + filtered, sqlData := makeSQL(attributes) assert.NotNil(t, filtered) assert.NotNil(t, sqlData) @@ -46,7 +47,7 @@ func TestClientSpanWithStatementAttribute(t *testing.T) { func TestClientSpanWithHttpComponentAttribute(t *testing.T) { attributes := make(map[string]string) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[DbTypeAttribute] = "sql" attributes[DbInstanceAttribute] = "customers" attributes[DbStatementAttribute] = "SELECT * FROM user WHERE user_id = ?" @@ -55,7 +56,7 @@ func TestClientSpanWithHttpComponentAttribute(t *testing.T) { attributes[PeerHostAttribute] = "db.example.com" attributes[PeerPortAttribute] = "3306" - filtered, sqlData := makeSql(attributes) + filtered, sqlData := makeSQL(attributes) assert.NotNil(t, filtered) assert.Nil(t, sqlData) From e50934cf018f0caeb868c7262a224665ab1adafe Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Wed, 20 Nov 2019 15:46:05 -0600 Subject: [PATCH 11/59] initial dev of export handler --- exporter/awsxrayexporter/README.md | 23 +++++++++++++++++ exporter/awsxrayexporter/awsxray.go | 13 +++++++--- exporter/awsxrayexporter/awsxray_test.go | 7 +++++- exporter/awsxrayexporter/config.go | 8 +++--- exporter/awsxrayexporter/{conn => }/conn.go | 25 +++++++++++-------- .../awsxrayexporter/{conn => }/conn_test.go | 13 +++++----- exporter/awsxrayexporter/factory.go | 5 ++-- exporter/awsxrayexporter/factory_test.go | 2 +- .../awsxrayexporter/{conn => }/xray_client.go | 6 +++-- 9 files changed, 71 insertions(+), 31 deletions(-) rename exporter/awsxrayexporter/{conn => }/conn.go (92%) rename exporter/awsxrayexporter/{conn => }/conn_test.go (86%) rename exporter/awsxrayexporter/{conn => }/xray_client.go (90%) diff --git a/exporter/awsxrayexporter/README.md b/exporter/awsxrayexporter/README.md index 3fee707dcf90..fb545fc52137 100644 --- a/exporter/awsxrayexporter/README.md +++ b/exporter/awsxrayexporter/README.md @@ -39,3 +39,26 @@ by the Span Resource object. X-Ray uses this data to generate inferred segments ## Exporter Configuration +The following exporter configuration parameters are supported. + +| Name | Description | Default | +| :---------------- | :--------------------------------------------------------------------- | ------- | +| `num_workers` | Maximum number of concurrent calls to AWS X-Ray to upload documents. | 8 | +| `endpoint` | Optionally override the default X-Ray service endpoint. | | +| `request_timeout` | Number of seconds before timing out a request. | 30 | +| `no_verify_ssl` | Enable or disable TLS certificate verification. | false | +| `proxy_address` | Upload segments to AWS X-Ray through a proxy. | | +| `region` | Send segments to AWS X-Ray service in a specific region. | | +| `local_mode` | Local mode to skip EC2 instance metadata check. | false | +| `resource_arn` | Amazon Resource Name (ARN) of the AWS resource running the collector. | | +| `role_arn` | IAM role to upload segments to a different account. | | +| `user_attribute` | Span attribute name which holds the originating user's login. | | + + +## AWS Credential Configuration + +This exporter follows default credential resolution for the +[aws-sdk-go](https://docs.aws.amazon.com/sdk-for-go/api/index.html). + +Follow the [guidelines](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html) for the +credential configuration. diff --git a/exporter/awsxrayexporter/awsxray.go b/exporter/awsxrayexporter/awsxray.go index 89f6c5dfd541..624f6a80f0a7 100644 --- a/exporter/awsxrayexporter/awsxray.go +++ b/exporter/awsxrayexporter/awsxray.go @@ -28,17 +28,24 @@ import ( // NewTraceExporter creates an exporter.TraceExporter that just drops the // received data and logs debugging messages. -func NewTraceExporter(config configmodels.Exporter, logger *zap.Logger) (exporter.TraceExporter, error) { +func NewTraceExporter(config configmodels.Exporter, logger *zap.Logger, cn connAttr) (exporter.TraceExporter, error) { typeLog := zap.String("type", config.Type()) nameLog := zap.String("name", config.Name()) userAttribute := config.(*Config).UserAttribute + awsConfig, session := GetAWSConfigSession(logger, cn, config.(*Config)) + xrayClient := NewXRay(logger, awsConfig, session) return exporterhelper.NewTraceExporter( config, func(ctx context.Context, td consumerdata.TraceData) (int, error) { logger.Info("TraceExporter", typeLog, nameLog, zap.Int("#spans", len(td.Spans))) droppedSpans, input := assembleRequest(userAttribute, td, logger) - logger.Info("request: " + input.String()) - return droppedSpans, nil + logger.Debug("request: " + input.String()) + output, err := xrayClient.PutTraceSegments(input) + logger.Debug("response: " + output.String()) + if output != nil && output.UnprocessedTraceSegments != nil { + droppedSpans += len(output.UnprocessedTraceSegments) + } + return droppedSpans, err }, exporterhelper.WithTracing(true), exporterhelper.WithMetrics(false), diff --git a/exporter/awsxrayexporter/awsxray_test.go b/exporter/awsxrayexporter/awsxray_test.go index de5d9bb0f67f..9851c39df753 100644 --- a/exporter/awsxrayexporter/awsxray_test.go +++ b/exporter/awsxrayexporter/awsxray_test.go @@ -43,7 +43,12 @@ func TestTraceExport(t *testing.T) { func initializeTraceExporter() exporter.TraceExporter { logger := zap.NewNop() factory := Factory{} - traceExporter, err := factory.CreateTraceExporter(logger, factory.CreateDefaultConfig()) + config := factory.CreateDefaultConfig() + config.(*Config).Region = "us-east-1" + config.(*Config).LocalMode = true + mconn := new(mockConn) + mconn.sn = getDefaultSession(logger) + traceExporter, err := NewTraceExporter(config, logger, mconn) if err != nil { panic(err) } diff --git a/exporter/awsxrayexporter/config.go b/exporter/awsxrayexporter/config.go index a9c6e2cf80f2..9373acf0263f 100644 --- a/exporter/awsxrayexporter/config.go +++ b/exporter/awsxrayexporter/config.go @@ -19,9 +19,9 @@ import "github.com/open-telemetry/opentelemetry-collector/config/configmodels" // Config defines configuration for AWS X-Ray exporter. type Config struct { configmodels.ExporterSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct. - // Maximum number of concurrent calls to AWS X-Ray to upload segment documents. + // Maximum number of concurrent calls to AWS X-Ray to upload documents. Concurrency int `mapstructure:"num_workers"` - // X-Ray service endpoint to which the daemon sends segment documents. + // X-Ray service endpoint to which the collector sends segment documents. Endpoint string `mapstructure:"endpoint"` // Number of seconds before timing out a request. RequestTimeout int `mapstructure:"request_timeout"` @@ -33,10 +33,10 @@ type Config struct { Region string `mapstructure:"region"` // Local mode to skip EC2 instance metadata check. LocalMode bool `mapstructure:"local_mode"` - // Amazon Resource Name (ARN) of the AWS resource running the daemon. + // Amazon Resource Name (ARN) of the AWS resource running the collector. ResourceARN string `mapstructure:"resource_arn"` // IAM role to upload segments to a different account. RoleARN string `mapstructure:"role_arn"` - // Span attribute name which holds the originating user's login + // Span attribute name which holds the originating user's login. UserAttribute string `mapstructure:"user_attribute"` } diff --git a/exporter/awsxrayexporter/conn/conn.go b/exporter/awsxrayexporter/conn.go similarity index 92% rename from exporter/awsxrayexporter/conn/conn.go rename to exporter/awsxrayexporter/conn.go index 175738a39aa3..db027d0c84d2 100644 --- a/exporter/awsxrayexporter/conn/conn.go +++ b/exporter/awsxrayexporter/conn.go @@ -1,4 +1,5 @@ // Copyright 2019, OpenTelemetry Authors +// Portions of this file Copyright 2018-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,7 +13,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package conn +package awsxrayexporter import ( "crypto/tls" @@ -29,13 +30,12 @@ import ( "github.com/aws/aws-sdk-go/aws/endpoints" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/sts" - "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter" "go.uber.org/zap" "golang.org/x/net/http2" ) type connAttr interface { - newAWSSession(roleArn string, region string) *session.Session + newAWSSession(logger *zap.Logger, roleArn string, region string) *session.Session getEC2Region(s *session.Session) (string, error) } @@ -54,7 +54,8 @@ const ( ) // getNewHTTPClient returns new HTTP client instance with provided configuration. -func getNewHTTPClient(logger *zap.Logger, maxIdle int, requestTimeout int, noVerify bool, proxyAddress string) *http.Client { +func getNewHTTPClient(logger *zap.Logger, maxIdle int, requestTimeout int, noVerify bool, + proxyAddress string) *http.Client { logger.Debug("Using proxy address: ", zap.String("proxyAddr", proxyAddress), ) @@ -108,7 +109,7 @@ func getProxyURL(finalProxyAddress string) *url.URL { } // GetAWSConfigSession returns AWS config and session instances. -func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *awsxrayexporter.Config) (*aws.Config, *session.Session) { +func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *Config) (*aws.Config, *session.Session) { var s *session.Session var err error var awsRegion string @@ -133,7 +134,7 @@ func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *awsxrayexporter.C //log.Error("Cannot fetch region variable from config file, environment variables and ec2 metadata.") os.Exit(1) } - s = cn.newAWSSession(cfg.RoleARN, awsRegion) + s = cn.newAWSSession(logger, cfg.RoleARN, awsRegion) config := &aws.Config{ Region: aws.String(awsRegion), @@ -146,7 +147,7 @@ func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *awsxrayexporter.C } // ProxyServerTransport configures HTTP transport for TCP Proxy Server. -func ProxyServerTransport(config *awsxrayexporter.Config) *http.Transport { +func ProxyServerTransport(config *Config) *http.Transport { tls := &tls.Config{ InsecureSkipVerify: config.NoVerifySSL, } @@ -219,7 +220,8 @@ func getSTSCreds(logger *zap.Logger, region string, roleArn string) *credentials // getSTSCredsFromRegionEndpoint fetches STS credentials for provided roleARN from regional endpoint. // AWS STS recommends that you provide both the Region and endpoint when you make calls to a Regional endpoint. // Reference: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html#id_credentials_temp_enable-regions_writing_code -func getSTSCredsFromRegionEndpoint(logger *zap.Logger, sess *session.Session, region string, roleArn string) *credentials.Credentials { +func getSTSCredsFromRegionEndpoint(logger *zap.Logger, sess *session.Session, region string, + roleArn string) *credentials.Credentials { regionalEndpoint := getSTSRegionalEndpoint(region) // if regionalEndpoint is "", the STS endpoint is Global endpoint for classic regions except ap-east-1 - (HKG) // for other opt-in regions, region value will create STS regional endpoint. @@ -230,9 +232,10 @@ func getSTSCredsFromRegionEndpoint(logger *zap.Logger, sess *session.Session, re return stscreds.NewCredentialsWithClient(st, roleArn) } -// getSTSCredsFromPrimaryRegionEndpoint fetches STS credentials for provided roleARN from primary region endpoint in the -// respective partition. -func getSTSCredsFromPrimaryRegionEndpoint(logger *zap.Logger, t *session.Session, roleArn string, region string) *credentials.Credentials { +// getSTSCredsFromPrimaryRegionEndpoint fetches STS credentials for provided roleARN from primary region endpoint in +// the respective partition. +func getSTSCredsFromPrimaryRegionEndpoint(logger *zap.Logger, t *session.Session, roleArn string, + region string) *credentials.Credentials { partitionID := getPartition(region) if partitionID == endpoints.AwsPartitionID { return getSTSCredsFromRegionEndpoint(logger, t, endpoints.UsEast1RegionID, roleArn) diff --git a/exporter/awsxrayexporter/conn/conn_test.go b/exporter/awsxrayexporter/conn_test.go similarity index 86% rename from exporter/awsxrayexporter/conn/conn_test.go rename to exporter/awsxrayexporter/conn_test.go index c9fcdb477182..c5823711420b 100644 --- a/exporter/awsxrayexporter/conn/conn_test.go +++ b/exporter/awsxrayexporter/conn_test.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package conn +package awsxrayexporter import ( "errors" @@ -22,7 +22,6 @@ import ( "testing" "github.com/aws/aws-sdk-go/aws/session" - "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter" "github.com/open-telemetry/opentelemetry-collector/config" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" @@ -47,7 +46,7 @@ func (c *mockConn) getEC2Region(s *session.Session) (string, error) { return ec2Region, nil } -func (c *mockConn) newAWSSession(roleArn string, region string) *session.Session { +func (c *mockConn) newAWSSession(logger *zap.Logger, roleArn string, region string) *session.Session { return c.sn } @@ -83,15 +82,15 @@ func TestRegionEnv(t *testing.T) { assert.Equal(t, *cfg.Region, region, "Region value fetched from environment") } -func loadExporterConfig(t *testing.T) *awsxrayexporter.Config { +func loadExporterConfig(t *testing.T) *Config { factories, err := config.ExampleComponents() assert.Nil(t, err) - factory := &awsxrayexporter.Factory{} + factory := &Factory{} factories.Exporters[factory.Type()] = factory otelcfg, err := config.LoadConfigFile( - t, path.Join(".", "../testdata", "config.yaml"), factories, + t, path.Join(".", "testdata", "config.yaml"), factories, ) - xrayExporterCfg := otelcfg.Exporters["awsxray"].(*awsxrayexporter.Config) + xrayExporterCfg := otelcfg.Exporters["awsxray"].(*Config) return xrayExporterCfg } diff --git a/exporter/awsxrayexporter/factory.go b/exporter/awsxrayexporter/factory.go index 7e00086fd41c..149a87a3f50d 100644 --- a/exporter/awsxrayexporter/factory.go +++ b/exporter/awsxrayexporter/factory.go @@ -15,6 +15,7 @@ package awsxrayexporter import ( + "github.com/open-telemetry/opentelemetry-collector/config/configerror" "github.com/open-telemetry/opentelemetry-collector/config/configmodels" "github.com/open-telemetry/opentelemetry-collector/exporter" "go.uber.org/zap" @@ -57,11 +58,11 @@ func (f *Factory) CreateDefaultConfig() configmodels.Exporter { // CreateTraceExporter creates a trace exporter based on this config. func (f *Factory) CreateTraceExporter(logger *zap.Logger, cfg configmodels.Exporter) (exporter.TraceExporter, error) { eCfg := cfg.(*Config) - return NewTraceExporter(eCfg, logger) + return NewTraceExporter(eCfg, logger, &Conn{}) } // CreateMetricsExporter always returns nil. func (f *Factory) CreateMetricsExporter(logger *zap.Logger, cfg configmodels.Exporter) (exporter.MetricsExporter, error) { - return nil, nil + return nil, configerror.ErrDataTypeIsNotSupported } diff --git a/exporter/awsxrayexporter/factory_test.go b/exporter/awsxrayexporter/factory_test.go index 0ee945cff364..f6cf4a88b0d9 100644 --- a/exporter/awsxrayexporter/factory_test.go +++ b/exporter/awsxrayexporter/factory_test.go @@ -62,6 +62,6 @@ func TestCreateMetricsExporter(t *testing.T) { require.NoError(t, err) exporter, err := factory.CreateMetricsExporter(logger, cfg.Exporters["awsxray/customname"]) - assert.Nil(t, err) + assert.NotNil(t, err) assert.Nil(t, exporter) } diff --git a/exporter/awsxrayexporter/conn/xray_client.go b/exporter/awsxrayexporter/xray_client.go similarity index 90% rename from exporter/awsxrayexporter/conn/xray_client.go rename to exporter/awsxrayexporter/xray_client.go index c79d7a2cd075..3f4c8eb3728c 100644 --- a/exporter/awsxrayexporter/conn/xray_client.go +++ b/exporter/awsxrayexporter/xray_client.go @@ -1,4 +1,5 @@ // Copyright 2019, OpenTelemetry Authors +// Portions of this file Copyright 2018-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,7 +13,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package conn +package awsxrayexporter import ( "os" @@ -62,7 +63,8 @@ func NewXRay(logger *zap.Logger, awsConfig *aws.Config, s *session.Session) XRay x.Handlers.Sign.PushFrontNamed(request.NamedHandler{ Name: "tracing.TimestampHandler", Fn: func(r *request.Request) { - r.HTTPRequest.Header.Set("X-Amzn-Xray-Timestamp", strconv.FormatFloat(float64(time.Now().UnixNano())/float64(time.Second), 'f', 9, 64)) + r.HTTPRequest.Header.Set("X-Amzn-Xray-Timestamp", + strconv.FormatFloat(float64(time.Now().UnixNano())/float64(time.Second), 'f', 9, 64)) }, }) From 7548f34bdef1810adaadc4134519522cfa869798 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Wed, 20 Nov 2019 16:14:39 -0600 Subject: [PATCH 12/59] added to component list --- cmd/otelcontribcol/components.go | 6 +++++- exporter/awsxrayexporter/awsxray.go | 3 ++- exporter/awsxrayexporter/awsxray_test.go | 3 ++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/cmd/otelcontribcol/components.go b/cmd/otelcontribcol/components.go index 9a2e919d011a..e78f0252cd7b 100644 --- a/cmd/otelcontribcol/components.go +++ b/cmd/otelcontribcol/components.go @@ -21,6 +21,7 @@ import ( "github.com/open-telemetry/opentelemetry-collector/oterr" "github.com/open-telemetry/opentelemetry-collector/receiver" + //"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/stackdriverexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinscribereceiver" ) @@ -41,7 +42,10 @@ func components() (config.Factories, error) { errs = append(errs, err) } - exporters := []exporter.Factory{&stackdriverexporter.Factory{}} + exporters := []exporter.Factory{ + &stackdriverexporter.Factory{}, + //&awsxrayexporter.Factory{}, + } for _, exp := range factories.Exporters { exporters = append(exporters, exp) } diff --git a/exporter/awsxrayexporter/awsxray.go b/exporter/awsxrayexporter/awsxray.go index 624f6a80f0a7..685deb873109 100644 --- a/exporter/awsxrayexporter/awsxray.go +++ b/exporter/awsxrayexporter/awsxray.go @@ -18,12 +18,13 @@ import ( "context" "github.com/aws/aws-sdk-go/service/xray" - "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter/translator" "github.com/open-telemetry/opentelemetry-collector/config/configmodels" "github.com/open-telemetry/opentelemetry-collector/consumer/consumerdata" "github.com/open-telemetry/opentelemetry-collector/exporter" "github.com/open-telemetry/opentelemetry-collector/exporter/exporterhelper" "go.uber.org/zap" + + "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter/translator" ) // NewTraceExporter creates an exporter.TraceExporter that just drops the diff --git a/exporter/awsxrayexporter/awsxray_test.go b/exporter/awsxrayexporter/awsxray_test.go index 9851c39df753..c2a6057b29bc 100644 --- a/exporter/awsxrayexporter/awsxray_test.go +++ b/exporter/awsxrayexporter/awsxray_test.go @@ -25,11 +25,12 @@ import ( tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" "github.com/golang/protobuf/ptypes/timestamp" "github.com/golang/protobuf/ptypes/wrappers" - "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter/translator" "github.com/open-telemetry/opentelemetry-collector/consumer/consumerdata" "github.com/open-telemetry/opentelemetry-collector/exporter" "github.com/stretchr/testify/assert" "go.uber.org/zap" + + "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter/translator" ) func TestTraceExport(t *testing.T) { From 1e3e047c6023b8118ea17c8ece0979b3bf039b66 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Thu, 21 Nov 2019 14:15:32 -0600 Subject: [PATCH 13/59] fix issues raised during code review --- cmd/otelcontribcol/components.go | 6 +- exporter/awsxrayexporter/awsxray.go | 7 +- exporter/awsxrayexporter/awsxray_test.go | 2 +- exporter/awsxrayexporter/conn.go | 100 +++++++++++------- exporter/awsxrayexporter/conn_test.go | 10 +- exporter/awsxrayexporter/translator/aws.go | 36 +++---- .../awsxrayexporter/translator/aws_test.go | 34 +++--- exporter/awsxrayexporter/translator/cause.go | 14 ++- .../awsxrayexporter/translator/cause_test.go | 12 +-- .../awsxrayexporter/translator/http_test.go | 40 +++---- .../awsxrayexporter/translator/segment.go | 8 +- .../translator/segment_test.go | 22 ++-- .../translator/service_test.go | 4 +- .../awsxrayexporter/translator/sql_test.go | 4 +- .../awsxrayexporter/translator/writer_pool.go | 49 +++++---- .../translator/writer_pool_test.go | 80 ++++++++++++++ 16 files changed, 274 insertions(+), 154 deletions(-) create mode 100644 exporter/awsxrayexporter/translator/writer_pool_test.go diff --git a/cmd/otelcontribcol/components.go b/cmd/otelcontribcol/components.go index e78f0252cd7b..9a2e919d011a 100644 --- a/cmd/otelcontribcol/components.go +++ b/cmd/otelcontribcol/components.go @@ -21,7 +21,6 @@ import ( "github.com/open-telemetry/opentelemetry-collector/oterr" "github.com/open-telemetry/opentelemetry-collector/receiver" - //"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/stackdriverexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinscribereceiver" ) @@ -42,10 +41,7 @@ func components() (config.Factories, error) { errs = append(errs, err) } - exporters := []exporter.Factory{ - &stackdriverexporter.Factory{}, - //&awsxrayexporter.Factory{}, - } + exporters := []exporter.Factory{&stackdriverexporter.Factory{}} for _, exp := range factories.Exporters { exporters = append(exporters, exp) } diff --git a/exporter/awsxrayexporter/awsxray.go b/exporter/awsxrayexporter/awsxray.go index 685deb873109..ef528d1afb86 100644 --- a/exporter/awsxrayexporter/awsxray.go +++ b/exporter/awsxrayexporter/awsxray.go @@ -33,12 +33,15 @@ func NewTraceExporter(config configmodels.Exporter, logger *zap.Logger, cn connA typeLog := zap.String("type", config.Type()) nameLog := zap.String("name", config.Name()) userAttribute := config.(*Config).UserAttribute - awsConfig, session := GetAWSConfigSession(logger, cn, config.(*Config)) + awsConfig, session, err := GetAWSConfigSession(logger, cn, config.(*Config)) + if err != nil { + return nil, err + } xrayClient := NewXRay(logger, awsConfig, session) return exporterhelper.NewTraceExporter( config, func(ctx context.Context, td consumerdata.TraceData) (int, error) { - logger.Info("TraceExporter", typeLog, nameLog, zap.Int("#spans", len(td.Spans))) + logger.Debug("TraceExporter", typeLog, nameLog, zap.Int("#spans", len(td.Spans))) droppedSpans, input := assembleRequest(userAttribute, td, logger) logger.Debug("request: " + input.String()) output, err := xrayClient.PutTraceSegments(input) diff --git a/exporter/awsxrayexporter/awsxray_test.go b/exporter/awsxrayexporter/awsxray_test.go index c2a6057b29bc..3c8f44e55c01 100644 --- a/exporter/awsxrayexporter/awsxray_test.go +++ b/exporter/awsxrayexporter/awsxray_test.go @@ -48,7 +48,7 @@ func initializeTraceExporter() exporter.TraceExporter { config.(*Config).Region = "us-east-1" config.(*Config).LocalMode = true mconn := new(mockConn) - mconn.sn = getDefaultSession(logger) + mconn.sn, _ = getDefaultSession(logger) traceExporter, err := NewTraceExporter(config, logger, mconn) if err != nil { panic(err) diff --git a/exporter/awsxrayexporter/conn.go b/exporter/awsxrayexporter/conn.go index db027d0c84d2..c31dabe673fa 100644 --- a/exporter/awsxrayexporter/conn.go +++ b/exporter/awsxrayexporter/conn.go @@ -35,7 +35,7 @@ import ( ) type connAttr interface { - newAWSSession(logger *zap.Logger, roleArn string, region string) *session.Session + newAWSSession(logger *zap.Logger, roleArn string, region string) (*session.Session, error) getEC2Region(s *session.Session) (string, error) } @@ -53,9 +53,9 @@ const ( STSAwsCnPartitionIDSuffix = ".amazonaws.com.cn" // AWS China partition. ) -// getNewHTTPClient returns new HTTP client instance with provided configuration. -func getNewHTTPClient(logger *zap.Logger, maxIdle int, requestTimeout int, noVerify bool, - proxyAddress string) *http.Client { +// newHTTPClient returns new HTTP client instance with provided configuration. +func newHTTPClient(logger *zap.Logger, maxIdle int, requestTimeout int, noVerify bool, + proxyAddress string) (*http.Client, error) { logger.Debug("Using proxy address: ", zap.String("proxyAddr", proxyAddress), ) @@ -64,7 +64,11 @@ func getNewHTTPClient(logger *zap.Logger, maxIdle int, requestTimeout int, noVer } finalProxyAddress := getProxyAddress(proxyAddress) - proxyURL := getProxyURL(finalProxyAddress) + proxyURL, err := getProxyURL(finalProxyAddress) + if err != nil { + logger.Error("unable to obtain proxy URL", zap.Error(err)) + return nil, err + } transport := &http.Transport{ MaxIdleConnsPerHost: maxIdle, TLSClientConfig: tls, @@ -78,7 +82,7 @@ func getNewHTTPClient(logger *zap.Logger, maxIdle int, requestTimeout int, noVer Transport: transport, Timeout: time.Second * time.Duration(requestTimeout), } - return http + return http, err } func getProxyAddress(proxyAddress string) string { @@ -93,27 +97,28 @@ func getProxyAddress(proxyAddress string) string { return finalProxyAddress } -func getProxyURL(finalProxyAddress string) *url.URL { +func getProxyURL(finalProxyAddress string) (*url.URL, error) { var proxyURL *url.URL var err error if finalProxyAddress != "" { proxyURL, err = url.Parse(finalProxyAddress) - if err != nil { - //log.Errorf("Bad proxy URL: %v", err) - os.Exit(1) - } } else { proxyURL = nil + err = nil } - return proxyURL + return proxyURL, err } // GetAWSConfigSession returns AWS config and session instances. -func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *Config) (*aws.Config, *session.Session) { +func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *Config) (*aws.Config, *session.Session, error) { var s *session.Session var err error var awsRegion string - http := getNewHTTPClient(logger, cfg.Concurrency, cfg.RequestTimeout, cfg.NoVerifySSL, cfg.ProxyAddress) + http, err := newHTTPClient(logger, cfg.Concurrency, cfg.RequestTimeout, cfg.NoVerifySSL, cfg.ProxyAddress) + if err != nil { + logger.Error("unable to obtain proxy URL", zap.Error(err)) + return nil, nil, err + } regionEnv := os.Getenv("AWS_REGION") if cfg.Region == "" && regionEnv != "" { awsRegion = regionEnv @@ -122,19 +127,27 @@ func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *Config) (*aws.Con awsRegion = cfg.Region logger.Debug("Fetch region %v from commandline/config file", zap.String("region", awsRegion)) } else if !cfg.NoVerifySSL { - es := getDefaultSession(logger) - awsRegion, err = cn.getEC2Region(es) + es, err := getDefaultSession(logger) if err != nil { - logger.Error("Unable to retrieve the region from the EC2 instance %v\n", zap.Error(err)) + logger.Error("Unable to retrieve default session %v\n", zap.Error(err)) } else { - logger.Debug("Fetch region %v from ec2 metadata", zap.String("region", awsRegion)) + awsRegion, err = cn.getEC2Region(es) + if err != nil { + logger.Error("Unable to retrieve the region from the EC2 instance %v\n", zap.Error(err)) + } else { + logger.Debug("Fetch region %v from ec2 metadata", zap.String("region", awsRegion)) + } } } if awsRegion == "" { - //log.Error("Cannot fetch region variable from config file, environment variables and ec2 metadata.") - os.Exit(1) + msg := "Cannot fetch region variable from config file, environment variables and ec2 metadata." + logger.Error(msg) + return nil, nil, awserr.New("NoAwsRegion", msg, nil) + } + s, err = cn.newAWSSession(logger, cfg.RoleARN, awsRegion) + if err != nil { + return nil, nil, err } - s = cn.newAWSSession(logger, cfg.RoleARN, awsRegion) config := &aws.Config{ Region: aws.String(awsRegion), @@ -143,17 +156,21 @@ func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *Config) (*aws.Con Endpoint: aws.String(cfg.Endpoint), HTTPClient: http, } - return config, s + return config, s, nil } // ProxyServerTransport configures HTTP transport for TCP Proxy Server. -func ProxyServerTransport(config *Config) *http.Transport { +func ProxyServerTransport(logger *zap.Logger, config *Config) (*http.Transport, error) { tls := &tls.Config{ InsecureSkipVerify: config.NoVerifySSL, } proxyAddr := getProxyAddress(config.ProxyAddress) - proxyURL := getProxyURL(proxyAddr) + proxyURL, err := getProxyURL(proxyAddr) + if err != nil { + logger.Error("unable to obtain proxy URL", zap.Error(err)) + return nil, err + } // Connection timeout in seconds idleConnTimeout := time.Duration(config.RequestTimeout) * time.Second @@ -172,16 +189,19 @@ func ProxyServerTransport(config *Config) *http.Transport { DisableCompression: true, } - return transport + return transport, nil } -func (c *Conn) newAWSSession(logger *zap.Logger, roleArn string, region string) *session.Session { +func (c *Conn) newAWSSession(logger *zap.Logger, roleArn string, region string) (*session.Session, error) { var s *session.Session var err error if roleArn == "" { - s = getDefaultSession(logger) + s, err = getDefaultSession(logger) + if err != nil { + return s, err + } } else { - stsCreds := getSTSCreds(logger, region, roleArn) + stsCreds, err := getSTSCreds(logger, region, roleArn) s, err = session.NewSession(&aws.Config{ Credentials: stsCreds, @@ -189,32 +209,35 @@ func (c *Conn) newAWSSession(logger *zap.Logger, roleArn string, region string) if err != nil { logger.Error("Error in creating session object : ", zap.Error(err)) - os.Exit(1) + return s, err } } - return s + return s, nil } // getSTSCreds gets STS credentials from regional endpoint. ErrCodeRegionDisabledException is received if the // STS regional endpoint is disabled. In this case STS credentials are fetched from STS primary regional endpoint // in the respective AWS partition. -func getSTSCreds(logger *zap.Logger, region string, roleArn string) *credentials.Credentials { - t := getDefaultSession(logger) +func getSTSCreds(logger *zap.Logger, region string, roleArn string) (*credentials.Credentials, error) { + t, err := getDefaultSession(logger) + if err != nil { + return nil, err + } stsCred := getSTSCredsFromRegionEndpoint(logger, t, region, roleArn) // Make explicit call to fetch credentials. - _, err := stsCred.Get() + _, err = stsCred.Get() if err != nil { if aerr, ok := err.(awserr.Error); ok { + err = nil switch aerr.Code() { case sts.ErrCodeRegionDisabledException: logger.Error("Region : %v - %v", zap.String("region", region), zap.String("error", aerr.Error())) - logger.Info("Credentials for provided RoleARN will be fetched from STS primary region endpoint instead of regional endpoint.") stsCred = getSTSCredsFromPrimaryRegionEndpoint(logger, t, roleArn, region) } } } - return stsCred + return stsCred, err } // getSTSCredsFromRegionEndpoint fetches STS credentials for provided roleARN from regional endpoint. @@ -236,6 +259,7 @@ func getSTSCredsFromRegionEndpoint(logger *zap.Logger, sess *session.Session, re // the respective partition. func getSTSCredsFromPrimaryRegionEndpoint(logger *zap.Logger, t *session.Session, roleArn string, region string) *credentials.Credentials { + logger.Info("Credentials for provided RoleARN being fetched from STS primary region endpoint.") partitionID := getPartition(region) if partitionID == endpoints.AwsPartitionID { return getSTSCredsFromRegionEndpoint(logger, t, endpoints.UsEast1RegionID, roleArn) @@ -260,13 +284,13 @@ func getSTSRegionalEndpoint(r string) string { return e } -func getDefaultSession(logger *zap.Logger) *session.Session { +func getDefaultSession(logger *zap.Logger) (*session.Session, error) { result, serr := session.NewSession() if serr != nil { logger.Error("Error in creating session object : %v\n.", zap.Error(serr)) - os.Exit(1) + return result, serr } - return result + return result, nil } // getPartition return AWS Partition for the provided region. diff --git a/exporter/awsxrayexporter/conn_test.go b/exporter/awsxrayexporter/conn_test.go index c5823711420b..0c19bf3f5923 100644 --- a/exporter/awsxrayexporter/conn_test.go +++ b/exporter/awsxrayexporter/conn_test.go @@ -46,8 +46,8 @@ func (c *mockConn) getEC2Region(s *session.Session) (string, error) { return ec2Region, nil } -func (c *mockConn) newAWSSession(logger *zap.Logger, roleArn string, region string) *session.Session { - return c.sn +func (c *mockConn) newAWSSession(logger *zap.Logger, roleArn string, region string) (*session.Session, error) { + return c.sn, nil } // fetch region value from ec2 meta data service @@ -59,9 +59,10 @@ func TestEC2Session(t *testing.T) { var expectedSession *session.Session expectedSession, _ = session.NewSession() m.sn = expectedSession - cfg, s := GetAWSConfigSession(logger, m, xrayExporterCfg) + cfg, s, err := GetAWSConfigSession(logger, m, xrayExporterCfg) assert.Equal(t, s, expectedSession, "Expect the session object is not overridden") assert.Equal(t, *cfg.Region, ec2Region, "Region value fetched from ec2-metadata service") + assert.Nil(t, err) } // fetch region value from environment variable @@ -77,9 +78,10 @@ func TestRegionEnv(t *testing.T) { var expectedSession *session.Session expectedSession, _ = session.NewSession() m.sn = expectedSession - cfg, s := GetAWSConfigSession(logger, m, xrayExporterCfg) + cfg, s, err := GetAWSConfigSession(logger, m, xrayExporterCfg) assert.Equal(t, s, expectedSession, "Expect the session object is not overridden") assert.Equal(t, *cfg.Region, region, "Region value fetched from environment") + assert.Nil(t, err) } func loadExporterConfig(t *testing.T) *Config { diff --git a/exporter/awsxrayexporter/translator/aws.go b/exporter/awsxrayexporter/translator/aws.go index f24ff7ad8375..4712c9def403 100644 --- a/exporter/awsxrayexporter/translator/aws.go +++ b/exporter/awsxrayexporter/translator/aws.go @@ -22,12 +22,12 @@ import ( // AWS-specific OpenTelemetry attribute names const ( - AwsOperationAttribute = "aws.operation" - AwsAccountAttribute = "aws.account_id" - AwsRegionAttribute = "aws.region" - AwsRequestIDAttribute = "aws.request_id" - AwsQueueURLAttribute = "aws.queue_url" - AwsTableNameAttribute = "aws.table_name" + AWSOperationAttribute = "aws.operation" + AWSAccountAttribute = "aws.account_id" + AWSRegionAttribute = "aws.region" + AWSRequestIDAttribute = "aws.request_id" + AWSQueueURLAttribute = "aws.queue_url" + AWSTableNameAttribute = "aws.table_name" ) // AWSData provides the shape for unmarshalling AWS resource data. @@ -80,13 +80,11 @@ func makeAws(attributes map[string]string, resource *resourcepb.Resource) (map[s ec2 *EC2Metadata ecs *ECSMetadata ebs *BeanstalkMetadata - awsData *AWSData - filtered map[string]string ) if resource == nil { - return attributes, awsData + return attributes, nil } - filtered = make(map[string]string) + filtered := make(map[string]string) for key, value := range resource.Labels { switch key { case CloudProviderAttribute: @@ -113,26 +111,26 @@ func makeAws(attributes map[string]string, resource *resourcepb.Resource) (map[s } for key, value := range attributes { switch key { - case AwsOperationAttribute: + case AWSOperationAttribute: operation = value - case AwsAccountAttribute: + case AWSAccountAttribute: if value != "" { account = value } - case AwsRegionAttribute: + case AWSRegionAttribute: remoteRegion = value - case AwsRequestIDAttribute: + case AWSRequestIDAttribute: requestID = value - case AwsQueueURLAttribute: + case AWSQueueURLAttribute: queueURL = value - case AwsTableNameAttribute: + case AWSTableNameAttribute: tableName = value default: filtered[key] = value } } if cloud != "aws" && cloud != "" { - return filtered, awsData // not AWS so return nil + return filtered, nil // not AWS so return nil } // progress from least specific to most specific origin so most specific ends up as origin // as per X-Ray docs @@ -162,9 +160,9 @@ func makeAws(attributes map[string]string, resource *resourcepb.Resource) (map[s } } if origin == "" { - return filtered, awsData + return filtered, nil } - awsData = &AWSData{ + awsData := &AWSData{ AccountID: account, BeanstalkMetadata: ebs, ECSMetadata: ecs, diff --git a/exporter/awsxrayexporter/translator/aws_test.go b/exporter/awsxrayexporter/translator/aws_test.go index 00b5070d97a3..fe09a055001b 100644 --- a/exporter/awsxrayexporter/translator/aws_test.go +++ b/exporter/awsxrayexporter/translator/aws_test.go @@ -43,12 +43,12 @@ func TestAwsFromEc2Resource(t *testing.T) { assert.NotNil(t, awsData.EC2Metadata) assert.Nil(t, awsData.ECSMetadata) assert.Nil(t, awsData.BeanstalkMetadata) - w := borrow() + w := testWriters.borrow() if err := w.Encode(awsData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, instanceID)) } @@ -81,12 +81,12 @@ func TestAwsFromEcsResource(t *testing.T) { assert.NotNil(t, awsData.EC2Metadata) assert.NotNil(t, awsData.ECSMetadata) assert.Nil(t, awsData.BeanstalkMetadata) - w := borrow() + w := testWriters.borrow() if err := w.Encode(awsData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, containerID)) } @@ -112,12 +112,12 @@ func TestAwsFromBeanstalkResource(t *testing.T) { assert.Nil(t, awsData.EC2Metadata) assert.Nil(t, awsData.ECSMetadata) assert.NotNil(t, awsData.BeanstalkMetadata) - w := borrow() + w := testWriters.borrow() if err := w.Encode(awsData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, deployID)) } @@ -143,10 +143,10 @@ func TestAwsWithAwsSqsResources(t *testing.T) { } queueURL := "https://sqs.use1.amazonaws.com/Meltdown-Alerts" attributes := make(map[string]string) - attributes[AwsOperationAttribute] = "SendMessage" - attributes[AwsAccountAttribute] = "987654321" - attributes[AwsRegionAttribute] = "us-east-2" - attributes[AwsQueueURLAttribute] = queueURL + attributes[AWSOperationAttribute] = "SendMessage" + attributes[AWSAccountAttribute] = "987654321" + attributes[AWSRegionAttribute] = "us-east-2" + attributes[AWSQueueURLAttribute] = queueURL attributes["employee.id"] = "XB477" filtered, awsData := makeAws(attributes, resource) @@ -156,12 +156,12 @@ func TestAwsWithAwsSqsResources(t *testing.T) { assert.NotNil(t, awsData.EC2Metadata) assert.NotNil(t, awsData.ECSMetadata) assert.Nil(t, awsData.BeanstalkMetadata) - w := borrow() + w := testWriters.borrow() if err := w.Encode(awsData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, containerID)) assert.True(t, strings.Contains(jsonStr, queueURL)) } @@ -188,9 +188,9 @@ func TestAwsWithAwsDynamoDbResources(t *testing.T) { } tableName := "WIDGET_TYPES" attributes := make(map[string]string) - attributes[AwsOperationAttribute] = "PutItem" - attributes[AwsRequestIDAttribute] = "75107C82-EC8A-4F75-883F-4440B491B0AB" - attributes[AwsTableNameAttribute] = tableName + attributes[AWSOperationAttribute] = "PutItem" + attributes[AWSRequestIDAttribute] = "75107C82-EC8A-4F75-883F-4440B491B0AB" + attributes[AWSTableNameAttribute] = tableName filtered, awsData := makeAws(attributes, resource) @@ -199,12 +199,12 @@ func TestAwsWithAwsDynamoDbResources(t *testing.T) { assert.NotNil(t, awsData.EC2Metadata) assert.NotNil(t, awsData.ECSMetadata) assert.Nil(t, awsData.BeanstalkMetadata) - w := borrow() + w := testWriters.borrow() if err := w.Encode(awsData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, containerID)) assert.True(t, strings.Contains(jsonStr, tableName)) } diff --git a/exporter/awsxrayexporter/translator/cause.go b/exporter/awsxrayexporter/translator/cause.go index f580b9af0e42..579bcd967f2c 100644 --- a/exporter/awsxrayexporter/translator/cause.go +++ b/exporter/awsxrayexporter/translator/cause.go @@ -50,18 +50,18 @@ type Stack struct { Label string `json:"label,omitempty"` } -func makeCause(status *tracepb.Status, attributes map[string]string) (bool, bool, map[string]string, *CauseData) { +func makeCause(status *tracepb.Status, attributes map[string]string) (isError, isFault bool, + filtered map[string]string, cause *CauseData) { if status.Code == 0 { return false, false, attributes, nil } var ( - filtered = make(map[string]string) - cause *CauseData message = status.GetMessage() errorKind string errorObject string ) + filtered = make(map[string]string) for key, value := range attributes { switch key { case ErrorKindAttribute: @@ -100,9 +100,13 @@ func makeCause(status *tracepb.Status, attributes map[string]string) (bool, bool } if isClientError(status.Code) { - return true, false, filtered, cause + isError = true + isFault = false + } else { + isError = false + isFault = true } - return false, true, filtered, cause + return isError, isFault, filtered, cause } func isClientError(code int32) bool { diff --git a/exporter/awsxrayexporter/translator/cause_test.go b/exporter/awsxrayexporter/translator/cause_test.go index 6e410447912a..7ce99a85091a 100644 --- a/exporter/awsxrayexporter/translator/cause_test.go +++ b/exporter/awsxrayexporter/translator/cause_test.go @@ -40,12 +40,12 @@ func TestCauseWithStatusMessage(t *testing.T) { assert.True(t, isFault) assert.NotNil(t, filtered) assert.NotNil(t, cause) - w := borrow() + w := testWriters.borrow() if err := w.Encode(cause); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, errorMsg)) } @@ -65,12 +65,12 @@ func TestCauseWithHttpStatusMessage(t *testing.T) { assert.True(t, isFault) assert.NotNil(t, filtered) assert.NotNil(t, cause) - w := borrow() + w := testWriters.borrow() if err := w.Encode(cause); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, errorMsg)) } @@ -90,12 +90,12 @@ func TestCauseWithErrorMessage(t *testing.T) { assert.True(t, isFault) assert.NotNil(t, filtered) assert.NotNil(t, cause) - w := borrow() + w := testWriters.borrow() if err := w.Encode(cause); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, errorMsg)) } diff --git a/exporter/awsxrayexporter/translator/http_test.go b/exporter/awsxrayexporter/translator/http_test.go index 5f4dfb32190b..96cc52c05170 100644 --- a/exporter/awsxrayexporter/translator/http_test.go +++ b/exporter/awsxrayexporter/translator/http_test.go @@ -37,12 +37,12 @@ func TestClientSpanWithUrlAttribute(t *testing.T) { assert.NotNil(t, httpData) assert.NotNil(t, filtered) - w := borrow() + w := testWriters.borrow() if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } @@ -61,12 +61,12 @@ func TestClientSpanWithSchemeHostTargetAttributes(t *testing.T) { assert.NotNil(t, httpData) assert.NotNil(t, filtered) - w := borrow() + w := testWriters.borrow() if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } @@ -86,12 +86,12 @@ func TestClientSpanWithPeerAttributes(t *testing.T) { assert.NotNil(t, httpData) assert.NotNil(t, filtered) - w := borrow() + w := testWriters.borrow() if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, "http://kb234.example.com:8080/users/junit")) } @@ -108,12 +108,12 @@ func TestClientSpanWithPeerIp4Attributes(t *testing.T) { filtered, httpData := makeHTTP(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) - w := borrow() + w := testWriters.borrow() if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, "http://10.8.17.36:8080/users/junit")) } @@ -130,12 +130,12 @@ func TestClientSpanWithPeerIp6Attributes(t *testing.T) { filtered, httpData := makeHTTP(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) - w := borrow() + w := testWriters.borrow() if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, "https://2001:db8:85a3::8a2e:370:7334/users/junit")) } @@ -153,12 +153,12 @@ func TestServerSpanWithUrlAttribute(t *testing.T) { assert.NotNil(t, httpData) assert.NotNil(t, filtered) - w := borrow() + w := testWriters.borrow() if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } @@ -178,12 +178,12 @@ func TestServerSpanWithSchemeHostTargetAttributes(t *testing.T) { assert.NotNil(t, httpData) assert.NotNil(t, filtered) - w := borrow() + w := testWriters.borrow() if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } @@ -204,12 +204,12 @@ func TestServerSpanWithSchemeServernamePortTargetAttributes(t *testing.T) { assert.NotNil(t, httpData) assert.NotNil(t, filtered) - w := borrow() + w := testWriters.borrow() if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } @@ -232,12 +232,12 @@ func TestServerSpanWithSchemeNamePortTargetAttributes(t *testing.T) { assert.NotNil(t, httpData) assert.NotNil(t, filtered) - w := borrow() + w := testWriters.borrow() if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, "http://kb234.example.com:8080/users/junit")) } @@ -252,12 +252,12 @@ func TestHttpStatusFromSpanStatus(t *testing.T) { assert.NotNil(t, httpData) assert.NotNil(t, filtered) - w := borrow() + w := testWriters.borrow() if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, "200")) } diff --git a/exporter/awsxrayexporter/translator/segment.go b/exporter/awsxrayexporter/translator/segment.go index 1f605d9ade42..2eda27aa5fff 100644 --- a/exporter/awsxrayexporter/translator/segment.go +++ b/exporter/awsxrayexporter/translator/segment.go @@ -142,15 +142,19 @@ type Segment struct { Metadata map[string]map[string]interface{} `json:"metadata,omitempty"` } +var ( + writers = newWriterPool(2048) +) + // MakeSegmentDocumentString converts an Otel Span to an X-Ray Segment and then serialzies to JSON func MakeSegmentDocumentString(name string, span *tracepb.Span, userAttribute string) (string, error) { segment := MakeSegment(name, span, userAttribute) - w := borrow() + w := writers.borrow() if err := w.Encode(segment); err != nil { return "", err } jsonStr := w.String() - release(w) + writers.release(w) return jsonStr, nil } diff --git a/exporter/awsxrayexporter/translator/segment_test.go b/exporter/awsxrayexporter/translator/segment_test.go index 33f41df774dd..4f7d6bb747fb 100644 --- a/exporter/awsxrayexporter/translator/segment_test.go +++ b/exporter/awsxrayexporter/translator/segment_test.go @@ -28,6 +28,10 @@ import ( "github.com/stretchr/testify/assert" ) +var ( + testWriters = newWriterPool(2048) +) + func TestClientSpanWithGrpcComponent(t *testing.T) { spanName := "platformapi.widgets.searchWidgets" attributes := make(map[string]interface{}) @@ -61,9 +65,9 @@ func TestClientSpanWithAwsSdkClient(t *testing.T) { attributes[HostAttribute] = "dynamodb.us-east-1.amazonaws.com" attributes[TargetAttribute] = "/" attributes[UserAgentAttribute] = "aws-sdk-java/1.11.613 Windows_10/10.0 OpenJDK_64-Bit_server_VM/11.0.4+11-LTS" - attributes[AwsOperationAttribute] = "GetItem" - attributes[AwsRequestIDAttribute] = "18BO1FEPJSSAOGNJEDPTPCMIU7VV4KQNSO5AEMVJF66Q9ASUAAJG" - attributes[AwsTableNameAttribute] = "otel-dev-Testing" + attributes[AWSOperationAttribute] = "GetItem" + attributes[AWSRequestIDAttribute] = "18BO1FEPJSSAOGNJEDPTPCMIU7VV4KQNSO5AEMVJF66Q9ASUAAJG" + attributes[AWSTableNameAttribute] = "otel-dev-Testing" attributes[userAttribute] = user labels := constructDefaultResourceLabels() span := constructClientSpan(parentSpanID, spanName, 0, "OK", attributes, labels) @@ -102,12 +106,12 @@ func TestServerSpanWithInternalServerError(t *testing.T) { assert.NotNil(t, segment.Cause) assert.Equal(t, spanName, segment.Name) assert.True(t, segment.Fault) - w := borrow() + w := testWriters.borrow() if err := w.Encode(segment); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, spanName)) assert.True(t, strings.Contains(jsonStr, errorMessage)) assert.False(t, strings.Contains(jsonStr, userAttribute)) @@ -141,12 +145,12 @@ func TestClientSpanWithDbComponent(t *testing.T) { assert.Equal(t, spanName, segment.Name) assert.False(t, segment.Fault) assert.False(t, segment.Error) - w := borrow() + w := testWriters.borrow() if err := w.Encode(segment); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, spanName)) assert.True(t, strings.Contains(jsonStr, enterpriseAppID)) } @@ -179,12 +183,12 @@ func TestClientSpanWithBlankUserAttribute(t *testing.T) { assert.Equal(t, spanName, segment.Name) assert.False(t, segment.Fault) assert.False(t, segment.Error) - w := borrow() + w := testWriters.borrow() if err := w.Encode(segment); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, spanName)) assert.True(t, strings.Contains(jsonStr, enterpriseAppID)) } diff --git a/exporter/awsxrayexporter/translator/service_test.go b/exporter/awsxrayexporter/translator/service_test.go index 0a6fb6f87462..316cb16aa9ce 100644 --- a/exporter/awsxrayexporter/translator/service_test.go +++ b/exporter/awsxrayexporter/translator/service_test.go @@ -31,12 +31,12 @@ func TestServiceFromResource(t *testing.T) { service := makeService(resource) assert.NotNil(t, service) - w := borrow() + w := testWriters.borrow() if err := w.Encode(service); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, "1.1.12")) } diff --git a/exporter/awsxrayexporter/translator/sql_test.go b/exporter/awsxrayexporter/translator/sql_test.go index 234ef9a27782..04d2117011a0 100644 --- a/exporter/awsxrayexporter/translator/sql_test.go +++ b/exporter/awsxrayexporter/translator/sql_test.go @@ -36,12 +36,12 @@ func TestClientSpanWithStatementAttribute(t *testing.T) { assert.NotNil(t, filtered) assert.NotNil(t, sqlData) - w := borrow() + w := testWriters.borrow() if err := w.Encode(sqlData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, "mysql://db.example.com:3306/customers")) } diff --git a/exporter/awsxrayexporter/translator/writer_pool.go b/exporter/awsxrayexporter/translator/writer_pool.go index d57e2c510c06..811b69db4b50 100644 --- a/exporter/awsxrayexporter/translator/writer_pool.go +++ b/exporter/awsxrayexporter/translator/writer_pool.go @@ -20,32 +20,24 @@ import ( "sync" ) +const ( + maxBufSize = 65536 +) + type writer struct { buffer *bytes.Buffer encoder *json.Encoder } -func (w *writer) Reset() { - w.buffer.Reset() +type writerPool struct { + pool *sync.Pool } -func (w *writer) Encode(v interface{}) error { - return w.encoder.Encode(v) -} - -func (w *writer) String() string { - return w.buffer.String() -} - -const ( - maxBufSize = 256e3 -) - -var ( - writers = &sync.Pool{ +func newWriterPool(size int) *writerPool { + pool := &sync.Pool{ New: func() interface{} { var ( - buffer = bytes.NewBuffer(make([]byte, 0, 8192)) + buffer = bytes.NewBuffer(make([]byte, 0, size)) encoder = json.NewEncoder(buffer) ) @@ -55,15 +47,28 @@ var ( } }, } -) + return &writerPool{pool: pool} +} + +func (w *writer) Reset() { + w.buffer.Reset() +} + +func (w *writer) Encode(v interface{}) error { + return w.encoder.Encode(v) +} + +func (w *writer) String() string { + return w.buffer.String() +} -func borrow() *writer { - return writers.Get().(*writer) +func (writerPool *writerPool) borrow() *writer { + return writerPool.pool.Get().(*writer) } -func release(w *writer) { +func (writerPool *writerPool) release(w *writer) { if w.buffer.Cap() < maxBufSize { w.buffer.Reset() - writers.Put(w) + writerPool.pool.Put(w) } } diff --git a/exporter/awsxrayexporter/translator/writer_pool_test.go b/exporter/awsxrayexporter/translator/writer_pool_test.go new file mode 100644 index 000000000000..83d4384eb1d4 --- /dev/null +++ b/exporter/awsxrayexporter/translator/writer_pool_test.go @@ -0,0 +1,80 @@ +// 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 translator + +import ( + "bytes" + "encoding/json" + "testing" + + tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + "github.com/stretchr/testify/assert" + "go.uber.org/zap" +) + +func TestWriterPoolBasic(t *testing.T) { + size := 1024 + wp := newWriterPool(size) + span := constructWriterPoolSpan() + w := wp.borrow() + assert.NotNil(t, w) + assert.NotNil(t, w.buffer) + assert.NotNil(t, w.encoder) + assert.Equal(t, size, w.buffer.Cap()) + assert.Equal(t, 0, w.buffer.Len()) + if err := w.Encode(span); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + assert.Equal(t, len(jsonStr), w.buffer.Len()) + wp.release(w) +} + +func BenchmarkWithoutPool(b *testing.B) { + logger := zap.NewNop() + for i := 0; i < b.N; i++ { + b.StopTimer() + span := constructWriterPoolSpan() + b.StartTimer() + buffer := bytes.NewBuffer(make([]byte, 0, 2048)) + encoder := json.NewEncoder(buffer) + encoder.Encode(span) + logger.Info(buffer.String()) + } +} + +func BenchmarkWithPool(b *testing.B) { + logger := zap.NewNop() + wp := newWriterPool(2048) + for i := 0; i < b.N; i++ { + b.StopTimer() + span := constructWriterPoolSpan() + b.StartTimer() + w := wp.borrow() + w.Encode(span) + logger.Info(w.String()) + } +} + +func constructWriterPoolSpan() *tracepb.Span { + attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HTTPComponentType + attributes[MethodAttribute] = "GET" + attributes[URLAttribute] = "https://api.example.com/users/junit" + attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" + attributes[ClientIPAttribute] = "192.168.15.32" + attributes[StatusCodeAttribute] = 200 + return constructHTTPServerSpan(attributes) +} From c92085c45408146f86a1c2aff4ce55f209e47972 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Thu, 21 Nov 2019 14:32:10 -0600 Subject: [PATCH 14/59] switch user attribute name to constant --- exporter/awsxrayexporter/README.md | 5 +- exporter/awsxrayexporter/awsxray.go | 8 +-- exporter/awsxrayexporter/config.go | 2 - exporter/awsxrayexporter/config_test.go | 1 - exporter/awsxrayexporter/factory.go | 1 - exporter/awsxrayexporter/testdata/config.yaml | 1 - .../awsxrayexporter/translator/segment.go | 17 +++--- .../translator/segment_test.go | 57 +++---------------- 8 files changed, 21 insertions(+), 71 deletions(-) diff --git a/exporter/awsxrayexporter/README.md b/exporter/awsxrayexporter/README.md index fb545fc52137..821a2f447150 100644 --- a/exporter/awsxrayexporter/README.md +++ b/exporter/awsxrayexporter/README.md @@ -39,7 +39,8 @@ by the Span Resource object. X-Ray uses this data to generate inferred segments ## Exporter Configuration -The following exporter configuration parameters are supported. +The following exporter configuration parameters are supported. They mirror and have the same affect as the +comparable AWS X-Ray Daemon configuration values. | Name | Description | Default | | :---------------- | :--------------------------------------------------------------------- | ------- | @@ -52,8 +53,6 @@ The following exporter configuration parameters are supported. | `local_mode` | Local mode to skip EC2 instance metadata check. | false | | `resource_arn` | Amazon Resource Name (ARN) of the AWS resource running the collector. | | | `role_arn` | IAM role to upload segments to a different account. | | -| `user_attribute` | Span attribute name which holds the originating user's login. | | - ## AWS Credential Configuration diff --git a/exporter/awsxrayexporter/awsxray.go b/exporter/awsxrayexporter/awsxray.go index ef528d1afb86..ffada0a1eb0e 100644 --- a/exporter/awsxrayexporter/awsxray.go +++ b/exporter/awsxrayexporter/awsxray.go @@ -32,7 +32,6 @@ import ( func NewTraceExporter(config configmodels.Exporter, logger *zap.Logger, cn connAttr) (exporter.TraceExporter, error) { typeLog := zap.String("type", config.Type()) nameLog := zap.String("name", config.Name()) - userAttribute := config.(*Config).UserAttribute awsConfig, session, err := GetAWSConfigSession(logger, cn, config.(*Config)) if err != nil { return nil, err @@ -42,7 +41,7 @@ func NewTraceExporter(config configmodels.Exporter, logger *zap.Logger, cn connA config, func(ctx context.Context, td consumerdata.TraceData) (int, error) { logger.Debug("TraceExporter", typeLog, nameLog, zap.Int("#spans", len(td.Spans))) - droppedSpans, input := assembleRequest(userAttribute, td, logger) + droppedSpans, input := assembleRequest(td, logger) logger.Debug("request: " + input.String()) output, err := xrayClient.PutTraceSegments(input) logger.Debug("response: " + output.String()) @@ -57,8 +56,7 @@ func NewTraceExporter(config configmodels.Exporter, logger *zap.Logger, cn connA ) } -func assembleRequest(userAttribute string, td consumerdata.TraceData, - logger *zap.Logger) (int, *xray.PutTraceSegmentsInput) { +func assembleRequest(td consumerdata.TraceData, logger *zap.Logger) (int, *xray.PutTraceSegmentsInput) { documents := make([]*string, len(td.Spans)) droppedSpans := int(0) for i, span := range td.Spans { @@ -67,7 +65,7 @@ func assembleRequest(userAttribute string, td consumerdata.TraceData, continue } spanName := span.Name.Value - jsonStr, err := translator.MakeSegmentDocumentString(spanName, span, userAttribute) + jsonStr, err := translator.MakeSegmentDocumentString(spanName, span) if err != nil { droppedSpans++ logger.Warn("Unable to convert span", zap.Error(err)) diff --git a/exporter/awsxrayexporter/config.go b/exporter/awsxrayexporter/config.go index 9373acf0263f..47f59924a987 100644 --- a/exporter/awsxrayexporter/config.go +++ b/exporter/awsxrayexporter/config.go @@ -37,6 +37,4 @@ type Config struct { ResourceARN string `mapstructure:"resource_arn"` // IAM role to upload segments to a different account. RoleARN string `mapstructure:"role_arn"` - // Span attribute name which holds the originating user's login. - UserAttribute string `mapstructure:"user_attribute"` } diff --git a/exporter/awsxrayexporter/config_test.go b/exporter/awsxrayexporter/config_test.go index e03c7b2f50af..f7809fee1826 100644 --- a/exporter/awsxrayexporter/config_test.go +++ b/exporter/awsxrayexporter/config_test.go @@ -56,6 +56,5 @@ func TestLoadConfig(t *testing.T) { LocalMode: false, ResourceARN: "arn:aws:ec2:us-east1:123456789:instance/i-293hiuhe0u", RoleARN: "arn:aws:iam::123456789:role/monitoring-EKS-NodeInstanceRole", - UserAttribute: "user.id", }) } diff --git a/exporter/awsxrayexporter/factory.go b/exporter/awsxrayexporter/factory.go index 149a87a3f50d..710157c16b95 100644 --- a/exporter/awsxrayexporter/factory.go +++ b/exporter/awsxrayexporter/factory.go @@ -51,7 +51,6 @@ func (f *Factory) CreateDefaultConfig() configmodels.Exporter { LocalMode: false, ResourceARN: "", RoleARN: "", - UserAttribute: "", } } diff --git a/exporter/awsxrayexporter/testdata/config.yaml b/exporter/awsxrayexporter/testdata/config.yaml index fb52abc20175..f820c387ddc0 100644 --- a/exporter/awsxrayexporter/testdata/config.yaml +++ b/exporter/awsxrayexporter/testdata/config.yaml @@ -10,7 +10,6 @@ exporters: region: eu-west-1 resource_arn: "arn:aws:ec2:us-east1:123456789:instance/i-293hiuhe0u" role_arn: "arn:aws:iam::123456789:role/monitoring-EKS-NodeInstanceRole" - user_attribute: "user.id" awsxray/disabled: # will be ignored disabled: true diff --git a/exporter/awsxrayexporter/translator/segment.go b/exporter/awsxrayexporter/translator/segment.go index 2eda27aa5fff..758baa48c3b4 100644 --- a/exporter/awsxrayexporter/translator/segment.go +++ b/exporter/awsxrayexporter/translator/segment.go @@ -38,6 +38,7 @@ const ( PeerIpv6Attribute = "peer.ipv6" PeerPortAttribute = "peer.port" PeerServiceAttribute = "peer.service" + IAMUserAttribute = "iam.user" ) // OpenTelemetry Semantic Convention values for component attribute values. @@ -147,8 +148,8 @@ var ( ) // MakeSegmentDocumentString converts an Otel Span to an X-Ray Segment and then serialzies to JSON -func MakeSegmentDocumentString(name string, span *tracepb.Span, userAttribute string) (string, error) { - segment := MakeSegment(name, span, userAttribute) +func MakeSegmentDocumentString(name string, span *tracepb.Span) (string, error) { + segment := MakeSegment(name, span) w := writers.borrow() if err := w.Encode(segment); err != nil { return "", err @@ -159,7 +160,7 @@ func MakeSegmentDocumentString(name string, span *tracepb.Span, userAttribute st } // MakeSegment converts an Otel Span to an X-Ray Segment -func MakeSegment(name string, span *tracepb.Span, userAttribute string) Segment { +func MakeSegment(name string, span *tracepb.Span) Segment { var ( traceID = convertToAmazonTraceID(span.TraceId) startTime = timestampToFloatSeconds(span.StartTime, span.StartTime) @@ -171,7 +172,7 @@ func MakeSegment(name string, span *tracepb.Span, userAttribute string) Segment awsfiltered, aws = makeAws(causefiltered, span.Resource) service = makeService(span.Resource) sqlfiltered, sql = makeSQL(awsfiltered) - user, annotations = makeAnnotations(sqlfiltered, userAttribute) + user, annotations = makeAnnotations(sqlfiltered) namespace string ) @@ -318,16 +319,14 @@ func mergeAnnotations(dest map[string]interface{}, src map[string]string) { } } -func makeAnnotations(attributes map[string]string, userAttribute string) (string, map[string]interface{}) { +func makeAnnotations(attributes map[string]string) (string, map[string]interface{}) { var ( result = map[string]interface{}{} user string ) - if userAttribute != "" { - user = attributes[userAttribute] - delete(attributes, userAttribute) - } + user = attributes[IAMUserAttribute] + delete(attributes, IAMUserAttribute) delete(attributes, ComponentAttribute) mergeAnnotations(result, attributes) diff --git a/exporter/awsxrayexporter/translator/segment_test.go b/exporter/awsxrayexporter/translator/segment_test.go index 4f7d6bb747fb..c52125bf937f 100644 --- a/exporter/awsxrayexporter/translator/segment_test.go +++ b/exporter/awsxrayexporter/translator/segment_test.go @@ -46,7 +46,7 @@ func TestClientSpanWithGrpcComponent(t *testing.T) { timeEvents := constructTimedEventsWithSentMessageEvent(span.StartTime) span.TimeEvents = &timeEvents - jsonStr, err := MakeSegmentDocumentString(spanName, span, "user.id") + jsonStr, err := MakeSegmentDocumentString(spanName, span) assert.NotNil(t, jsonStr) assert.Nil(t, err) @@ -56,8 +56,7 @@ func TestClientSpanWithGrpcComponent(t *testing.T) { func TestClientSpanWithAwsSdkClient(t *testing.T) { spanName := "AmazonDynamoDB.getItem" parentSpanID := NewSegmentID() - userAttribute := "originating.user" - user := "testing" + user := "testingT" attributes := make(map[string]interface{}) attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "POST" @@ -68,11 +67,11 @@ func TestClientSpanWithAwsSdkClient(t *testing.T) { attributes[AWSOperationAttribute] = "GetItem" attributes[AWSRequestIDAttribute] = "18BO1FEPJSSAOGNJEDPTPCMIU7VV4KQNSO5AEMVJF66Q9ASUAAJG" attributes[AWSTableNameAttribute] = "otel-dev-Testing" - attributes[userAttribute] = user + attributes[IAMUserAttribute] = user labels := constructDefaultResourceLabels() span := constructClientSpan(parentSpanID, spanName, 0, "OK", attributes, labels) - jsonStr, err := MakeSegmentDocumentString(spanName, span, userAttribute) + jsonStr, err := MakeSegmentDocumentString(spanName, span) assert.NotNil(t, jsonStr) assert.Nil(t, err) @@ -84,7 +83,6 @@ func TestClientSpanWithAwsSdkClient(t *testing.T) { func TestServerSpanWithInternalServerError(t *testing.T) { spanName := "/api/locations" parentSpanID := NewSegmentID() - userAttribute := "originating.user" user := "testing" errorMessage := "java.lang.NullPointerException" attributes := make(map[string]interface{}) @@ -93,14 +91,14 @@ func TestServerSpanWithInternalServerError(t *testing.T) { attributes[URLAttribute] = "https://api.example.org/api/locations" attributes[TargetAttribute] = "/api/locations" attributes[StatusCodeAttribute] = 500 - attributes[userAttribute] = user + attributes[IAMUserAttribute] = user attributes[ErrorKindAttribute] = "java.lang.NullPointerException" labels := constructDefaultResourceLabels() span := constructServerSpan(parentSpanID, spanName, tracetranslator.OCInternal, errorMessage, attributes, labels) timeEvents := constructTimedEventsWithSentMessageEvent(span.StartTime) span.TimeEvents = &timeEvents - segment := MakeSegment(spanName, span, "originating.user") + segment := MakeSegment(spanName, span) assert.NotNil(t, segment) assert.NotNil(t, segment.Cause) @@ -114,7 +112,6 @@ func TestServerSpanWithInternalServerError(t *testing.T) { testWriters.release(w) assert.True(t, strings.Contains(jsonStr, spanName)) assert.True(t, strings.Contains(jsonStr, errorMessage)) - assert.False(t, strings.Contains(jsonStr, userAttribute)) } func TestClientSpanWithDbComponent(t *testing.T) { @@ -133,45 +130,7 @@ func TestClientSpanWithDbComponent(t *testing.T) { labels := constructDefaultResourceLabels() span := constructClientSpan(nil, spanName, 0, "OK", attributes, labels) - segment := MakeSegment(spanName, span, "originating.user") - - assert.NotNil(t, segment) - assert.NotNil(t, segment.SQL) - assert.NotNil(t, segment.Service) - assert.NotNil(t, segment.AWS) - assert.NotNil(t, segment.Annotations) - assert.Nil(t, segment.Cause) - assert.Nil(t, segment.HTTP) - assert.Equal(t, spanName, segment.Name) - assert.False(t, segment.Fault) - assert.False(t, segment.Error) - w := testWriters.borrow() - if err := w.Encode(segment); err != nil { - assert.Fail(t, "invalid json") - } - jsonStr := w.String() - testWriters.release(w) - assert.True(t, strings.Contains(jsonStr, spanName)) - assert.True(t, strings.Contains(jsonStr, enterpriseAppID)) -} - -func TestClientSpanWithBlankUserAttribute(t *testing.T) { - spanName := "call update_user_preference( ?, ?, ? )" - enterpriseAppID := "25F2E73B-4769-4C79-9DF3-7EBE85D571EA" - attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = DbComponentType - attributes[DbTypeAttribute] = "sql" - attributes[DbInstanceAttribute] = "customers" - attributes[DbStatementAttribute] = spanName - attributes[DbUserAttribute] = "userprefsvc" - attributes[PeerAddressAttribute] = "mysql://db.dev.example.com:3306" - attributes[PeerHostAttribute] = "db.dev.example.com" - attributes[PeerPortAttribute] = "3306" - attributes["enterprise.app.id"] = enterpriseAppID - labels := constructDefaultResourceLabels() - span := constructClientSpan(nil, spanName, 0, "OK", attributes, labels) - - segment := MakeSegment(spanName, span, "") + segment := MakeSegment(spanName, span) assert.NotNil(t, segment) assert.NotNil(t, segment.SQL) @@ -208,7 +167,7 @@ func TestSpanWithInvalidTraceId(t *testing.T) { span.TimeEvents = &timeEvents span.TraceId[0] = 0x11 - jsonStr, err := MakeSegmentDocumentString(spanName, span, "user.id") + jsonStr, err := MakeSegmentDocumentString(spanName, span) assert.NotNil(t, jsonStr) assert.Nil(t, err) From 27d99628564f828d2b5f1c37779f798db50b611d Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Tue, 26 Nov 2019 08:02:42 -0600 Subject: [PATCH 15/59] fixed additional code review issues --- exporter/awsxrayexporter/config.go | 4 +++- exporter/awsxrayexporter/config_test.go | 21 +++++++++++---------- exporter/awsxrayexporter/conn.go | 6 +++--- exporter/awsxrayexporter/factory.go | 19 ++++++++++--------- 4 files changed, 27 insertions(+), 23 deletions(-) diff --git a/exporter/awsxrayexporter/config.go b/exporter/awsxrayexporter/config.go index 47f59924a987..657544ca8b37 100644 --- a/exporter/awsxrayexporter/config.go +++ b/exporter/awsxrayexporter/config.go @@ -24,7 +24,9 @@ type Config struct { // X-Ray service endpoint to which the collector sends segment documents. Endpoint string `mapstructure:"endpoint"` // Number of seconds before timing out a request. - RequestTimeout int `mapstructure:"request_timeout"` + RequestTimeoutSeconds int `mapstructure:"request_timeout_seconds"` + // Maximum number of retries before abandoning an attempt to post data. + MaxRetries int `mapstructure:"max_retries"` // Enable or disable TLS certificate verification. NoVerifySSL bool `mapstructure:"no_verify_ssl"` // Upload segments to AWS X-Ray through a proxy. diff --git a/exporter/awsxrayexporter/config_test.go b/exporter/awsxrayexporter/config_test.go index f7809fee1826..6acb6be996a5 100644 --- a/exporter/awsxrayexporter/config_test.go +++ b/exporter/awsxrayexporter/config_test.go @@ -46,15 +46,16 @@ func TestLoadConfig(t *testing.T) { r1 := cfg.Exporters["awsxray/customname"].(*Config) assert.Equal(t, r1, &Config{ - ExporterSettings: configmodels.ExporterSettings{TypeVal: typeStr, NameVal: "awsxray/customname"}, - Concurrency: 8, - Endpoint: "", - RequestTimeout: 30, - NoVerifySSL: false, - ProxyAddress: "", - Region: "eu-west-1", - LocalMode: false, - ResourceARN: "arn:aws:ec2:us-east1:123456789:instance/i-293hiuhe0u", - RoleARN: "arn:aws:iam::123456789:role/monitoring-EKS-NodeInstanceRole", + ExporterSettings: configmodels.ExporterSettings{TypeVal: typeStr, NameVal: "awsxray/customname"}, + Concurrency: 8, + Endpoint: "", + RequestTimeoutSeconds: 30, + MaxRetries: 2, + NoVerifySSL: false, + ProxyAddress: "", + Region: "eu-west-1", + LocalMode: false, + ResourceARN: "arn:aws:ec2:us-east1:123456789:instance/i-293hiuhe0u", + RoleARN: "arn:aws:iam::123456789:role/monitoring-EKS-NodeInstanceRole", }) } diff --git a/exporter/awsxrayexporter/conn.go b/exporter/awsxrayexporter/conn.go index c31dabe673fa..1f3cf1c49caf 100644 --- a/exporter/awsxrayexporter/conn.go +++ b/exporter/awsxrayexporter/conn.go @@ -114,7 +114,7 @@ func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *Config) (*aws.Con var s *session.Session var err error var awsRegion string - http, err := newHTTPClient(logger, cfg.Concurrency, cfg.RequestTimeout, cfg.NoVerifySSL, cfg.ProxyAddress) + http, err := newHTTPClient(logger, cfg.Concurrency, cfg.RequestTimeoutSeconds, cfg.NoVerifySSL, cfg.ProxyAddress) if err != nil { logger.Error("unable to obtain proxy URL", zap.Error(err)) return nil, nil, err @@ -152,7 +152,7 @@ func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *Config) (*aws.Con config := &aws.Config{ Region: aws.String(awsRegion), DisableParamValidation: aws.Bool(true), - MaxRetries: aws.Int(2), + MaxRetries: aws.Int(cfg.MaxRetries), Endpoint: aws.String(cfg.Endpoint), HTTPClient: http, } @@ -173,7 +173,7 @@ func ProxyServerTransport(logger *zap.Logger, config *Config) (*http.Transport, } // Connection timeout in seconds - idleConnTimeout := time.Duration(config.RequestTimeout) * time.Second + idleConnTimeout := time.Duration(config.RequestTimeoutSeconds) * time.Second transport := &http.Transport{ MaxIdleConns: config.Concurrency, diff --git a/exporter/awsxrayexporter/factory.go b/exporter/awsxrayexporter/factory.go index 710157c16b95..b17ee3b869a5 100644 --- a/exporter/awsxrayexporter/factory.go +++ b/exporter/awsxrayexporter/factory.go @@ -42,15 +42,16 @@ func (f *Factory) CreateDefaultConfig() configmodels.Exporter { TypeVal: typeStr, NameVal: typeStr, }, - Concurrency: 8, - Endpoint: "", - RequestTimeout: 30, - NoVerifySSL: false, - ProxyAddress: "", - Region: "", - LocalMode: false, - ResourceARN: "", - RoleARN: "", + Concurrency: 8, + Endpoint: "", + RequestTimeoutSeconds: 30, + MaxRetries: 2, + NoVerifySSL: false, + ProxyAddress: "", + Region: "", + LocalMode: false, + ResourceARN: "", + RoleARN: "", } } From b201406597b509a578be238f72f8e94a2109d38f Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Wed, 27 Nov 2019 13:14:23 -0600 Subject: [PATCH 16/59] fixed additional code review issues --- exporter/awsxrayexporter/README.md | 1 + exporter/awsxrayexporter/config.go | 2 +- exporter/awsxrayexporter/config_test.go | 2 +- exporter/awsxrayexporter/conn.go | 22 +++++++++++----------- exporter/awsxrayexporter/factory.go | 2 +- 5 files changed, 15 insertions(+), 14 deletions(-) diff --git a/exporter/awsxrayexporter/README.md b/exporter/awsxrayexporter/README.md index 821a2f447150..e291f62addf8 100644 --- a/exporter/awsxrayexporter/README.md +++ b/exporter/awsxrayexporter/README.md @@ -47,6 +47,7 @@ comparable AWS X-Ray Daemon configuration values. | `num_workers` | Maximum number of concurrent calls to AWS X-Ray to upload documents. | 8 | | `endpoint` | Optionally override the default X-Ray service endpoint. | | | `request_timeout` | Number of seconds before timing out a request. | 30 | +| `max_retries` | Maximun number of attempts to post a batch before failing. | 2 | | `no_verify_ssl` | Enable or disable TLS certificate verification. | false | | `proxy_address` | Upload segments to AWS X-Ray through a proxy. | | | `region` | Send segments to AWS X-Ray service in a specific region. | | diff --git a/exporter/awsxrayexporter/config.go b/exporter/awsxrayexporter/config.go index 657544ca8b37..e7839bfb622e 100644 --- a/exporter/awsxrayexporter/config.go +++ b/exporter/awsxrayexporter/config.go @@ -20,7 +20,7 @@ import "github.com/open-telemetry/opentelemetry-collector/config/configmodels" type Config struct { configmodels.ExporterSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct. // Maximum number of concurrent calls to AWS X-Ray to upload documents. - Concurrency int `mapstructure:"num_workers"` + NumberOfWorkers int `mapstructure:"num_workers"` // X-Ray service endpoint to which the collector sends segment documents. Endpoint string `mapstructure:"endpoint"` // Number of seconds before timing out a request. diff --git a/exporter/awsxrayexporter/config_test.go b/exporter/awsxrayexporter/config_test.go index 6acb6be996a5..47fcc32b78c3 100644 --- a/exporter/awsxrayexporter/config_test.go +++ b/exporter/awsxrayexporter/config_test.go @@ -47,7 +47,7 @@ func TestLoadConfig(t *testing.T) { assert.Equal(t, r1, &Config{ ExporterSettings: configmodels.ExporterSettings{TypeVal: typeStr, NameVal: "awsxray/customname"}, - Concurrency: 8, + NumberOfWorkers: 8, Endpoint: "", RequestTimeoutSeconds: 30, MaxRetries: 2, diff --git a/exporter/awsxrayexporter/conn.go b/exporter/awsxrayexporter/conn.go index 1f3cf1c49caf..1b46c36d4c54 100644 --- a/exporter/awsxrayexporter/conn.go +++ b/exporter/awsxrayexporter/conn.go @@ -114,7 +114,7 @@ func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *Config) (*aws.Con var s *session.Session var err error var awsRegion string - http, err := newHTTPClient(logger, cfg.Concurrency, cfg.RequestTimeoutSeconds, cfg.NoVerifySSL, cfg.ProxyAddress) + http, err := newHTTPClient(logger, cfg.NumberOfWorkers, cfg.RequestTimeoutSeconds, cfg.NoVerifySSL, cfg.ProxyAddress) if err != nil { logger.Error("unable to obtain proxy URL", zap.Error(err)) return nil, nil, err @@ -122,20 +122,20 @@ func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *Config) (*aws.Con regionEnv := os.Getenv("AWS_REGION") if cfg.Region == "" && regionEnv != "" { awsRegion = regionEnv - logger.Debug("Fetch region %v from environment variables", zap.String("region", awsRegion)) + logger.Debug("Fetch region from environment variables", zap.String("region", awsRegion)) } else if cfg.Region != "" { awsRegion = cfg.Region - logger.Debug("Fetch region %v from commandline/config file", zap.String("region", awsRegion)) + logger.Debug("Fetch region from commandline/config file", zap.String("region", awsRegion)) } else if !cfg.NoVerifySSL { es, err := getDefaultSession(logger) if err != nil { - logger.Error("Unable to retrieve default session %v\n", zap.Error(err)) + logger.Error("Unable to retrieve default session", zap.Error(err)) } else { awsRegion, err = cn.getEC2Region(es) if err != nil { - logger.Error("Unable to retrieve the region from the EC2 instance %v\n", zap.Error(err)) + logger.Error("Unable to retrieve the region from the EC2 instance", zap.Error(err)) } else { - logger.Debug("Fetch region %v from ec2 metadata", zap.String("region", awsRegion)) + logger.Debug("Fetch region from ec2 metadata", zap.String("region", awsRegion)) } } } @@ -176,8 +176,8 @@ func ProxyServerTransport(logger *zap.Logger, config *Config) (*http.Transport, idleConnTimeout := time.Duration(config.RequestTimeoutSeconds) * time.Second transport := &http.Transport{ - MaxIdleConns: config.Concurrency, - MaxIdleConnsPerHost: config.Concurrency, + MaxIdleConns: config.NumberOfWorkers, + MaxIdleConnsPerHost: config.NumberOfWorkers, IdleConnTimeout: idleConnTimeout, Proxy: http.ProxyURL(proxyURL), TLSClientConfig: tls, @@ -232,7 +232,7 @@ func getSTSCreds(logger *zap.Logger, region string, roleArn string) (*credential err = nil switch aerr.Code() { case sts.ErrCodeRegionDisabledException: - logger.Error("Region : %v - %v", zap.String("region", region), zap.String("error", aerr.Error())) + logger.Error("Region ", zap.String("region", region), zap.String("error", aerr.Error())) stsCred = getSTSCredsFromPrimaryRegionEndpoint(logger, t, roleArn, region) } } @@ -251,7 +251,7 @@ func getSTSCredsFromRegionEndpoint(logger *zap.Logger, sess *session.Session, re // This will be only in the case, if provided region is not present in aws_regions.go c := &aws.Config{Region: aws.String(region), Endpoint: ®ionalEndpoint} st := sts.New(sess, c) - logger.Info("STS Endpoint : %v", zap.String("endpoint", st.Endpoint)) + logger.Info("STS Endpoint ", zap.String("endpoint", st.Endpoint)) return stscreds.NewCredentialsWithClient(st, roleArn) } @@ -287,7 +287,7 @@ func getSTSRegionalEndpoint(r string) string { func getDefaultSession(logger *zap.Logger) (*session.Session, error) { result, serr := session.NewSession() if serr != nil { - logger.Error("Error in creating session object : %v\n.", zap.Error(serr)) + logger.Error("Error in creating session object ", zap.Error(serr)) return result, serr } return result, nil diff --git a/exporter/awsxrayexporter/factory.go b/exporter/awsxrayexporter/factory.go index b17ee3b869a5..af3e4b8cc164 100644 --- a/exporter/awsxrayexporter/factory.go +++ b/exporter/awsxrayexporter/factory.go @@ -42,7 +42,7 @@ func (f *Factory) CreateDefaultConfig() configmodels.Exporter { TypeVal: typeStr, NameVal: typeStr, }, - Concurrency: 8, + NumberOfWorkers: 8, Endpoint: "", RequestTimeoutSeconds: 30, MaxRetries: 2, From c1c8b9ce9e0a24088e465d3a0cfd8927e65b6648 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Wed, 27 Nov 2019 13:18:22 -0600 Subject: [PATCH 17/59] temporarily change package name --- exporter/awsxrayexporter/go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exporter/awsxrayexporter/go.mod b/exporter/awsxrayexporter/go.mod index 56c4eec5af3f..ace6b94d4514 100644 --- a/exporter/awsxrayexporter/go.mod +++ b/exporter/awsxrayexporter/go.mod @@ -1,4 +1,4 @@ -module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter +module github.com/kbrockhoff/opentelemetry-collector-contrib/exporter/awsxrayexporter go 1.12 From 338caca33dbc88004ae174df3d5afe26c2454d4d Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Wed, 27 Nov 2019 13:23:05 -0600 Subject: [PATCH 18/59] temporarily change package name --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 049409e75318..5182d94afa87 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/open-telemetry/opentelemetry-collector-contrib +module github.com/kbrockhoff/opentelemetry-collector-contrib go 1.12 From a47e06b9c85a8f1a66cb24134306991ca08994fb Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Wed, 27 Nov 2019 13:25:34 -0600 Subject: [PATCH 19/59] revert temporarily change package name --- exporter/awsxrayexporter/go.mod | 2 +- go.mod | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/exporter/awsxrayexporter/go.mod b/exporter/awsxrayexporter/go.mod index ace6b94d4514..56c4eec5af3f 100644 --- a/exporter/awsxrayexporter/go.mod +++ b/exporter/awsxrayexporter/go.mod @@ -1,4 +1,4 @@ -module github.com/kbrockhoff/opentelemetry-collector-contrib/exporter/awsxrayexporter +module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter go 1.12 diff --git a/go.mod b/go.mod index 5182d94afa87..049409e75318 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/kbrockhoff/opentelemetry-collector-contrib +module github.com/open-telemetry/opentelemetry-collector-contrib go 1.12 From 3f4154ac517437ef2c2172f3e2b5127485948906 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Wed, 27 Nov 2019 14:00:11 -0600 Subject: [PATCH 20/59] fixed additional code review issues --- exporter/awsxrayexporter/config_test.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/exporter/awsxrayexporter/config_test.go b/exporter/awsxrayexporter/config_test.go index 47fcc32b78c3..3f0dfebccee2 100644 --- a/exporter/awsxrayexporter/config_test.go +++ b/exporter/awsxrayexporter/config_test.go @@ -18,11 +18,10 @@ import ( "path" "testing" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "github.com/open-telemetry/opentelemetry-collector/config" "github.com/open-telemetry/opentelemetry-collector/config/configmodels" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestLoadConfig(t *testing.T) { From 7d0c7df53d4991bcf11bc5f8d37a79059894cd18 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Wed, 4 Dec 2019 12:02:55 -0600 Subject: [PATCH 21/59] switched to constants defined in collector --- exporter/awsxrayexporter/awsxray_test.go | 37 +++-- exporter/awsxrayexporter/go.mod | 8 +- exporter/awsxrayexporter/go.sum | 78 ++++++++++ exporter/awsxrayexporter/translator/aws.go | 19 ++- .../awsxrayexporter/translator/aws_test.go | 94 ++++++------- exporter/awsxrayexporter/translator/cause.go | 3 +- .../awsxrayexporter/translator/cause_test.go | 21 +-- exporter/awsxrayexporter/translator/http.go | 95 +++++-------- .../awsxrayexporter/translator/http_test.go | 131 +++++++++-------- .../awsxrayexporter/translator/segment.go | 50 +------ .../translator/segment_test.go | 133 +++++++++--------- .../awsxrayexporter/translator/service.go | 3 +- .../translator/service_test.go | 2 +- exporter/awsxrayexporter/translator/sql.go | 23 ++- .../awsxrayexporter/translator/sql_test.go | 35 ++--- .../translator/writer_pool_test.go | 12 +- go.mod | 3 +- go.sum | 92 ++++++++++++ 18 files changed, 468 insertions(+), 371 deletions(-) diff --git a/exporter/awsxrayexporter/awsxray_test.go b/exporter/awsxrayexporter/awsxray_test.go index 3c8f44e55c01..d165f58cd6ee 100644 --- a/exporter/awsxrayexporter/awsxray_test.go +++ b/exporter/awsxrayexporter/awsxray_test.go @@ -27,6 +27,7 @@ import ( "github.com/golang/protobuf/ptypes/wrappers" "github.com/open-telemetry/opentelemetry-collector/consumer/consumerdata" "github.com/open-telemetry/opentelemetry-collector/exporter" + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" "github.com/stretchr/testify/assert" "go.uber.org/zap" @@ -73,15 +74,14 @@ func constructSpanData() consumerdata.TraceData { func constructResource() *resourcepb.Resource { labels := make(map[string]string) - labels[translator.ServiceNameAttribute] = "signup_aggregator" - labels[translator.ServiceVersionAttribute] = "1.1.12" - labels[translator.ContainerNameAttribute] = "signup_aggregator" - labels[translator.ContainerImageAttribute] = "otel/signupaggregator" - labels[translator.ContainerTagAttribute] = "v1" - labels[translator.CloudProviderAttribute] = "aws" - labels[translator.CloudAccountAttribute] = "999999998" - labels[translator.CloudRegionAttribute] = "us-west-2" - labels[translator.CloudZoneAttribute] = "us-west-1b" + labels[semconventions.AttributeServiceName] = "signup_aggregator" + labels[semconventions.AttributeContainerName] = "signup_aggregator" + labels[semconventions.AttributeContainerImage] = "otel/signupaggregator" + labels[semconventions.AttributeContainerTag] = "v1" + labels[semconventions.AttributeCloudProvider] = "aws" + labels[semconventions.AttributeCloudAccount] = "999999998" + labels[semconventions.AttributeCloudRegion] = "us-west-2" + labels[semconventions.AttributeCloudZone] = "us-west-1b" return &resourcepb.Resource{ Type: "container", Labels: labels, @@ -90,10 +90,10 @@ func constructResource() *resourcepb.Resource { func constructHTTPClientSpan() *tracepb.Span { attributes := make(map[string]interface{}) - attributes[translator.ComponentAttribute] = translator.HTTPComponentType - attributes[translator.MethodAttribute] = "GET" - attributes[translator.URLAttribute] = "https://api.example.com/users/junit" - attributes[translator.StatusCodeAttribute] = 200 + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPURL] = "https://api.example.com/users/junit" + attributes[semconventions.AttributeHTTPStatusCode] = 200 endTime := time.Now().Round(time.Second) startTime := endTime.Add(-90 * time.Second) spanAttributes := constructSpanAttributes(attributes) @@ -125,12 +125,11 @@ func constructHTTPClientSpan() *tracepb.Span { func constructHTTPServerSpan() *tracepb.Span { attributes := make(map[string]interface{}) - attributes[translator.ComponentAttribute] = translator.HTTPComponentType - attributes[translator.MethodAttribute] = "GET" - attributes[translator.URLAttribute] = "https://api.example.com/users/junit" - attributes[translator.UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[translator.ClientIPAttribute] = "192.168.15.32" - attributes[translator.StatusCodeAttribute] = 200 + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPURL] = "https://api.example.com/users/junit" + attributes[semconventions.AttributeHTTPClientIP] = "192.168.15.32" + attributes[semconventions.AttributeHTTPStatusCode] = 200 endTime := time.Now().Round(time.Second) startTime := endTime.Add(-90 * time.Second) spanAttributes := constructSpanAttributes(attributes) diff --git a/exporter/awsxrayexporter/go.mod b/exporter/awsxrayexporter/go.mod index 56c4eec5af3f..bfc7c7b8718c 100644 --- a/exporter/awsxrayexporter/go.mod +++ b/exporter/awsxrayexporter/go.mod @@ -59,7 +59,6 @@ require ( github.com/go-chi/chi v4.0.2+incompatible // indirect github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab // indirect github.com/gobuffalo/buffalo v0.15.0 // indirect - github.com/gobwas/glob v0.2.3 // indirect github.com/gocql/gocql v0.0.0-20191102131523-9faa4c08d962 // indirect github.com/godbus/dbus v4.1.0+incompatible // indirect github.com/goji/param v0.0.0-20160927210335-d7f49fd7d1ed // indirect @@ -105,14 +104,13 @@ require ( github.com/mjibson/appstats v0.0.0-20151004071057-0542d5f0e87e // indirect github.com/montanaflynn/stats v0.5.0 // indirect github.com/nats-io/nats.go v1.9.1 // indirect - github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d // indirect github.com/oklog/oklog v0.3.2 // indirect github.com/olekukonko/tablewriter v0.0.1 // indirect github.com/olivere/elastic v6.2.26+incompatible // indirect github.com/olivere/env v1.1.0 // indirect github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 // indirect // TODO: pin a released version - github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb0c1d1e + github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191203213105-fe3782c76de2 github.com/opentracing/basictracer-go v1.0.0 // indirect github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.4 // indirect github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c // indirect @@ -138,7 +136,6 @@ require ( github.com/shurcooL/resume v0.0.0-20190824223711-dc47c8f77a80 // indirect github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9 // indirect github.com/sony/gobreaker v0.4.1 // indirect - github.com/sourcegraph/go-diff v0.5.1 // indirect github.com/stathat/go v1.0.0 // indirect github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a // indirect github.com/stretchr/testify v1.4.0 @@ -156,10 +153,9 @@ require ( github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c // indirect github.com/xdg/stringprep v1.0.0 // indirect go.etcd.io/etcd v3.3.17+incompatible // indirect - go.opencensus.io v0.22.1 go.uber.org/automaxprocs v1.2.0 // indirect go.uber.org/zap v1.10.0 - golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 + golang.org/x/net v0.0.0-20190923162816-aa69164e4478 gopkg.in/cheggaaa/pb.v1 v1.0.28 // indirect gopkg.in/gcfg.v1 v1.2.3 // indirect gopkg.in/pipe.v2 v2.0.0-20140414041502-3c2ca4d52544 // indirect diff --git a/exporter/awsxrayexporter/go.sum b/exporter/awsxrayexporter/go.sum index c1d923b9f90e..07b4d70621b2 100644 --- a/exporter/awsxrayexporter/go.sum +++ b/exporter/awsxrayexporter/go.sum @@ -61,6 +61,7 @@ github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb0 github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OneOfOne/xxhash v1.2.5 h1:zl/OfRA6nftbBK9qTohYBJ5xvw6C/oNKizR7cZGl3cI= github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= +github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= @@ -72,6 +73,7 @@ github.com/Shopify/sarama v1.19.0 h1:9oksLxC6uxVPHPVYUmq6xhr1BOF/hHobWH2UzO67z1s github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/aclements/go-gg v0.0.0-20170323211221-abd1f791f5ee h1:KJgh99JlYRhfgHtb7XyhAZSJMdfkjVmo3PP7XO1/HO8= @@ -159,6 +161,7 @@ github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b h1:AP/Y7sqYicnjGDf github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b/go.mod h1:ac9efd0D1fsDb3EJvhqgXRbFx7bs2wqZ10HQPeU8U/Q= github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/bombsimon/wsl v1.2.5/go.mod h1:43lEF/i0kpXbLCeDXL9LMT8c92HyBywXb0AsgMHYngM= github.com/boombuler/barcode v1.0.0 h1:s1TvRnXwL2xJRaccrdcBQMZxq6X7DvsMogtmJeHDdrc= github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625 h1:ckJgFhFWywOx+YLEMIJsTb+NV6NexWICk5+AMSuz3ss= @@ -342,9 +345,11 @@ github.com/glycerine/go-unsnap-stream v0.0.0-20190901134440-81cf024a9e0a h1:FQqo github.com/glycerine/go-unsnap-stream v0.0.0-20190901134440-81cf024a9e0a/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= github.com/go-chi/chi v4.0.2+incompatible h1:maB6vn6FqCxrpz4FqWdh4+lwpyZIQS7YEAUcHlgXVRs= github.com/go-chi/chi v4.0.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= +github.com/go-critic/go-critic v0.3.5-0.20190904082202-d79a9f0c64db/go.mod h1:+sE8vrLDS2M0pZkBk0wy6+nLdKexVDrl/jBqQOTDThA= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= @@ -352,6 +357,7 @@ github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab h1:xveKWz2iaueeTaUgdetzel+U7exyigDYBryyVfV/rZk= github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= +github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.17.2/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= @@ -415,6 +421,19 @@ github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZp github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= +github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= +github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astfmt v0.0.0-20180903215011-8f8ee99c3086/go.mod h1:mP93XdblcopXwlyN4X4uodxXQhldPGZbcEJIimQHrkg= +github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= +github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU= +github.com/go-toolsmith/astp v0.0.0-20180903215135-0af7e3c24f30/go.mod h1:SV2ur98SGypH1UjcPpCatrV5hPazG6+IfNHbkDXBRrk= +github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= +github.com/go-toolsmith/pkgload v0.0.0-20181119091011-e9e65178eee8/go.mod h1:WoMrjiy4zvdS+Bg6z9jZH82QXwkcgCBX6nOfnmdaHks= +github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc= +github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= +github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= github.com/gobuffalo/attrs v0.0.0-20190219185331-f338c9388485/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= github.com/gobuffalo/attrs v0.1.0 h1:LY6/rbhPD/hfa+AfviaMXBmZBGb0fGHF12yg7f3dPQA= @@ -886,6 +905,7 @@ github.com/gocql/gocql v0.0.0-20191102131523-9faa4c08d962 h1:+YAUiFOQF5pIjD9FYvk github.com/gocql/gocql v0.0.0-20191102131523-9faa4c08d962/go.mod h1:DL0ekTmBSTdlNF25Orwt/JMzqIq3EJ4MVa/J/uK64OY= github.com/godbus/dbus v4.1.0+incompatible h1:WqqLRTsQic3apZUK9qC5sGNfXthmPXzUZ7nQPrNITa4= github.com/godbus/dbus v4.1.0+incompatible/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= +github.com/gofrs/flock v0.0.0-20190320160742-5135e617513b/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gofrs/uuid v3.1.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= @@ -926,6 +946,21 @@ github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8l github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0= +github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= +github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3/go.mod h1:JXrF4TWy4tXYn62/9x8Wm/K/dm06p8tCKwFRDPZG/1o= +github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU= +github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= +github.com/golangci/golangci-lint v1.21.0/go.mod h1:phxpHK52q7SE+5KpPnti4oZTdFCEsn/tKN+nFvCKXfk= +github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc/go.mod h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU= +github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= +github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI= +github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0= github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac h1:Q0Jsdxl5jbxouNs1TQYt0gxesYMU4VXRbsTlgDloZ50= @@ -1011,6 +1046,7 @@ github.com/gorilla/sessions v1.2.0 h1:S7P+1Hm5V/AT9cjEcUD5uDaQSX0OE577aCXgoaKpYb github.com/gorilla/sessions v1.2.0/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= github.com/graph-gophers/graphql-go v0.0.0-20191031232829-adde0d0f76a3 h1:HwRCZlPXN00r58jaIPE11HXn7EvhheQrE+Cxw0vkrH0= github.com/graph-gophers/graphql-go v0.0.0-20191031232829-adde0d0f76a3/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7 h1:6TSoaYExHper8PYsJu23GWVNOyYRCSnIFyxKgLSZ54w= @@ -1225,8 +1261,12 @@ github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kisielk/sqlstruct v0.0.0-20150923205031-648daed35d49 h1:o/c0aWEP/m6n61xlYW2QP4t9424qlJOsxugn5Zds2Rg= github.com/kisielk/sqlstruct v0.0.0-20150923205031-648daed35d49/go.mod h1:yyMNCyc/Ib3bDTKd379tNMpB/7/H5TjM2Y9QJ5THLbE= +github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.9.1 h1:TWy0o9J9c6LK9C8t7Msh6IAJNXbsU/nvKLTQUU5HdaY= github.com/klauspost/compress v1.9.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/pgzip v1.2.1 h1:oIPZROsWuPHpOdMVWLuJZXwgjhrW8r1yEX8UqMyeNHM= github.com/klauspost/pgzip v1.2.1/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v0.0.0-20180402223658-b729f2633dfe/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -1258,6 +1298,7 @@ github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-b github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.17.1 h1:PgitbgUDool2AcHopDNTlvwq7BQeZssTGs4EVwcGhr8= github.com/lightstep/lightstep-tracer-go v0.17.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/lyft/protoc-gen-star v0.4.11 h1:zW6fJQBtCtVeSiO/Kbpzv32GO0J/Z8egSLeohES202w= github.com/lyft/protoc-gen-star v0.4.11/go.mod h1:mE8fbna26u7aEA2QCVvvfBU/ZrPgocG1206xAFPcs94= github.com/lyft/protoc-gen-validate v0.0.13 h1:KNt/RhmQTOLr7Aj8PsJ7mTronaFyx80mRTT9qF261dA= @@ -1332,6 +1373,7 @@ github.com/marstr/randname v0.0.0-20181206212954-d5b0f288ab8c h1:JE+MDz5rhFN5EC9 github.com/marstr/randname v0.0.0-20181206212954-d5b0f288ab8c/go.mod h1:Xc224oUXd7/sKMjWKl17cfkYOKQ1S+HSOW7YHEGXauI= github.com/martini-contrib/render v0.0.0-20150707142108-ec18f8345a11 h1:YFh+sjyJTMQSYjKwM4dFKhJPJC/wfo98tPUc17HdoYw= github.com/martini-contrib/render v0.0.0-20150707142108-ec18f8345a11/go.mod h1:Ah2dBMoxZEqk118as2T4u4fjfXarE0pPnMJaArZQZsI= +github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= @@ -1358,6 +1400,7 @@ github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4f github.com/mattn/go-zglob v0.0.0-20171230104132-4959821b4817/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= github.com/mattn/go-zglob v0.0.0-20180803001819-2ea3427bfa53 h1:tGfIHhDghvEnneeRhODvGYOt305TPwingKt6p90F4MU= github.com/mattn/go-zglob v0.0.0-20180803001819-2ea3427bfa53/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= +github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= @@ -1371,6 +1414,7 @@ github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceT github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= 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 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= @@ -1400,6 +1444,7 @@ github.com/monoculum/formam v0.0.0-20190830100315-7ff9597b1407 h1:ZU5O9BawmEx9Mu github.com/monoculum/formam v0.0.0-20190830100315-7ff9597b1407/go.mod h1:JKa2av1XVkGjhxdLS59nDoXa2JpmIHpnURWNbzCtXtc= github.com/montanaflynn/stats v0.5.0 h1:2EkzeTSqBB4V4bJwWrt5gIIrZmpJBcoIRGS2kWLgzmk= github.com/montanaflynn/stats v0.5.0/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/mozilla/tls-observatory v0.0.0-20190404164649-a3c1b6cfecfd/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d h1:7PxY7LVfSZm7PEeBTyK1rj1gABdCO2mbri6GKO1cMDs= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -1456,8 +1501,11 @@ github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +github.com/open-telemetry/opentelemetry-collector v0.2.0 h1:38/NrGdEEXufWqYFkW/6yeW3koRvb1QbE/2owKSNQvI= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb0c1d1e h1:poxNKN8teT8QjLK6LwKN52cNQEPqHIOEsmPJv5ssZUU= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb0c1d1e/go.mod h1:zZf9V+57o0Fd3ik5HzaHamVsWhudJTOwnKw9kJvWoDo= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191203213105-fe3782c76de2 h1:lrdCxCJpccXFU3jCWB869fy5yRiSRRa4VTVJgLFpUOw= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191203213105-fe3782c76de2/go.mod h1:pL3jClof5EzaEU97itKyjLg4b8PFUwG87dM51Bnobhc= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 h1:lM6RxxfUMrYL/f8bWEUqdXrANWtrL7Nndbm9iFN0DlU= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9 h1:QsgXACQhd9QJhEmRumbsMQQvBtmdS0mafoVEBplWXEg= @@ -1482,6 +1530,7 @@ github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0Mw github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/paulbellamy/ratecounter v0.2.0 h1:2L/RhJq+HA8gBQImDXtLPrDXK5qAj6ozWVK/zFXVJGs= github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= +github.com/pavius/impi v0.0.0-20180302134524-c1cbdcb8df2b/go.mod h1:x/hU0bfdWIhuOT1SKwiJg++yvkk6EuOtJk8WtDZqgr8= github.com/pborman/getopt v0.0.0-20190409184431-ee0cd42419d3 h1:YtFkrqsMEj7YqpIhRteVxJxCeC3jJBieuLr0d4C4rSA= github.com/pborman/getopt v0.0.0-20190409184431-ee0cd42419d3/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= @@ -1558,6 +1607,7 @@ github.com/prometheus/prometheus v1.8.2-0.20190924101040-52e0504f83ea h1:DkijwrD github.com/prometheus/prometheus v1.8.2-0.20190924101040-52e0504f83ea/go.mod h1:elNqjVbwD3sCZJqKzyN7uEuwGcCpeJvv67D6BrHsDbw= github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a h1:9ZKAASQSHhDYGoxY8uLVpewe1GDZ2vu2Tr/vTdVAkFQ= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237 h1:HQagqIiBmr8YXawX/le3+O26N+vPPC1PtjaF3mwnook= @@ -1606,12 +1656,15 @@ github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/securego/gosec v0.0.0-20191002120514-e680875ea14d/go.mod h1:w5+eXa0mYznDkHaMCXA4XYffjlH+cy1oyKbfzJXa2Do= github.com/segmentio/kafka-go v0.1.0 h1:IXCHG+sXPNiIR5pC/vTEItZduPKu4cnpr85YgxpxlW0= github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/serenize/snaker v0.0.0-20171204205717-a683aaf2d516 h1:ofR1ZdrNSkiWcMsRrubK9tb2/SlZVWttAfqUjJi6QYc= github.com/serenize/snaker v0.0.0-20171204205717-a683aaf2d516/go.mod h1:Yow6lPLSAXx2ifx470yD/nUe22Dv5vBvxK/UK9UUTVs= github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc= +github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= github.com/shopspring/decimal v0.0.0-20191009025716-f1972eb1d1f5 h1:Gojs/hac/DoYEM7WEICT45+hNWczIeuL5D21e5/HPAw= github.com/shopspring/decimal v0.0.0-20191009025716-f1972eb1d1f5/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= @@ -1762,6 +1815,7 @@ github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07 h1:UyzmZLoiDWMRywV4DUY github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= github.com/tinylib/msgp v1.1.0 h1:9fQd+ICuRIu/ue4vxJZu6/LzxN0HwMds2nq/0cFvxHU= github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2 h1:eGaGNxrtoZf/mBURsnNQKDR7u50Klgcf2eFDQEnc8Bc= @@ -1791,6 +1845,8 @@ github.com/ugorji/go v1.1.4 h1:j4s+tAvLfL3bZyefP2SEWmhBzmuIlH/eqNuPdFPgngw= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8 h1:3SVOIvH7Ae1KRYyQWRjXWJEA9sS/c/pjvH++55Gr648= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ultraware/funlen v0.0.2/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= github.com/unknwon/cae v1.0.0 h1:i39lOFaBXZxhGjQOy/RNbi8uzettCs6OQxpR0xXohGU= github.com/unknwon/cae v1.0.0/go.mod h1:QaSeRctcea9fK6piJpAMCCPKxzJ01+xFcr2k1m3WRPU= github.com/unrolled/secure v0.0.0-20180918153822-f340ee86eb8b/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= @@ -1802,6 +1858,11 @@ github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/negroni v1.0.0 h1:kIimOitoypq34K7TG7DUaJ9kq/N4Ofuwi1sjz0KipXc= github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= +github.com/uudashr/gocognit v0.0.0-20190926065955-1655d0de0517/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.2.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s= +github.com/valyala/quicktemplate v1.2.0/go.mod h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOVRUAfrukLPuGJ4= +github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/xanzy/ssh-agent v0.2.0 h1:Adglfbi5p9Z0BmK2oKU9nTG+zKfniSfnaMYB+ULd+Ro= github.com/xanzy/ssh-agent v0.2.0/go.mod h1:0NyE30eGUDliuLEHJgYte/zncp2zdTStcOnWhgSqHD8= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c h1:u40Z8hqBAAQyv+vATcGgV0YCnDjqSL7/q/JyPhhJSPk= @@ -1879,6 +1940,7 @@ golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 h1:HuIa8hRrWRSrqYzx1qI49N golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522 h1:OeRHuibLsmZkFj773W4LcfAGsSxJgfPONhr8cmO+eLA= @@ -1903,6 +1965,7 @@ golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20180816102801-aaf60122140d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180921000356-2f5d2388922f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180926154720-4dfa2610cdf3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1938,6 +2001,8 @@ golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 h1:Ao/3l156eZf2AW5wK8a7/smto golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 h1:fHDIZ2oxGnUZRN6WgWFCbYBjH9uqVPRCUVUDhs0wnbA= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478 h1:l5EDrHhldLYb3ZRHDUhXF7Om7MvYXnkV9/iQNo1lX6g= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -2011,6 +2076,7 @@ golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be h1:QAcqgptGM8IQBC9K/RC4o+O9YmqEm0diQn9QmZw/0mU= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2048,6 +2114,7 @@ golang.org/x/tools v0.0.0-20181109152631-138c20b93253/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20181109202920-92d8274bd7b8/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181111003725-6d71ab8aade0/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181114190951-94339b83286c/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181117154741-2ddaf7f79a09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181119130350-139d099f6620/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181120060634-fc4f04983f62/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181122213734-04b5d21e00f1/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -2062,6 +2129,7 @@ golang.org/x/tools v0.0.0-20181212172921-837e80568c09/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20181213190329-bbccd8cae4a9/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190102213336-ca9055ed7d04/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190104182027-498d95493402/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190111214448-fc1d57b08d7b/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-20190118193359-16909d206f00/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -2075,10 +2143,12 @@ golang.org/x/tools v0.0.0-20190219185102-9394956cfdc5/go.mod h1:E6PF97AdD6v0s+fP golang.org/x/tools v0.0.0-20190221204921-83362c3779f5/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= 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-20190311215038-5c2858a9cfe5/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-20190315044204-8b67d361bba2/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190318200714-bb1270c20edf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190404132500-923d25813098/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190407030857-0fdf0c73855b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -2087,6 +2157,7 @@ golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190521203540-521d6ed310dd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190603152906-08e0b306e832/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190603231351-8aaa1484dc10/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= @@ -2097,6 +2168,7 @@ golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190624180213-70d37148ca0c/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-20190719005602-e377ae9d6386/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= golang.org/x/tools v0.0.0-20190809145639-6d4652c779c4/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190813034749-528a2984e271/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -2105,7 +2177,10 @@ golang.org/x/tools v0.0.0-20190905035308-adb45749da8e/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20190906203814-12febf440ab1 h1:w4Q0TX3lC1NfGcWkzt5wG4ee4E5fUAPqh5myV0efeHI= golang.org/x/tools v0.0.0-20190906203814-12febf440ab1/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190930201159-7c411dea38b0/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191004055002-72853e10c5a3/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191015150414-f936694f27bf/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191030062658-86caa796c7ab h1:tpc/nJ4vD66vAk/2KN0sw/DvQIz2sKmCpWvyKtPmfMQ= golang.org/x/tools v0.0.0-20191030062658-86caa796c7ab/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -2259,6 +2334,9 @@ k8s.io/kube-openapi v0.0.0-20190722073852-5e22f3d471e6/go.mod h1:RZvgC8MSN6DjiMV k8s.io/utils v0.0.0-20190221042446-c2654d5206da/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3oVhZz7sSzSiPnVZayjIX0= k8s.io/utils v0.0.0-20190809000727-6c36bc71fc4a h1:uy5HAgt4Ha5rEMbhZA+aM1j2cq5LmR6LQ71EYC2sVH4= k8s.io/utils v0.0.0-20190809000727-6c36bc71fc4a/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= +mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f/go.mod h1:4G1h5nDURzA3bwVMZIVpwbkw+04kSxk3rAtzlimaUJw= rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e h1:4Z09Hglb792X0kfOBBJUPFEyvVfQWrYT/l8h5EKA6JQ= diff --git a/exporter/awsxrayexporter/translator/aws.go b/exporter/awsxrayexporter/translator/aws.go index 4712c9def403..cf5f3cdeb0e6 100644 --- a/exporter/awsxrayexporter/translator/aws.go +++ b/exporter/awsxrayexporter/translator/aws.go @@ -18,6 +18,7 @@ import ( "strconv" resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" ) // AWS-specific OpenTelemetry attribute names @@ -87,26 +88,24 @@ func makeAws(attributes map[string]string, resource *resourcepb.Resource) (map[s filtered := make(map[string]string) for key, value := range resource.Labels { switch key { - case CloudProviderAttribute: + case semconventions.AttributeCloudProvider: cloud = value - case CloudAccountAttribute: + case semconventions.AttributeCloudAccount: account = value - case CloudZoneAttribute: + case semconventions.AttributeCloudZone: zone = value - case HostIDAttribute: + case semconventions.AttributeHostID: hostID = value - case ContainerNameAttribute: + case semconventions.AttributeContainerName: if container == "" { container = value } - case K8sPodAttribute: + case semconventions.AttributeK8sPod: container = value - case ServiceNamespaceAttribute: + case semconventions.AttributeServiceNamespace: namespace = value - case ServiceInstanceAttribute: + case semconventions.AttributeServiceInstance: deployID = value - case ServiceVersionAttribute: - ver = value } } for key, value := range attributes { diff --git a/exporter/awsxrayexporter/translator/aws_test.go b/exporter/awsxrayexporter/translator/aws_test.go index fe09a055001b..c6b8d67b164a 100644 --- a/exporter/awsxrayexporter/translator/aws_test.go +++ b/exporter/awsxrayexporter/translator/aws_test.go @@ -19,17 +19,18 @@ import ( "testing" resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" "github.com/stretchr/testify/assert" ) func TestAwsFromEc2Resource(t *testing.T) { instanceID := "i-00f7c0bcb26da2a99" labels := make(map[string]string) - labels[CloudProviderAttribute] = "aws" - labels[CloudAccountAttribute] = "123456789" - labels[CloudZoneAttribute] = "us-east-1c" - labels[HostIDAttribute] = instanceID - labels[HostTypeAttribute] = "m5.xlarge" + labels[semconventions.AttributeCloudProvider] = "aws" + labels[semconventions.AttributeCloudAccount] = "123456789" + labels[semconventions.AttributeCloudZone] = "us-east-1c" + labels[semconventions.AttributeHostID] = instanceID + labels[semconventions.AttributeHostType] = "m5.xlarge" resource := &resourcepb.Resource{ Type: "vm", Labels: labels, @@ -56,18 +57,18 @@ func TestAwsFromEcsResource(t *testing.T) { instanceID := "i-00f7c0bcb26da2a99" containerID := "signup_aggregator-x82ufje83" labels := make(map[string]string) - labels[CloudProviderAttribute] = "aws" - labels[CloudAccountAttribute] = "123456789" - labels[CloudZoneAttribute] = "us-east-1c" - labels[ContainerNameAttribute] = "signup_aggregator" - labels[ContainerImageAttribute] = "otel/signupaggregator" - labels[ContainerTagAttribute] = "v1" - labels[K8sClusterAttribute] = "production" - labels[K8sNamespaceAttribute] = "default" - labels[K8sDeploymentAttribute] = "signup_aggregator" - labels[K8sPodAttribute] = containerID - labels[HostIDAttribute] = instanceID - labels[HostTypeAttribute] = "m5.xlarge" + labels[semconventions.AttributeCloudProvider] = "aws" + labels[semconventions.AttributeCloudAccount] = "123456789" + labels[semconventions.AttributeCloudZone] = "us-east-1c" + labels[semconventions.AttributeContainerName] = "signup_aggregator" + labels[semconventions.AttributeContainerImage] = "otel/signupaggregator" + labels[semconventions.AttributeContainerTag] = "v1" + labels[semconventions.AttributeK8sCluster] = "production" + labels[semconventions.AttributeK8sNamespace] = "default" + labels[semconventions.AttributeK8sDeployment] = "signup_aggregator" + labels[semconventions.AttributeK8sPod] = containerID + labels[semconventions.AttributeHostID] = instanceID + labels[semconventions.AttributeHostType] = "m5.xlarge" resource := &resourcepb.Resource{ Type: "container", Labels: labels, @@ -93,12 +94,11 @@ func TestAwsFromEcsResource(t *testing.T) { func TestAwsFromBeanstalkResource(t *testing.T) { deployID := "232" labels := make(map[string]string) - labels[CloudProviderAttribute] = "aws" - labels[CloudAccountAttribute] = "123456789" - labels[CloudZoneAttribute] = "us-east-1c" - labels[ServiceVersionAttribute] = "2.1.4" - labels[ServiceNamespaceAttribute] = "production" - labels[ServiceInstanceAttribute] = deployID + labels[semconventions.AttributeCloudProvider] = "aws" + labels[semconventions.AttributeCloudAccount] = "123456789" + labels[semconventions.AttributeCloudZone] = "us-east-1c" + labels[semconventions.AttributeServiceNamespace] = "production" + labels[semconventions.AttributeServiceInstance] = deployID resource := &resourcepb.Resource{ Type: "vm", Labels: labels, @@ -125,18 +125,18 @@ func TestAwsWithAwsSqsResources(t *testing.T) { instanceID := "i-00f7c0bcb26da2a99" containerID := "signup_aggregator-x82ufje83" labels := make(map[string]string) - labels[CloudProviderAttribute] = "aws" - labels[CloudAccountAttribute] = "123456789" - labels[CloudZoneAttribute] = "us-east-1c" - labels[ContainerNameAttribute] = "signup_aggregator" - labels[ContainerImageAttribute] = "otel/signupaggregator" - labels[ContainerTagAttribute] = "v1" - labels[K8sClusterAttribute] = "production" - labels[K8sNamespaceAttribute] = "default" - labels[K8sDeploymentAttribute] = "signup_aggregator" - labels[K8sPodAttribute] = containerID - labels[HostIDAttribute] = instanceID - labels[HostTypeAttribute] = "m5.xlarge" + labels[semconventions.AttributeCloudProvider] = "aws" + labels[semconventions.AttributeCloudAccount] = "123456789" + labels[semconventions.AttributeCloudZone] = "us-east-1c" + labels[semconventions.AttributeContainerName] = "signup_aggregator" + labels[semconventions.AttributeContainerImage] = "otel/signupaggregator" + labels[semconventions.AttributeContainerTag] = "v1" + labels[semconventions.AttributeK8sCluster] = "production" + labels[semconventions.AttributeK8sNamespace] = "default" + labels[semconventions.AttributeK8sDeployment] = "signup_aggregator" + labels[semconventions.AttributeK8sPod] = containerID + labels[semconventions.AttributeHostID] = instanceID + labels[semconventions.AttributeHostType] = "m5.xlarge" resource := &resourcepb.Resource{ Type: "container", Labels: labels, @@ -170,18 +170,18 @@ func TestAwsWithAwsDynamoDbResources(t *testing.T) { instanceID := "i-00f7c0bcb26da2a99" containerID := "signup_aggregator-x82ufje83" labels := make(map[string]string) - labels[CloudProviderAttribute] = "aws" - labels[CloudAccountAttribute] = "123456789" - labels[CloudZoneAttribute] = "us-east-1c" - labels[ContainerNameAttribute] = "signup_aggregator" - labels[ContainerImageAttribute] = "otel/signupaggregator" - labels[ContainerTagAttribute] = "v1" - labels[K8sClusterAttribute] = "production" - labels[K8sNamespaceAttribute] = "default" - labels[K8sDeploymentAttribute] = "signup_aggregator" - labels[K8sPodAttribute] = containerID - labels[HostIDAttribute] = instanceID - labels[HostTypeAttribute] = "m5.xlarge" + labels[semconventions.AttributeCloudProvider] = "aws" + labels[semconventions.AttributeCloudAccount] = "123456789" + labels[semconventions.AttributeCloudZone] = "us-east-1c" + labels[semconventions.AttributeContainerName] = "signup_aggregator" + labels[semconventions.AttributeContainerImage] = "otel/signupaggregator" + labels[semconventions.AttributeContainerTag] = "v1" + labels[semconventions.AttributeK8sCluster] = "production" + labels[semconventions.AttributeK8sNamespace] = "default" + labels[semconventions.AttributeK8sDeployment] = "signup_aggregator" + labels[semconventions.AttributeK8sPod] = containerID + labels[semconventions.AttributeHostID] = instanceID + labels[semconventions.AttributeHostType] = "m5.xlarge" resource := &resourcepb.Resource{ Type: "container", Labels: labels, diff --git a/exporter/awsxrayexporter/translator/cause.go b/exporter/awsxrayexporter/translator/cause.go index 579bcd967f2c..f345158ef2da 100644 --- a/exporter/awsxrayexporter/translator/cause.go +++ b/exporter/awsxrayexporter/translator/cause.go @@ -18,6 +18,7 @@ import ( "encoding/hex" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" ) // OpenTelemetry Semantic Convention attribute names for error/fault/exception related attributes @@ -70,7 +71,7 @@ func makeCause(status *tracepb.Status, attributes map[string]string) (isError, i if message == "" { message = value } - case StatusTextAttribute: + case semconventions.AttributeHTTPStatusText: if message == "" { message = value } diff --git a/exporter/awsxrayexporter/translator/cause_test.go b/exporter/awsxrayexporter/translator/cause_test.go index 7ce99a85091a..6170abc19d9d 100644 --- a/exporter/awsxrayexporter/translator/cause_test.go +++ b/exporter/awsxrayexporter/translator/cause_test.go @@ -21,15 +21,16 @@ import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" "github.com/stretchr/testify/assert" ) func TestCauseWithStatusMessage(t *testing.T) { errorMsg := "this is a test" attributes := make(map[string]interface{}) - attributes[MethodAttribute] = "POST" - attributes[URLAttribute] = "https://api.example.com/widgets" - attributes[StatusCodeAttribute] = 500 + attributes[semconventions.AttributeHTTPMethod] = "POST" + attributes[semconventions.AttributeHTTPURL] = "https://api.example.com/widgets" + attributes[semconventions.AttributeHTTPStatusCode] = 500 span := constructExceptionServerSpan(attributes) span.Status.Message = errorMsg filtered, _ := makeHTTP(span) @@ -52,10 +53,10 @@ func TestCauseWithStatusMessage(t *testing.T) { func TestCauseWithHttpStatusMessage(t *testing.T) { errorMsg := "this is a test" attributes := make(map[string]interface{}) - attributes[MethodAttribute] = "POST" - attributes[URLAttribute] = "https://api.example.com/widgets" - attributes[StatusCodeAttribute] = 500 - attributes[StatusTextAttribute] = errorMsg + attributes[semconventions.AttributeHTTPMethod] = "POST" + attributes[semconventions.AttributeHTTPURL] = "https://api.example.com/widgets" + attributes[semconventions.AttributeHTTPStatusCode] = 500 + attributes[semconventions.AttributeHTTPStatusText] = errorMsg span := constructExceptionServerSpan(attributes) filtered, _ := makeHTTP(span) @@ -77,9 +78,9 @@ func TestCauseWithHttpStatusMessage(t *testing.T) { func TestCauseWithErrorMessage(t *testing.T) { errorMsg := "this is a test" attributes := make(map[string]interface{}) - attributes[MethodAttribute] = "POST" - attributes[URLAttribute] = "https://api.example.com/widgets" - attributes[StatusCodeAttribute] = 500 + attributes[semconventions.AttributeHTTPMethod] = "POST" + attributes[semconventions.AttributeHTTPURL] = "https://api.example.com/widgets" + attributes[semconventions.AttributeHTTPStatusCode] = 500 attributes[ErrorMessageAttribute] = errorMsg span := constructExceptionServerSpan(attributes) filtered, _ := makeHTTP(span) diff --git a/exporter/awsxrayexporter/translator/http.go b/exporter/awsxrayexporter/translator/http.go index b33ef4f4fd0a..1165f5a2d0e9 100644 --- a/exporter/awsxrayexporter/translator/http.go +++ b/exporter/awsxrayexporter/translator/http.go @@ -19,30 +19,10 @@ import ( "strconv" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" ) -// OpenTelemetry Semantic Convention attribute names for HTTP and gRPC related attributes -const ( - MethodAttribute = "http.method" - URLAttribute = "http.url" - TargetAttribute = "http.target" - HostAttribute = "http.host" - SchemeAttribute = "http.scheme" - StatusCodeAttribute = "http.status_code" - StatusTextAttribute = "http.status_text" - FlavorAttribute = "http.flavor" - ServerNameAttribute = "http.server_name" - PortAttribute = "http.port" - RouteAttribute = "http.route" - ClientIPAttribute = "http.client_ip" - UserAgentAttribute = "http.user_agent" - MessageTypeAttribute = "message.type" - MessageIDAttribute = "message.id" - MessageCompressedSizeAttribute = "message.compressed_size" - MessageUncompressedSizeAttribute = "message.uncompressed_size" -) - // HTTPData provides the shape for unmarshalling request and response data. type HTTPData struct { Request RequestData `json:"request,omitempty"` @@ -116,52 +96,51 @@ func makeHTTP(span *tracepb.Span) (map[string]string, *HTTPData) { for key, value := range span.Attributes.AttributeMap { switch key { - case ComponentAttribute: + case semconventions.AttributeComponent: componentValue = value.GetStringValue().GetValue() filtered[key] = componentValue - case MethodAttribute: + case semconventions.AttributeHTTPMethod: info.Request.Method = value.GetStringValue().GetValue() - case UserAgentAttribute: - info.Request.UserAgent = value.GetStringValue().GetValue() - case ClientIPAttribute: + case semconventions.AttributeHTTPClientIP: info.Request.ClientIP = value.GetStringValue().GetValue() info.Request.XForwardedFor = true - case StatusCodeAttribute: + case semconventions.AttributeHTTPStatusCode: info.Response.Status = value.GetIntValue() - case URLAttribute: + case semconventions.AttributeHTTPURL: urlParts[key] = value.GetStringValue().GetValue() - case SchemeAttribute: + case semconventions.AttributeHTTPScheme: urlParts[key] = value.GetStringValue().GetValue() - case HostAttribute: + case semconventions.AttributeHTTPHost: urlParts[key] = value.GetStringValue().GetValue() - case TargetAttribute: + case semconventions.AttributeHTTPTarget: urlParts[key] = value.GetStringValue().GetValue() - case ServerNameAttribute: + case semconventions.AttributeHTTPServerName: urlParts[key] = value.GetStringValue().GetValue() - case HostNameAttribute: + case semconventions.AttributeHostName: urlParts[key] = value.GetStringValue().GetValue() - case PortAttribute: + case semconventions.AttributeHTTPHostPort: urlParts[key] = value.GetStringValue().GetValue() if len(urlParts[key]) == 0 { urlParts[key] = strconv.FormatInt(value.GetIntValue(), 10) } - case PeerHostAttribute: + case semconventions.AttributePeerHost: urlParts[key] = value.GetStringValue().GetValue() - case PeerPortAttribute: + case semconventions.AttributePeerPort: urlParts[key] = value.GetStringValue().GetValue() if len(urlParts[key]) == 0 { urlParts[key] = strconv.FormatInt(value.GetIntValue(), 10) } - case PeerIpv4Attribute: + case semconventions.AttributePeerIpv4: urlParts[key] = value.GetStringValue().GetValue() - case PeerIpv6Attribute: + case semconventions.AttributePeerIpv6: urlParts[key] = value.GetStringValue().GetValue() default: filtered[key] = value.GetStringValue().GetValue() } } - if (componentValue != HTTPComponentType && componentValue != GrpcComponentType) || info.Request.Method == "" { + if (componentValue != semconventions.ComponentTypeHTTP && componentValue != semconventions.ComponentTypeGRPC) || + info.Request.Method == "" { return filtered, nil } @@ -187,10 +166,10 @@ func extractResponseSizeFromEvents(span *tracepb.Span) int64 { anno := te.GetAnnotation() if anno != nil { attrMap := anno.Attributes.AttributeMap - typeVal := attrMap[MessageTypeAttribute] + typeVal := attrMap[semconventions.AttributeMessageType] if typeVal != nil { if typeVal.GetStringValue().GetValue() == "RECEIVED" { - sizeVal := attrMap[MessageUncompressedSizeAttribute] + sizeVal := attrMap[semconventions.AttributeMessageUncompressedSize] if sizeVal != nil { size = sizeVal.GetIntValue() } @@ -205,31 +184,31 @@ func extractResponseSizeFromEvents(span *tracepb.Span) int64 { func constructClientURL(component string, urlParts map[string]string) string { // follows OpenTelemetry specification-defined combinations for client spans described in // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/data-http.md - url, ok := urlParts[URLAttribute] + url, ok := urlParts[semconventions.AttributeHTTPURL] if ok { // full URL available so no need to assemble return url } - scheme, ok := urlParts[SchemeAttribute] + scheme, ok := urlParts[semconventions.AttributeHTTPScheme] if !ok { - if component == GrpcComponentType { + if component == semconventions.ComponentTypeGRPC { scheme = "dns" } else { scheme = "http" } } port := "" - host, ok := urlParts[HostAttribute] + host, ok := urlParts[semconventions.AttributeHTTPHost] if !ok { - host, ok = urlParts[PeerHostAttribute] + host, ok = urlParts[semconventions.AttributePeerHost] if !ok { - host, ok = urlParts[PeerIpv4Attribute] + host, ok = urlParts[semconventions.AttributePeerIpv4] if !ok { - host = urlParts[PeerIpv6Attribute] + host = urlParts[semconventions.AttributePeerIpv6] } } - port, ok = urlParts[PeerPortAttribute] + port, ok = urlParts[semconventions.AttributePeerPort] if !ok { port = "" } @@ -238,7 +217,7 @@ func constructClientURL(component string, urlParts map[string]string) string { if len(port) > 0 && !(scheme == "http" && port == "80") && !(scheme == "https" && port == "443") { url += ":" + port } - target, ok := urlParts[TargetAttribute] + target, ok := urlParts[semconventions.AttributeHTTPTarget] if ok { url += target } else { @@ -250,28 +229,28 @@ func constructClientURL(component string, urlParts map[string]string) string { func constructServerURL(component string, urlParts map[string]string) string { // follows OpenTelemetry specification-defined combinations for server spans described in // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/data-http.md - url, ok := urlParts[URLAttribute] + url, ok := urlParts[semconventions.AttributeHTTPURL] if ok { // full URL available so no need to assemble return url } - scheme, ok := urlParts[SchemeAttribute] + scheme, ok := urlParts[semconventions.AttributeHTTPScheme] if !ok { - if component == GrpcComponentType { + if component == semconventions.ComponentTypeGRPC { scheme = "dns" } else { scheme = "http" } } port := "" - host, ok := urlParts[HostAttribute] + host, ok := urlParts[semconventions.AttributeHTTPHost] if !ok { - host, ok = urlParts[ServerNameAttribute] + host, ok = urlParts[semconventions.AttributeHTTPServerName] if !ok { - host, ok = urlParts[HostNameAttribute] + host, ok = urlParts[semconventions.AttributeHostName] } - port, ok = urlParts[PortAttribute] + port, ok = urlParts[semconventions.AttributeHTTPHostPort] if !ok { port = "" } @@ -280,7 +259,7 @@ func constructServerURL(component string, urlParts map[string]string) string { if len(port) > 0 && !(scheme == "http" && port == "80") && !(scheme == "https" && port == "443") { url += ":" + port } - target, ok := urlParts[TargetAttribute] + target, ok := urlParts[semconventions.AttributeHTTPTarget] if ok { url += target } else { diff --git a/exporter/awsxrayexporter/translator/http_test.go b/exporter/awsxrayexporter/translator/http_test.go index 96cc52c05170..96ac2b86d6f9 100644 --- a/exporter/awsxrayexporter/translator/http_test.go +++ b/exporter/awsxrayexporter/translator/http_test.go @@ -22,15 +22,16 @@ import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" "github.com/golang/protobuf/ptypes/wrappers" + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" "github.com/stretchr/testify/assert" ) -func TestClientSpanWithUrlAttribute(t *testing.T) { +func TestClientSpanWithURLAttribute(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "GET" - attributes[URLAttribute] = "https://api.example.com/users/junit" - attributes[StatusCodeAttribute] = 200 + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPURL] = "https://api.example.com/users/junit" + attributes[semconventions.AttributeHTTPStatusCode] = 200 span := constructHTTPClientSpan(attributes) filtered, httpData := makeHTTP(span) @@ -48,12 +49,12 @@ func TestClientSpanWithUrlAttribute(t *testing.T) { func TestClientSpanWithSchemeHostTargetAttributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "GET" - attributes[SchemeAttribute] = "https" - attributes[HostAttribute] = "api.example.com" - attributes[TargetAttribute] = "/users/junit" - attributes[StatusCodeAttribute] = 200 + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPScheme] = "https" + attributes[semconventions.AttributeHTTPHost] = "api.example.com" + attributes[semconventions.AttributeHTTPTarget] = "/users/junit" + attributes[semconventions.AttributeHTTPStatusCode] = 200 attributes["user.id"] = "junit" span := constructHTTPClientSpan(attributes) @@ -72,14 +73,14 @@ func TestClientSpanWithSchemeHostTargetAttributes(t *testing.T) { func TestClientSpanWithPeerAttributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "GET" - attributes[SchemeAttribute] = "http" - attributes[PeerHostAttribute] = "kb234.example.com" - attributes[PeerPortAttribute] = 8080 - attributes[PeerIpv4Attribute] = "10.8.17.36" - attributes[TargetAttribute] = "/users/junit" - attributes[StatusCodeAttribute] = 200 + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPScheme] = "http" + attributes[semconventions.AttributePeerHost] = "kb234.example.com" + attributes[semconventions.AttributePeerPort] = 8080 + attributes[semconventions.AttributePeerIpv4] = "10.8.17.36" + attributes[semconventions.AttributeHTTPTarget] = "/users/junit" + attributes[semconventions.AttributeHTTPStatusCode] = 200 span := constructHTTPClientSpan(attributes) filtered, httpData := makeHTTP(span) @@ -97,12 +98,12 @@ func TestClientSpanWithPeerAttributes(t *testing.T) { func TestClientSpanWithPeerIp4Attributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "GET" - attributes[SchemeAttribute] = "http" - attributes[PeerIpv4Attribute] = "10.8.17.36" - attributes[PeerPortAttribute] = "8080" - attributes[TargetAttribute] = "/users/junit" + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPScheme] = "http" + attributes[semconventions.AttributePeerIpv4] = "10.8.17.36" + attributes[semconventions.AttributePeerPort] = "8080" + attributes[semconventions.AttributeHTTPTarget] = "/users/junit" span := constructHTTPClientSpan(attributes) filtered, httpData := makeHTTP(span) @@ -119,12 +120,12 @@ func TestClientSpanWithPeerIp4Attributes(t *testing.T) { func TestClientSpanWithPeerIp6Attributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "GET" - attributes[SchemeAttribute] = "https" - attributes[PeerIpv6Attribute] = "2001:db8:85a3::8a2e:370:7334" - attributes[PeerPortAttribute] = "443" - attributes[TargetAttribute] = "/users/junit" + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPScheme] = "https" + attributes[semconventions.AttributePeerIpv6] = "2001:db8:85a3::8a2e:370:7334" + attributes[semconventions.AttributePeerPort] = "443" + attributes[semconventions.AttributeHTTPTarget] = "/users/junit" span := constructHTTPClientSpan(attributes) filtered, httpData := makeHTTP(span) @@ -139,14 +140,13 @@ func TestClientSpanWithPeerIp6Attributes(t *testing.T) { assert.True(t, strings.Contains(jsonStr, "https://2001:db8:85a3::8a2e:370:7334/users/junit")) } -func TestServerSpanWithUrlAttribute(t *testing.T) { +func TestServerSpanWithURLAttribute(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "GET" - attributes[URLAttribute] = "https://api.example.com/users/junit" - attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[ClientIPAttribute] = "192.168.15.32" - attributes[StatusCodeAttribute] = 200 + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPURL] = "https://api.example.com/users/junit" + attributes[semconventions.AttributeHTTPClientIP] = "192.168.15.32" + attributes[semconventions.AttributeHTTPStatusCode] = 200 span := constructHTTPServerSpan(attributes) filtered, httpData := makeHTTP(span) @@ -164,14 +164,13 @@ func TestServerSpanWithUrlAttribute(t *testing.T) { func TestServerSpanWithSchemeHostTargetAttributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "GET" - attributes[SchemeAttribute] = "https" - attributes[HostAttribute] = "api.example.com" - attributes[TargetAttribute] = "/users/junit" - attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[ClientIPAttribute] = "192.168.15.32" - attributes[StatusCodeAttribute] = 200 + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPScheme] = "https" + attributes[semconventions.AttributeHTTPHost] = "api.example.com" + attributes[semconventions.AttributeHTTPTarget] = "/users/junit" + attributes[semconventions.AttributeHTTPClientIP] = "192.168.15.32" + attributes[semconventions.AttributeHTTPStatusCode] = 200 span := constructHTTPServerSpan(attributes) filtered, httpData := makeHTTP(span) @@ -189,15 +188,14 @@ func TestServerSpanWithSchemeHostTargetAttributes(t *testing.T) { func TestServerSpanWithSchemeServernamePortTargetAttributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "GET" - attributes[SchemeAttribute] = "https" - attributes[ServerNameAttribute] = "api.example.com" - attributes[PortAttribute] = 443 - attributes[TargetAttribute] = "/users/junit" - attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[ClientIPAttribute] = "192.168.15.32" - attributes[StatusCodeAttribute] = 200 + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPScheme] = "https" + attributes[semconventions.AttributeHTTPServerName] = "api.example.com" + attributes[semconventions.AttributeHTTPHostPort] = 443 + attributes[semconventions.AttributeHTTPTarget] = "/users/junit" + attributes[semconventions.AttributeHTTPClientIP] = "192.168.15.32" + attributes[semconventions.AttributeHTTPStatusCode] = 200 span := constructHTTPServerSpan(attributes) filtered, httpData := makeHTTP(span) @@ -215,15 +213,14 @@ func TestServerSpanWithSchemeServernamePortTargetAttributes(t *testing.T) { func TestServerSpanWithSchemeNamePortTargetAttributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "GET" - attributes[SchemeAttribute] = "http" - attributes[HostNameAttribute] = "kb234.example.com" - attributes[PortAttribute] = 8080 - attributes[TargetAttribute] = "/users/junit" - attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[ClientIPAttribute] = "192.168.15.32" - attributes[StatusCodeAttribute] = 200 + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPScheme] = "http" + attributes[semconventions.AttributeHostName] = "kb234.example.com" + attributes[semconventions.AttributeHTTPHostPort] = 8080 + attributes[semconventions.AttributeHTTPTarget] = "/users/junit" + attributes[semconventions.AttributeHTTPClientIP] = "192.168.15.32" + attributes[semconventions.AttributeHTTPStatusCode] = 200 span := constructHTTPServerSpan(attributes) timeEvents := constructTimedEventsWithReceivedMessageEvent(span.EndTime) span.TimeEvents = &timeEvents @@ -243,9 +240,9 @@ func TestServerSpanWithSchemeNamePortTargetAttributes(t *testing.T) { func TestHttpStatusFromSpanStatus(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "GET" - attributes[URLAttribute] = "https://api.example.com/users/junit" + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPURL] = "https://api.example.com/users/junit" span := constructHTTPClientSpan(attributes) filtered, httpData := makeHTTP(span) diff --git a/exporter/awsxrayexporter/translator/segment.go b/exporter/awsxrayexporter/translator/segment.go index 758baa48c3b4..6ad9066370b9 100644 --- a/exporter/awsxrayexporter/translator/segment.go +++ b/exporter/awsxrayexporter/translator/segment.go @@ -26,52 +26,10 @@ import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" "github.com/golang/protobuf/ptypes/timestamp" + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" ) -// OpenTelemetry Semantic Convention values for general Span attribute names. -const ( - ComponentAttribute = "component" - PeerAddressAttribute = "peer.address" - PeerHostAttribute = "peer.hostname" - PeerIpv4Attribute = "peer.ipv4" - PeerIpv6Attribute = "peer.ipv6" - PeerPortAttribute = "peer.port" - PeerServiceAttribute = "peer.service" - IAMUserAttribute = "iam.user" -) - -// OpenTelemetry Semantic Convention values for component attribute values. -const ( - HTTPComponentType = "http" - GrpcComponentType = "grpc" - DbComponentType = "db" - MsgComponentType = "messaging" -) - -// OpenTelemetry Semantic Convention values for Resource attribute names. -const ( - ServiceNameAttribute = "service.name" - ServiceNamespaceAttribute = "service.namespace" - ServiceInstanceAttribute = "service.instance.id" - ServiceVersionAttribute = "service.version" - ContainerNameAttribute = "container.name" - ContainerImageAttribute = "container.image.name" - ContainerTagAttribute = "container.image.tag" - K8sClusterAttribute = "k8s.cluster.name" - K8sNamespaceAttribute = "k8s.namespace.name" - K8sPodAttribute = "k8s.pod.name" - K8sDeploymentAttribute = "k8s.deployment.name" - HostHostnameAttribute = "host.hostname" - HostIDAttribute = "host.id" - HostNameAttribute = "host.name" - HostTypeAttribute = "host.type" - CloudProviderAttribute = "cloud.provider" - CloudAccountAttribute = "cloud.account.id" - CloudRegionAttribute = "cloud.region" - CloudZoneAttribute = "cloud.zone" -) - // AWS X-Ray acceptable values for origin field. const ( OriginEC2 = "AWS::EC2::Instance" @@ -233,7 +191,7 @@ func determineAwsOrigin(resource *resourcepb.Resource) string { if resource == nil { return origin } - _, ok := resource.Labels[ContainerNameAttribute] + _, ok := resource.Labels[semconventions.AttributeContainerName] if ok { origin = OriginECS } @@ -325,9 +283,7 @@ func makeAnnotations(attributes map[string]string) (string, map[string]interface user string ) - user = attributes[IAMUserAttribute] - delete(attributes, IAMUserAttribute) - delete(attributes, ComponentAttribute) + delete(attributes, semconventions.AttributeComponent) mergeAnnotations(result, attributes) if len(result) == 0 { diff --git a/exporter/awsxrayexporter/translator/segment_test.go b/exporter/awsxrayexporter/translator/segment_test.go index c52125bf937f..c6f72ff96084 100644 --- a/exporter/awsxrayexporter/translator/segment_test.go +++ b/exporter/awsxrayexporter/translator/segment_test.go @@ -24,6 +24,7 @@ import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" "github.com/golang/protobuf/ptypes/timestamp" + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" "github.com/stretchr/testify/assert" ) @@ -35,12 +36,12 @@ var ( func TestClientSpanWithGrpcComponent(t *testing.T) { spanName := "platformapi.widgets.searchWidgets" attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = GrpcComponentType - attributes[MethodAttribute] = "GET" - attributes[SchemeAttribute] = "ipv6" - attributes[PeerIpv6Attribute] = "2607:f8b0:4000:80c::2004" - attributes[PeerPortAttribute] = "9443" - attributes[TargetAttribute] = spanName + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeGRPC + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPScheme] = "ipv6" + attributes[semconventions.AttributePeerIpv6] = "2607:f8b0:4000:80c::2004" + attributes[semconventions.AttributePeerPort] = "9443" + attributes[semconventions.AttributeHTTPTarget] = spanName labels := constructDefaultResourceLabels() span := constructClientSpan(nil, spanName, 0, "OK", attributes, labels) timeEvents := constructTimedEventsWithSentMessageEvent(span.StartTime) @@ -58,16 +59,14 @@ func TestClientSpanWithAwsSdkClient(t *testing.T) { parentSpanID := NewSegmentID() user := "testingT" attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "POST" - attributes[SchemeAttribute] = "https" - attributes[HostAttribute] = "dynamodb.us-east-1.amazonaws.com" - attributes[TargetAttribute] = "/" - attributes[UserAgentAttribute] = "aws-sdk-java/1.11.613 Windows_10/10.0 OpenJDK_64-Bit_server_VM/11.0.4+11-LTS" + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "POST" + attributes[semconventions.AttributeHTTPScheme] = "https" + attributes[semconventions.AttributeHTTPHost] = "dynamodb.us-east-1.amazonaws.com" + attributes[semconventions.AttributeHTTPTarget] = "/" attributes[AWSOperationAttribute] = "GetItem" attributes[AWSRequestIDAttribute] = "18BO1FEPJSSAOGNJEDPTPCMIU7VV4KQNSO5AEMVJF66Q9ASUAAJG" attributes[AWSTableNameAttribute] = "otel-dev-Testing" - attributes[IAMUserAttribute] = user labels := constructDefaultResourceLabels() span := constructClientSpan(parentSpanID, spanName, 0, "OK", attributes, labels) @@ -76,22 +75,20 @@ func TestClientSpanWithAwsSdkClient(t *testing.T) { assert.NotNil(t, jsonStr) assert.Nil(t, err) assert.True(t, strings.Contains(jsonStr, spanName)) - assert.True(t, strings.Contains(jsonStr, user)) - assert.False(t, strings.Contains(jsonStr, ComponentAttribute)) + assert.False(t, strings.Contains(jsonStr, user)) + assert.False(t, strings.Contains(jsonStr, semconventions.AttributeComponent)) } func TestServerSpanWithInternalServerError(t *testing.T) { spanName := "/api/locations" parentSpanID := NewSegmentID() - user := "testing" errorMessage := "java.lang.NullPointerException" attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "POST" - attributes[URLAttribute] = "https://api.example.org/api/locations" - attributes[TargetAttribute] = "/api/locations" - attributes[StatusCodeAttribute] = 500 - attributes[IAMUserAttribute] = user + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "POST" + attributes[semconventions.AttributeHTTPURL] = "https://api.example.org/api/locations" + attributes[semconventions.AttributeHTTPTarget] = "/api/locations" + attributes[semconventions.AttributeHTTPStatusCode] = 500 attributes[ErrorKindAttribute] = "java.lang.NullPointerException" labels := constructDefaultResourceLabels() span := constructServerSpan(parentSpanID, spanName, tracetranslator.OCInternal, errorMessage, attributes, labels) @@ -118,14 +115,14 @@ func TestClientSpanWithDbComponent(t *testing.T) { spanName := "call update_user_preference( ?, ?, ? )" enterpriseAppID := "25F2E73B-4769-4C79-9DF3-7EBE85D571EA" attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = DbComponentType - attributes[DbTypeAttribute] = "sql" - attributes[DbInstanceAttribute] = "customers" - attributes[DbStatementAttribute] = spanName - attributes[DbUserAttribute] = "userprefsvc" - attributes[PeerAddressAttribute] = "mysql://db.dev.example.com:3306" - attributes[PeerHostAttribute] = "db.dev.example.com" - attributes[PeerPortAttribute] = "3306" + attributes[semconventions.AttributeComponent] = "db" + attributes[semconventions.AttributeDBType] = "sql" + attributes[semconventions.AttributeDBInstance] = "customers" + attributes[semconventions.AttributeDBStatement] = spanName + attributes[semconventions.AttributeDBUser] = "userprefsvc" + attributes[semconventions.AttributePeerAddress] = "mysql://db.dev.example.com:3306" + attributes[semconventions.AttributePeerHost] = "db.dev.example.com" + attributes[semconventions.AttributePeerPort] = "3306" attributes["enterprise.app.id"] = enterpriseAppID labels := constructDefaultResourceLabels() span := constructClientSpan(nil, spanName, 0, "OK", attributes, labels) @@ -155,12 +152,12 @@ func TestClientSpanWithDbComponent(t *testing.T) { func TestSpanWithInvalidTraceId(t *testing.T) { spanName := "platformapi.widgets.searchWidgets" attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = GrpcComponentType - attributes[MethodAttribute] = "GET" - attributes[SchemeAttribute] = "ipv6" - attributes[PeerIpv6Attribute] = "2607:f8b0:4000:80c::2004" - attributes[PeerPortAttribute] = "9443" - attributes[TargetAttribute] = spanName + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeGRPC + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPScheme] = "ipv6" + attributes[semconventions.AttributePeerIpv6] = "2607:f8b0:4000:80c::2004" + attributes[semconventions.AttributePeerPort] = "9443" + attributes[semconventions.AttributeHTTPTarget] = spanName labels := constructDefaultResourceLabels() span := constructClientSpan(nil, spanName, 0, "OK", attributes, labels) timeEvents := constructTimedEventsWithSentMessageEvent(span.StartTime) @@ -264,19 +261,18 @@ func constructSpanAttributes(attributes map[string]interface{}) map[string]*trac func constructDefaultResourceLabels() map[string]string { labels := make(map[string]string) - labels[ServiceNameAttribute] = "signup_aggregator" - labels[ServiceVersionAttribute] = "1.1.12" - labels[ContainerNameAttribute] = "signup_aggregator" - labels[ContainerImageAttribute] = "otel/signupaggregator" - labels[ContainerTagAttribute] = "v1" - labels[K8sClusterAttribute] = "production" - labels[K8sNamespaceAttribute] = "default" - labels[K8sDeploymentAttribute] = "signup_aggregator" - labels[K8sPodAttribute] = "signup_aggregator-x82ufje83" - labels[CloudProviderAttribute] = "aws" - labels[CloudAccountAttribute] = "123456789" - labels[CloudRegionAttribute] = "us-east-1" - labels[CloudZoneAttribute] = "us-east-1c" + labels[semconventions.AttributeServiceName] = "signup_aggregator" + labels[semconventions.AttributeContainerName] = "signup_aggregator" + labels[semconventions.AttributeContainerImage] = "otel/signupaggregator" + labels[semconventions.AttributeContainerTag] = "v1" + labels[semconventions.AttributeK8sCluster] = "production" + labels[semconventions.AttributeK8sNamespace] = "default" + labels[semconventions.AttributeK8sDeployment] = "signup_aggregator" + labels[semconventions.AttributeK8sPod] = "signup_aggregator-x82ufje83" + labels[semconventions.AttributeCloudProvider] = "aws" + labels[semconventions.AttributeCloudAccount] = "123456789" + labels[semconventions.AttributeCloudRegion] = "us-east-1" + labels[semconventions.AttributeCloudZone] = "us-east-1c" return labels } @@ -293,18 +289,21 @@ func convertTimeToTimestamp(t time.Time) *timestamp.Timestamp { func constructTimedEventsWithReceivedMessageEvent(tm *timestamp.Timestamp) tracepb.Span_TimeEvents { eventAttrMap := make(map[string]*tracepb.AttributeValue) - eventAttrMap[MessageTypeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ - StringValue: &tracepb.TruncatableString{Value: "RECEIVED"}, - }} - eventAttrMap[MessageIDAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + eventAttrMap[semconventions.AttributeMessageType] = + &tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ + StringValue: &tracepb.TruncatableString{Value: "RECEIVED"}, + }} + eventAttrMap[semconventions.AttributeMessageID] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ IntValue: 1, }} - eventAttrMap[MessageCompressedSizeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ - IntValue: 6478, - }} - eventAttrMap[MessageUncompressedSizeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ - IntValue: 12452, - }} + eventAttrMap[semconventions.AttributeMessageCompressedSize] = + &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: 6478, + }} + eventAttrMap[semconventions.AttributeMessageUncompressedSize] = + &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: 12452, + }} eventAttrbutes := tracepb.Span_Attributes{ AttributeMap: eventAttrMap, DroppedAttributesCount: 0, @@ -330,15 +329,17 @@ func constructTimedEventsWithReceivedMessageEvent(tm *timestamp.Timestamp) trace func constructTimedEventsWithSentMessageEvent(tm *timestamp.Timestamp) tracepb.Span_TimeEvents { eventAttrMap := make(map[string]*tracepb.AttributeValue) - eventAttrMap[MessageTypeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ - StringValue: &tracepb.TruncatableString{Value: "SENT"}, - }} - eventAttrMap[MessageIDAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + eventAttrMap[semconventions.AttributeMessageType] = + &tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ + StringValue: &tracepb.TruncatableString{Value: "SENT"}, + }} + eventAttrMap[semconventions.AttributeMessageID] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ IntValue: 1, }} - eventAttrMap[MessageUncompressedSizeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ - IntValue: 7480, - }} + eventAttrMap[semconventions.AttributeMessageUncompressedSize] = + &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: 7480, + }} eventAttrbutes := tracepb.Span_Attributes{ AttributeMap: eventAttrMap, DroppedAttributesCount: 0, diff --git a/exporter/awsxrayexporter/translator/service.go b/exporter/awsxrayexporter/translator/service.go index 863d5cdb50f0..8a566fbf5f92 100644 --- a/exporter/awsxrayexporter/translator/service.go +++ b/exporter/awsxrayexporter/translator/service.go @@ -16,6 +16,7 @@ package translator import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" ) // ServiceData provides the shape for unmarshalling service version. @@ -35,7 +36,7 @@ func makeService(resource *resourcepb.Resource) *ServiceData { } for key, value := range resource.Labels { switch key { - case ServiceVersionAttribute: + case semconventions.AttributeContainerTag: ver = value } } diff --git a/exporter/awsxrayexporter/translator/service_test.go b/exporter/awsxrayexporter/translator/service_test.go index 316cb16aa9ce..8b0073abdf7c 100644 --- a/exporter/awsxrayexporter/translator/service_test.go +++ b/exporter/awsxrayexporter/translator/service_test.go @@ -37,7 +37,7 @@ func TestServiceFromResource(t *testing.T) { } jsonStr := w.String() testWriters.release(w) - assert.True(t, strings.Contains(jsonStr, "1.1.12")) + assert.True(t, strings.Contains(jsonStr, "v1")) } func TestServiceFromNullResource(t *testing.T) { diff --git a/exporter/awsxrayexporter/translator/sql.go b/exporter/awsxrayexporter/translator/sql.go index 1b20757c8cd0..185d0824ee27 100644 --- a/exporter/awsxrayexporter/translator/sql.go +++ b/exporter/awsxrayexporter/translator/sql.go @@ -14,12 +14,8 @@ package translator -// OpenTelemetry Semantic Convention attribute names for database related attributes -const ( - DbTypeAttribute = "db.type" - DbInstanceAttribute = "db.instance" - DbStatementAttribute = "db.statement" - DbUserAttribute = "db.user" +import ( + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" ) // SQLData provides the shape for unmarshalling sql data. @@ -44,21 +40,22 @@ func makeSQL(attributes map[string]string) (map[string]string, *SQLData) { dbStatement string dbUser string ) - componentType := attributes[ComponentAttribute] - if componentType == HTTPComponentType || componentType == GrpcComponentType { + componentType := attributes[semconventions.AttributeComponent] + if componentType == semconventions.ComponentTypeHTTP || + componentType == semconventions.ComponentTypeGRPC { return attributes, nil } for key, value := range attributes { switch key { - case PeerAddressAttribute: + case semconventions.AttributePeerAddress: dbURL = value - case DbTypeAttribute: + case semconventions.AttributeDBType: dbType = value - case DbInstanceAttribute: + case semconventions.AttributeDBInstance: dbInstance = value - case DbStatementAttribute: + case semconventions.AttributeDBStatement: dbStatement = value - case DbUserAttribute: + case semconventions.AttributeDBUser: dbUser = value default: filtered[key] = value diff --git a/exporter/awsxrayexporter/translator/sql_test.go b/exporter/awsxrayexporter/translator/sql_test.go index 04d2117011a0..1efd14503a1b 100644 --- a/exporter/awsxrayexporter/translator/sql_test.go +++ b/exporter/awsxrayexporter/translator/sql_test.go @@ -18,19 +18,20 @@ import ( "strings" "testing" + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" "github.com/stretchr/testify/assert" ) func TestClientSpanWithStatementAttribute(t *testing.T) { attributes := make(map[string]string) - attributes[ComponentAttribute] = DbComponentType - attributes[DbTypeAttribute] = "sql" - attributes[DbInstanceAttribute] = "customers" - attributes[DbStatementAttribute] = "SELECT * FROM user WHERE user_id = ?" - attributes[DbUserAttribute] = "readonly_user" - attributes[PeerAddressAttribute] = "mysql://db.example.com:3306" - attributes[PeerHostAttribute] = "db.example.com" - attributes[PeerPortAttribute] = "3306" + attributes[semconventions.AttributeComponent] = "db" + attributes[semconventions.AttributeDBType] = "sql" + attributes[semconventions.AttributeDBInstance] = "customers" + attributes[semconventions.AttributeDBStatement] = "SELECT * FROM user WHERE user_id = ?" + attributes[semconventions.AttributeDBUser] = "readonly_user" + attributes[semconventions.AttributePeerAddress] = "mysql://db.example.com:3306" + attributes[semconventions.AttributePeerHost] = "db.example.com" + attributes[semconventions.AttributePeerPort] = "3306" filtered, sqlData := makeSQL(attributes) @@ -45,16 +46,16 @@ func TestClientSpanWithStatementAttribute(t *testing.T) { assert.True(t, strings.Contains(jsonStr, "mysql://db.example.com:3306/customers")) } -func TestClientSpanWithHttpComponentAttribute(t *testing.T) { +func TestClientSpanWithHttpComponent(t *testing.T) { attributes := make(map[string]string) - attributes[ComponentAttribute] = HTTPComponentType - attributes[DbTypeAttribute] = "sql" - attributes[DbInstanceAttribute] = "customers" - attributes[DbStatementAttribute] = "SELECT * FROM user WHERE user_id = ?" - attributes[DbUserAttribute] = "readonly_user" - attributes[PeerAddressAttribute] = "mysql://db.example.com:3306" - attributes[PeerHostAttribute] = "db.example.com" - attributes[PeerPortAttribute] = "3306" + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeDBType] = "sql" + attributes[semconventions.AttributeDBInstance] = "customers" + attributes[semconventions.AttributeDBStatement] = "SELECT * FROM user WHERE user_id = ?" + attributes[semconventions.AttributeDBUser] = "readonly_user" + attributes[semconventions.AttributePeerAddress] = "mysql://db.example.com:3306" + attributes[semconventions.AttributePeerHost] = "db.example.com" + attributes[semconventions.AttributePeerPort] = "3306" filtered, sqlData := makeSQL(attributes) diff --git a/exporter/awsxrayexporter/translator/writer_pool_test.go b/exporter/awsxrayexporter/translator/writer_pool_test.go index 83d4384eb1d4..82448def1c9a 100644 --- a/exporter/awsxrayexporter/translator/writer_pool_test.go +++ b/exporter/awsxrayexporter/translator/writer_pool_test.go @@ -20,6 +20,7 @@ import ( "testing" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" "github.com/stretchr/testify/assert" "go.uber.org/zap" ) @@ -70,11 +71,10 @@ func BenchmarkWithPool(b *testing.B) { func constructWriterPoolSpan() *tracepb.Span { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "GET" - attributes[URLAttribute] = "https://api.example.com/users/junit" - attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[ClientIPAttribute] = "192.168.15.32" - attributes[StatusCodeAttribute] = 200 + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPURL] = "https://api.example.com/users/junit" + attributes[semconventions.AttributeHTTPClientIP] = "192.168.15.32" + attributes[semconventions.AttributeHTTPStatusCode] = 200 return constructHTTPServerSpan(attributes) } diff --git a/go.mod b/go.mod index e408f3f9ce4c..43b69442a402 100644 --- a/go.mod +++ b/go.mod @@ -7,13 +7,12 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azure require ( github.com/client9/misspell v0.3.4 github.com/google/addlicense v0.0.0-20190907113143-be125746c2c4 - github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191126183205-e94dd19191e0 + github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191203213105-fe3782c76de2 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter v0.0.0 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.0.0-20191203211755-8ae89debd6c5 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/stackdriverexporter v0.0.0-20191126142441-b2a048090ad6 github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinscribereceiver v0.0.0-20191126142441-b2a048090ad6 github.com/pavius/impi v0.0.0-20180302134524-c1cbdcb8df2b - github.com/pierrec/lz4 v2.0.5+incompatible // indirect golang.org/x/lint v0.0.0-20190930215403-16217165b5de golang.org/x/tools v0.0.0-20191119175705-11e13f1c3fd7 honnef.co/go/tools v0.0.1-2019.2.3 diff --git a/go.sum b/go.sum index 214aeeaff728..3665f19da02e 100644 --- a/go.sum +++ b/go.sum @@ -37,6 +37,7 @@ github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb0 github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OneOfOne/xxhash v1.2.5 h1:zl/OfRA6nftbBK9qTohYBJ5xvw6C/oNKizR7cZGl3cI= github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= +github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= @@ -44,6 +45,7 @@ github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdko github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -72,6 +74,7 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b h1:AP/Y7sqYicnjGDfD5VcY4CIfh1hRXBUavxrvELjTiOE= github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b/go.mod h1:ac9efd0D1fsDb3EJvhqgXRbFx7bs2wqZ10HQPeU8U/Q= +github.com/bombsimon/wsl v1.2.5/go.mod h1:43lEF/i0kpXbLCeDXL9LMT8c92HyBywXb0AsgMHYngM= github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -91,6 +94,7 @@ github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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= @@ -123,13 +127,16 @@ github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2H github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/go-critic/go-critic v0.3.5-0.20190904082202-d79a9f0c64db/go.mod h1:+sE8vrLDS2M0pZkBk0wy6+nLdKexVDrl/jBqQOTDThA= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.17.2/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= @@ -180,6 +187,21 @@ github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+ github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= +github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= +github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astfmt v0.0.0-20180903215011-8f8ee99c3086/go.mod h1:mP93XdblcopXwlyN4X4uodxXQhldPGZbcEJIimQHrkg= +github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= +github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU= +github.com/go-toolsmith/astp v0.0.0-20180903215135-0af7e3c24f30/go.mod h1:SV2ur98SGypH1UjcPpCatrV5hPazG6+IfNHbkDXBRrk= +github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= +github.com/go-toolsmith/pkgload v0.0.0-20181119091011-e9e65178eee8/go.mod h1:WoMrjiy4zvdS+Bg6z9jZH82QXwkcgCBX6nOfnmdaHks= +github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc= +github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= +github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/gofrs/flock v0.0.0-20190320160742-5135e617513b/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.3.0 h1:M695OaDJ5ipWvDPcoAg/YL9c3uORAegkEfBqTQF/fTQ= github.com/gogo/googleapis v1.3.0/go.mod h1:d+q1s/xVJxZGKWwC/6UfPIF33J+G1Tq4GYv9Y+Tg/EU= @@ -210,6 +232,21 @@ github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0= +github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= +github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3/go.mod h1:JXrF4TWy4tXYn62/9x8Wm/K/dm06p8tCKwFRDPZG/1o= +github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU= +github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= +github.com/golangci/golangci-lint v1.21.0/go.mod h1:phxpHK52q7SE+5KpPnti4oZTdFCEsn/tKN+nFvCKXfk= +github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc/go.mod h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU= +github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= +github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI= +github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= github.com/google/addlicense v0.0.0-20190510175307-22550fa7c1b0/go.mod h1:QtPG26W17m+OIQgE6gQ24gC1M6pUaMBAbFrTIDtwG/E= github.com/google/addlicense v0.0.0-20190907113143-be125746c2c4 h1:Bptr91tgP3H4/tg/69DYMrievvj8AgXXr5ktPmm+p38= github.com/google/addlicense v0.0.0-20190907113143-be125746c2c4/go.mod h1:QtPG26W17m+OIQgE6gQ24gC1M6pUaMBAbFrTIDtwG/E= @@ -250,6 +287,7 @@ github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0 h1:Iju5GlWwrvL6UBg4zJJt3btmonfrMlCDdsejg4CZE7c= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= @@ -330,6 +368,10 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -338,9 +380,12 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= +github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kylelemons/godebug v0.0.0-20160406211939-eadb3ce320cb/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= +github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= @@ -350,8 +395,12 @@ github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= @@ -361,6 +410,7 @@ github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceT github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= 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= @@ -376,11 +426,13 @@ github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lN github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mozilla/tls-observatory v0.0.0-20190404164649-a3c1b6cfecfd/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= 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 h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v0.0.0-20170117200651-66bb6560562f/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= @@ -392,16 +444,19 @@ github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w= github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v0.0.0-20190113212917-5533ce8a0da3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb0c1d1e h1:poxNKN8teT8QjLK6LwKN52cNQEPqHIOEsmPJv5ssZUU= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb0c1d1e/go.mod h1:zZf9V+57o0Fd3ik5HzaHamVsWhudJTOwnKw9kJvWoDo= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191119152140-567e1046cefa/go.mod h1:WCsoKuWfht1l33mnPISJ189n8l1p1G10TrQaKylV7no= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191126183205-e94dd19191e0 h1:odOVmai7+yfRG8C715fP3HDjEJD6BffwnBdUo4oYbWk= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191126183205-e94dd19191e0/go.mod h1:ClV5Sx894c91QKenna8uSScDuJidL3mQzp5OcxDrg0U= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191203213105-fe3782c76de2/go.mod h1:pL3jClof5EzaEU97itKyjLg4b8PFUwG87dM51Bnobhc= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.0.0-20191203211755-8ae89debd6c5 h1:ywGB3azaH+hCb67EbAwtdUBg7MXFTxwvCclPT1F8lp4= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.0.0-20191203211755-8ae89debd6c5/go.mod h1:KFAuDdKdP7ejK2iB1xW4RbqKR/dKrmr2uYpVY5e5SyM= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/stackdriverexporter v0.0.0-20191126142441-b2a048090ad6 h1:M1xqVTsqqd6EF1mSgQCgpOdcYQlUZEQ0Aclh/FG5tl4= @@ -465,6 +520,7 @@ github.com/prometheus/prometheus v0.0.0-20180315085919-58e2a31db8de/go.mod h1:oA github.com/prometheus/prometheus v1.8.2-0.20190924101040-52e0504f83ea h1:DkijwrDmxCei6erPY2JZPJMOr8srbkbOJVkWbhSYWH4= github.com/prometheus/prometheus v1.8.2-0.20190924101040-52e0504f83ea/go.mod h1:elNqjVbwD3sCZJqKzyN7uEuwGcCpeJvv67D6BrHsDbw= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.3.0 h1:RR9dF3JtopPvtkroDZuVD7qquD0bnHlKSqaQhgwt8yk= @@ -481,6 +537,11 @@ github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/securego/gosec v0.0.0-20191002120514-e680875ea14d/go.mod h1:w5+eXa0mYznDkHaMCXA4XYffjlH+cy1oyKbfzJXa2Do= +github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc= +github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= +github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/vfsgen v0.0.0-20180825020608-02ddb050ef6b/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= @@ -491,6 +552,7 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sourcegraph/go-diff v0.5.1/go.mod h1:j2dHj3m8aZgQO8lMTcTnBcXkRRRqi34cd2MNlA9u1mE= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= @@ -507,7 +569,9 @@ github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzu github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.4.1-0.20190911140308-99520c81d86e h1:D4jmJ9BqzeMv7BvAqjooNtXH2PXG7m+pcYRnj2Ojlrk= github.com/spf13/viper v1.4.1-0.20190911140308-99520c81d86e/go.mod h1:jUyf+v/KTOnRyUy2/AsjF537WfJWVv3AnlcKSNd+AIg= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= @@ -527,6 +591,7 @@ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69 github.com/tedsuo/ifrit v0.0.0-20191009134036-9a97d0632f00 h1:mujcChM89zOHwgZBBNr5WZ77mBXP1yR+gLThGCYZgAg= github.com/tedsuo/ifrit v0.0.0-20191009134036-9a97d0632f00/go.mod h1:eyZnKCc955uh98WQvzOm0dgAeLnf2O0Rz0LPoC5ze+0= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/uber-go/atomic v1.4.0 h1:yOuPqEq4ovnhEjpHmfFwsqBXDYbQeT6Nb0bwD6XnD5o= @@ -540,6 +605,13 @@ github.com/uber/tchannel-go v1.10.0 h1:YOihLHuvkwT3nzvpgqFtexFW+pb5vD1Tz7h/bIWAp github.com/uber/tchannel-go v1.10.0/go.mod h1:Rrgz1eL8kMjW/nEzZos0t+Heq0O4LhnUJVA32OvWKHo= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ultraware/funlen v0.0.2/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= +github.com/uudashr/gocognit v0.0.0-20190926065955-1655d0de0517/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.2.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s= +github.com/valyala/quicktemplate v1.2.0/go.mod h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOVRUAfrukLPuGJ4= +github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= @@ -582,6 +654,7 @@ golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 h1:HuIa8hRrWRSrqYzx1qI49NNxhdi2PrY7gxVSq1JjLDc= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= @@ -600,6 +673,7 @@ golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -623,6 +697,7 @@ golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 h1:Ao/3l156eZf2AW5wK8a7/smto golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190912160710-24e19bdeb0f2 h1:4dVFTC832rPn4pomLSz1vA+are2+dU19w1H8OngV7nc= golang.org/x/net v0.0.0-20190912160710-24e19bdeb0f2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191119073136-fc4aabc6c914 h1:MlY3mEfbnWGmUi4rtHOtNnnnN4UJRGSyLPx+DXA5Sq4= golang.org/x/net v0.0.0-20191119073136-fc4aabc6c914/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -650,6 +725,7 @@ golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190209173611-3b5209105503/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-20190222072716-a9d3bda3a223/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-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI= @@ -666,6 +742,7 @@ golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190912141932-bc967efca4b8 h1:41hwlulw1prEMBxLQSlMSux1zxJf07B3WPsdjJlKZxE= golang.org/x/sys v0.0.0-20190912141932-bc967efca4b8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191119195528-f068ffe820e4 h1:FjhQftcbpdYXneEYSWZO7+6Bu+Bi1A8VPvGYWOIzIbw= golang.org/x/sys v0.0.0-20191119195528-f068ffe820e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -681,26 +758,36 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181117154741-2ddaf7f79a09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/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-20190118193359-16909d206f00/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-20190311215038-5c2858a9cfe5/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-20190322203728-c1a832b0ad89/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-20190521203540-521d6ed310dd/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-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190617190820-da514acc4774/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-20190719005602-e377ae9d6386/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= golang.org/x/tools v0.0.0-20190813034749-528a2984e271/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190906203814-12febf440ab1/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190930201159-7c411dea38b0/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119175705-11e13f1c3fd7 h1:RyLBY/sJ/JwgAsmjUkGy/spRidXrmMj9uK4V6eiBypg= @@ -769,6 +856,7 @@ gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bl gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -798,7 +886,11 @@ k8s.io/kube-openapi v0.0.0-20190722073852-5e22f3d471e6/go.mod h1:RZvgC8MSN6DjiMV k8s.io/utils v0.0.0-20190221042446-c2654d5206da/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3oVhZz7sSzSiPnVZayjIX0= k8s.io/utils v0.0.0-20190809000727-6c36bc71fc4a h1:uy5HAgt4Ha5rEMbhZA+aM1j2cq5LmR6LQ71EYC2sVH4= k8s.io/utils v0.0.0-20190809000727-6c36bc71fc4a/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= +mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f/go.mod h1:4G1h5nDURzA3bwVMZIVpwbkw+04kSxk3rAtzlimaUJw= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= From d0f2748da410ce6da98c88f3d4b2ef235c30b7ad Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Thu, 5 Dec 2019 10:40:14 -0600 Subject: [PATCH 22/59] switched to status conversion functions defined in collector --- exporter/awsxrayexporter/go.mod | 2 +- exporter/awsxrayexporter/go.sum | 3 + exporter/awsxrayexporter/translator/cause.go | 3 +- exporter/awsxrayexporter/translator/http.go | 44 +--------- go.mod | 7 +- go.sum | 87 ++++++++++++++++++++ 6 files changed, 95 insertions(+), 51 deletions(-) diff --git a/exporter/awsxrayexporter/go.mod b/exporter/awsxrayexporter/go.mod index bfc7c7b8718c..6d99a4c44354 100644 --- a/exporter/awsxrayexporter/go.mod +++ b/exporter/awsxrayexporter/go.mod @@ -110,7 +110,7 @@ require ( github.com/olivere/env v1.1.0 // indirect github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 // indirect // TODO: pin a released version - github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191203213105-fe3782c76de2 + github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205151336-8e2473c5e754 github.com/opentracing/basictracer-go v1.0.0 // indirect github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.4 // indirect github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c // indirect diff --git a/exporter/awsxrayexporter/go.sum b/exporter/awsxrayexporter/go.sum index 07b4d70621b2..4348cb32c4ca 100644 --- a/exporter/awsxrayexporter/go.sum +++ b/exporter/awsxrayexporter/go.sum @@ -1506,6 +1506,8 @@ github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb0c1d1e/go.mod h1:zZf9V+57o0Fd3ik5HzaHamVsWhudJTOwnKw9kJvWoDo= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191203213105-fe3782c76de2 h1:lrdCxCJpccXFU3jCWB869fy5yRiSRRa4VTVJgLFpUOw= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191203213105-fe3782c76de2/go.mod h1:pL3jClof5EzaEU97itKyjLg4b8PFUwG87dM51Bnobhc= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205151336-8e2473c5e754 h1:gG2Ig+OgvWCyKLk3/Mz10HkSFolKjsWerT8kE9u+qig= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205151336-8e2473c5e754/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 h1:lM6RxxfUMrYL/f8bWEUqdXrANWtrL7Nndbm9iFN0DlU= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9 h1:QsgXACQhd9QJhEmRumbsMQQvBtmdS0mafoVEBplWXEg= @@ -1839,6 +1841,7 @@ github.com/uber/jaeger-client-go v2.16.0+incompatible h1:Q2Pp6v3QYiocMxomCaJuwQG github.com/uber/jaeger-client-go v2.16.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/uber/jaeger-lib v2.0.0+incompatible h1:iMSCV0rmXEogjNWPh2D0xk9YVKvrtGoHJNe9ebLu/pw= github.com/uber/jaeger-lib v2.0.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/uber/tchannel-go v1.10.0 h1:YOihLHuvkwT3nzvpgqFtexFW+pb5vD1Tz7h/bIWApgE= github.com/uber/tchannel-go v1.10.0/go.mod h1:Rrgz1eL8kMjW/nEzZos0t+Heq0O4LhnUJVA32OvWKHo= github.com/ugorji/go v1.1.4 h1:j4s+tAvLfL3bZyefP2SEWmhBzmuIlH/eqNuPdFPgngw= diff --git a/exporter/awsxrayexporter/translator/cause.go b/exporter/awsxrayexporter/translator/cause.go index f345158ef2da..df653b39e9bc 100644 --- a/exporter/awsxrayexporter/translator/cause.go +++ b/exporter/awsxrayexporter/translator/cause.go @@ -19,6 +19,7 @@ import ( tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" + tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" ) // OpenTelemetry Semantic Convention attribute names for error/fault/exception related attributes @@ -111,6 +112,6 @@ func makeCause(status *tracepb.Status, attributes map[string]string) (isError, i } func isClientError(code int32) bool { - httpStatus := convertToHTTPStatusCode(code) + httpStatus := tracetranslator.HTTPStatusCodeFromOCStatus(code) return httpStatus >= 400 && httpStatus < 500 } diff --git a/exporter/awsxrayexporter/translator/http.go b/exporter/awsxrayexporter/translator/http.go index 1165f5a2d0e9..933588235090 100644 --- a/exporter/awsxrayexporter/translator/http.go +++ b/exporter/awsxrayexporter/translator/http.go @@ -15,7 +15,6 @@ package translator import ( - "net/http" "strconv" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" @@ -45,47 +44,6 @@ type ResponseData struct { ContentLength int64 `json:"content_length,omitempty"` } -func convertToHTTPStatusCode(code int32) int64 { - switch code { - case tracetranslator.OCOK: - return http.StatusOK - case tracetranslator.OCCancelled: - return 499 // Client Closed Request - case tracetranslator.OCUnknown: - return http.StatusInternalServerError - case tracetranslator.OCInvalidArgument: - return http.StatusBadRequest - case tracetranslator.OCDeadlineExceeded: - return http.StatusGatewayTimeout - case tracetranslator.OCNotFound: - return http.StatusNotFound - case tracetranslator.OCAlreadyExists: - return http.StatusConflict - case tracetranslator.OCPermissionDenied: - return http.StatusForbidden - case tracetranslator.OCResourceExhausted: - return http.StatusTooManyRequests - case tracetranslator.OCFailedPrecondition: - return http.StatusBadRequest - case tracetranslator.OCAborted: - return http.StatusConflict - case tracetranslator.OCOutOfRange: - return http.StatusBadRequest - case tracetranslator.OCUnimplemented: - return http.StatusNotImplemented - case tracetranslator.OCInternal: - return http.StatusInternalServerError - case tracetranslator.OCUnavailable: - return http.StatusServiceUnavailable - case tracetranslator.OCDataLoss: - return http.StatusInternalServerError - case tracetranslator.OCUnauthenticated: - return http.StatusUnauthorized - default: - return http.StatusInternalServerError - } -} - func makeHTTP(span *tracepb.Span) (map[string]string, *HTTPData) { var ( info HTTPData @@ -151,7 +109,7 @@ func makeHTTP(span *tracepb.Span) (map[string]string, *HTTPData) { } if info.Response.Status == 0 { - info.Response.Status = convertToHTTPStatusCode(span.Status.Code) + info.Response.Status = int64(tracetranslator.HTTPStatusCodeFromOCStatus(span.Status.Code)) } info.Response.ContentLength = extractResponseSizeFromEvents(span) diff --git a/go.mod b/go.mod index c00f75ec2f4f..53bf1c2eb249 100644 --- a/go.mod +++ b/go.mod @@ -9,19 +9,14 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/colle require ( github.com/client9/misspell v0.3.4 github.com/google/addlicense v0.0.0-20190907113143-be125746c2c4 - github.com/onsi/ginkgo v1.10.1 // indirect - github.com/onsi/gomega v1.7.0 // indirect - github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191126183205-e94dd19191e0 + github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205151336-8e2473c5e754 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter v0.0.0 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.0.0-20191203211755-8ae89debd6c5 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/stackdriverexporter v0.0.0-20191126142441-b2a048090ad6 github.com/open-telemetry/opentelemetry-collector-contrib/receiver/collectdreceiver v0.0.0-00010101000000-000000000000 github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinscribereceiver v0.0.0-20191126142441-b2a048090ad6 github.com/pavius/impi v0.0.0-20180302134524-c1cbdcb8df2b - github.com/spf13/pflag v1.0.5 // indirect - golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392 // indirect golang.org/x/lint v0.0.0-20190930215403-16217165b5de golang.org/x/tools v0.0.0-20191119175705-11e13f1c3fd7 - gopkg.in/yaml.v2 v2.2.4 // indirect honnef.co/go/tools v0.0.1-2019.2.3 ) diff --git a/go.sum b/go.sum index 83897eab1544..2f85b08ea08e 100644 --- a/go.sum +++ b/go.sum @@ -37,6 +37,7 @@ github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb0 github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OneOfOne/xxhash v1.2.5 h1:zl/OfRA6nftbBK9qTohYBJ5xvw6C/oNKizR7cZGl3cI= github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= +github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= @@ -44,6 +45,7 @@ github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdko github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -72,6 +74,7 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b h1:AP/Y7sqYicnjGDfD5VcY4CIfh1hRXBUavxrvELjTiOE= github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b/go.mod h1:ac9efd0D1fsDb3EJvhqgXRbFx7bs2wqZ10HQPeU8U/Q= +github.com/bombsimon/wsl v1.2.5/go.mod h1:43lEF/i0kpXbLCeDXL9LMT8c92HyBywXb0AsgMHYngM= github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -91,6 +94,7 @@ github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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= @@ -123,13 +127,16 @@ github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2H github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/go-critic/go-critic v0.3.5-0.20190904082202-d79a9f0c64db/go.mod h1:+sE8vrLDS2M0pZkBk0wy6+nLdKexVDrl/jBqQOTDThA= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.17.2/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= @@ -180,6 +187,21 @@ github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+ github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= +github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= +github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astfmt v0.0.0-20180903215011-8f8ee99c3086/go.mod h1:mP93XdblcopXwlyN4X4uodxXQhldPGZbcEJIimQHrkg= +github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= +github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU= +github.com/go-toolsmith/astp v0.0.0-20180903215135-0af7e3c24f30/go.mod h1:SV2ur98SGypH1UjcPpCatrV5hPazG6+IfNHbkDXBRrk= +github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= +github.com/go-toolsmith/pkgload v0.0.0-20181119091011-e9e65178eee8/go.mod h1:WoMrjiy4zvdS+Bg6z9jZH82QXwkcgCBX6nOfnmdaHks= +github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc= +github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= +github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/gofrs/flock v0.0.0-20190320160742-5135e617513b/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.3.0 h1:M695OaDJ5ipWvDPcoAg/YL9c3uORAegkEfBqTQF/fTQ= github.com/gogo/googleapis v1.3.0/go.mod h1:d+q1s/xVJxZGKWwC/6UfPIF33J+G1Tq4GYv9Y+Tg/EU= @@ -210,6 +232,21 @@ github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0= +github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= +github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3/go.mod h1:JXrF4TWy4tXYn62/9x8Wm/K/dm06p8tCKwFRDPZG/1o= +github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU= +github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= +github.com/golangci/golangci-lint v1.21.0/go.mod h1:phxpHK52q7SE+5KpPnti4oZTdFCEsn/tKN+nFvCKXfk= +github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc/go.mod h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU= +github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= +github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI= +github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= github.com/google/addlicense v0.0.0-20190510175307-22550fa7c1b0/go.mod h1:QtPG26W17m+OIQgE6gQ24gC1M6pUaMBAbFrTIDtwG/E= github.com/google/addlicense v0.0.0-20190907113143-be125746c2c4 h1:Bptr91tgP3H4/tg/69DYMrievvj8AgXXr5ktPmm+p38= github.com/google/addlicense v0.0.0-20190907113143-be125746c2c4/go.mod h1:QtPG26W17m+OIQgE6gQ24gC1M6pUaMBAbFrTIDtwG/E= @@ -250,6 +287,7 @@ github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0 h1:Iju5GlWwrvL6UBg4zJJt3btmonfrMlCDdsejg4CZE7c= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= @@ -330,6 +368,10 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -338,9 +380,12 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= +github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kylelemons/godebug v0.0.0-20160406211939-eadb3ce320cb/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= +github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= @@ -350,8 +395,12 @@ github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= @@ -361,6 +410,7 @@ github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceT github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= 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= @@ -376,11 +426,13 @@ github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lN github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mozilla/tls-observatory v0.0.0-20190404164649-a3c1b6cfecfd/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= 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 h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v0.0.0-20170117200651-66bb6560562f/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= @@ -406,6 +458,7 @@ github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191119152140-567e1046cefa/go.mod h1:WCsoKuWfht1l33mnPISJ189n8l1p1G10TrQaKylV7no= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191126183205-e94dd19191e0 h1:odOVmai7+yfRG8C715fP3HDjEJD6BffwnBdUo4oYbWk= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191126183205-e94dd19191e0/go.mod h1:ClV5Sx894c91QKenna8uSScDuJidL3mQzp5OcxDrg0U= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205151336-8e2473c5e754/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.0.0-20191203211755-8ae89debd6c5 h1:ywGB3azaH+hCb67EbAwtdUBg7MXFTxwvCclPT1F8lp4= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.0.0-20191203211755-8ae89debd6c5/go.mod h1:KFAuDdKdP7ejK2iB1xW4RbqKR/dKrmr2uYpVY5e5SyM= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/stackdriverexporter v0.0.0-20191126142441-b2a048090ad6 h1:M1xqVTsqqd6EF1mSgQCgpOdcYQlUZEQ0Aclh/FG5tl4= @@ -469,6 +522,7 @@ github.com/prometheus/prometheus v0.0.0-20180315085919-58e2a31db8de/go.mod h1:oA github.com/prometheus/prometheus v1.8.2-0.20190924101040-52e0504f83ea h1:DkijwrDmxCei6erPY2JZPJMOr8srbkbOJVkWbhSYWH4= github.com/prometheus/prometheus v1.8.2-0.20190924101040-52e0504f83ea/go.mod h1:elNqjVbwD3sCZJqKzyN7uEuwGcCpeJvv67D6BrHsDbw= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.3.0 h1:RR9dF3JtopPvtkroDZuVD7qquD0bnHlKSqaQhgwt8yk= @@ -485,6 +539,11 @@ github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/securego/gosec v0.0.0-20191002120514-e680875ea14d/go.mod h1:w5+eXa0mYznDkHaMCXA4XYffjlH+cy1oyKbfzJXa2Do= +github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc= +github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= +github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/vfsgen v0.0.0-20180825020608-02ddb050ef6b/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= @@ -495,6 +554,7 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sourcegraph/go-diff v0.5.1/go.mod h1:j2dHj3m8aZgQO8lMTcTnBcXkRRRqi34cd2MNlA9u1mE= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= @@ -514,6 +574,7 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn 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/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.4.1-0.20190911140308-99520c81d86e h1:D4jmJ9BqzeMv7BvAqjooNtXH2PXG7m+pcYRnj2Ojlrk= github.com/spf13/viper v1.4.1-0.20190911140308-99520c81d86e/go.mod h1:jUyf+v/KTOnRyUy2/AsjF537WfJWVv3AnlcKSNd+AIg= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= @@ -533,6 +594,7 @@ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69 github.com/tedsuo/ifrit v0.0.0-20191009134036-9a97d0632f00 h1:mujcChM89zOHwgZBBNr5WZ77mBXP1yR+gLThGCYZgAg= github.com/tedsuo/ifrit v0.0.0-20191009134036-9a97d0632f00/go.mod h1:eyZnKCc955uh98WQvzOm0dgAeLnf2O0Rz0LPoC5ze+0= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/uber-go/atomic v1.4.0 h1:yOuPqEq4ovnhEjpHmfFwsqBXDYbQeT6Nb0bwD6XnD5o= @@ -542,10 +604,18 @@ github.com/uber/jaeger-client-go v2.16.0+incompatible h1:Q2Pp6v3QYiocMxomCaJuwQG github.com/uber/jaeger-client-go v2.16.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/uber/jaeger-lib v2.0.0+incompatible h1:iMSCV0rmXEogjNWPh2D0xk9YVKvrtGoHJNe9ebLu/pw= github.com/uber/jaeger-lib v2.0.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/uber/tchannel-go v1.10.0 h1:YOihLHuvkwT3nzvpgqFtexFW+pb5vD1Tz7h/bIWApgE= github.com/uber/tchannel-go v1.10.0/go.mod h1:Rrgz1eL8kMjW/nEzZos0t+Heq0O4LhnUJVA32OvWKHo= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ultraware/funlen v0.0.2/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= +github.com/uudashr/gocognit v0.0.0-20190926065955-1655d0de0517/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.2.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s= +github.com/valyala/quicktemplate v1.2.0/go.mod h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOVRUAfrukLPuGJ4= +github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= @@ -608,6 +678,7 @@ golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -631,6 +702,7 @@ golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 h1:Ao/3l156eZf2AW5wK8a7/smto golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190912160710-24e19bdeb0f2 h1:4dVFTC832rPn4pomLSz1vA+are2+dU19w1H8OngV7nc= golang.org/x/net v0.0.0-20190912160710-24e19bdeb0f2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191119073136-fc4aabc6c914 h1:MlY3mEfbnWGmUi4rtHOtNnnnN4UJRGSyLPx+DXA5Sq4= golang.org/x/net v0.0.0-20191119073136-fc4aabc6c914/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -658,6 +730,7 @@ golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190209173611-3b5209105503/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-20190222072716-a9d3bda3a223/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-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI= @@ -690,26 +763,36 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181117154741-2ddaf7f79a09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/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-20190118193359-16909d206f00/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-20190311215038-5c2858a9cfe5/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-20190322203728-c1a832b0ad89/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-20190521203540-521d6ed310dd/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-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190617190820-da514acc4774/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-20190719005602-e377ae9d6386/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= golang.org/x/tools v0.0.0-20190813034749-528a2984e271/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190906203814-12febf440ab1/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190930201159-7c411dea38b0/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119175705-11e13f1c3fd7 h1:RyLBY/sJ/JwgAsmjUkGy/spRidXrmMj9uK4V6eiBypg= @@ -809,7 +892,11 @@ k8s.io/kube-openapi v0.0.0-20190722073852-5e22f3d471e6/go.mod h1:RZvgC8MSN6DjiMV k8s.io/utils v0.0.0-20190221042446-c2654d5206da/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3oVhZz7sSzSiPnVZayjIX0= k8s.io/utils v0.0.0-20190809000727-6c36bc71fc4a h1:uy5HAgt4Ha5rEMbhZA+aM1j2cq5LmR6LQ71EYC2sVH4= k8s.io/utils v0.0.0-20190809000727-6c36bc71fc4a/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= +mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f/go.mod h1:4G1h5nDURzA3bwVMZIVpwbkw+04kSxk3rAtzlimaUJw= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= From c7abddacaf703c5433fd21b9f4f4221e6b79e33f Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Sat, 7 Dec 2019 10:37:05 -0600 Subject: [PATCH 23/59] fix latest code review issues --- exporter/awsxrayexporter/doc.go | 2 +- exporter/awsxrayexporter/go.mod | 163 +- exporter/awsxrayexporter/go.sum | 1458 +---------------- exporter/awsxrayexporter/translator/cause.go | 15 - .../awsxrayexporter/translator/cause_test.go | 25 - .../awsxrayexporter/translator/segment.go | 4 +- .../translator/segment_test.go | 2 +- 7 files changed, 50 insertions(+), 1619 deletions(-) diff --git a/exporter/awsxrayexporter/doc.go b/exporter/awsxrayexporter/doc.go index bd542c44e340..ec2c4046b6a6 100644 --- a/exporter/awsxrayexporter/doc.go +++ b/exporter/awsxrayexporter/doc.go @@ -12,6 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -// Package awsxrayexporter implements an Otel Collector exporter that sends trace data to +// Package awsxrayexporter implements an OpenTelemetry Collector exporter that sends trace data to // AWS X-Ray in the region the collector is running in using the PutTraceSegments API. package awsxrayexporter diff --git a/exporter/awsxrayexporter/go.mod b/exporter/awsxrayexporter/go.mod index 6d99a4c44354..228808d3cb2d 100644 --- a/exporter/awsxrayexporter/go.mod +++ b/exporter/awsxrayexporter/go.mod @@ -3,170 +3,17 @@ module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxra go 1.12 require ( - cloud.google.com/go/datastore v1.0.0 // indirect - collectd.org v0.3.0 // indirect - dmitri.shuralyov.com/route/github v0.0.0-20180323232716-ce4edef1f8c9 // indirect - git.apache.org/thrift.git v0.13.0 // indirect - github.com/AaronO/go-git-http v0.0.0-20161214145340-1d9485b3a98f // indirect - github.com/aclements/go-gg v0.0.0-20170323211221-abd1f791f5ee // indirect - github.com/aclements/go-moremath v0.0.0-20190830160640-d16893ddf098 // indirect - github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 // indirect - github.com/ajstarks/deck v0.0.0-20191009173945-82d717002242 // indirect - github.com/ajstarks/svgo v0.0.0-20190826172357-de52242f3d65 // indirect - github.com/andygrunwald/go-gerrit v0.0.0-20191101112536-3f5e365ccf57 // indirect - github.com/apache/arrow/go/arrow v0.0.0-20191105160933-1afbcb6bb2a6 // indirect - github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a // indirect + github.com/apache/thrift v0.12.0 // indirect github.com/aws/aws-sdk-go v1.23.12 - github.com/aws/aws-sdk-go-v2 v0.15.0 // indirect - github.com/aws/aws-xray-sdk-go v0.9.4 // indirect - github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59 // indirect - github.com/beyang/hgo v0.0.0-20150825035631-d45f1891a48a // indirect - github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40 // indirect - github.com/boltdb/bolt v1.3.1 // indirect - github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b // indirect - github.com/bsm/sarama-cluster v2.1.15+incompatible // indirect - github.com/cactus/go-statsd-client/statsd v0.0.0-20191030180650-a68a2246f89c // indirect - github.com/casbin/casbin v1.9.1 // indirect github.com/census-instrumentation/opencensus-proto v0.2.1 - github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect - github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec // indirect - github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0 // indirect - github.com/coreos/etcd v3.3.17+incompatible // indirect - github.com/crossdock/crossdock-go v0.0.0-20160816171116-049aabb0122b // indirect - github.com/cznic/cc v0.0.0-20181122101902-d673e9b70d4d // indirect - github.com/cznic/fileutil v0.0.0-20181122101858-4d67cfea8c87 // indirect - github.com/cznic/golex v0.0.0-20181122101858-9c343928389c // indirect - github.com/cznic/internal v0.0.0-20181122101858-3279554c546e // indirect - github.com/cznic/ir v0.0.0-20181122101859-da7ba2ecce8b // indirect - github.com/cznic/lex v0.0.0-20181122101858-ce0fb5e9bb1b // indirect - github.com/cznic/lexer v0.0.0-20181122101858-e884d4bd112e // indirect - github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 // indirect - github.com/cznic/strutil v0.0.0-20181122101858-275e90344537 // indirect - github.com/cznic/xc v0.0.0-20181122101856-45b06973881e // indirect - github.com/dgraph-io/badger v1.6.0 // indirect - github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8 // indirect - github.com/dimchansky/utfbom v1.1.0 // indirect - github.com/disintegration/gift v1.2.1 // indirect - github.com/djherbis/buffer v1.1.0 // indirect - github.com/djherbis/nio v2.0.3+incompatible // indirect - github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 // indirect - github.com/emicklei/go-restful-swagger12 v0.0.0-20170926063155-7524189396c6 // indirect - github.com/fogleman/gg v1.3.0 // indirect - github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8 // indirect - github.com/garyburd/redigo v1.6.0 // indirect - github.com/gin-gonic/gin v1.4.0 // indirect - github.com/glycerine/go-unsnap-stream v0.0.0-20190901134440-81cf024a9e0a // indirect - github.com/go-chi/chi v4.0.2+incompatible // indirect - github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab // indirect - github.com/gobuffalo/buffalo v0.15.0 // indirect - github.com/gocql/gocql v0.0.0-20191102131523-9faa4c08d962 // indirect - github.com/godbus/dbus v4.1.0+incompatible // indirect - github.com/goji/param v0.0.0-20160927210335-d7f49fd7d1ed // indirect - github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect github.com/golang/protobuf v1.3.2 - github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac // indirect - github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82 // indirect - github.com/gonum/internal v0.0.0-20181124074243-f884aa714029 // indirect - github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9 // indirect - github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9 // indirect - github.com/gorilla/handlers v1.4.2 // indirect - github.com/gorilla/schema v1.1.0 // indirect - github.com/graph-gophers/graphql-go v0.0.0-20191031232829-adde0d0f76a3 // indirect - github.com/hashicorp/go-hclog v0.10.0 // indirect - github.com/hashicorp/go-plugin v1.0.1 // indirect - github.com/hudl/fargo v1.3.0 // indirect - github.com/iancoleman/strcase v0.0.0-20190422225806-e506e3ef7365 // indirect - github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6 // indirect - github.com/inconshreveable/go-vhost v0.0.0-20160627193104-06d84117953b // indirect - github.com/inconshreveable/log15 v0.0.0-20180818164646-67afb5ed74ec // indirect - github.com/influxdata/flux v0.53.0 // indirect - github.com/influxdata/influxdb1-client v0.0.0-20190809212627-fc22c7df067e // indirect - github.com/influxdata/influxql v1.0.1 // indirect - github.com/influxdata/roaring v0.4.12 // indirect - github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368 // indirect - github.com/jsternberg/zap-logfmt v1.2.0 // indirect - github.com/jung-kurt/gofpdf v1.13.0 // indirect - github.com/justinas/alice v1.2.0 // indirect - github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef // indirect - github.com/kisielk/sqlstruct v0.0.0-20150923205031-648daed35d49 // indirect - github.com/klauspost/compress v1.9.1 // indirect - github.com/klauspost/pgzip v1.2.1 // indirect - github.com/lightstep/lightstep-tracer-go v0.17.1 // indirect - github.com/lyft/protoc-gen-star v0.4.11 // indirect - github.com/m3db/prometheus_client_golang v0.8.1 // indirect - github.com/m3db/prometheus_client_model v0.1.0 // indirect - github.com/m3db/prometheus_common v0.1.0 // indirect - github.com/m3db/prometheus_procfs v0.8.1 // indirect - github.com/marstr/goalias v0.0.0-20180416201319-8dff9a14db64 // indirect - github.com/marstr/guid v1.1.0 // indirect - github.com/marstr/randname v0.0.0-20181206212954-d5b0f288ab8c // indirect - github.com/martini-contrib/render v0.0.0-20150707142108-ec18f8345a11 // indirect - github.com/mjibson/appstats v0.0.0-20151004071057-0542d5f0e87e // indirect - github.com/montanaflynn/stats v0.5.0 // indirect - github.com/nats-io/nats.go v1.9.1 // indirect - github.com/oklog/oklog v0.3.2 // indirect - github.com/olekukonko/tablewriter v0.0.1 // indirect - github.com/olivere/elastic v6.2.26+incompatible // indirect - github.com/olivere/env v1.1.0 // indirect - github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 // indirect + github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect + github.com/mattn/go-isatty v0.0.10 // indirect // TODO: pin a released version github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205151336-8e2473c5e754 - github.com/opentracing/basictracer-go v1.0.0 // indirect - github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.4 // indirect - github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c // indirect - github.com/paulbellamy/ratecounter v0.2.0 // indirect - github.com/pborman/getopt v0.0.0-20190409184431-ee0cd42419d3 // indirect - github.com/performancecopilot/speed v3.0.0+incompatible // indirect - github.com/peterh/liner v1.1.0 // indirect - github.com/philhofer/fwd v1.0.0 // indirect - github.com/pkg/sftp v1.10.1 // indirect - github.com/pressly/chi v4.0.2+incompatible // indirect - github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237 // indirect - github.com/retailnext/hllpp v1.0.0 // indirect - github.com/rogpeppe/go-charset v0.0.0-20190617161244-0dc95cdf6f31 // indirect - github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd // indirect - github.com/samuel/go-thrift v0.0.0-20190219015601-e8b6b52668fe // indirect - github.com/shopspring/decimal v0.0.0-20191009025716-f1972eb1d1f5 // indirect - github.com/shurcooL/frontend v0.0.0-20180531171852-7e359e4b7b17 // indirect - github.com/shurcooL/githubv4 v0.0.0-20191102174205-af46314aec7b // indirect - github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f // indirect - github.com/shurcooL/httpgzip v0.0.0-20190720172056-320755c1c1b0 // indirect - github.com/shurcooL/markdownfmt v0.0.0-20190409060426-3438a10682f5 // indirect - github.com/shurcooL/notificationsapp v0.0.0-20181114034014-0a6e54cc4198 // indirect - github.com/shurcooL/resume v0.0.0-20190824223711-dc47c8f77a80 // indirect - github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9 // indirect - github.com/sony/gobreaker v0.4.1 // indirect - github.com/stathat/go v1.0.0 // indirect - github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a // indirect github.com/stretchr/testify v1.4.0 - github.com/syndtr/goleveldb v1.0.0 // indirect - github.com/tambet/go-asana v0.0.0-20161015030314-6c0cb7090a14 // indirect - github.com/tinylib/msgp v1.1.0 // indirect - github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2 // indirect - github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b // indirect - github.com/tj/go-spin v1.1.0 // indirect - github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31 // indirect - github.com/uber-go/tally v3.3.12+incompatible // indirect - github.com/unknwon/cae v1.0.0 // indirect - github.com/urfave/cli v1.22.1 // indirect - github.com/urfave/negroni v1.0.0 // indirect - github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c // indirect - github.com/xdg/stringprep v1.0.0 // indirect - go.etcd.io/etcd v3.3.17+incompatible // indirect - go.uber.org/automaxprocs v1.2.0 // indirect go.uber.org/zap v1.10.0 golang.org/x/net v0.0.0-20190923162816-aa69164e4478 - gopkg.in/cheggaaa/pb.v1 v1.0.28 // indirect - gopkg.in/gcfg.v1 v1.2.3 // indirect - gopkg.in/pipe.v2 v2.0.0-20140414041502-3c2ca4d52544 // indirect - gopkg.in/tomb.v2 v2.0.0-20161208151619-d5d1b5820637 // indirect - gopkg.in/validator.v2 v2.0.0-20191029180049-30e574a82075 // indirect - gopkg.in/vmihailenco/msgpack.v2 v2.9.1 // indirect - gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0 // indirect - honnef.co/go/js/dom v0.0.0-20190526011328-ebc4cf92d81f // indirect - istio.io/gogo-genproto v0.0.0-20191024203824-d079cc8b1d55 // indirect - sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 // indirect - sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67 // indirect - sourcegraph.com/sourcegraph/go-git v0.0.0-20190828120159-87e0e4ab9e95 // indirect - sourcegraph.com/sourcegraph/go-vcs v0.0.0-20190409071845-d784c9520ccd // indirect + golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e // indirect + golang.org/x/tools v0.0.0-20191030062658-86caa796c7ab // indirect ) diff --git a/exporter/awsxrayexporter/go.sum b/exporter/awsxrayexporter/go.sum index 4348cb32c4ca..c8a49efe1a34 100644 --- a/exporter/awsxrayexporter/go.sum +++ b/exporter/awsxrayexporter/go.sum @@ -1,43 +1,16 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.36.0/go.mod h1:RUoy9p/M4ge0HzT8L+SDZ8jg+Q6fth0CiBuhFJpSV40= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= cloud.google.com/go v0.44.1 h1:7gXaI3V/b4DRaK++rTqhRajcT7z8gtP0qKMZTXqlySM= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.47.0 h1:1JUtpcY9E7+eTospEwWS2QXP3DEn7poB3E2j0jN74mM= -cloud.google.com/go/datastore v1.0.0 h1:Kt+gOPPp2LEPWp8CSfxhsM8ik9CcyE/gYu+0r+RnZvM= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -collectd.org v0.3.0 h1:iNBHGw1VvPJxH2B6RiFWFZ+vsjo1lCdRszBeOuwGi00= -collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= contrib.go.opencensus.io/exporter/jaeger v0.1.1-0.20190430175949-e8b55949d948 h1:xdP25yLqNGSnpfDmEChwA9ZuKLdiyL0jqJKPm/Ypfag= contrib.go.opencensus.io/exporter/jaeger v0.1.1-0.20190430175949-e8b55949d948/go.mod h1:ukdzwIYYHgZ7QYtwVFQUjiT28BJHiMhTERo32s6qVgM= contrib.go.opencensus.io/exporter/ocagent v0.6.0 h1:Z1n6UAyr0QwM284yUuh5Zd8JlvxUGAhFZcgMJkMPrGM= contrib.go.opencensus.io/exporter/ocagent v0.6.0/go.mod h1:zmKjrJcdo0aYcVS7bmEeSEBLPA9YJp5bjrofdU3pIXs= contrib.go.opencensus.io/exporter/prometheus v0.1.0 h1:SByaIoWwNgMdPSgl5sMqM2KDE5H/ukPWBRo314xiDvg= contrib.go.opencensus.io/exporter/prometheus v0.1.0/go.mod h1:cGFniUXGZlKRjzOyuZJ6mgB+PgBcCIa79kEKR8YCW+A= -contrib.go.opencensus.io/exporter/zipkin v0.1.1 h1:PR+1zWqY8ceXs1qDQQIlgXe+sdiwCf0n32bH4+Epk8g= -contrib.go.opencensus.io/exporter/zipkin v0.1.1/go.mod h1:GMvdSl3eJ2gapOaLKzTKE3qDgUkJ86k9k3yY2eqwkzc= contrib.go.opencensus.io/resource v0.1.2 h1:b4WFJV8u7/NzPWHeTqj3Ec2AW8OGhtJxC/hbphIOvbU= contrib.go.opencensus.io/resource v0.1.2/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= -dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3 h1:hJiie5Bf3QucGRa4ymsAUOxyhYwGEz1xrsVk0P8erlw= -dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= -dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0 h1:SPOUaucgtVls75mg+X7CXigS71EnsfVUK/2CgVrwqgw= -dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= -dmitri.shuralyov.com/route/github v0.0.0-20180323232716-ce4edef1f8c9 h1:7rFRFegk+s3dVmOi/f8wDQ5O+uI29iNA7MzzMFVOmzU= -dmitri.shuralyov.com/route/github v0.0.0-20180323232716-ce4edef1f8c9/go.mod h1:5oSmIM2HxgXgKSUK0E6F3pcAfHztRSpKaVxglL+HLSk= -dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412 h1:GvWw74lx5noHocd+f6HBMXK6DuggBB1dhVkuGZbv7qM= -dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= -dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c h1:ivON6cwHK1OH26MZyWDCnbTRZZf0IhNsENoNAKFS1g4= -dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= -git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= -git.apache.org/thrift.git v0.13.0 h1:/3bz5WZ+sqYArk7MBBBbDufMxKKOA56/6JO6psDpUDY= -git.apache.org/thrift.git v0.13.0/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= -github.com/AaronO/go-git-http v0.0.0-20161214145340-1d9485b3a98f h1:x/RDwGRneK2/891S2o7KhZt3MhHMSCssoeDOfvolTMk= -github.com/AaronO/go-git-http v0.0.0-20161214145340-1d9485b3a98f/go.mod h1:+6Yuq73F9068Na+mSBNXCvyuxvgw4f/g5ii40e3U8Sc= -github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9 h1:HD8gA2tkByhMAwYaFAX9w2l7vxvBQ5NMoxDrkhqhtn4= -github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/Azure/azure-sdk-for-go v23.2.0+incompatible h1:bch1RS060vGpHpY3zvQDV4rOiRw25J1zmR/B9a76aSA= github.com/Azure/azure-sdk-for-go v23.2.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/go-autorest v11.1.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= @@ -47,20 +20,14 @@ github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/DATA-DOG/go-sqlmock v1.3.3 h1:CWUqKXe0s8A2z6qCgkP4Kru7wC11YoAnoupUKFDnH08= -github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v2.2.0+incompatible h1:V5BKkxACZLjzHjSgBbr2gvLA2Ae49yhc6CSY7MLy5k4= github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46 h1:lsxEuwrXEAokXB9qhlbKWPpo3KMLZQ5WB5WLQRW1uq0= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OneOfOne/xxhash v1.2.5 h1:zl/OfRA6nftbBK9qTohYBJ5xvw6C/oNKizR7cZGl3cI= github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= +github.com/OpenPeeDeeP/depguard v1.0.1 h1:VlW4R6jmBIv3/u1JNlawEvJMM4J+dPORPaZasQee8Us= github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= @@ -76,47 +43,16 @@ github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMx github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/aclements/go-gg v0.0.0-20170323211221-abd1f791f5ee h1:KJgh99JlYRhfgHtb7XyhAZSJMdfkjVmo3PP7XO1/HO8= -github.com/aclements/go-gg v0.0.0-20170323211221-abd1f791f5ee/go.mod h1:55qNq4vcpkIuHowELi5C8e+1yUHtoLoOUR9QU5j7Tes= -github.com/aclements/go-moremath v0.0.0-20190830160640-d16893ddf098 h1:a7+Y8VlXRC2VX5ue6tpCutr4PsrkRkWWVZv4zqfaHuc= -github.com/aclements/go-moremath v0.0.0-20190830160640-d16893ddf098/go.mod h1:idZL3yvz4kzx1dsBOAC+oYv6L92P1oFEhUXUB1A/lwQ= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 h1:rFw4nCn9iMW+Vajsk51NtYIcwSTkXr+JGrMd36kTDJw= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/ajg/form v0.0.0-20160822230020-523a5da1a92f/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= -github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= -github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= -github.com/ajstarks/deck v0.0.0-20191009173945-82d717002242 h1:30XVZzSxUv+pE25mnlAL5nW/KsUDBmldePggLIAEJgk= -github.com/ajstarks/deck v0.0.0-20191009173945-82d717002242/go.mod h1:j3f/59diR4DorW5A78eDYvRkdrkh+nps4p5LA1Tl05U= -github.com/ajstarks/svgo v0.0.0-20190826172357-de52242f3d65 h1:kZegOsPGxfV9mM8WzfllNZOx3MvM5zItmhQlvITKVvA= -github.com/ajstarks/svgo v0.0.0-20190826172357-de52242f3d65/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs= -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= -github.com/alecthomas/kingpin v2.2.6+incompatible h1:5svnBTFgJjZvGKyYBtMB0+m5wvrbUHiqye8wRJMlnYI= -github.com/alecthomas/kingpin v2.2.6+incompatible/go.mod h1:59OFYbFVLKQKq+mqrL6Rw5bR0c3ACQaawgXx0QYndlE= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= 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 h1:Hs82Z41s6SdL1CELW+XaDYmOH4hkBN4/N9og/AsOv7E= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/andygrunwald/go-gerrit v0.0.0-20191101112536-3f5e365ccf57 h1:wtSQ14h8qAUezER6QPfYmCh5+W5Ly1lVruhm/QeOVUE= -github.com/andygrunwald/go-gerrit v0.0.0-20191101112536-3f5e365ccf57/go.mod h1:0iuRQp6WJ44ts+iihy5E/WlPqfg5RNeQxOmzRkxCdtk= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/apache/arrow v0.0.0-20191105160933-1afbcb6bb2a6 h1:0Cn1JoEEOLKPNpSQhiug+H2aot6rVVSAigTROSX4YxE= -github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= -github.com/apache/arrow/go/arrow v0.0.0-20191105160933-1afbcb6bb2a6 h1:Cm45hoKQzk6EQbR6X0B6zfQhUMLYo0MEjLt3+PWZNx0= -github.com/apache/arrow/go/arrow v0.0.0-20191105160933-1afbcb6bb2a6/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= github.com/apache/thrift v0.0.0-20161221203622-b2a4d4ae21c7 h1:Fv9bK1Q+ly/ROk4aJsVMeuIwPel4bEnD8EPiI91nZMg= github.com/apache/thrift v0.0.0-20161221203622-b2a4d4ae21c7/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.12.0 h1:pODnxUFNcjP9UTLZGTdeh+j16A8lJbRvD3rOtrk/7bs= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apex/log v1.1.0 h1:J5rld6WVFi6NxA6m8GJ1LJqu3+GiTFIt3mYv27gdQWI= -github.com/apex/log v1.1.0/go.mod h1:yA770aXIDQrhVOIGurT/pVdfCpSq1GQV/auzMN5fzvY= -github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a h1:2KLQMJ8msqoPHIPDufkxVcoTtcmE5+1sL9950m4R9Pk= -github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a/go.mod h1:3NqKYiepwy8kCu4PNA+aP7WUV72eXWJeP9/r3/K9aLE= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 h1:G1bPvciwNyF7IUmKXNt9Ak3m6u9DE1rF+RmtIkBpVdA= @@ -129,58 +65,18 @@ github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/aws/aws-sdk-go v1.15.64/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= -github.com/aws/aws-sdk-go v1.15.77/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= github.com/aws/aws-sdk-go v1.23.12 h1:2UnxgNO6Y5J1OrkXS8XNp0UatDxD1bWHiDT62RDPggI= github.com/aws/aws-sdk-go v1.23.12/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go-v2 v0.15.0 h1:mQCV2MV4I0L02Nwi1xs0HM7yWbrcWjjUOy1UAv27sw8= -github.com/aws/aws-sdk-go-v2 v0.15.0/go.mod h1:pFLIN9LDjOEwHfruGweAXEq0XaD6uRkY8FsRkxhuBIg= -github.com/aws/aws-xray-sdk-go v0.9.4 h1:3mtFCrgFR5IefmWFV5pscHp9TTyOWuqaIKJIY0d1Y4g= -github.com/aws/aws-xray-sdk-go v0.9.4/go.mod h1:XtMKdBQfpVut+tJEwI7+dJFRxxRdxHDyVNp2tHXRq04= -github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59 h1:WWB576BN5zNSZc/M9d/10pqEx5VHNhaQ/yOVAkmj5Yo= -github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I= 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 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/beyang/hgo v0.0.0-20150825035631-d45f1891a48a h1:Gfewj+rrM2kJ2DI3+dfJj3W+PPEfNqwX/6R7lax9j14= -github.com/beyang/hgo v0.0.0-20150825035631-d45f1891a48a/go.mod h1:n88RubZnITBFvoKP88nD4ajBX+PekZgpQOCgxazSTTA= github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 h1:mXoPYz/Ul5HYEDvkta6I8/rnYM5gSdSV2tJ6XbZuEtY= -github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= -github.com/blakesmith/ar v0.0.0-20150311145944-8bd4349a67f2 h1:oMCHnXa6CCCafdPDbMh/lWRhRByN0VFLvv+g+ayx1SI= -github.com/blakesmith/ar v0.0.0-20150311145944-8bd4349a67f2/go.mod h1:PkYb9DJNAwrSvRx5DYA+gUcOIgTGVMNkfSCbZM8cWpI= -github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= -github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= -github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= -github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40 h1:y4B3+GPxKlrigF1ha5FFErxK+sr6sWxQovRMzwMhejo= -github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b h1:AP/Y7sqYicnjGDfD5VcY4CIfh1hRXBUavxrvELjTiOE= github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b/go.mod h1:ac9efd0D1fsDb3EJvhqgXRbFx7bs2wqZ10HQPeU8U/Q= -github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4= -github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/bombsimon/wsl v1.2.5 h1:9gTOkIwVtoDZywvX802SDHokeX4kW1cKnV8ZTVAPkRs= github.com/bombsimon/wsl v1.2.5/go.mod h1:43lEF/i0kpXbLCeDXL9LMT8c92HyBywXb0AsgMHYngM= -github.com/boombuler/barcode v1.0.0 h1:s1TvRnXwL2xJRaccrdcBQMZxq6X7DvsMogtmJeHDdrc= -github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= -github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625 h1:ckJgFhFWywOx+YLEMIJsTb+NV6NexWICk5+AMSuz3ss= -github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= -github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b h1:L/QXpzIa3pOvUGt1D1lA5KjYhPBAN/3iWdP7xeFS9F0= -github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA= -github.com/bsm/sarama-cluster v2.1.15+incompatible h1:RkV6WiNRnqEEbp81druK8zYhmnIgdOjqSVi0+9Cnl2A= -github.com/bsm/sarama-cluster v2.1.15+incompatible/go.mod h1:r7ao+4tTNXvWm+VRpRJchr2kQhqxgmAp2iEX5W96gMM= -github.com/c-bata/go-prompt v0.2.2 h1:uyKRz6Z6DUyj49QVijyM339UJV9yhbr70gESwbNU3e0= -github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= -github.com/caarlos0/ctrlc v1.0.0 h1:2DtF8GSIcajgffDFJzyG15vO+1PuBWOMUdFut7NnXhw= -github.com/caarlos0/ctrlc v1.0.0/go.mod h1:CdXpj4rmq0q/1Eb44M9zi2nKB0QraNKuRGYGrrHhcQw= -github.com/cactus/go-statsd-client v3.2.0+incompatible h1:ZJpQV7zHnerDzsEQS1wnI38tpR7wX3QFmL7WzTerEmY= -github.com/cactus/go-statsd-client/statsd v0.0.0-20191030180650-a68a2246f89c h1:rrLWPlpOKwnBpVUXitbgM3+Nie1eBaFfBZqfiPpxVj8= -github.com/cactus/go-statsd-client/statsd v0.0.0-20191030180650-a68a2246f89c/go.mod h1:l/bIBLeOl9eX+wxJAzxS4TveKRtAqlyDpHjhkfO0MEI= -github.com/campoy/unique v0.0.0-20180121183637-88950e537e7e h1:V9a67dfYqPLAvzk5hMQOXYJlZ4SLIXgyKIE+ZiHzgGQ= -github.com/campoy/unique v0.0.0-20180121183637-88950e537e7e/go.mod h1:9IOqJGCPMSc6E5ydlp5NIonxObaeu/Iub/X03EKPVYo= -github.com/casbin/casbin v1.9.1 h1:ucjbS5zTrmSLtH4XogqOG920Poe6QatdXtz1FEbApeM= -github.com/casbin/casbin v1.9.1/go.mod h1:z8uPsfBJGUsnkagrt3G8QvjgTKFMBJ32UP8HpZllfog= github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409 h1:Da6uN+CAo1Wf09Rz1U4i9QN8f0REjyNJ73BEwAq/paU= github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= @@ -188,126 +84,57 @@ github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA github.com/cespare/xxhash v0.0.0-20181017004759-096ff4a8a059/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible h1:C29Ae4G5GtYyYMm1aztcyj/J5ckgJm2zwdDajFbx1NY= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3 h1:TJH+oke8D16535+jHExHj4nQvzlZrj7ug5D7I/orNUA= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec h1:EdRZT3IeKQmfCSrgo8SZ8V3MEnskuJP0wCYNpe+aiXo= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= -github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= -github.com/cockroachdb/cockroach-go v0.0.0-20181001143604-e0a95dfd547c/go.mod h1:XGLbWH/ujMcbPbhZq52Nv6UrCghb1yGn//133kEsvDk= -github.com/cockroachdb/cockroach-go v0.0.0-20190916165215-ad57a61cc915 h1:QX2Zc22B15gdWwDCwS7BXmbeD/SWdcRK12gOfZ5BsIs= -github.com/cockroachdb/cockroach-go v0.0.0-20190916165215-ad57a61cc915/go.mod h1:XGLbWH/ujMcbPbhZq52Nv6UrCghb1yGn//133kEsvDk= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0 h1:sDMmm+q/3+BukdIpxwO365v/Rbspp2Nt5XntgQRXq8Q= -github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= -github.com/codegangsta/negroni v1.0.0 h1:+aYywywx4bnKXWvoWtRfJ91vC59NbEhEY03sZjQhbVY= -github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0= github.com/coreos/bbolt v1.3.2 h1:wZwiHHUieZCquLkDL0B8UhzreNWsPHooDAG3q34zk0s= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible h1:jFneRYjIvLMLhDLCzuTuU4rSJUjRplcJQ7pD7MnhC04= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.17+incompatible h1:f/Z3EoDSx1yjaIjLQGo1diYUlQYSBrrAQ5vP8NjwXwo= -github.com/coreos/etcd v3.3.17+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible h1:bXhRBIXoTm9BYHS3gE0TtQuyNZyeEMux2sDi4oo5YOo= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0 h1:3Jm3tLmsgAYcjC+4Up7hJrFBPr+n7rAqYeSw/SZazuY= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f h1:JOrtw2xFKzlg+cbHpyrpLDmnN1HqhBfnX7WDiW7eG2c= -github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.7 h1:6pwm8kMQKCmgUg0ZHTm5+/YvRK0s3THD/28+T6/kk4A= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/crossdock/crossdock-go v0.0.0-20160816171116-049aabb0122b h1:WR1qVJzbvrVywhAk4kMQKRPx09AZVI0NdEdYs59iHcA= -github.com/crossdock/crossdock-go v0.0.0-20160816171116-049aabb0122b/go.mod h1:v9FBN7gdVTpiD/+LZ7Po0UKvROyT87uLVxTHVky/dlQ= -github.com/cznic/cc v0.0.0-20181122101902-d673e9b70d4d h1:AePLLLsGE1yOEDAmaJlQ9zd/9qiaEVskYukZ1f2srAA= -github.com/cznic/cc v0.0.0-20181122101902-d673e9b70d4d/go.mod h1:m3fD/V+XTB35Kh9zw6dzjMY+We0Q7PMf6LLIC4vuG9k= -github.com/cznic/fileutil v0.0.0-20181122101858-4d67cfea8c87 h1:94XgeeTZ+3Xi9zsdgBjP1Byx/wywCImjF8FzQ7OaKdU= -github.com/cznic/fileutil v0.0.0-20181122101858-4d67cfea8c87/go.mod h1:8S58EK26zhXSxzv7NQFpnliaOQsmDUxvoQO3rt154Vg= -github.com/cznic/golex v0.0.0-20181122101858-9c343928389c h1:G8zTsaqyVfIHpgMFcGgdbhHSFhlNc77rAKkhVbQ9kQg= -github.com/cznic/golex v0.0.0-20181122101858-9c343928389c/go.mod h1:+bmmJDNmKlhWNG+gwWCkaBoTy39Fs+bzRxVBzoTQbIc= -github.com/cznic/internal v0.0.0-20181122101858-3279554c546e h1:58AcyflCe84EONph4gkyo3eDOEQcW5HIPfQBrD76W68= -github.com/cznic/internal v0.0.0-20181122101858-3279554c546e/go.mod h1:olo7eAdKwJdXxb55TKGLiJ6xt1H0/tiiRCWKVLmtjY4= -github.com/cznic/ir v0.0.0-20181122101859-da7ba2ecce8b h1:GelTfvbS1tZtnyCTx3aMIHbRw5euyrfHd6H3rLqLlHU= -github.com/cznic/ir v0.0.0-20181122101859-da7ba2ecce8b/go.mod h1:bctvsSxTD8Lpaj5RRQ0OrAAu4+0mD4KognDQItBNMn0= -github.com/cznic/lex v0.0.0-20181122101858-ce0fb5e9bb1b h1:KJtZdP0G3jUnpgEWZdJ7326WvTbREwcwlDSOpkpNZGY= -github.com/cznic/lex v0.0.0-20181122101858-ce0fb5e9bb1b/go.mod h1:LcYbbl1tn/c31gGxe2EOWyzr7EaBcdQOoIVGvJMc7Dc= -github.com/cznic/lexer v0.0.0-20181122101858-e884d4bd112e h1:K5kIaw68kxYw40mp8YKuwKrb63R0BPCR1iEGvBR6Mfs= -github.com/cznic/lexer v0.0.0-20181122101858-e884d4bd112e/go.mod h1:YNGh5qsZlhFHDfWBp/3DrJ37Uy4pRqlwxtL+LS7a/Qw= -github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 h1:iwZdTE0PVqJCos1vaoKsclOGD3ADKpshg3SRtYBbwso= -github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM= -github.com/cznic/strutil v0.0.0-20181122101858-275e90344537 h1:MZRmHqDBd0vxNwenEbKSQqRVT24d3C05ft8kduSwlqM= -github.com/cznic/strutil v0.0.0-20181122101858-275e90344537/go.mod h1:AHHPPPXTw0h6pVabbcbyGRK1DckRn7r/STdZEeIDzZc= -github.com/cznic/xc v0.0.0-20181122101856-45b06973881e h1:U9mUTtTukbCdFuphv3QiJBjtImXsUTHcX5toZZi4OzY= -github.com/cznic/xc v0.0.0-20181122101856-45b06973881e/go.mod h1:3oFoiOvCDBYH+swwf5+k/woVmWy7h1Fcyu8Qig/jjX0= -github.com/dave/jennifer v1.2.0 h1:S15ZkFMRoJ36mGAQgWL1tnr0NQJh9rZ8qatseX/VbBc= -github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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/dgraph-io/badger v1.6.0 h1:DshxFxZWXUcO0xX476VJC07Xsr6ZCBVRHKZ93Oh7Evo= -github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgrijalva/jwt-go v0.0.0-20160705203006-01aeca54ebda/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8 h1:akOQj8IVgoeFfBTzGOEQakCYshWD6RNo1M5pivFXt70= -github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dgryski/go-sip13 v0.0.0-20190329191031-25c5027a8c7b h1:Yqiad0+sloMPdd/0Fg22actpFx0dekpzt1xJmVNVkU0= github.com/dgryski/go-sip13 v0.0.0-20190329191031-25c5027a8c7b/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= -github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= -github.com/disintegration/gift v1.2.1 h1:Y005a1X4Z7Uc+0gLpSAsKhWi4qLtsdEcMIbbdvdZ6pc= -github.com/disintegration/gift v1.2.1/go.mod h1:Jh2i7f7Q2BM7Ezno3PhfezbR1xpUg9dUg3/RlKGr4HI= -github.com/djherbis/buffer v1.1.0 h1:uGQ+DZDAMlfC2z3khbBtLcAHC0wyoNrX9lpOml3g3fg= -github.com/djherbis/buffer v1.1.0/go.mod h1:VwN8VdFkMY0DCALdY8o00d3IZ6Amz/UNVMWcSaJT44o= -github.com/djherbis/nio v2.0.3+incompatible h1:CidFHoR25he4511AIQ3RW9LH9XkLMOoNML8xd7R7Irc= -github.com/djherbis/nio v2.0.3+incompatible/go.mod h1:v74owXPROGWsr1y28T13rlXf5Hn/bWJ1bbX8M+BqyPo= github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96 h1:cenwrSVm+Z7QLSV/BsnenAOcDXdX4cMv4wP0B/5QbPg= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 h1:bWDMxwH3px2JBh6AyO7hdCn/PkvCZXii8TGj7sbtEbQ= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/dustin/go-humanize v0.0.0-20180713052910-9f541cc9db5d/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/eapache/go-resiliency v1.1.0 h1:1NtRmCAqadE2FN4ZcN6g90TP3uk8cg9rn9eNK2197aU= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/eclipse/paho.mqtt.golang v1.2.0 h1:1F8mhG9+aO5/xpdtFkW4SxOJB67ukuDC3t2y2qayIX0= -github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e h1:p1yVGRW3nmb85p1Sh1ZJSDm4A4iKLS5QNbvUHMgGu/M= github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633 h1:H2pdYOb3KQ1/YsqVWoWNLQO+fusocsw354rqGTZtAgw= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful-swagger12 v0.0.0-20170926063155-7524189396c6 h1:V94anc0ZG3Pa/cAMwP2m1aQW3+/FF8Qmw/GsFyTJAp4= -github.com/emicklei/go-restful-swagger12 v0.0.0-20170926063155-7524189396c6/go.mod h1:qr0VowGBT4CS4Q8vFF8BSeKz34PuqKGxs/L0IAQA9DQ= -github.com/emirpasic/gods v1.9.0 h1:rUF4PuzEjMChMiNsVjdI+SyLu7rEqpQ5reNFnhC7oFo= -github.com/emirpasic/gods v1.9.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= github.com/envoyproxy/go-control-plane v0.6.9 h1:deEH9W8ZAUGNbCdX+9iNzBOGrAOrnpJGoy0PcTqk/tE= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/evanphx/json-patch v0.0.0-20190203023257-5858425f7550/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= @@ -316,47 +143,26 @@ github.com/evanphx/json-patch v4.5.0+incompatible h1:ouOWdg56aJriqS0huScTkVXPC5I github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/structs v1.0.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8= -github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8 h1:a9ENSRDFBUPkJ5lCgVZh26+ZbGyoVJG7yb5SSzF5H54= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/garyburd/redigo v1.6.0 h1:0VruCpn7yAIIu7pWVClQC8wxCJEcG3nyzpMSHKi1PQc= -github.com/garyburd/redigo v1.6.0/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3 h1:t8FVkw33L+wilf2QiWkw0UV77qRpcH/JHPKGpKa2E8g= -github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= -github.com/gin-gonic/gin v1.4.0 h1:3tMoCCfM7ppqsR0ptz/wi1impNpT7/9wQtMZ8lr1mCQ= -github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= -github.com/gliderlabs/ssh v0.1.1 h1:j3L6gSLQalDETeEg/Jg0mGY0/y/N6zI2xX1978P0Uqw= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8 h1:DujepqpGd1hyOd7aW59XpK7Qymp8iy83xq74fLr21is= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/glycerine/go-unsnap-stream v0.0.0-20190901134440-81cf024a9e0a h1:FQqoVvjbiUioBBFUL5up+h+GdCa/AnJsL/1bIs/veSI= -github.com/glycerine/go-unsnap-stream v0.0.0-20190901134440-81cf024a9e0a/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= -github.com/go-chi/chi v4.0.2+incompatible h1:maB6vn6FqCxrpz4FqWdh4+lwpyZIQS7YEAUcHlgXVRs= -github.com/go-chi/chi v4.0.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= +github.com/go-critic/go-critic v0.3.5-0.20190904082202-d79a9f0c64db h1:GYXWx7Vr3+zv833u+8IoXbNnQY0AdXsxAgI0kX7xcwA= github.com/go-critic/go-critic v0.3.5-0.20190904082202-d79a9f0c64db/go.mod h1:+sE8vrLDS2M0pZkBk0wy6+nLdKexVDrl/jBqQOTDThA= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-lintpack/lintpack v0.5.2 h1:DI5mA3+eKdWeJ40nU4d6Wc26qmdG8RCi/btYq0TuRN0= github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= -github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab h1:xveKWz2iaueeTaUgdetzel+U7exyigDYBryyVfV/rZk= -github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= @@ -416,499 +222,33 @@ github.com/go-openapi/validate v0.17.2/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+ github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= github.com/go-openapi/validate v0.19.2 h1:ky5l57HjyVRrsJfd2+Ro5Z9PjGuKbsmftwyMtk8H7js= github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA= -github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g= github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= +github.com/go-toolsmith/astcopy v1.0.0 h1:OMgl1b1MEpjFQ1m5ztEO06rz5CUd3oBv9RF7+DyvdG8= github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astequal v1.0.0 h1:4zxD8j3JRFNyLN46lodQuqz3xdKSrur7U/sr0SDS/gQ= github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= github.com/go-toolsmith/astfmt v0.0.0-20180903215011-8f8ee99c3086/go.mod h1:mP93XdblcopXwlyN4X4uodxXQhldPGZbcEJIimQHrkg= +github.com/go-toolsmith/astfmt v1.0.0 h1:A0vDDXt+vsvLEdbMFJAUBI/uTbRw1ffOPnxsILnFL6k= github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU= github.com/go-toolsmith/astp v0.0.0-20180903215135-0af7e3c24f30/go.mod h1:SV2ur98SGypH1UjcPpCatrV5hPazG6+IfNHbkDXBRrk= +github.com/go-toolsmith/astp v1.0.0 h1:alXE75TXgcmupDsMK1fRAy0YUzLzqPVvBKoyWV+KPXg= github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= github.com/go-toolsmith/pkgload v0.0.0-20181119091011-e9e65178eee8/go.mod h1:WoMrjiy4zvdS+Bg6z9jZH82QXwkcgCBX6nOfnmdaHks= +github.com/go-toolsmith/pkgload v1.0.0 h1:4DFWWMXVfbcN5So1sBNW9+yeiMqLFGl1wFLTL5R0Tgg= github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc= +github.com/go-toolsmith/strparse v1.0.0 h1:Vcw78DnpCAKlM20kSbAyO4mPfJn/lyYA4BJUDxe2Jb4= github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= +github.com/go-toolsmith/typep v1.0.0 h1:zKymWyA1TRYvqYrYDrfEMZULyrhcnGY3x7LDKU2XQaA= github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= -github.com/gobuffalo/attrs v0.0.0-20190219185331-f338c9388485/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= -github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= -github.com/gobuffalo/attrs v0.1.0 h1:LY6/rbhPD/hfa+AfviaMXBmZBGb0fGHF12yg7f3dPQA= -github.com/gobuffalo/attrs v0.1.0/go.mod h1:fmNpaWyHM0tRm8gCZWKx8yY9fvaNLo2PyzBNSrBZ5Hw= -github.com/gobuffalo/buffalo v0.12.8-0.20181004233540-fac9bb505aa8/go.mod h1:sLyT7/dceRXJUxSsE813JTQtA3Eb1vjxWfo/N//vXIY= -github.com/gobuffalo/buffalo v0.13.0/go.mod h1:Mjn1Ba9wpIbpbrD+lIDMy99pQ0H0LiddMIIDGse7qT4= -github.com/gobuffalo/buffalo v0.13.1/go.mod h1:K9c22KLfDz7obgxvHv1amvJtCQEZNiox9+q6FDJ1Zcs= -github.com/gobuffalo/buffalo v0.13.2/go.mod h1:vA8I4Dwcfkx7RAzIRHVDZxfS3QJR7muiOjX4r8P2/GE= -github.com/gobuffalo/buffalo v0.13.4/go.mod h1:y2jbKkO0k49OrNIOAkbWQiPBqxAFpHn5OKnkc7BDh+I= -github.com/gobuffalo/buffalo v0.13.5/go.mod h1:hPcP12TkFSZmT3gUVHZ24KRhTX3deSgu6QSgn0nbWf4= -github.com/gobuffalo/buffalo v0.13.6/go.mod h1:/Pm0MPLusPhWDayjRD+/vKYnelScIiv0sX9YYek0wpg= -github.com/gobuffalo/buffalo v0.13.7/go.mod h1:3gQwZhI8DSbqmDqlFh7kfwuv/wd40rqdVxXtFWlCQHw= -github.com/gobuffalo/buffalo v0.13.9/go.mod h1:vIItiQkTHq46D1p+bw8mFc5w3BwrtJhMvYjSIYK3yjE= -github.com/gobuffalo/buffalo v0.13.12/go.mod h1:Y9e0p0cdo/eI+lHm7EFzlkc9YzjwGo5QeDj+FbsyqVA= -github.com/gobuffalo/buffalo v0.13.13/go.mod h1:WAL36xBN8OkU71lNjuYv6llmgl0o8twjlY+j7oGUmYw= -github.com/gobuffalo/buffalo v0.14.0/go.mod h1:A9JI3juErlXNrPBeJ/0Pdky9Wz+GffEg7ZN0d1B5h48= -github.com/gobuffalo/buffalo v0.14.2/go.mod h1:VNMTzddg7bMnkVxCUXzqTS4PvUo6cDOs/imtG8Cnt/k= -github.com/gobuffalo/buffalo v0.14.3/go.mod h1:3O9vB/a4UNb16TevehTvDCaPnb98NWvYz0msJQ6ZlVA= -github.com/gobuffalo/buffalo v0.14.5/go.mod h1:RWK6evR4hY4nRVfw9xie9V/LYK3j0U9wU2oKgQUFZ88= -github.com/gobuffalo/buffalo v0.14.6/go.mod h1:71Un+T2JGgwXLjBqYFdGSooz/OUjw15BJM0nbbcAM0o= -github.com/gobuffalo/buffalo v0.14.9/go.mod h1:M8XWw+Rcotn7C4NYpCEGBg3yX+O1TeD1pBfmiILhgHw= -github.com/gobuffalo/buffalo v0.14.10/go.mod h1:49A7/JYlsCyTkVHtvKl91w6rG35ZiywwjWMVC1zKWsQ= -github.com/gobuffalo/buffalo v0.14.11/go.mod h1:RO5OwOJQjv6/TukzszV5ELA54lg84D1kZwla6oAkTlo= -github.com/gobuffalo/buffalo v0.15.0 h1:VsxIcfJaDm4u2UirLHGgMfQpfHVwJP3JoDmGyeeNnc0= -github.com/gobuffalo/buffalo v0.15.0/go.mod h1:WBSrSdbxiww/yXZlh2D69FByhM5xdYT1aDIwEQssTto= -github.com/gobuffalo/buffalo-docker v1.0.5/go.mod h1:NZ3+21WIdqOUlOlM2onCt7cwojYp4Qwlsngoolw8zlE= -github.com/gobuffalo/buffalo-docker v1.0.6/go.mod h1:UlqKHJD8CQvyIb+pFq+m/JQW2w2mXuhxsaKaTj1X1XI= -github.com/gobuffalo/buffalo-docker v1.0.7 h1:kj+AfChcev54v4N8N6PzNFWyiVSenzu6djrgxTBvbTk= -github.com/gobuffalo/buffalo-docker v1.0.7/go.mod h1:BdB8AhcmjwR6Lo3rDPMzyh/+eNjYnZ1TAO0eZeLkhig= -github.com/gobuffalo/buffalo-plugins v1.0.2/go.mod h1:pOp/uF7X3IShFHyobahTkTLZaeUXwb0GrUTb9ngJWTs= -github.com/gobuffalo/buffalo-plugins v1.0.4/go.mod h1:pWS1vjtQ6uD17MVFWf7i3zfThrEKWlI5+PYLw/NaDB4= -github.com/gobuffalo/buffalo-plugins v1.4.3/go.mod h1:uCzTY0woez4nDMdQjkcOYKanngeUVRO2HZi7ezmAjWY= -github.com/gobuffalo/buffalo-plugins v1.5.1/go.mod h1:jbmwSZK5+PiAP9cC09VQOrGMZFCa/P0UMlIS3O12r5w= -github.com/gobuffalo/buffalo-plugins v1.6.1/go.mod h1:/XZt7UuuDnx5P4v3cStK0+XoYiNOA2f0wDIsm1oLJQA= -github.com/gobuffalo/buffalo-plugins v1.6.4/go.mod h1:/+N1aophkA2jZ1ifB2O3Y9yGwu6gKOVMtUmJnbg+OZI= -github.com/gobuffalo/buffalo-plugins v1.6.5/go.mod h1:0HVkbgrVs/MnPZ/FOseDMVanCTm2RNcdM0PuXcL1NNI= -github.com/gobuffalo/buffalo-plugins v1.6.6/go.mod h1:hSWAEkJyL9RENJlmanMivgnNkrQ9RC4xJARz8dQryi0= -github.com/gobuffalo/buffalo-plugins v1.6.7/go.mod h1:ZGZRkzz2PiKWHs0z7QsPBOTo2EpcGRArMEym6ghKYgk= -github.com/gobuffalo/buffalo-plugins v1.6.9/go.mod h1:yYlYTrPdMCz+6/+UaXg5Jm4gN3xhsvsQ2ygVatZV5vw= -github.com/gobuffalo/buffalo-plugins v1.6.10/go.mod h1:HxzPZjAEzh9H0gnHelObxxrut9O+1dxydf7U93SYsc8= -github.com/gobuffalo/buffalo-plugins v1.6.11/go.mod h1:eAA6xJIL8OuynJZ8amXjRmHND6YiusVAaJdHDN1Lu8Q= -github.com/gobuffalo/buffalo-plugins v1.7.2/go.mod h1:vEbx30cLFeeZ48gBA/rkhbqC2M/2JpsKs5CoESWhkPw= -github.com/gobuffalo/buffalo-plugins v1.8.1/go.mod h1:vu71J3fD4b7KKywJQ1tyaJGtahG837Cj6kgbxX0e4UI= -github.com/gobuffalo/buffalo-plugins v1.8.2/go.mod h1:9te6/VjEQ7pKp7lXlDIMqzxgGpjlKoAcAANdCgoR960= -github.com/gobuffalo/buffalo-plugins v1.8.3/go.mod h1:IAWq6vjZJVXebIq2qGTLOdlXzmpyTZ5iJG5b59fza5U= -github.com/gobuffalo/buffalo-plugins v1.9.3/go.mod h1:BNRunDThMZKjqx6R+n14Rk3sRSOWgbMuzCKXLqbd7m0= -github.com/gobuffalo/buffalo-plugins v1.9.4/go.mod h1:grCV6DGsQlVzQwk6XdgcL3ZPgLm9BVxlBmXPMF8oBHI= -github.com/gobuffalo/buffalo-plugins v1.10.0/go.mod h1:4osg8d9s60txLuGwXnqH+RCjPHj9K466cDFRl3PErHI= -github.com/gobuffalo/buffalo-plugins v1.11.0/go.mod h1:rtIvAYRjYibgmWhnjKmo7OadtnxuMG5ZQLr25ozAzjg= -github.com/gobuffalo/buffalo-plugins v1.12.0/go.mod h1:kw4Mj2vQXqe4X5TI36PEQgswbL30heGQwJEeDKd1v+4= -github.com/gobuffalo/buffalo-plugins v1.13.0/go.mod h1:Y9nH2VwHVkeKhmdM380ulNXmhhD5On81nRVeD+WlDTQ= -github.com/gobuffalo/buffalo-plugins v1.13.1/go.mod h1:VcvhrgWcZLhOp8JPLckHBDtv05KepY/MxHsT2+06xX4= -github.com/gobuffalo/buffalo-plugins v1.14.0/go.mod h1:r2lykSXBT79c3T5JK1ouivVDrHvvCZUdZBmn+lPMHU8= -github.com/gobuffalo/buffalo-plugins v1.14.1 h1:ZL22sNZif+k/0I9X7LB8cpVMWh7zcVjfpiqxFlH4xSY= -github.com/gobuffalo/buffalo-plugins v1.14.1/go.mod h1:9BRBvXuKxR0m4YttVFRtuUcAP9Rs97mGq6OleyDbIuo= -github.com/gobuffalo/buffalo-pop v1.0.5/go.mod h1:Fw/LfFDnSmB/vvQXPvcXEjzP98Tc+AudyNWUBWKCwQ8= -github.com/gobuffalo/buffalo-pop v1.1.2/go.mod h1:czNLXcYbg5/fjr+uht0NyjZaQ0V2W23H1jzyORgCzQ4= -github.com/gobuffalo/buffalo-pop v1.1.5/go.mod h1:H01JIg42XwOHS4gRMhSeDZqBovNVlfBUsVXckU617s4= -github.com/gobuffalo/buffalo-pop v1.1.8/go.mod h1:1uaxOFzzVud/zR5f1OEBr21tMVLQS3OZpQ1A5cr0svE= -github.com/gobuffalo/buffalo-pop v1.1.13/go.mod h1:47GQoBjCMcl5Pw40iCWHQYJvd0HsT9kdaOPWgnzHzk4= -github.com/gobuffalo/buffalo-pop v1.1.14/go.mod h1:sAMh6+s7wytCn5cHqZIuItJbAqzvs6M7FemLexl+pwc= -github.com/gobuffalo/buffalo-pop v1.1.15/go.mod h1:vnvvxhbEFAaEbac9E2ZPjsBeL7WHkma2UyKNVA4y9Wo= -github.com/gobuffalo/buffalo-pop v1.2.1/go.mod h1:SHqojN0bVzaAzCbQDdWtsib202FDIxqwmCO8VDdweF4= -github.com/gobuffalo/buffalo-pop v1.3.0/go.mod h1:P0PhA225dRGyv0WkgYjYKqgoxPdDPDFZDvHj60AGF5w= -github.com/gobuffalo/buffalo-pop v1.6.0/go.mod h1:vrEVNOBKe042HjSNMj72J4FgER/VG6lt4xW6WMpTdlY= -github.com/gobuffalo/buffalo-pop v1.7.0/go.mod h1:UB5HHeFucJG7esTPUPjinBaJTEpVoREJHfSJJELnyeI= -github.com/gobuffalo/buffalo-pop v1.9.0/go.mod h1:MfrkBg0iN9+RdlxdHHAqqGFAC/iyCfTiKqH7Jvt+vhE= -github.com/gobuffalo/buffalo-pop v1.10.0/go.mod h1:C3/cFXB8Zd38XiGgHFdE7dw3Wu9MOKeD7bfELQicGPI= -github.com/gobuffalo/buffalo-pop v1.12.0/go.mod h1:pO2ONSJOCjyroGp4BwVHfMkfd7sLg1U9BvMJqRy6Otk= -github.com/gobuffalo/buffalo-pop v1.13.0/go.mod h1:h+zfyXCUFwihFqz6jmo9xsdsZ1Tm9n7knYpQjW0gv18= -github.com/gobuffalo/buffalo-pop v1.16.0/go.mod h1:XYA72cNFvL6m1o7PZ+Z7Yd/WDQTPcOiuDukiHvEo2KY= -github.com/gobuffalo/buffalo-pop v1.17.2/go.mod h1:nyOm0mtmp9/+m2NaXrp+9SqtuKZslA7Ys2DBaT/t2n4= -github.com/gobuffalo/buffalo-pop v1.22.0/go.mod h1:S8uJpbC9PUMFA6ZWbPnbk3c32n4vJ32p5NLsREcz+H8= -github.com/gobuffalo/buffalo-pop v1.23.1 h1:AnxJQZu/ZN7HCm3L8YBJoNWc2UiwSe6UHv5S4DfXUDA= -github.com/gobuffalo/buffalo-pop v1.23.1/go.mod h1:Sb+fy/hLtxfhOrtLAJiL7JsKqazydmAVqp5rcHio/yg= -github.com/gobuffalo/clara v0.4.1/go.mod h1:3QgAPqYgPqAzhfGbNLlp4UztaZRi2SOg+ZrZwaq9L94= -github.com/gobuffalo/clara v0.6.0/go.mod h1:RKZxkcH80pLykRi2hLkoxGMxA8T06Dc9fN/pFvutMFY= -github.com/gobuffalo/clara v0.7.0/go.mod h1:pen7ZMmnuYUYVF/3BbnvidYVAbMEfkyO4O+Tc+FKICU= -github.com/gobuffalo/clara v0.9.1 h1:LYjwmKG0VwwW/nOG2f5jNamvAcfdm2Ysokc/eoVhtZ8= -github.com/gobuffalo/clara v0.9.1/go.mod h1:OQ3HmSqLQJHaMmKhuTkmBCvBLL4BhgjweNpywRGulWo= -github.com/gobuffalo/depgen v0.0.0-20190219190223-ba8c93fa0c2c/go.mod h1:CE/HUV4vDCXtJayRf6WoMWgezb1yH4QHg8GNK8FL0JI= -github.com/gobuffalo/depgen v0.0.0-20190315122043-8442b3fa16db/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= -github.com/gobuffalo/depgen v0.0.0-20190315124901-e02f65b90669/go.mod h1:yTQe8xo5pGIDOApkeO95DjePS4ZOSSSx+ItkqJHxUG4= -github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= -github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= -github.com/gobuffalo/depgen v0.1.1/go.mod h1:65EOv3g7CMe4kc8J1Ds+l2bjcwrWKGXkE4/vpRRLPWY= -github.com/gobuffalo/depgen v0.2.0 h1:CYuqsR8sq+L9G9+A6uUcTEuaK8AGenAjtYOm238fN3M= -github.com/gobuffalo/depgen v0.2.0/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= -github.com/gobuffalo/envy v1.6.4/go.mod h1:Abh+Jfw475/NWtYMEt+hnJWRiC8INKWibIMyNt1w2Mc= -github.com/gobuffalo/envy v1.6.5/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= -github.com/gobuffalo/envy v1.6.6/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= -github.com/gobuffalo/envy v1.6.7/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= -github.com/gobuffalo/envy v1.6.8/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= -github.com/gobuffalo/envy v1.6.9/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= -github.com/gobuffalo/envy v1.6.10/go.mod h1:X0CFllQjTV5ogsnUrg+Oks2yTI+PU2dGYBJOEI2D1Uo= -github.com/gobuffalo/envy v1.6.11/go.mod h1:Fiq52W7nrHGDggFPhn2ZCcHw4u/rqXkqo+i7FB6EAcg= -github.com/gobuffalo/envy v1.6.12/go.mod h1:qJNrJhKkZpEW0glh5xP2syQHH5kgdmgsKss2Kk8PTP0= -github.com/gobuffalo/envy v1.6.13/go.mod h1:w9DJppgl51JwUFWWd/M/6/otrPtWV3WYMa+NNLunqKA= -github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= -github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= -github.com/gobuffalo/envy v1.7.1 h1:OQl5ys5MBea7OGCdvPbBJWRgnhC/fGona6QKfvFeau8= -github.com/gobuffalo/envy v1.7.1/go.mod h1:FurDp9+EDPE4aIUS3ZLyD+7/9fpx7YRt/ukY6jIHf0w= -github.com/gobuffalo/events v1.0.3/go.mod h1:Txo8WmqScapa7zimEQIwgiJBvMECMe9gJjsKNPN3uZw= -github.com/gobuffalo/events v1.0.7/go.mod h1:z8txf6H9jWhQ5Scr7YPLWg/cgXBRj8Q4uYI+rsVCCSQ= -github.com/gobuffalo/events v1.0.8/go.mod h1:A5KyqT1sA+3GJiBE4QKZibse9mtOcI9nw8gGrDdqYGs= -github.com/gobuffalo/events v1.1.1/go.mod h1:Ia9OgHMco9pEhJaPrPQJ4u4+IZlkxYVco2VbJ2XgnAE= -github.com/gobuffalo/events v1.1.3/go.mod h1:9yPGWYv11GENtzrIRApwQRMYSbUgCsZ1w6R503fCfrk= -github.com/gobuffalo/events v1.1.4/go.mod h1:09/YRRgZHEOts5Isov+g9X2xajxdvOAcUuAHIX/O//A= -github.com/gobuffalo/events v1.1.5/go.mod h1:3YUSzgHfYctSjEjLCWbkXP6djH2M+MLaVRzb4ymbAK0= -github.com/gobuffalo/events v1.1.6/go.mod h1:H/3ZB9BA+WorMb/0F79UvU6u0Cyo2hU97WA51bG2ONY= -github.com/gobuffalo/events v1.1.7/go.mod h1:6fGqxH2ing5XMb3EYRq9LEkVlyPGs4oO/eLzh+S8CxY= -github.com/gobuffalo/events v1.1.8/go.mod h1:UFy+W6X6VbCWS8k2iT81HYX65dMtiuVycMy04cplt/8= -github.com/gobuffalo/events v1.1.9/go.mod h1:/0nf8lMtP5TkgNbzYxR6Bl4GzBy5s5TebgNTdRfRbPM= -github.com/gobuffalo/events v1.2.0/go.mod h1:pxvpvsKXKZNPtHuIxUV3K+g+KP5o4forzaeFj++bh68= -github.com/gobuffalo/events v1.3.1/go.mod h1:9JOkQVoyRtailYVE/JJ2ZQ/6i4gTjM5t2HsZK4C1cSA= -github.com/gobuffalo/events v1.4.0 h1:Vje/vgTWs+dyhIS0U03oLpvx1SUdAqutv/hDWIz2ErM= -github.com/gobuffalo/events v1.4.0/go.mod h1:gQbNh681BwO+urxPpHHBiVD8Y+2lg17Wj2xuCMMKr8E= -github.com/gobuffalo/fizz v1.0.12/go.mod h1:C0sltPxpYK8Ftvf64kbsQa2yiCZY4RZviurNxXdAKwc= -github.com/gobuffalo/fizz v1.0.15/go.mod h1:EI3mEpjImuji6Bwu++N2uXhljQwOhwtimZQJ89zwyF4= -github.com/gobuffalo/fizz v1.0.16/go.mod h1:EI3mEpjImuji6Bwu++N2uXhljQwOhwtimZQJ89zwyF4= -github.com/gobuffalo/fizz v1.1.2/go.mod h1:THqzNTlNxNaF5hq3ddp16SnEcl2m83bTeTzJEoD+kqc= -github.com/gobuffalo/fizz v1.1.3/go.mod h1:THqzNTlNxNaF5hq3ddp16SnEcl2m83bTeTzJEoD+kqc= -github.com/gobuffalo/fizz v1.3.0/go.mod h1:THqzNTlNxNaF5hq3ddp16SnEcl2m83bTeTzJEoD+kqc= -github.com/gobuffalo/fizz v1.5.0/go.mod h1:Uu3ch14M4S7LDU7LAP1GQ+KNCRmZYd05Gqasc96XLa0= -github.com/gobuffalo/fizz v1.6.0/go.mod h1:V4V6EA8eYu/L43y6gZj7mjmPkigl9m+Eu3Pe+SWQRRg= -github.com/gobuffalo/fizz v1.6.1/go.mod h1:V4V6EA8eYu/L43y6gZj7mjmPkigl9m+Eu3Pe+SWQRRg= -github.com/gobuffalo/fizz v1.8.0/go.mod h1:2LqJOOGUp1JpN9m54ac5jMQ1MpbNvSVbFi9BY+AEXOo= -github.com/gobuffalo/fizz v1.9.0/go.mod h1:2LqJOOGUp1JpN9m54ac5jMQ1MpbNvSVbFi9BY+AEXOo= -github.com/gobuffalo/fizz v1.9.2/go.mod h1:XJb7Do1keOPkaJnJ48OCjV+7ABQ7mbOqui2WfDobXTQ= -github.com/gobuffalo/fizz v1.9.5 h1:Qh0GkP7MYtJs9RZwBkPJ0CzEXynVowdNfrjg8b+TOxA= -github.com/gobuffalo/fizz v1.9.5/go.mod h1:v9cFl56oXm+hNNayTsIQHnq209bTDUbIM8GYWCJw3TE= -github.com/gobuffalo/flect v0.0.0-20180907193754-dc14d8acaf9f/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= -github.com/gobuffalo/flect v0.0.0-20181002182613-4571df4b1daf/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= -github.com/gobuffalo/flect v0.0.0-20181007231023-ae7ed6bfe683/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= -github.com/gobuffalo/flect v0.0.0-20181018182602-fd24a256709f/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= -github.com/gobuffalo/flect v0.0.0-20181019110701-3d6f0b585514/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= -github.com/gobuffalo/flect v0.0.0-20181024204909-8f6be1a8c6c2/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= -github.com/gobuffalo/flect v0.0.0-20181104133451-1f6e9779237a/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= -github.com/gobuffalo/flect v0.0.0-20181108195648-8fe1b44cfe32/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= -github.com/gobuffalo/flect v0.0.0-20181109221320-179d36177b5b/go.mod h1:0HvNbHdfh+WOvDSIASqJOSxTOWSxCCUF++k/Y53v9rI= -github.com/gobuffalo/flect v0.0.0-20181114183036-47375f6d8328/go.mod h1:0HvNbHdfh+WOvDSIASqJOSxTOWSxCCUF++k/Y53v9rI= -github.com/gobuffalo/flect v0.0.0-20181210151238-24a2b68e0316/go.mod h1:en58vff74S9b99Eg42Dr+/9yPu437QjlNsO/hBYPuOk= -github.com/gobuffalo/flect v0.0.0-20190104192022-4af577e09bf2/go.mod h1:en58vff74S9b99Eg42Dr+/9yPu437QjlNsO/hBYPuOk= -github.com/gobuffalo/flect v0.0.0-20190117212819-a62e61d96794/go.mod h1:397QT6v05LkZkn07oJXXT6y9FCfwC8Pug0WA2/2mE9k= -github.com/gobuffalo/flect v0.0.0-20190205211104-b2cb381e56e0/go.mod h1:397QT6v05LkZkn07oJXXT6y9FCfwC8Pug0WA2/2mE9k= -github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs= -github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= -github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= -github.com/gobuffalo/flect v0.1.5/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= -github.com/gobuffalo/flect v0.1.6 h1:D7KWNRFiCknJKA495/e1BO7oxqf8tbieaLv/ehoZ/+g= -github.com/gobuffalo/flect v0.1.6/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= -github.com/gobuffalo/genny v0.0.0-20180924032338-7af3a40f2252/go.mod h1:tUTQOogrr7tAQnhajMSH6rv1BVev34H2sa1xNHMy94g= -github.com/gobuffalo/genny v0.0.0-20181003150629-3786a0744c5d/go.mod h1:WAd8HmjMVrnkAZbmfgH5dLBUchsZfqzp/WS5sQz+uTM= -github.com/gobuffalo/genny v0.0.0-20181005145118-318a41a134cc/go.mod h1:WAd8HmjMVrnkAZbmfgH5dLBUchsZfqzp/WS5sQz+uTM= -github.com/gobuffalo/genny v0.0.0-20181007153042-b8de7d566757/go.mod h1:+oG5Ljrw04czAHbPXREwaFojJbpUvcIy4DiOnbEJFTA= -github.com/gobuffalo/genny v0.0.0-20181012161047-33e5f43d83a6/go.mod h1:+oG5Ljrw04czAHbPXREwaFojJbpUvcIy4DiOnbEJFTA= -github.com/gobuffalo/genny v0.0.0-20181017160347-90a774534246/go.mod h1:+oG5Ljrw04czAHbPXREwaFojJbpUvcIy4DiOnbEJFTA= -github.com/gobuffalo/genny v0.0.0-20181019144442-df0a36fdd146/go.mod h1:IyRrGrQb/sbHu/0z9i5mbpZroIsdxjCYfj+zFiFiWZQ= -github.com/gobuffalo/genny v0.0.0-20181024195656-51392254bf53/go.mod h1:o9GEH5gn5sCKLVB5rHFC4tq40rQ3VRUzmx6WwmaqISE= -github.com/gobuffalo/genny v0.0.0-20181025145300-af3f81d526b8/go.mod h1:uZ1fFYvdcP8mu0B/Ynarf6dsGvp7QFIpk/QACUuFUVI= -github.com/gobuffalo/genny v0.0.0-20181027191429-94d6cfb5c7fc/go.mod h1:x7SkrQQBx204Y+O9EwRXeszLJDTaWN0GnEasxgLrQTA= -github.com/gobuffalo/genny v0.0.0-20181027195209-3887b7171c4f/go.mod h1:JbKx8HSWICu5zyqWOa0dVV1pbbXOHusrSzQUprW6g+w= -github.com/gobuffalo/genny v0.0.0-20181030163439-ed103521b8ec/go.mod h1:3Xm9z7/2oRxlB7PSPLxvadZ60/0UIek1YWmcC7QSaVs= -github.com/gobuffalo/genny v0.0.0-20181106193839-7dcb0924caf1/go.mod h1:x61yHxvbDCgQ/7cOAbJCacZQuHgB0KMSzoYcw5debjU= -github.com/gobuffalo/genny v0.0.0-20181107223128-f18346459dbe/go.mod h1:utQD3aKKEsdb03oR+Vi/6ztQb1j7pO10N3OBoowRcSU= -github.com/gobuffalo/genny v0.0.0-20181109163038-9539921b620f/go.mod h1:118bnhJR2oviiji++mZj0IH/IaFBCzwkWHaI4OQq5hQ= -github.com/gobuffalo/genny v0.0.0-20181110202416-7b7d8756a9e2/go.mod h1:118bnhJR2oviiji++mZj0IH/IaFBCzwkWHaI4OQq5hQ= -github.com/gobuffalo/genny v0.0.0-20181111200257-599b33630ab4/go.mod h1:w+iD/cdtIpPDFax6LlUFuCdXFD0DLRUXsfp3IeT/Doc= -github.com/gobuffalo/genny v0.0.0-20181114215459-0a4decd77f5d/go.mod h1:kN2KZ8VgXF9VIIOj/GM0Eo7YK+un4Q3tTreKOf0q1ng= -github.com/gobuffalo/genny v0.0.0-20181119162812-e8ff4adce8bb/go.mod h1:BA9htSe4bZwBDJLe8CUkoqkypq3hn3+CkoHqVOW718E= -github.com/gobuffalo/genny v0.0.0-20181127225641-2d959acc795b/go.mod h1:l54xLXNkteX/PdZ+HlgPk1qtcrgeOr3XUBBPDbH+7CQ= -github.com/gobuffalo/genny v0.0.0-20181128191930-77e34f71ba2a/go.mod h1:FW/D9p7cEEOqxYA71/hnrkOWm62JZ5ZNxcNIVJEaWBU= -github.com/gobuffalo/genny v0.0.0-20181203165245-fda8bcce96b1/go.mod h1:wpNSANu9UErftfiaAlz1pDZclrYzLtO5lALifODyjuM= -github.com/gobuffalo/genny v0.0.0-20181203201232-849d2c9534ea/go.mod h1:wpNSANu9UErftfiaAlz1pDZclrYzLtO5lALifODyjuM= -github.com/gobuffalo/genny v0.0.0-20181206121324-d6fb8a0dbe36/go.mod h1:wpNSANu9UErftfiaAlz1pDZclrYzLtO5lALifODyjuM= -github.com/gobuffalo/genny v0.0.0-20181207164119-84844398a37d/go.mod h1:y0ysCHGGQf2T3vOhCrGHheYN54Y/REj0ayd0Suf4C/8= -github.com/gobuffalo/genny v0.0.0-20181211165820-e26c8466f14d/go.mod h1:sHnK+ZSU4e2feXP3PA29ouij6PUEiN+RCwECjCTB3yM= -github.com/gobuffalo/genny v0.0.0-20190104222617-a71664fc38e7/go.mod h1:QPsQ1FnhEsiU8f+O0qKWXz2RE4TiDqLVChWkBuh1WaY= -github.com/gobuffalo/genny v0.0.0-20190112155932-f31a84fcacf5/go.mod h1:CIaHCrSIuJ4il6ka3Hub4DR4adDrGoXGEEt2FbBxoIo= -github.com/gobuffalo/genny v0.0.0-20190124191459-3310289fa4b4/go.mod h1:yIRqxhZV2sAzb+B3iPUMLauTRrYP8tJUlZ1zV9teKik= -github.com/gobuffalo/genny v0.0.0-20190131150032-1045e97d19fb/go.mod h1:yIRqxhZV2sAzb+B3iPUMLauTRrYP8tJUlZ1zV9teKik= -github.com/gobuffalo/genny v0.0.0-20190131190646-008a76242145/go.mod h1:NJvPZJxb9M4z790P6N2SMZKSUYpASpEvLuUWnHGKzb4= -github.com/gobuffalo/genny v0.0.0-20190219203444-c95082806342/go.mod h1:3BLT+Vs94EEz3fKR8WWOkYpL6c1tdJcZUNCe3LZAnvQ= -github.com/gobuffalo/genny v0.0.0-20190315121735-8b38fb089e88/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= -github.com/gobuffalo/genny v0.0.0-20190315124720-e16e52a93c79/go.mod h1:nKeefjbhYowo36ys9nG9VUvD9FRIS0p3BC2JFfcOucM= -github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= -github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28= -github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo= -github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk= -github.com/gobuffalo/genny v0.2.0/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= -github.com/gobuffalo/genny v0.3.0/go.mod h1:ywJ2CoXrTZj7rbS8HTbzv7uybnLKlsNSBhEQ+yFI3E8= -github.com/gobuffalo/genny v0.4.0/go.mod h1:Kdo8wsw5zmooVvEfMkfv4JI9Ogz/PMvBNvl133soylI= -github.com/gobuffalo/genny v0.4.1 h1:ylgRyFoVGtfq92Ziq0kyi0Sdwh//pqWEwg+vD3eK1ZA= -github.com/gobuffalo/genny v0.4.1/go.mod h1:dpded+KBgICFciAb+6R5Lo+1VxzofjqHgKqFYIL8M7U= -github.com/gobuffalo/gitgen v0.0.0-20190219185555-91c2c5f0aad5/go.mod h1:ZzGIrxBvCJEluaU4i3CN0GFlu1Qmb3yK8ziV02evJ1E= -github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211 h1:mSVZ4vj4khv+oThUfS+SQU3UuFIZ5Zo6UNcvK8E8Mz8= -github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw= -github.com/gobuffalo/github_flavored_markdown v1.0.4/go.mod h1:uRowCdK+q8d/RF0Kt3/DSalaIXbb0De/dmTqMQdkQ4I= -github.com/gobuffalo/github_flavored_markdown v1.0.5/go.mod h1:U0643QShPF+OF2tJvYNiYDLDGDuQmJZXsf/bHOJPsMY= -github.com/gobuffalo/github_flavored_markdown v1.0.7/go.mod h1:w93Pd9Lz6LvyQXEG6DktTPHkOtCbr+arAD5mkwMzXLI= -github.com/gobuffalo/github_flavored_markdown v1.1.0 h1:8Zzj4fTRl/OP2R7sGerzSf6g2nEJnaBEJe7UAOiEvbQ= -github.com/gobuffalo/github_flavored_markdown v1.1.0/go.mod h1:TSpTKWcRTI0+v7W3x8dkSKMLJSUpuVitlptCkpeY8ic= -github.com/gobuffalo/gogen v0.0.0-20190219194924-d32a17ad9761/go.mod h1:v47C8sid+ZM2qK+YpQ2MGJKssKAqyTsH1wl/pTCPdz8= -github.com/gobuffalo/gogen v0.0.0-20190224213239-1c6076128bbc/go.mod h1:tQqPADZKflmJCR4FHRHYNPP79cXPICyxUiUHyhuXtqg= -github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= -github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= -github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= -github.com/gobuffalo/gogen v0.2.0 h1:Xx7NCe+/y++eII2aWAFZ09/81MhDCsZwvMzIFJoQRnU= -github.com/gobuffalo/gogen v0.2.0/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= -github.com/gobuffalo/helpers v0.0.0-20190422082217-384f90c6579f/go.mod h1:g0I3qKQEyJxwnHtEmLugD75eoOiWxEtibcV62tYah9w= -github.com/gobuffalo/helpers v0.0.0-20190506214229-8e6f634af7c3/go.mod h1:HlNpmw2+Rjx882VUf6hJfNJs5wpNRzX02KcqCXDlLGc= -github.com/gobuffalo/helpers v0.2.1/go.mod h1:5UhA1EfGvyPZfzo9PqhKkSgmLolaTpnWYDbqCJcmiAE= -github.com/gobuffalo/helpers v0.2.2/go.mod h1:xYbzUdCUpVzLwLnqV8HIjT6hmG0Cs7YIBCJkNM597jw= -github.com/gobuffalo/helpers v0.2.4/go.mod h1:NX7v27yxPDOPTgUFYmJ5ow37EbxdoLraucOGvMNawyk= -github.com/gobuffalo/helpers v0.4.0 h1:DR/iYihrVCXv1cYeIGSK3EZz2CljO+DqDLQPWZAod9c= -github.com/gobuffalo/helpers v0.4.0/go.mod h1:2q/ZnVxCehM4/y1bNz3+wXsvWvWUY+iTUr7mPC6QqGQ= -github.com/gobuffalo/here v0.2.3 h1:1xamq7i4CKjGgICCXY0qpxPeXGdB8oVNSevkpqwd5X4= -github.com/gobuffalo/here v0.2.3/go.mod h1:2a6G14FaAKOGJMK/5UNa4Og/+iyFS5cq3MnlvFR7YDk= -github.com/gobuffalo/httptest v1.0.2/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E= -github.com/gobuffalo/httptest v1.0.3/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E= -github.com/gobuffalo/httptest v1.0.4/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E= -github.com/gobuffalo/httptest v1.0.5/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E= -github.com/gobuffalo/httptest v1.0.6/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E= -github.com/gobuffalo/httptest v1.1.0/go.mod h1:BIfCgiqCOotRc5xYwCcZN7IFYag4277Ynqjar/Ra3iI= -github.com/gobuffalo/httptest v1.2.0/go.mod h1:0KfourZCsapuvkljDMSr7YM+66kCt/rXv54YcWRWwhc= -github.com/gobuffalo/httptest v1.3.0/go.mod h1:Y4qebOsMH91XdB0cZuS8OUdAKHGV7hVDcjgzGupoYlk= -github.com/gobuffalo/httptest v1.4.0 h1:DaoTl/2iFRTk9Uau6b0Lh644tcbRtBNMHcWg6WhieS8= -github.com/gobuffalo/httptest v1.4.0/go.mod h1:VDkgCFmIxAunkLNts49TC949NRLTtvyLKuN67o6hrXM= -github.com/gobuffalo/licenser v0.0.0-20180924033006-eae28e638a42/go.mod h1:Ubo90Np8gpsSZqNScZZkVXXAo5DGhTb+WYFIjlnog8w= -github.com/gobuffalo/licenser v0.0.0-20181025145548-437d89de4f75/go.mod h1:x3lEpYxkRG/XtGCUNkio+6RZ/dlOvLzTI9M1auIwFcw= -github.com/gobuffalo/licenser v0.0.0-20181027200154-58051a75da95/go.mod h1:BzhaaxGd1tq1+OLKObzgdCV9kqVhbTulxOpYbvMQWS0= -github.com/gobuffalo/licenser v0.0.0-20181109171355-91a2a7aac9a7/go.mod h1:m+Ygox92pi9bdg+gVaycvqE8RVSjZp7mWw75+K5NPHk= -github.com/gobuffalo/licenser v0.0.0-20181116224424-1b7fd3f9cbb4/go.mod h1:icHYfF2FVDi6CpI8BK9Sy1ChkSijz/0GNN7Qzzdk6JE= -github.com/gobuffalo/licenser v0.0.0-20181128165715-cc7305f8abed/go.mod h1:oU9F9UCE+AzI/MueCKZamsezGOOHfSirltllOVeRTAE= -github.com/gobuffalo/licenser v0.0.0-20181128170751-82cc989582b9/go.mod h1:oU9F9UCE+AzI/MueCKZamsezGOOHfSirltllOVeRTAE= -github.com/gobuffalo/licenser v0.0.0-20181203160806-fe900bbede07/go.mod h1:ph6VDNvOzt1CdfaWC+9XwcBnlSTBz2j49PBwum6RFaU= -github.com/gobuffalo/licenser v0.0.0-20181211173111-f8a311c51159/go.mod h1:ve/Ue99DRuvnTaLq2zKa6F4KtHiYf7W046tDjuGYPfM= -github.com/gobuffalo/licenser v0.0.0-20190224205124-37799bc2ebf6/go.mod h1:ve/Ue99DRuvnTaLq2zKa6F4KtHiYf7W046tDjuGYPfM= -github.com/gobuffalo/licenser v0.0.0-20190329153211-c35c0a2813b2/go.mod h1:ZVWE6uKUE3rGf7sedUHWVjNWrEgxaUQLVFL+pQiWpfY= -github.com/gobuffalo/licenser v1.1.0/go.mod h1:ZVWE6uKUE3rGf7sedUHWVjNWrEgxaUQLVFL+pQiWpfY= -github.com/gobuffalo/licenser v1.2.0/go.mod h1:ZqDQ+UOqsXPovl65rbCr3Tye6+nKjT4ovwurjVxvMQM= -github.com/gobuffalo/licenser v1.4.0 h1:S8WY0nLT9zkBTjFYcbJ0E9MEK7SgE86aMfjsnuThQjY= -github.com/gobuffalo/licenser v1.4.0/go.mod h1:YkyTh2T/d7KECTh32j65auPV876gkJJk55aAdBfDehg= -github.com/gobuffalo/logger v0.0.0-20181022175615-46cfb361fc27/go.mod h1:8sQkgyhWipz1mIctHF4jTxmJh1Vxhp7mP8IqbljgJZo= -github.com/gobuffalo/logger v0.0.0-20181027144941-73d08d2bb969/go.mod h1:7uGg2duHKpWnN4+YmyKBdLXfhopkAdVM6H3nKbyFbz8= -github.com/gobuffalo/logger v0.0.0-20181027193913-9cf4dd0efe46/go.mod h1:7uGg2duHKpWnN4+YmyKBdLXfhopkAdVM6H3nKbyFbz8= -github.com/gobuffalo/logger v0.0.0-20181109185836-3feeab578c17/go.mod h1:oNErH0xLe+utO+OW8ptXMSA5DkiSEDW1u3zGIt8F9Ew= -github.com/gobuffalo/logger v0.0.0-20181117211126-8e9b89b7c264/go.mod h1:5etB91IE0uBlw9k756fVKZJdS+7M7ejVhmpXXiSFj0I= -github.com/gobuffalo/logger v0.0.0-20181127160119-5b956e21995c/go.mod h1:+HxKANrR9VGw9yN3aOAppJKvhO05ctDi63w4mDnKv2U= -github.com/gobuffalo/logger v0.0.0-20190224201004-be78ebfea0fa/go.mod h1:+HxKANrR9VGw9yN3aOAppJKvhO05ctDi63w4mDnKv2U= -github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= -github.com/gobuffalo/logger v1.0.0/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs= -github.com/gobuffalo/logger v1.0.1 h1:ZEgyRGgAm4ZAhAO45YXMs5Fp+bzGLESFewzAVBMKuTg= -github.com/gobuffalo/logger v1.0.1/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs= -github.com/gobuffalo/makr v1.1.5/go.mod h1:Y+o0btAH1kYAMDJW/TX3+oAXEu0bmSLLoC9mIFxtzOw= -github.com/gobuffalo/makr v1.2.0 h1:TA6ThoZEcq0F9FCrc/7xS1ycdCIL0K6Ux+5wmwYV7BY= -github.com/gobuffalo/makr v1.2.0/go.mod h1:SFQUrDtwDpmQ6BxKJqxg0emc4KkNzzvUtAtnHiVK/QQ= -github.com/gobuffalo/mapi v1.0.0/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= -github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= -github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= -github.com/gobuffalo/mapi v1.1.0 h1:VEhxtd2aoPXFqVmliLXGSmqPh541OprxYYZFwgNcjn4= -github.com/gobuffalo/mapi v1.1.0/go.mod h1:pqQ1XAqvpy/JYtRwoieNps2yU8MFiMxBUpAm2FBtQ50= -github.com/gobuffalo/meta v0.0.0-20181018155829-df62557efcd3/go.mod h1:XTTOhwMNryif3x9LkTTBO/Llrveezd71u3quLd0u7CM= -github.com/gobuffalo/meta v0.0.0-20181018192820-8c6cef77dab3/go.mod h1:E94EPzx9NERGCY69UWlcj6Hipf2uK/vnfrF4QD0plVE= -github.com/gobuffalo/meta v0.0.0-20181025145500-3a985a084b0a/go.mod h1:YDAKBud2FP7NZdruCSlmTmDOZbVSa6bpK7LJ/A/nlKg= -github.com/gobuffalo/meta v0.0.0-20181109154556-f76929ccd5fa/go.mod h1:1rYI5QsanV6cLpT1BlTAkrFi9rtCZrGkvSK8PglwfS8= -github.com/gobuffalo/meta v0.0.0-20181114191255-b130ebedd2f7/go.mod h1:K6cRZ29ozr4Btvsqkjvg5nDFTLOgTqf03KA70Ks0ypE= -github.com/gobuffalo/meta v0.0.0-20181116202903-8850e47774f5/go.mod h1:K6cRZ29ozr4Btvsqkjvg5nDFTLOgTqf03KA70Ks0ypE= -github.com/gobuffalo/meta v0.0.0-20181127070345-0d7e59dd540b/go.mod h1:RLO7tMvE0IAKAM8wny1aN12pvEKn7EtkBLkUZR00Qf8= -github.com/gobuffalo/meta v0.0.0-20190120163247-50bbb1fa260d/go.mod h1:KKsH44nIK2gA8p0PJmRT9GvWJUdphkDUA8AJEvFWiqM= -github.com/gobuffalo/meta v0.0.0-20190121163014-ecaa953cbfb3/go.mod h1:KLfkGnS+Tucc+iTkUcAUBtxpwOJGfhw2pHRLddPxMQY= -github.com/gobuffalo/meta v0.0.0-20190126124307-c8fb6f4eb5a9/go.mod h1:zoh6GLgkk9+iI/62dST4amAuVAczZrBXoAk/t64n7Ew= -github.com/gobuffalo/meta v0.0.0-20190207205153-50a99e08b8cf/go.mod h1:+VGfK9Jm9I7oJyFeJzIT6omCPvrDktzAtpHJKaieugY= -github.com/gobuffalo/meta v0.0.0-20190320152240-a5320142224a/go.mod h1:+VGfK9Jm9I7oJyFeJzIT6omCPvrDktzAtpHJKaieugY= -github.com/gobuffalo/meta v0.0.0-20190329152330-e161e8a93e3b/go.mod h1:mCRSy5F47tjK8yaIDcJad4oe9fXxY5gLrx3Xx2spK+0= -github.com/gobuffalo/meta v0.1.0/go.mod h1:vAgu28tKdaPIkt8j60wYv1dLuJ1UwOmAjZtYOnLJlko= -github.com/gobuffalo/meta v0.2.0 h1:QSDlR2nbGewl0OVL9kqtU8SeKq6zSonrKWB6G3EgADs= -github.com/gobuffalo/meta v0.2.0/go.mod h1:KZ9Hk/o+kFpwRhzUO95EOuxf3jXU4GleCTUDSTpe3hQ= -github.com/gobuffalo/mw-basicauth v1.0.3/go.mod h1:dg7+ilMZOKnQFHDefUzUHufNyTswVUviCBgF244C1+0= -github.com/gobuffalo/mw-basicauth v1.0.6/go.mod h1:RFyeGeDLZlVgp/eBflqu2eavFqyv0j0fVVP87WPYFwY= -github.com/gobuffalo/mw-basicauth v1.0.7 h1:9zTxCpu0ozzwpwvw5MO31w8nEoySNRNfZwM1YAWfGZs= -github.com/gobuffalo/mw-basicauth v1.0.7/go.mod h1:xJ9/OSiOWl+kZkjaSun62srODr3Cx8OB4AKr+G4FlS4= -github.com/gobuffalo/mw-contenttype v0.0.0-20180802152300-74f5a47f4d56/go.mod h1:7EvcmzBbeCvFtQm5GqF9ys6QnCxz2UM1x0moiWLq1No= -github.com/gobuffalo/mw-contenttype v0.0.0-20190129203934-2554e742333b h1:6LKJWRvshByPo/dvV4B1E2wvsqXp1uoynVndvuuOZZc= -github.com/gobuffalo/mw-contenttype v0.0.0-20190129203934-2554e742333b/go.mod h1:7x87+mDrr9Peh7AqhOtESyJLanMd2zQNz2Hts+vtBoE= -github.com/gobuffalo/mw-csrf v0.0.0-20180802151833-446ff26e108b/go.mod h1:sbGtb8DmDZuDUQoxjr8hG1ZbLtZboD9xsn6p77ppcHo= -github.com/gobuffalo/mw-csrf v0.0.0-20190129204204-25460a055517 h1:pOOXwl1xPLLP8oZw3e3t2wwrc/KSzmlRBcaQwGpG9oo= -github.com/gobuffalo/mw-csrf v0.0.0-20190129204204-25460a055517/go.mod h1:o5u+nnN0Oa7LBeDYH9QP36qeMPnXV9qbVnbZ4D+Kb0Q= -github.com/gobuffalo/mw-forcessl v0.0.0-20180802152810-73921ae7a130 h1:v94+IGhlBro0Lz1gOR3lrdAVSZ0mJF2NxsdppKd7FnI= -github.com/gobuffalo/mw-forcessl v0.0.0-20180802152810-73921ae7a130/go.mod h1:JvNHRj7bYNAMUr/5XMkZaDcw3jZhUZpsmzhd//FFWmQ= -github.com/gobuffalo/mw-i18n v0.0.0-20180802152014-e3060b7e13d6/go.mod h1:91AQfukc52A6hdfIfkxzyr+kpVYDodgAeT5cjX1UIj4= -github.com/gobuffalo/mw-i18n v0.0.0-20181027200759-09e0c99be4d3/go.mod h1:1PpGPgqP8VsfUppgBA9FrTOXjI6X9gjqhh/8dmg48lg= -github.com/gobuffalo/mw-i18n v0.0.0-20190129204410-552713a3ebb4 h1:c1fFPCxA7SozZPqMhpfZoOVa3wUpCl11gyCEZ4nYqUE= -github.com/gobuffalo/mw-i18n v0.0.0-20190129204410-552713a3ebb4/go.mod h1:rBg2eHxsyxVjtYra6fGy4GSF5C8NysOvz+Znnzk42EM= -github.com/gobuffalo/mw-paramlogger v0.0.0-20181005191442-d6ee392ec72e/go.mod h1:6OJr6VwSzgJMqWMj7TYmRUqzNe2LXu/W1rRW4MAz/ME= -github.com/gobuffalo/mw-paramlogger v0.0.0-20190129202837-395da1998525 h1:2QoD5giw2UrYJu65UKDEo9HFcz9yun387twL2zzn+/Q= -github.com/gobuffalo/mw-paramlogger v0.0.0-20190129202837-395da1998525/go.mod h1:gEo/ABCsKqvpp/KCxN2AIzDEe0OJUXbJ9293FYrXw+w= -github.com/gobuffalo/mw-tokenauth v0.0.0-20181001105134-8545f626c189/go.mod h1:UqBF00IfKvd39ni5+yI5MLMjAf4gX7cDKN/26zDOD6c= -github.com/gobuffalo/mw-tokenauth v0.0.0-20190129201951-95847f29c5c8 h1:dqwRMSzfhe3rL0vMDaRvc2ozLqxapWFBEDH6/f0nQT0= -github.com/gobuffalo/mw-tokenauth v0.0.0-20190129201951-95847f29c5c8/go.mod h1:n2oa93LHGD94hGI+PoJO+6cf60DNrXrAIv9L/Ke3GXc= -github.com/gobuffalo/nulls v0.0.0-20190305142546-85f3c9250d87/go.mod h1:KhaLCW+kFA/G97tZkmVkIxhRw3gvZszJn7JjPLI3gtI= -github.com/gobuffalo/nulls v0.1.0 h1:pR3SDzXyFcQrzyPreZj+OzNHSxI4DphSOFaQuidxrfw= -github.com/gobuffalo/nulls v0.1.0/go.mod h1:/HRtuDRoVoN5fABk3J6jzZaGEdcIZEMs0qczj71eKZY= -github.com/gobuffalo/packd v0.0.0-20181027182251-01ad393492c8/go.mod h1:SmdBdhj6uhOsg1Ui4SFAyrhuc7U4VCildosO5IDJ3lc= -github.com/gobuffalo/packd v0.0.0-20181027190505-aafc0d02c411/go.mod h1:SmdBdhj6uhOsg1Ui4SFAyrhuc7U4VCildosO5IDJ3lc= -github.com/gobuffalo/packd v0.0.0-20181027194105-7ae579e6d213/go.mod h1:SmdBdhj6uhOsg1Ui4SFAyrhuc7U4VCildosO5IDJ3lc= -github.com/gobuffalo/packd v0.0.0-20181028162033-6d52e0eabf41/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= -github.com/gobuffalo/packd v0.0.0-20181029140631-cf76bd87a5a6/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= -github.com/gobuffalo/packd v0.0.0-20181031195726-c82734870264/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= -github.com/gobuffalo/packd v0.0.0-20181103221656-16c4ed88b296/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= -github.com/gobuffalo/packd v0.0.0-20181104210303-d376b15f8e96/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= -github.com/gobuffalo/packd v0.0.0-20181111195323-b2e760a5f0ff/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= -github.com/gobuffalo/packd v0.0.0-20181114190715-f25c5d2471d7/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= -github.com/gobuffalo/packd v0.0.0-20181124090624-311c6248e5fb/go.mod h1:Foenia9ZvITEvG05ab6XpiD5EfBHPL8A6hush8SJ0o8= -github.com/gobuffalo/packd v0.0.0-20181207120301-c49825f8f6f4/go.mod h1:LYc0TGKFBBFTRC9dg2pcRcMqGCTMD7T2BIMP7OBuQAA= -github.com/gobuffalo/packd v0.0.0-20181212173646-eca3b8fd6687/go.mod h1:LYc0TGKFBBFTRC9dg2pcRcMqGCTMD7T2BIMP7OBuQAA= -github.com/gobuffalo/packd v0.0.0-20190224160250-d04dd98aca5b/go.mod h1:LYc0TGKFBBFTRC9dg2pcRcMqGCTMD7T2BIMP7OBuQAA= -github.com/gobuffalo/packd v0.0.0-20190315122247-83d601d65093/go.mod h1:LpEu7OkoplvlhztyAEePkS6JwcGgANdgGL5pB4Knxaw= -github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= -github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= -github.com/gobuffalo/packd v0.2.0/go.mod h1:k2CkHP3bjbqL2GwxwhxUy1DgnlbW644hkLC9iIUvZwY= -github.com/gobuffalo/packd v0.3.0 h1:eMwymTkA1uXsqxS0Tpoop3Lc0u3kTfiMBE6nKtQU4g4= -github.com/gobuffalo/packd v0.3.0/go.mod h1:zC7QkmNkYVGKPw4tHpBQ+ml7W/3tIebgeo1b36chA3Q= -github.com/gobuffalo/packr v1.13.7/go.mod h1:KkinLIn/n6+3tVXMwg6KkNvWwVsrRAz4ph+jgpk3Z24= -github.com/gobuffalo/packr v1.15.0/go.mod h1:t5gXzEhIviQwVlNx/+3SfS07GS+cZ2hn76WLzPp6MGI= -github.com/gobuffalo/packr v1.15.1/go.mod h1:IeqicJ7jm8182yrVmNbM6PR4g79SjN9tZLH8KduZZwE= -github.com/gobuffalo/packr v1.16.0/go.mod h1:Yx/lcR/7mDLXhuJSzsz2MauD/HUwSc+EK6oigMRGGsM= -github.com/gobuffalo/packr v1.19.0/go.mod h1:MstrNkfCQhd5o+Ct4IJ0skWlxN8emOq8DsoT1G98VIU= -github.com/gobuffalo/packr v1.20.0/go.mod h1:JDytk1t2gP+my1ig7iI4NcVaXr886+N0ecUga6884zw= -github.com/gobuffalo/packr v1.21.0/go.mod h1:H00jGfj1qFKxscFJSw8wcL4hpQtPe1PfU2wa6sg/SR0= -github.com/gobuffalo/packr v1.21.5/go.mod h1:zCvDxrZzFmq5Xd7Jw4vaGe/OYwzuXnma31D2EbTHMWk= -github.com/gobuffalo/packr v1.21.7/go.mod h1:73tmYjwi4Cvb1eNiAwpmrzZ0gxVA4KBqVSZ2FNeJodM= -github.com/gobuffalo/packr v1.21.9/go.mod h1:GC76q6nMzRtR+AEN/VV4w0z2/4q7SOaEmXh3Ooa8sOE= -github.com/gobuffalo/packr v1.22.0/go.mod h1:Qr3Wtxr3+HuQEwWqlLnNW4t1oTvK+7Gc/Rnoi/lDFvA= -github.com/gobuffalo/packr v1.24.0/go.mod h1:p9Sgang00I1hlr1ub+tgI9AQdFd4f+WH1h62jYpzetM= -github.com/gobuffalo/packr v1.24.1/go.mod h1:absPnW/XUUa4DmIh5ga7AipGXXg0DOcd5YWKk5RZs8Y= -github.com/gobuffalo/packr v1.25.0 h1:NtPK45yOKFdTKHTvRGKL+UIKAKmJVWIVJOZBDI/qEdY= -github.com/gobuffalo/packr v1.25.0/go.mod h1:NqsGg8CSB2ZD+6RBIRs18G7aZqdYDlYNNvsSqP6T4/U= -github.com/gobuffalo/packr/v2 v2.0.0-rc.5/go.mod h1:e6gmOfhf3KmT4zl2X/NDRSfBXk2oV4TXZ+NNOM0xwt8= -github.com/gobuffalo/packr/v2 v2.0.0-rc.7/go.mod h1:BzhceHWfF3DMAkbPUONHYWs63uacCZxygFY1b4H9N2A= -github.com/gobuffalo/packr/v2 v2.0.0-rc.8/go.mod h1:y60QCdzwuMwO2R49fdQhsjCPv7tLQFR0ayzxxla9zes= -github.com/gobuffalo/packr/v2 v2.0.0-rc.9/go.mod h1:fQqADRfZpEsgkc7c/K7aMew3n4aF1Kji7+lIZeR98Fc= -github.com/gobuffalo/packr/v2 v2.0.0-rc.10/go.mod h1:4CWWn4I5T3v4c1OsJ55HbHlUEKNWMITG5iIkdr4Px4w= -github.com/gobuffalo/packr/v2 v2.0.0-rc.11/go.mod h1:JoieH/3h3U4UmatmV93QmqyPUdf4wVM9HELaHEu+3fk= -github.com/gobuffalo/packr/v2 v2.0.0-rc.12/go.mod h1:FV1zZTsVFi1DSCboO36Xgs4pzCZBjB/tDV9Cz/lSaR8= -github.com/gobuffalo/packr/v2 v2.0.0-rc.13/go.mod h1:2Mp7GhBFMdJlOK8vGfl7SYtfMP3+5roE39ejlfjw0rA= -github.com/gobuffalo/packr/v2 v2.0.0-rc.14/go.mod h1:06otbrNvDKO1eNQ3b8hst+1010UooI2MFg+B2Ze4MV8= -github.com/gobuffalo/packr/v2 v2.0.0-rc.15/go.mod h1:IMe7H2nJvcKXSF90y4X1rjYIRlNMJYCxEhssBXNZwWs= -github.com/gobuffalo/packr/v2 v2.0.0/go.mod h1:7McfLpSxaPUoSQm7gYpTZRQSK63mX8EKzzYSEFKvfkM= -github.com/gobuffalo/packr/v2 v2.0.1/go.mod h1:tp5/5A2e67F1lUGTiNadtA2ToP045+mvkWzaqMCsZr4= -github.com/gobuffalo/packr/v2 v2.0.2/go.mod h1:6Y+2NY9cHDlrz96xkJG8bfPwLlCdJVS/irhNJmwD7kM= -github.com/gobuffalo/packr/v2 v2.0.6/go.mod h1:/TYKOjadT7P9jRWZtj4BRTgeXy2tIYntifGkD+aM2KY= -github.com/gobuffalo/packr/v2 v2.0.7/go.mod h1:1SBFAIr3YnxYdJRyrceR7zhOrhV/YhHzOjDwA9LLZ5Y= -github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= -github.com/gobuffalo/packr/v2 v2.0.10/go.mod h1:n90ZuXIc2KN2vFAOQascnPItp9A2g9QYSvYvS3AjQEM= -github.com/gobuffalo/packr/v2 v2.1.0/go.mod h1:n90ZuXIc2KN2vFAOQascnPItp9A2g9QYSvYvS3AjQEM= -github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= -github.com/gobuffalo/packr/v2 v2.3.2/go.mod h1:93elRVdDhpUgox9GnXswWK5dzpVBQsnlQjnnncSLoiU= -github.com/gobuffalo/packr/v2 v2.4.0/go.mod h1:ra341gygw9/61nSjAbfwcwh8IrYL4WmR4IsPkPBhQiY= -github.com/gobuffalo/packr/v2 v2.5.1/go.mod h1:8f9c96ITobJlPzI44jj+4tHnEKNt0xXWSVlXRN9X1Iw= -github.com/gobuffalo/packr/v2 v2.5.2/go.mod h1:sgEE1xNZ6G0FNN5xn9pevVu4nywaxHvgup67xisti08= -github.com/gobuffalo/packr/v2 v2.5.3/go.mod h1:sgEE1xNZ6G0FNN5xn9pevVu4nywaxHvgup67xisti08= -github.com/gobuffalo/packr/v2 v2.6.0/go.mod h1:sgEE1xNZ6G0FNN5xn9pevVu4nywaxHvgup67xisti08= -github.com/gobuffalo/packr/v2 v2.7.1 h1:n3CIW5T17T8v4GGK5sWXLVWJhCz7b5aNLSxW6gYim4o= -github.com/gobuffalo/packr/v2 v2.7.1/go.mod h1:qYEvAazPaVxy7Y7KR0W8qYEE+RymX74kETFqjFoFlOc= -github.com/gobuffalo/plush v3.7.16+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.7.20+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.7.21+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.7.22+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.7.23+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.7.30+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.7.31+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.7.32+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.7.33+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.7.34+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.8.0+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.8.2+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.8.3+incompatible h1:kzvUTnFPhwyfPEsx7U7LI05/IIslZVGnAlMA1heWub8= -github.com/gobuffalo/plush v3.8.3+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plushgen v0.0.0-20181128164830-d29dcb966cb2/go.mod h1:r9QwptTFnuvSaSRjpSp4S2/4e2D3tJhARYbvEBcKSb4= -github.com/gobuffalo/plushgen v0.0.0-20181203163832-9fc4964505c2/go.mod h1:opEdT33AA2HdrIwK1aibqnTJDVVKXC02Bar/GT1YRVs= -github.com/gobuffalo/plushgen v0.0.0-20181207152837-eedb135bd51b/go.mod h1:Lcw7HQbEVm09sAQrCLzIxuhFbB3nAgp4c55E+UlynR0= -github.com/gobuffalo/plushgen v0.0.0-20190104222512-177cd2b872b3/go.mod h1:tYxCozi8X62bpZyKXYHw1ncx2ZtT2nFvG42kuLwYjoc= -github.com/gobuffalo/plushgen v0.0.0-20190224160205-347ea233336e/go.mod h1:tYxCozi8X62bpZyKXYHw1ncx2ZtT2nFvG42kuLwYjoc= -github.com/gobuffalo/plushgen v0.0.0-20190329152458-0555238fe0d9/go.mod h1:3U71v6HWZpVER1nInTXeAwdoRNsRd4W8aeIa1Lyp+Bk= -github.com/gobuffalo/plushgen v0.1.0/go.mod h1:NK33QLkRK/xKexiPFSxlWRT286F4yStZUa/Fbx0guvo= -github.com/gobuffalo/plushgen v0.1.2 h1:s4yAgNdfNMyMQ7o+Is4f1VlH2L1tKosT+m7BF28C8H4= -github.com/gobuffalo/plushgen v0.1.2/go.mod h1:3U71v6HWZpVER1nInTXeAwdoRNsRd4W8aeIa1Lyp+Bk= -github.com/gobuffalo/pop v4.8.2+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.8.3+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.8.4+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.8.5+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.8.7+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.8.8+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.9.0+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.9.1+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.9.2+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.9.3+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.9.5+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.9.6+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.9.8+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.9.9+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.10.0+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.11.0+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.11.1+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.11.2+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.11.3+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.12.0+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.12.1+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.12.2+incompatible h1:WFHMzzHbVLulZnEium1VlYRnWkzHz39FzVLov6rZdDI= -github.com/gobuffalo/pop v4.12.2+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/release v1.0.35/go.mod h1:VtHFAKs61vO3wboCec5xr9JPTjYyWYcvaM3lclkc4x4= -github.com/gobuffalo/release v1.0.38/go.mod h1:VtHFAKs61vO3wboCec5xr9JPTjYyWYcvaM3lclkc4x4= -github.com/gobuffalo/release v1.0.42/go.mod h1:RPs7EtafH4oylgetOJpGP0yCZZUiO4vqHfTHJjSdpug= -github.com/gobuffalo/release v1.0.51/go.mod h1:RPs7EtafH4oylgetOJpGP0yCZZUiO4vqHfTHJjSdpug= -github.com/gobuffalo/release v1.0.52/go.mod h1:RPs7EtafH4oylgetOJpGP0yCZZUiO4vqHfTHJjSdpug= -github.com/gobuffalo/release v1.0.53/go.mod h1:FdF257nd8rqhNaqtDWFGhxdJ/Ig4J7VcS3KL7n/a+aA= -github.com/gobuffalo/release v1.0.54/go.mod h1:Pe5/RxRa/BE8whDpGfRqSI7D1a0evGK1T4JDm339tJc= -github.com/gobuffalo/release v1.0.61/go.mod h1:mfIO38ujUNVDlBziIYqXquYfBF+8FDHUjKZgYC1Hj24= -github.com/gobuffalo/release v1.0.63/go.mod h1:/7hQAikt0l8Iu/tAX7slC1qiOhD6Nb+3KMmn/htiUfc= -github.com/gobuffalo/release v1.0.72/go.mod h1:NP5NXgg/IX3M5XmHmWR99D687/3Dt9qZtTK/Lbwc1hU= -github.com/gobuffalo/release v1.0.74/go.mod h1:NP5NXgg/IX3M5XmHmWR99D687/3Dt9qZtTK/Lbwc1hU= -github.com/gobuffalo/release v1.1.1/go.mod h1:Sluak1Xd6kcp6snkluR1jeXAogdJZpFFRzTYRs/2uwg= -github.com/gobuffalo/release v1.1.3/go.mod h1:CuXc5/m+4zuq8idoDt1l4va0AXAn/OSs08uHOfMVr8E= -github.com/gobuffalo/release v1.1.6/go.mod h1:18naWa3kBsqO0cItXZNJuefCKOENpbbUIqRL1g+p6z0= -github.com/gobuffalo/release v1.2.2/go.mod h1:tkFFZua2N5WRxyGDk2cSwQjzkZ/apKKXl5T8P+kEO+E= -github.com/gobuffalo/release v1.2.5/go.mod h1:tkFFZua2N5WRxyGDk2cSwQjzkZ/apKKXl5T8P+kEO+E= -github.com/gobuffalo/release v1.4.0/go.mod h1:f4uUPnD9dxrWxVy9yy0k/mvDf3EzhFtf7/byl0tTdY4= -github.com/gobuffalo/release v1.7.0/go.mod h1:xH2NjAueVSY89XgC4qx24ojEQ4zQ9XCGVs5eXwJTkEs= -github.com/gobuffalo/release v1.8.3/go.mod h1:gCk/x5WD+aIGkPodO4CuLxdnhYn9Jgp7yFYxntK/8mk= -github.com/gobuffalo/release v1.13.4/go.mod h1:5Cc4TSNxP4QFV2ZUYcgPiBBV7YyRomHecGTQuuy26G4= -github.com/gobuffalo/release v1.14.0 h1:+Jy7eLN5md6Fg+AMuFRUiK4sTNq4+zXxRho7/wJe1HU= -github.com/gobuffalo/release v1.14.0/go.mod h1:5Cc4TSNxP4QFV2ZUYcgPiBBV7YyRomHecGTQuuy26G4= -github.com/gobuffalo/shoulders v1.0.1/go.mod h1:V33CcVmaQ4gRUmHKwq1fiTXuf8Gp/qjQBUL5tHPmvbA= -github.com/gobuffalo/shoulders v1.0.3/go.mod h1:LqMcHhKRuBPMAYElqOe3POHiZ1x7Ry0BE8ZZ84Bx+k4= -github.com/gobuffalo/shoulders v1.0.4/go.mod h1:LqMcHhKRuBPMAYElqOe3POHiZ1x7Ry0BE8ZZ84Bx+k4= -github.com/gobuffalo/shoulders v1.1.0/go.mod h1:kcIJs3p7VqoBJ36Mzs+x767NyzTx0pxBvzZdWTWZYF8= -github.com/gobuffalo/shoulders v1.2.0 h1:XcPmWbzN7944VXS/I//R7o2eupUHEp3mLFWbUlk1Sco= -github.com/gobuffalo/shoulders v1.2.0/go.mod h1:Ia3oFybQWg4711cb2S5JkFSt9V4rMiLGusWZ6mRAdNM= -github.com/gobuffalo/syncx v0.0.0-20181120191700-98333ab04150/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= -github.com/gobuffalo/syncx v0.0.0-20181120194010-558ac7de985f/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= -github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754 h1:tpom+2CJmpzAWj5/VEHync2rJGi+epHNIeRSWjzGA+4= -github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= -github.com/gobuffalo/tags v2.0.11+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= -github.com/gobuffalo/tags v2.0.14+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= -github.com/gobuffalo/tags v2.0.15+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= -github.com/gobuffalo/tags v2.0.16+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= -github.com/gobuffalo/tags v2.1.0+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= -github.com/gobuffalo/tags v2.1.5+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= -github.com/gobuffalo/tags v2.1.6+incompatible h1:xaWOM48Xz8lBh+C8l5R7vSmLAZJK4KeWcLo+0pJ516g= -github.com/gobuffalo/tags v2.1.6+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= -github.com/gobuffalo/uuid v2.0.3+incompatible/go.mod h1:ErhIzkRhm0FtRuiE/PeORqcw4cVi1RtSpnwYrxuvkfE= -github.com/gobuffalo/uuid v2.0.4+incompatible/go.mod h1:ErhIzkRhm0FtRuiE/PeORqcw4cVi1RtSpnwYrxuvkfE= -github.com/gobuffalo/uuid v2.0.5+incompatible h1:c5uWRuEnYggYCrT9AJm0U2v1QTG7OVDAvxhj8tIV5Gc= -github.com/gobuffalo/uuid v2.0.5+incompatible/go.mod h1:ErhIzkRhm0FtRuiE/PeORqcw4cVi1RtSpnwYrxuvkfE= -github.com/gobuffalo/validate v2.0.3+incompatible h1:6f4JCEz11Zi6iIlexMv7Jz10RBPvgI795AOaubtCwTE= -github.com/gobuffalo/validate v2.0.3+incompatible/go.mod h1:N+EtDe0J8252BgfzQUChBgfd6L93m9weay53EWFVsMM= -github.com/gobuffalo/x v0.0.0-20181003152136-452098b06085/go.mod h1:WevpGD+5YOreDJznWevcn8NTmQEW5STSBgIkpkjzqXc= -github.com/gobuffalo/x v0.0.0-20181007152206-913e47c59ca7/go.mod h1:9rDPXaB3kXdKWzMc4odGQQdG2e2DIEmANy5aSJ9yesY= -github.com/gobuffalo/x v0.0.0-20181025165825-f204f550da9d/go.mod h1:Qh2Pb/Ak1Ko2mzHlGPigrnxkhO4WTTCI1jJM58sbgtE= -github.com/gobuffalo/x v0.0.0-20181025192250-1ef645d63fe8/go.mod h1:AIlnMGlYXOCsoCntLPFLYtrJNS/pc2HD4IdSXH62TpU= -github.com/gobuffalo/x v0.0.0-20181109195216-5b3131238124/go.mod h1:GpdLUY6/Ztf/3FfxfwsLkDqAGZ0brhlh7LzIibHyZp0= -github.com/gobuffalo/x v0.0.0-20181110221217-14085ca3e1a9/go.mod h1:ig5vdn4+5IPtxgESlZWo1SSDyHKKef8EjVVKhY9kkIQ= -github.com/gobuffalo/x v0.0.0-20190224155809-6bb134105960 h1:DoUD23uwnzKJ3t5HH2SeTIszWmc13AV9TAdMhtXQts8= -github.com/gobuffalo/x v0.0.0-20190224155809-6bb134105960/go.mod h1:ig5vdn4+5IPtxgESlZWo1SSDyHKKef8EjVVKhY9kkIQ= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/gocql/gocql v0.0.0-20191102131523-9faa4c08d962 h1:+YAUiFOQF5pIjD9FYvk0xqpyuzDdJkgP9uzSC3pBk0E= -github.com/gocql/gocql v0.0.0-20191102131523-9faa4c08d962/go.mod h1:DL0ekTmBSTdlNF25Orwt/JMzqIq3EJ4MVa/J/uK64OY= -github.com/godbus/dbus v4.1.0+incompatible h1:WqqLRTsQic3apZUK9qC5sGNfXthmPXzUZ7nQPrNITa4= -github.com/godbus/dbus v4.1.0+incompatible/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= +github.com/gofrs/flock v0.0.0-20190320160742-5135e617513b h1:ekuhfTjngPhisSjOJ0QWKpPQE8/rbknHaes6WVJj5Hw= github.com/gofrs/flock v0.0.0-20190320160742-5135e617513b/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gofrs/uuid v3.1.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE= -github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.3.0 h1:M695OaDJ5ipWvDPcoAg/YL9c3uORAegkEfBqTQF/fTQ= github.com/gogo/googleapis v1.3.0/go.mod h1:d+q1s/xVJxZGKWwC/6UfPIF33J+G1Tq4GYv9Y+Tg/EU= @@ -920,75 +260,64 @@ github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5 github.com/gogo/protobuf v1.2.2-0.20190730201129-28a6bbf47e48/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.0 h1:G8O7TerXerS4F6sx9OV7/nRfJdnXgHZu/S/7F2SN+UE= github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/goji/param v0.0.0-20160927210335-d7f49fd7d1ed h1:4ZXAJ/IvcryiUPDddal4P7mu6V0+PoBe+2tKG6TNQtc= -github.com/goji/param v0.0.0-20160927210335-d7f49fd7d1ed/go.mod h1:GZJblUu7ACjguvQUK2un6nQBlnZk7H1MzXZdfrFUd8Q= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/lint v0.0.0-20180702182130-06c8688daad7 h1:2hRPrmiwPrp3fQX967rNJIhQPtiGXdlQWAxKbKw3VHA= -github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= 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 h1:qGJ6qTW+x6xX/my+8YUVl4WNpX9B7+/l2tRsHGZ7f2s= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 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 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0= github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM= github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6 h1:YYWNAGTKWhKpcLLt7aSj/odlKrSrelQwlovBpDuf19w= github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0= +github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613 h1:9kfjN3AdxcbsZBf8NjltjWihK2QfBBBZuv91cMFfDHw= github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= +github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3 h1:pe9JHs3cHHDQgOFXJJdYkK6fLz2PWyYtP4hthoCMvs8= github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3/go.mod h1:JXrF4TWy4tXYn62/9x8Wm/K/dm06p8tCKwFRDPZG/1o= +github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee h1:J2XAy40+7yz70uaOiMbNnluTg7gyQhtGqLQncQh+4J8= github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU= +github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a h1:iR3fYXUjHCR97qWS8ch1y9zPNsgXThGwjKPrYfqMPks= github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= +github.com/golangci/golangci-lint v1.21.0 h1:HxAxpR8Z0M8omihvQdsD3PF0qPjlqYqp2vMJzstoKeI= github.com/golangci/golangci-lint v1.21.0/go.mod h1:phxpHK52q7SE+5KpPnti4oZTdFCEsn/tKN+nFvCKXfk= +github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc h1:gLLhTLMk2/SutryVJ6D4VZCU3CUqr8YloG7FPIBWFpI= github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc/go.mod h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU= +github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA= github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA= github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= +github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770 h1:EL/O5HGrF7Jaq0yNhBLucz9hTuRzj2LdwGBOaENgxIk= github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21 h1:leSNB7iYzLYSSx3J/s5sVf4Drkc68W2wm4Ixh/mr0us= github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI= +github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0 h1:HVfrLniijszjS1aiNg8JbBMO2+E1WIQ+j/gL4SQqGPg= github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= -github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0= -github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= -github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac h1:Q0Jsdxl5jbxouNs1TQYt0gxesYMU4VXRbsTlgDloZ50= -github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= -github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82 h1:EvokxLQsaaQjcWVWSV38221VAK7qc2zhaO17bKys/18= -github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82/go.mod h1:PxC8OnwL11+aosOB5+iEPoV3picfs8tUpkVd0pDo+Kg= -github.com/gonum/internal v0.0.0-20181124074243-f884aa714029 h1:8jtTdc+Nfj9AR+0soOeia9UZSvYBvETVHZrugUowJ7M= -github.com/gonum/internal v0.0.0-20181124074243-f884aa714029/go.mod h1:Pu4dmpkhSyOzRwuXkOgAvijx4o+4YMUJJo9OvPYMkks= -github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9 h1:7qnwS9+oeSiOIsiUMajT+0R7HR6hw5NegnKPmn/94oI= -github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9/go.mod h1:XA3DeT6rxh2EAE789SSiSJNqxPaC0aE9J8NTOI0Jo/A= -github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9 h1:V2IgdyerlBa/MxaEFRbV5juy/C3MGdj4ePi+g6ePIp4= -github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9/go.mod h1:0EXg4mc1CNP0HCqCz+K4ts155PXIlUywf0wqN+GfPZw= github.com/google/addlicense v0.0.0-20190510175307-22550fa7c1b0 h1:ydbHzabf84uucKri5fcfiqYxGg+rYgP/zQfLLN8lyP0= github.com/google/addlicense v0.0.0-20190510175307-22550fa7c1b0/go.mod h1:QtPG26W17m+OIQgE6gQ24gC1M6pUaMBAbFrTIDtwG/E= github.com/google/btree v0.0.0-20160524151835-7d79101e329e/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/flatbuffers v1.11.0 h1:O7CEyB8Cb3/DmtxODGtLHcEvpr81Jm5qLg/hsHnxA2A= -github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= 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 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY= -github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= -github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= @@ -1005,9 +334,6 @@ github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/google/uuid v1.1.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go v2.0.0+incompatible h1:j0GKcs05QVmm7yesiZq2+9cxHkNK9YM6zKx4D2qucQU= -github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= -github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= @@ -1018,53 +344,26 @@ github.com/googleapis/gnostic v0.3.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTV github.com/gophercloud/gophercloud v0.0.0-20190126172459-c818fa66e4c8/go.mod h1:3WdhXV3rUYy9p6AUW8d94kr+HS62Y4VL9mBnFxsD8q4= github.com/gophercloud/gophercloud v0.3.0 h1:6sjpKIpVwRIIwmcEGp+WwNovNsem+c+2vm6oxshRpL8= github.com/gophercloud/gophercloud v0.3.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/goreleaser/goreleaser v0.94.0 h1:2CFMxMTLODjYfNOx2sADNzpgCwH9ltMqvQYtj+ntK1Q= -github.com/goreleaser/goreleaser v0.94.0/go.mod h1:OjbYR2NhOI6AEUWCowMSBzo9nP1aRif3sYtx+rhp+Zo= -github.com/goreleaser/nfpm v0.9.7 h1:h8RQMDztu6cW7b0/s4PGbdeMYykAbJG0UMXaWG5uBMI= -github.com/goreleaser/nfpm v0.9.7/go.mod h1:F2yzin6cBAL9gb+mSiReuXdsfTrOQwDMsuSpULof+y4= github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg= -github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/pat v0.0.0-20180118222023-199c85a7f6d1 h1:LqbZZ9sNMWVjeXS4NN5oVvhMjDyLhmA1LG86oSo+IqY= -github.com/gorilla/pat v0.0.0-20180118222023-199c85a7f6d1/go.mod h1:YeAe0gNeiNT5hoiZRI4yiOky6jVdNvfO2N6Kav/HmxY= -github.com/gorilla/schema v1.1.0 h1:CamqUDOFUBqzrvxuz2vEwo8+SUdwsluFh7IlzJh30LY= -github.com/gorilla/schema v1.1.0/go.mod h1:kgLaKoK1FELgZqMAVxx/5cbj0kT+57qxUrAlIO2eleU= -github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= -github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= -github.com/gorilla/sessions v1.1.2/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w= -github.com/gorilla/sessions v1.1.3/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w= -github.com/gorilla/sessions v1.2.0 h1:S7P+1Hm5V/AT9cjEcUD5uDaQSX0OE577aCXgoaKpYbQ= -github.com/gorilla/sessions v1.2.0/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3 h1:JVnpOZS+qxli+rgVl98ILOXVNbW+kb5wcxeGx8ShUIw= github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/graph-gophers/graphql-go v0.0.0-20191031232829-adde0d0f76a3 h1:HwRCZlPXN00r58jaIPE11HXn7EvhheQrE+Cxw0vkrH0= -github.com/graph-gophers/graphql-go v0.0.0-20191031232829-adde0d0f76a3/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7 h1:6TSoaYExHper8PYsJu23GWVNOyYRCSnIFyxKgLSZ54w= github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0 h1:Iju5GlWwrvL6UBg4zJJt3btmonfrMlCDdsejg4CZE7c= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.4/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.11.1 h1:/dBYI+n4xIL+Y9SKXQrjlKTmJJDwCSlNLRwZ5nBhIek= github.com/grpc-ecosystem/grpc-gateway v1.11.1/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8= -github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/api v1.2.0 h1:oPsuzLp2uk7I7rojPKuncWbZ+m5TMoD4Ivs+2Rkeh4Y= github.com/hashicorp/consul/api v1.2.0/go.mod h1:1SIkFYi2ZTXUE5Kgt179+4hH33djo11+0Eo2XgTAtkw= @@ -1076,9 +375,6 @@ github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brv github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= 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.10.0 h1:b86HUuA126IcSHyC55WjPo7KtCOVeTCKIjr+3lBhPxI= -github.com/hashicorp/go-hclog v0.10.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.1.0 h1:vN9wG1D6KG6YHRTWr8512cxGOVgTMEfgEdSj/hr8MPc= github.com/hashicorp/go-immutable-radix v1.1.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= @@ -1087,8 +383,6 @@ github.com/hashicorp/go-msgpack v0.5.5 h1:i9R9JSrqIz0QVLz3sz+i3YJdT7TTSLcfLLzJi9 github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-plugin v1.0.1 h1:4OtAfUGbnKC6yS48p0CtMX2oFYtzFZVv6rok3cRWgnE= -github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY= github.com/hashicorp/go-retryablehttp v0.5.3 h1:QlWt0KvWT0lq8MFppF9tsJGF+ynG7ztc2KIPhzRGk7s= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= @@ -1120,106 +414,20 @@ github.com/hashicorp/memberlist v0.1.4/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2p github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hashicorp/serf v0.8.3 h1:MWYcmct5EtKz0efYooPcL0yNkem+7kWxqXDi/UIh+8k= github.com/hashicorp/serf v0.8.3/go.mod h1:UpNcs7fFbpKIyZaUuSW6EPiH+eZC7OuyFD+wc1oal+k= -github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb h1:b5rjCoWHc7eqmAS4/qyk21ZsHyb6Mxv/jykxvNTkU4M= -github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/hudl/fargo v1.3.0 h1:0U6+BtN6LhaYuTnIJq4Wyq5cpn6O2kWrxAtcqBmYY6w= -github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/iancoleman/strcase v0.0.0-20190422225806-e506e3ef7365 h1:ECW73yc9MY7935nNYXUkK7Dz17YuSUI9yqRqYS8aBww= -github.com/iancoleman/strcase v0.0.0-20190422225806-e506e3ef7365/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6 h1:UDMh68UUwekSh5iP2OMhRRZJiiBccgV7axzUG8vi56c= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.5 h1:JboBksRwiiAJWvIYJVo46AfV+IAIKZpfrSzVKj42R4Q= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28= -github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/inconshreveable/go-vhost v0.0.0-20160627193104-06d84117953b h1:IpLPmn6Re21F0MaV6Zsc5RdSE6KuoFpWmHiUSEs3PrE= -github.com/inconshreveable/go-vhost v0.0.0-20160627193104-06d84117953b/go.mod h1:aA6DnFhALT3zH0y+A39we+zbrdMC2N0X/q21e6FI0LU= -github.com/inconshreveable/log15 v0.0.0-20180818164646-67afb5ed74ec h1:CGkYB1Q7DSsH/ku+to+foV4agt2F2miquaLUgF6L178= -github.com/inconshreveable/log15 v0.0.0-20180818164646-67afb5ed74ec/go.mod h1:cOaXtrgN4ScfRrD9Bre7U1thNq5RtJ8ZoP4iXVGRj6o= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/influxdata/changelog v1.1.0 h1:HXhmLZDrbuC+Ca5YX7g8B8cH5DmJpaOjd844d9Y7aTQ= -github.com/influxdata/changelog v1.1.0/go.mod h1:uzpGWE/qehT8L426YuXwpMQub+a63vIINhIeEI9mnSM= -github.com/influxdata/flux v0.53.0 h1:pQCXohOPM9gAA+ahh+Wdi1sxjuGTnPbN/6btpv9vIMY= -github.com/influxdata/flux v0.53.0/go.mod h1:ZFf4F0c8ACFP/5BkfCwk9I/vUwcByr0vMdLxwgOk57E= github.com/influxdata/influxdb v1.7.7 h1:UvNzAPfBrKMENVbQ4mr4ccA9sW+W1Ihl0Yh1s0BiVAg= github.com/influxdata/influxdb v1.7.7/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= -github.com/influxdata/influxdb1-client v0.0.0-20190809212627-fc22c7df067e h1:txQltCyjXAqVVSZDArPEhUTg35hKwVIuXwtQo7eAMNQ= -github.com/influxdata/influxdb1-client v0.0.0-20190809212627-fc22c7df067e/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/influxdata/influxql v1.0.1 h1:6PGG0SunRmptIMIreNRolhQ38Sq4qDfi2dS3BS1YD8Y= -github.com/influxdata/influxql v1.0.1/go.mod h1:KpVI7okXjK6PRi3Z5B+mtKZli+R1DnZgb3N+tzevNgo= -github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e h1:/o3vQtpWJhvnIbXley4/jwzzqNeigJK9z+LZcJZ9zfM= -github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= -github.com/influxdata/promql/v2 v2.12.0 h1:kXn3p0D7zPw16rOtfDR+wo6aaiH8tSMfhPwONTxrlEc= -github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= -github.com/influxdata/roaring v0.4.12 h1:3DzTjKHcXFs4P3D7xRLpCqVrfK6eFRQT0c8BG99M3Ms= -github.com/influxdata/roaring v0.4.12/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= -github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9 h1:MHTrDWmQpHq/hkq+7cw9oYAt2PqUw52TZazRA0N7PGE= -github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= -github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368 h1:+TUUmaFa4YD1Q+7bH9o5NCHQGPMqZCYJiNW6lIIS9z4= -github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= -github.com/jackc/chunkreader v1.0.0 h1:4s39bBR8ByfqH+DKm8rQA3E1LHZWB9XWcrz8fqaZbe0= -github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= -github.com/jackc/chunkreader/v2 v2.0.0 h1:DUwgMQuuPnS0rhMXenUtZpqZqrR/30NWY+qQvTpSvEs= -github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/fake v0.0.0-20150926172116-812a484cc733 h1:vr3AYkKovP8uR8AvSGGUK1IDqRa5lAAvEkZG1LKaCRc= -github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ= -github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA= -github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE= -github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s= -github.com/jackc/pgconn v1.0.1 h1:ZANo4pIkeHKIVD1cQMcxu8fwrwIICLblzi9HCjooZeQ= -github.com/jackc/pgconn v1.0.1/go.mod h1:GgY/Lbj1VonNaVdNUHs9AwWom3yP2eymFQ1C8z9r/Lk= -github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= -github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= -github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2 h1:JVX6jT/XfzNqIjye4717ITLaNwV9mWbJx0dLCpcRzdA= -github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= -github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= -github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgproto3 v1.1.0 h1:FYYE4yRw+AgI8wXIinMlNjBbp/UitDJwfj5LqqewP1A= -github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78= -github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA= -github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg= -github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.0 h1:FApgMJ/GtaXfI0s8Lvd0kaLaRwMOhs4VH92pwkwQQvU= -github.com/jackc/pgproto3/v2 v2.0.0/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= -github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= -github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59 h1:xOamcCJ9MFJTxR5bvw3ZXmiP8evQMohdt2VJ57C0W8Q= -github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= -github.com/jackc/pgx v3.2.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= -github.com/jackc/pgx v3.3.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= -github.com/jackc/pgx v3.5.0+incompatible h1:BRJ4G3UPtvml5R1ey0biqqGuYUGayMYekm3woO75orY= -github.com/jackc/pgx v3.5.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= -github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= -github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= -github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186 h1:ZQM8qLT/E/CGD6XX0E6q9FAwxJYmWpJufzmLMaFuzgQ= -github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= -github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9 h1:KLBBPU++1T3DHtm1B1QaIHy80Vhu0wNMErIFCNgAL8Y= -github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jaegertracing/jaeger v1.14.0 h1:C0En+gfcxf3NsAriMAvQ6LcSFrQ5VQGXddqfty1EpTI= github.com/jaegertracing/jaeger v1.14.0/go.mod h1:LUWPSnzNPGRubM8pk0inANGitpiMOOxihXx0+53llXI= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1 h1:ujPKutqRlJtcfWk6toYVYagwra7HQHbXOaS171b4Tg8= -github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= github.com/jessevdk/go-flags v0.0.0-20180331124232-1c38ed7ad0cc h1:0L2sGkaj6MWuV1BfXsrLJ/+XA8RzKKVsYlLVXNkK1Lw= github.com/jessevdk/go-flags v0.0.0-20180331124232-1c38ed7ad0cc/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= -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-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmoiron/sqlx v0.0.0-20180614180643-0dae4fefe7c0/go.mod h1:IiEW3SEiiErVyFdH8NTuWjSifiEQKUoyK3LNqr2kCHU= -github.com/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA= -github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= -github.com/joho/godotenv v1.2.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= -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 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7 h1:K//n/AqR5HjG3qxbrBCL4vJPW0MVFSs9CPK1OOJdRME= @@ -1231,57 +439,26 @@ github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62F github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024 h1:rBMNdlhTLzJjJSDIjNEXX1Pz3Hmwmz91v+zycvx9PJc= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jsternberg/zap-logfmt v1.2.0 h1:1v+PK4/B48cy8cfQbxL4FmmNZrjnIMr2BsnyEmXqv2o= -github.com/jsternberg/zap-logfmt v1.2.0/go.mod h1:kz+1CUmCutPWABnNkOu9hOHKdT2q3TDYCcsFy9hpqb0= github.com/julienschmidt/httprouter v1.2.0 h1:TDTW5Yz1mjftljbcKqRcrYhd4XeOoI98t+9HbQbYf7g= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/jung-kurt/gofpdf v1.13.0 h1:OrLyhb9VU2dNdxzDu5lpMhX5/vpfm6RY5Jlr4iPQ6ME= -github.com/jung-kurt/gofpdf v1.13.0/go.mod h1:1hl7y57EsiPAkLbOwzpzqgx1A30nQCk/YmFV8S2vmK0= -github.com/justinas/alice v1.2.0 h1:+MHSA/vccVCF4Uq37S42jwlkvI2Xzl7zTPCN5BnZNVo= -github.com/justinas/alice v1.2.0/go.mod h1:fN5HRH/reO/zrUflLfTN43t3vXvKzvZIENsNEe7i7qA= -github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef h1:2jNeR4YUziVtswNP9sEFAI913cVrzH85T+8Q6LpYbT0= -github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= -github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= -github.com/karrick/godirwalk v1.7.7/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= -github.com/karrick/godirwalk v1.7.8/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= -github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= -github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= -github.com/karrick/godirwalk v1.10.12/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= -github.com/karrick/godirwalk v1.12.0 h1:nkS4xxsjiZMvVlazd0mFyiwD4BR9f3m6LXGhM2TUx3Y= -github.com/karrick/godirwalk v1.12.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= -github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= -github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= -github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e h1:RgQk53JHp/Cjunrr1WlsXSZpqXn+uREuHvUVcK82CV8= -github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0 h1:reN85Pxc5larApoH1keMBiu2GWtPqXQ1nc9gx+jOU+E= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kisielk/sqlstruct v0.0.0-20150923205031-648daed35d49 h1:o/c0aWEP/m6n61xlYW2QP4t9424qlJOsxugn5Zds2Rg= -github.com/kisielk/sqlstruct v0.0.0-20150923205031-648daed35d49/go.mod h1:yyMNCyc/Ib3bDTKd379tNMpB/7/H5TjM2Y9QJ5THLbE= github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.9.1 h1:TWy0o9J9c6LK9C8t7Msh6IAJNXbsU/nvKLTQUU5HdaY= -github.com/klauspost/compress v1.9.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/pgzip v1.2.1 h1:oIPZROsWuPHpOdMVWLuJZXwgjhrW8r1yEX8UqMyeNHM= -github.com/klauspost/pgzip v1.2.1/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= -github.com/konsorten/go-windows-terminal-sequences v0.0.0-20180402223658-b729f2633dfe/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= 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.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5 h1:hyz3dwM5QLc1Rfoz4FuWJQG5BN7tc6K1MndAUnGpQr4= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/pty v1.1.8 h1:AkaSdXYQOWeaO3neb8EM634ahkXXe3jYbVh/F9lq+GI= @@ -1290,28 +467,11 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kylelemons/godebug v0.0.0-20160406211939-eadb3ce320cb h1:iiMILPl9HQFqdFXIuwfYT73NYtH0KApnCmyF7y5wYhs= github.com/kylelemons/godebug v0.0.0-20160406211939-eadb3ce320cb/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743 h1:143Bb8f8DuGWck/xpNUOckBVYfFbBTnLevfRZ1aVVqo= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= -github.com/lightstep/lightstep-tracer-go v0.17.1 h1:PgitbgUDool2AcHopDNTlvwq7BQeZssTGs4EVwcGhr8= -github.com/lightstep/lightstep-tracer-go v0.17.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= -github.com/lyft/protoc-gen-star v0.4.11 h1:zW6fJQBtCtVeSiO/Kbpzv32GO0J/Z8egSLeohES202w= -github.com/lyft/protoc-gen-star v0.4.11/go.mod h1:mE8fbna26u7aEA2QCVvvfBU/ZrPgocG1206xAFPcs94= github.com/lyft/protoc-gen-validate v0.0.13 h1:KNt/RhmQTOLr7Aj8PsJ7mTronaFyx80mRTT9qF261dA= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -github.com/lyft/protoc-gen-validate v0.1.0 h1:NytKd9K7UW7Szxn+9PYNsaJ/98TL/WsDq4ro4ZVuh5o= -github.com/m3db/prometheus_client_golang v0.8.1 h1:t7w/tcFws81JL1j5sqmpqcOyQOpH4RDOmIe3A3fdN3w= -github.com/m3db/prometheus_client_golang v0.8.1/go.mod h1:8R/f1xYhXWq59KD/mbRqoBulXejss7vYtYzWmruNUwI= -github.com/m3db/prometheus_client_model v0.1.0 h1:cg1+DiuyT6x8h9voibtarkH1KT6CmsewBSaBhe8wzLo= -github.com/m3db/prometheus_client_model v0.1.0/go.mod h1:Qfsxn+LypxzF+lNhak7cF7k0zxK7uB/ynGYoj80zcD4= -github.com/m3db/prometheus_common v0.1.0 h1:YJu6eCIV6MQlcwND24cRG/aRkZDX1jvYbsNNs1ZYr0w= -github.com/m3db/prometheus_common v0.1.0/go.mod h1:EBmDQaMAy4B8i+qsg1wMXAelLNVbp49i/JOeVszQ/rs= -github.com/m3db/prometheus_procfs v0.8.1 h1:LsxWzVELhDU9sLsZTaFLCeAwCn7bC7qecZcK4zobs/g= -github.com/m3db/prometheus_procfs v0.8.1/go.mod h1:N8lv8fLh3U3koZx1Bnisj60GYUMDpWb09x1R+dmMOJo= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -1321,91 +481,20 @@ github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq0y3QnmWAArdw9PqbmotexnWx/FU8= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/markbates/deplist v1.0.4/go.mod h1:gRRbPbbuA8TmMiRvaOzUlRfzfjeCCBqX2A6arxN01MM= -github.com/markbates/deplist v1.0.5/go.mod h1:gRRbPbbuA8TmMiRvaOzUlRfzfjeCCBqX2A6arxN01MM= -github.com/markbates/deplist v1.1.3/go.mod h1:BF7ioVzAJYEtzQN/os4rt8H8Ti3h0T7EoN+7eyALktE= -github.com/markbates/deplist v1.2.0/go.mod h1:dtsWLZ5bWoazbM0rCxZncQaAPifWbvHgBJk8UNI1Yfk= -github.com/markbates/deplist v1.3.0 h1:uPgoloPraPBPYtNSxj2UwZBh2EHW9TmMvQCP2FBiRlU= -github.com/markbates/deplist v1.3.0/go.mod h1:dtsWLZ5bWoazbM0rCxZncQaAPifWbvHgBJk8UNI1Yfk= -github.com/markbates/going v1.0.2/go.mod h1:UWCk3zm0UKefHZ7l8BNqi26UyiEMniznk8naLdTcy6c= -github.com/markbates/going v1.0.3 h1:mY45T5TvW+Xz5A6jY7lf4+NLg9D8+iuStIHyR7M8qsE= -github.com/markbates/going v1.0.3/go.mod h1:fQiT6v6yQar9UD6bd/D4Z5Afbk9J6BBVBtLiyY4gp2o= -github.com/markbates/grift v1.0.4/go.mod h1:wbmtW74veyx+cgfwFhlnnMWqhoz55rnHR47oMXzsyVs= -github.com/markbates/grift v1.0.5/go.mod h1:EHmVIjOQoj/OOBDzlZ8RW0ZkvOtQ4xRHjrPvmfoiFaU= -github.com/markbates/grift v1.0.6/go.mod h1:2AUYA/+pODhwonRbYwsltPVPIztBzw5nIJEGiWgKMPM= -github.com/markbates/grift v1.1.0 h1:DsljFKUSK1ELpU22ZE+Gi93jiQI3cYD/RQ+vHM/PpY8= -github.com/markbates/grift v1.1.0/go.mod h1:8N7ybWEcnMOvtSb0kW+dLJpYii9eq/FP3Gtu/cNPDTY= -github.com/markbates/hmax v1.0.0/go.mod h1:cOkR9dktiESxIMu+65oc/r/bdY4bE8zZw3OLhLx0X2c= -github.com/markbates/hmax v1.1.0 h1:MswE0ks4Iv1UAQNlvAyFpsyFQSBHolckas95gRUkka4= -github.com/markbates/hmax v1.1.0/go.mod h1:hhn8pJiRwNTEmNlxhfiTbL+CtEYiAX3wuhSf/kg/6wI= -github.com/markbates/inflect v1.0.0/go.mod h1:oTeZL2KHA7CUX6X+fovmK9OvIOFuqu0TwdQrZjLTh88= -github.com/markbates/inflect v1.0.1/go.mod h1:uv3UVNBe5qBIfCm8O8Q+DW+S1EopeyINj+Ikhc7rnCk= -github.com/markbates/inflect v1.0.3/go.mod h1:1fR9+pO2KHEO9ZRtto13gDwwZaAKstQzferVeWqbgNs= -github.com/markbates/inflect v1.0.4 h1:5fh1gzTFhfae06u3hzHYO9xe3l3v3nW5Pwt3naLTP5g= -github.com/markbates/inflect v1.0.4/go.mod h1:1fR9+pO2KHEO9ZRtto13gDwwZaAKstQzferVeWqbgNs= -github.com/markbates/oncer v0.0.0-20180924031910-e862a676800b/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= -github.com/markbates/oncer v0.0.0-20180924034138-723ad0170a46/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= -github.com/markbates/oncer v0.0.0-20181014194634-05fccaae8fc4/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= -github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= -github.com/markbates/oncer v1.0.0 h1:E83IaVAHygyndzPimgUYJjbshhDTALZyXxvk9FOlQRY= -github.com/markbates/oncer v1.0.0/go.mod h1:Z59JA581E9GP6w96jai+TGqafHPW+cPfRxz2aSZ0mcI= -github.com/markbates/refresh v1.4.10/go.mod h1:NDPHvotuZmTmesXxr95C9bjlw1/0frJwtME2dzcVKhc= -github.com/markbates/refresh v1.4.11/go.mod h1:awpJuyo4zgexB/JaHfmBX0sRdvOjo2dXwIayWIz9i3g= -github.com/markbates/refresh v1.5.0/go.mod h1:ZYMLkxV+x7wXQ2Xd7bXAPyF0EXiEWAMfiy/4URYb1+M= -github.com/markbates/refresh v1.6.0/go.mod h1:p8jWGABFUaFf/cSw0pxbo0MQVujiz5NTQ0bmCHLC4ac= -github.com/markbates/refresh v1.7.1/go.mod h1:hcGVJc3m5EeskliwSVJxcTHzUtMz2h8gBtCS0V94CgE= -github.com/markbates/refresh v1.8.0 h1:ELMS9kKyO/H6cJrqFo6qCyE0cRx2JeHWC9yusDkVeM8= -github.com/markbates/refresh v1.8.0/go.mod h1:ppl0l94oz3OKBAx3MV65vCDWPo51JQnypdtFUmps1NM= -github.com/markbates/safe v1.0.0/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= -github.com/markbates/safe v1.0.1 h1:yjZkbvRM6IzKj9tlu/zMJLS0n/V351OZWRnF3QfaUxI= -github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= -github.com/markbates/sigtx v1.0.0 h1:y/xtkBvNPRjD4KeEplf4w9rJVSc23/xl+jXYGowTwy0= -github.com/markbates/sigtx v1.0.0/go.mod h1:QF1Hv6Ic6Ca6W+T+DL0Y/ypborFKyvUY9HmuCD4VeTc= -github.com/markbates/willie v1.0.9 h1:394PpHImWjScL9X2VRCDXJAcc77sHsSr3w3sOnL/DVc= -github.com/markbates/willie v1.0.9/go.mod h1:fsrFVWl91+gXpx/6dv715j7i11fYPfZ9ZGfH0DQzY7w= -github.com/marstr/collection v1.0.1 h1:j61osRfyny7zxBlLRtoCvOZ2VX7HEyybkZcsLNLJ0z0= -github.com/marstr/collection v1.0.1/go.mod h1:HHDXVxjLO3UYCBXJWY+J/ZrxCUOYqrO66ob1AzIsmYA= -github.com/marstr/goalias v0.0.0-20180416201319-8dff9a14db64 h1:boT2QecCbBI45GoZDMlEFzSMQQFR4Yq+9v5XHt+XE00= -github.com/marstr/goalias v0.0.0-20180416201319-8dff9a14db64/go.mod h1:sFzSHdiOc23IPzkHolbVUGlnVBrTLPvx3B0uZ2uHAVc= -github.com/marstr/guid v1.1.0 h1:/M4H/1G4avsieL6BbUwCOBzulmoeKVP5ux/3mQNnbyI= -github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= -github.com/marstr/randname v0.0.0-20181206212954-d5b0f288ab8c h1:JE+MDz5rhFN5EC9Dj/N8dLYKboTWm6FXeWhnyKVj0vA= -github.com/marstr/randname v0.0.0-20181206212954-d5b0f288ab8c/go.mod h1:Xc224oUXd7/sKMjWKl17cfkYOKQ1S+HSOW7YHEGXauI= -github.com/martini-contrib/render v0.0.0-20150707142108-ec18f8345a11 h1:YFh+sjyJTMQSYjKwM4dFKhJPJC/wfo98tPUc17HdoYw= -github.com/martini-contrib/render v0.0.0-20150707142108-ec18f8345a11/go.mod h1:Ah2dBMoxZEqk118as2T4u4fjfXarE0pPnMJaArZQZsI= +github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb h1:RHba4YImhrUVQDHUCe2BNSOz4tVy2yGyXhvYDvxGgeE= github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-isatty v0.0.3 h1:ns/ykhmWi7G9O+8a448SecJU3nSMBXJfqQkl0upE1jI= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-runewidth v0.0.3 h1:a+kO+98RDGEfo6asOGMmpodZq4FNtnGP54yps8BzLR4= -github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-sqlite3 v1.10.0 h1:jbhqpg7tQe4SupckyijYiy0mJJ/pRyHvXf7JdWK860o= -github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104 h1:d8RFOZ2IiFtFWBcKEHAFYJcPTf0wY5q0exFNJZVWa1U= -github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= -github.com/mattn/go-zglob v0.0.0-20171230104132-4959821b4817/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= -github.com/mattn/go-zglob v0.0.0-20180803001819-2ea3427bfa53 h1:tGfIHhDghvEnneeRhODvGYOt305TPwingKt6p90F4MU= -github.com/mattn/go-zglob v0.0.0-20180803001819-2ea3427bfa53/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= -github.com/microcosm-cc/bluemonday v1.0.2 h1:5lPfLTTAvAbtS0VqT+94yOtFnGfUWYyx0+iToC3Os3s= -github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.15 h1:CSSIDtllwGLMoA6zjdKnaE6Tx6eVUxQ29LUgGetiDCI= github.com/miekg/dns v1.1.15/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= @@ -1415,7 +504,6 @@ github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrk github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= -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 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= 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 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4= @@ -1425,11 +513,8 @@ github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS4 github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.0.0/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mjibson/appstats v0.0.0-20151004071057-0542d5f0e87e h1:Jpn5gwt6vuJ9gcWP7sZdFQ6zDRjOU2UJHYb+iK1IC8c= -github.com/mjibson/appstats v0.0.0-20151004071057-0542d5f0e87e/go.mod h1:9oJenpYx/HCuJuv/fdEVpSb8PZ2t3tBFBbu+i6jU3UU= 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= @@ -1437,13 +522,6 @@ github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lN github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/monoculum/formam v0.0.0-20180901015400-4e68be1d79ba/go.mod h1:RKgILGEJq24YyJ2ban8EO0RUVSJlF1pGsEvoLEACr/Q= -github.com/monoculum/formam v0.0.0-20190307031628-bc555adff0cd/go.mod h1:JKa2av1XVkGjhxdLS59nDoXa2JpmIHpnURWNbzCtXtc= -github.com/monoculum/formam v0.0.0-20190730134247-0612307a4099/go.mod h1:JKa2av1XVkGjhxdLS59nDoXa2JpmIHpnURWNbzCtXtc= -github.com/monoculum/formam v0.0.0-20190830100315-7ff9597b1407 h1:ZU5O9BawmEx9Mu1lxn9NLIwO9DrqRfjE+HWKU+e9GKQ= -github.com/monoculum/formam v0.0.0-20190830100315-7ff9597b1407/go.mod h1:JKa2av1XVkGjhxdLS59nDoXa2JpmIHpnURWNbzCtXtc= -github.com/montanaflynn/stats v0.5.0 h1:2EkzeTSqBB4V4bJwWrt5gIIrZmpJBcoIRGS2kWLgzmk= -github.com/montanaflynn/stats v0.5.0/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/mozilla/tls-observatory v0.0.0-20190404164649-a3c1b6cfecfd/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d h1:7PxY7LVfSZm7PEeBTyK1rj1gABdCO2mbri6GKO1cMDs= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= @@ -1452,117 +530,54 @@ github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+ github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/nats-io/jwt v0.3.0 h1:xdnzwFETV++jNc4W1mw//qFyJGb2ABOombmZJQS4+Qo= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/nats.go v1.9.1 h1:ik3HbLhZ0YABLto7iX80pZLPw/6dx3T+++MZJwLnMrQ= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0 h1:qMd4+pRHgdr1nAClu+2h/2a5F2TmKcCzjCDazVgRoX4= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d h1:AREM5mwr4u1ORQBMvzfzBgpsctsbQikCVpvC+tX285E= github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= -github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86 h1:D6paGObi5Wud7xg83MaEFyjxQB1W5bz5d0IFppr+ymk= -github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= -github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab h1:eFXv9Nu1lGbrNbj619aWwZfVF5HBrm9Plte8aNptuTI= -github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= -github.com/nicksnyder/go-i18n v1.10.0 h1:5AzlPKvXBH4qBzmZ09Ua9Gipyruv6uApMcrNZdo96+Q= -github.com/nicksnyder/go-i18n v1.10.0/go.mod h1:HrK7VCrbOvQoUAQ7Vpy7i87N7JZZZ7R2xBGjv0j365Q= -github.com/oklog/oklog v0.3.2 h1:wVfs8F+in6nTBMkA7CbRw+zZMIB7nNM825cM1wuzoTk= -github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v0.0.0-20170117200651-66bb6560562f/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/olekukonko/tablewriter v0.0.1 h1:b3iUnf1v+ppJiOfNX4yxxqfWKMQPZR5yoh8urCTFX88= -github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olivere/elastic v6.2.26+incompatible h1:3PjUHKyt8xKwbFQpRC5cgtEY7Qz6ejopBkukhI7UWvE= -github.com/olivere/elastic v6.2.26+incompatible/go.mod h1:J+q1zQJTgAz9woqsbVRqGeB5G1iqDKVBWLNSYW8yfJ8= -github.com/olivere/env v1.1.0 h1:owp/uwMwhru5668JjMDp8UTG3JGT27GTCk4ufYQfaTw= -github.com/olivere/env v1.1.0/go.mod h1:zaoXy53SjZfxqZBGiGrZCkuVLYPdwrc+vArPuUVhJdQ= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w= github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.9.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v0.0.0-20190113212917-5533ce8a0da3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.6.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/open-telemetry/opentelemetry-collector v0.2.0 h1:38/NrGdEEXufWqYFkW/6yeW3koRvb1QbE/2owKSNQvI= -github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb0c1d1e h1:poxNKN8teT8QjLK6LwKN52cNQEPqHIOEsmPJv5ssZUU= -github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb0c1d1e/go.mod h1:zZf9V+57o0Fd3ik5HzaHamVsWhudJTOwnKw9kJvWoDo= -github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191203213105-fe3782c76de2 h1:lrdCxCJpccXFU3jCWB869fy5yRiSRRa4VTVJgLFpUOw= -github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191203213105-fe3782c76de2/go.mod h1:pL3jClof5EzaEU97itKyjLg4b8PFUwG87dM51Bnobhc= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205151336-8e2473c5e754 h1:gG2Ig+OgvWCyKLk3/Mz10HkSFolKjsWerT8kE9u+qig= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205151336-8e2473c5e754/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 h1:lM6RxxfUMrYL/f8bWEUqdXrANWtrL7Nndbm9iFN0DlU= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9 h1:QsgXACQhd9QJhEmRumbsMQQvBtmdS0mafoVEBplWXEg= github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9/go.mod h1:PLldrQSroqzH70Xl+1DQcGnefIbqsKR7UDaiux3zV+w= -github.com/opentracing/basictracer-go v1.0.0 h1:YyUAhaEfjoWXclZVJ9sGoNct7j4TVk7lZWlQw5UXuoo= -github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.4 h1:bzTJRoOZEN7uI1gq594S5HhMYNSud4FKUEwd4aFbsEI= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.4/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= -github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= -github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1 h1:noL5/5Uf1HpVl3wNsfkZhIKbSWCVi5jgqkONNx8PXcA= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/orijtech/prometheus-go-metrics-exporter v0.0.3-0.20190313163149-b321c5297f60 h1:vN7d/Zv6aOXqhspiqoEMkb6uFHNARVESmYn5XtNeyrk= github.com/orijtech/prometheus-go-metrics-exporter v0.0.3-0.20190313163149-b321c5297f60/go.mod h1:+Mu9w51Uc2RNKSUTA95d6Pvy8cxFiRX3ANRPlCcnGLA= -github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw= -github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/paulbellamy/ratecounter v0.2.0 h1:2L/RhJq+HA8gBQImDXtLPrDXK5qAj6ozWVK/zFXVJGs= -github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= +github.com/pavius/impi v0.0.0-20180302134524-c1cbdcb8df2b h1:yS0+/i6mwRZCdssUd+MkFJkCn/Evh1PlUKCYe3aCtQw= github.com/pavius/impi v0.0.0-20180302134524-c1cbdcb8df2b/go.mod h1:x/hU0bfdWIhuOT1SKwiJg++yvkk6EuOtJk8WtDZqgr8= -github.com/pborman/getopt v0.0.0-20190409184431-ee0cd42419d3 h1:YtFkrqsMEj7YqpIhRteVxJxCeC3jJBieuLr0d4C4rSA= -github.com/pborman/getopt v0.0.0-20190409184431-ee0cd42419d3/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-buffruneio v0.2.0 h1:U4t4R6YkofJ5xHm3dJzuRpPZ0mr5MMCoAWooScCR7aA= -github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/performancecopilot/speed v3.0.0+incompatible h1:2WnRzIquHa5QxaJKShDkLM+sc0JPuwhXzK8OYOyt3Vg= -github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= -github.com/peterh/liner v1.1.0 h1:f+aAedNJA6uk7+6rXsYBnhdo4Xux7ESLe+kcuVUF5os= -github.com/peterh/liner v1.1.0/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= -github.com/philhofer/fwd v1.0.0 h1:UbZqGr5Y38ApvM/V/jEljVxwocdweyH+vmYvRPBnbqQ= -github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= -github.com/phpdave11/gofpdi v1.0.7 h1:k2oy4yhkQopCK+qW8KjCla0iU2RpDow+QUDmH9DDt44= -github.com/phpdave11/gofpdi v1.0.7/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= -github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I= -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 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1 h1:F++O52m40owAmADcojzM+9gyjmMOY/T4oYJkgFDH8RE= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pkg/sftp v1.10.1 h1:VasscCm72135zRysgrJDKsntdmPN+OuU3+nnHYA9wyc= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5 h1:tFwafIEMf0B7NlcxV/zJ6leBIa81D3hgGSgsE5hCkOQ= -github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -1570,36 +585,27 @@ github.com/posener/complete v1.1.1 h1:ccV59UEOTzVDnDUEFdT95ZzHVZ+5+158q8+SJb2QV5 github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/prashantv/protectmem v0.0.0-20171002184600-e20412882b3a h1:AA9vgIBDjMHPC2McaGPojgV2dcI78ZC0TLNhYCXEKH8= github.com/prashantv/protectmem v0.0.0-20171002184600-e20412882b3a/go.mod h1:lzZQ3Noex5pfAy7mkAeCjcBDteYU85uWWnJ/y6gKU8k= -github.com/pressly/chi v4.0.2+incompatible h1:IQCvpYSGI/zsVuwr8+Q2R/13k9EHaFi05M3g8thnyqs= -github.com/pressly/chi v4.0.2+incompatible/go.mod h1:s/kslmeFE633XtTPvfX2olbs4ymzIHxGGXmEJ/AvPT8= github.com/prometheus/alertmanager v0.18.0 h1:sPppYFge7kdf9O96KIh3fd093D1xN8JxIp03wW6yAEE= github.com/prometheus/alertmanager v0.18.0/go.mod h1:WcxHBl40VSPuOaqWae6l6HpnEOVRIycEJ7i9iYkadEE= -github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.1.0 h1:BQ53HtBmfOitExawJ6LokA4x8ov/z0SYYb0+HxJfRI8= github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/common v0.7.0 h1:L+1lyG48J1zAQXA3RBX/nG/B3gjlHq0zTt2tlbJLyCY= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= -github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= 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-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.3 h1:CTwfnzjQ+8dS6MhHHu4YswVAD99sL2wjPqP+VkURmKE= @@ -1612,188 +618,68 @@ github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40T github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a h1:9ZKAASQSHhDYGoxY8uLVpewe1GDZ2vu2Tr/vTdVAkFQ= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237 h1:HQagqIiBmr8YXawX/le3+O26N+vPPC1PtjaF3mwnook= -github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/retailnext/hllpp v1.0.0 h1:7+NffI2mo7lZG78NruEsf3jEnjJ6Z0n1otEyFqdK8zA= -github.com/retailnext/hllpp v1.0.0/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af h1:gu+uRPtBe88sKxUCEXRoeCvVG90TJmwhiqRpvdhQFng= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/go-charset v0.0.0-20190617161244-0dc95cdf6f31 h1:DE4LcMKyqAVa6a0CGmVxANbnVb7stzMmPkQiieyNmfQ= -github.com/rogpeppe/go-charset v0.0.0-20190617161244-0dc95cdf6f31/go.mod h1:qgYeAmZ5ZIpBWTGllZSQnw97Dj+woV0toclVaRGI8pc= -github.com/rogpeppe/go-internal v1.0.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0 h1:RR9dF3JtopPvtkroDZuVD7qquD0bnHlKSqaQhgwt8yk= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.3.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.4.0 h1:LUa41nrWTQNGhzdsZ5lTnkwbNjj6rXTdazA1cSdjkOY= -github.com/rogpeppe/go-internal v1.4.0/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rs/cors v1.6.0 h1:G9tHG9lebljV9mfp9SNPDL36nCDxmo3zTlAf1YgvzmI= github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc= -github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= -github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= -github.com/rs/zerolog v1.15.0 h1:uPRuwkWF4J6fGsJ2R0Gn2jB1EQiav9k3S6CSdygQJXY= -github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday v1.5.3-0.20190124082335-a477dd164691 h1:auJkuUc4uOuZNoH9jGLvqVaDLiuCOh/LY+Qw5NBFo4I= -github.com/russross/blackfriday v1.5.3-0.20190124082335-a477dd164691/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58 h1:nlG4Wa5+minh3S9LVFtNoY+GVRiudA2e3EVfcCi3RCA= -github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= -github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd h1:CmH9+J6ZSsIjUK3dcGsnCnO41eRBOnY12zwkn5qVwgc= -github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/columnize v2.1.0+incompatible h1:j1Wcmh8OrK4Q7GXY+V7SVSY8nUWQxHW5TkBe7YUl+2s= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/samuel/go-thrift v0.0.0-20190219015601-e8b6b52668fe h1:gD4vkYmuoWVgdV6UwI3tPo9MtMfVoIRY+Xn9919SJBg= -github.com/samuel/go-thrift v0.0.0-20190219015601-e8b6b52668fe/go.mod h1:Vrkh1pnjV9Bl8c3P9zH0/D4NlOHWP5d4/hF4YTULaec= github.com/samuel/go-zookeeper v0.0.0-20190810000440-0ceca61e4d75 h1:cA+Ubq9qEVIQhIWvP2kNuSZ2CmnfBJFSRq+kO1pu2cc= github.com/samuel/go-zookeeper v0.0.0-20190810000440-0ceca61e4d75/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/satori/go.uuid v0.0.0-20160603004225-b111a074d5ef h1:RoeI7K0oZIcUirMHsFpQjTVDrl1ouNh8T7v3eNsUxL0= github.com/satori/go.uuid v0.0.0-20160603004225-b111a074d5ef/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/securego/gosec v0.0.0-20191002120514-e680875ea14d h1:BzRvVq1EHuIjxpijCEKpAxzKUUMurOQ4sknehIATRh8= github.com/securego/gosec v0.0.0-20191002120514-e680875ea14d/go.mod h1:w5+eXa0mYznDkHaMCXA4XYffjlH+cy1oyKbfzJXa2Do= -github.com/segmentio/kafka-go v0.1.0 h1:IXCHG+sXPNiIR5pC/vTEItZduPKu4cnpr85YgxpxlW0= -github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= -github.com/serenize/snaker v0.0.0-20171204205717-a683aaf2d516 h1:ofR1ZdrNSkiWcMsRrubK9tb2/SlZVWttAfqUjJi6QYc= -github.com/serenize/snaker v0.0.0-20171204205717-a683aaf2d516/go.mod h1:Yow6lPLSAXx2ifx470yD/nUe22Dv5vBvxK/UK9UUTVs= -github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc= github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= -github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= -github.com/shopspring/decimal v0.0.0-20191009025716-f1972eb1d1f5 h1:Gojs/hac/DoYEM7WEICT45+hNWczIeuL5D21e5/HPAw= -github.com/shopspring/decimal v0.0.0-20191009025716-f1972eb1d1f5/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= -github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4 h1:Fth6mevc5rX7glNLpbAMJnqKlfIkcTjZCSHEeqvKbcI= -github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= -github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48 h1:vabduItPAIz9px5iryD5peyx7O3Ya8TBThapgXim98o= -github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= -github.com/shurcooL/frontend v0.0.0-20180531171852-7e359e4b7b17 h1:IXoSIR8kdcag4uLYYWHu7meIZOE6Z1fF0njklq5EKiE= -github.com/shurcooL/frontend v0.0.0-20180531171852-7e359e4b7b17/go.mod h1:ALtiPMc4jQz4RRgcPDF3/+NYQrVW2jjP9W1hPxSoK7c= -github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470 h1:qb9IthCFBmROJ6YBS31BEMeSYjOscSiG+EO+JVNTz64= -github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= -github.com/shurcooL/githubv4 v0.0.0-20191102174205-af46314aec7b h1:Cocq9/ZZxCoiybhygOR7hX4E3/PkV8eNbd1AEcUvaHM= -github.com/shurcooL/githubv4 v0.0.0-20191102174205-af46314aec7b/go.mod h1:hAF0iLZy4td2EX+/8Tw+4nodhlMrwN3HupfaXj3zkGo= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e h1:MZM7FHLqUHYI0Y/mQAt3d2aYa0SiNms/hFqC9qJYolM= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041 h1:llrF3Fs4018ePo4+G/HV/uQUqEI1HMDjCeOf2V6puPc= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= -github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d h1:Yoy/IzG4lULT6qZg62sVC+qyBL8DQkmD2zv6i7OImrc= -github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d/go.mod h1:05UtEgK5zq39gLST6uB0cf3NEHjETfB4Fgr3Gx5R9Vw= -github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c h1:UOk+nlt1BJtTcH15CT7iNO7YVWTfTv/DNwEAQHLIaDQ= -github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c/go.mod h1:8d3azKNyqcHP1GaQE/c6dDgjkgSx2BZ4IoEi4F1reUI= -github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f h1:tygelZueB1EtXkPI6mQ4o9DQ0+FKW41hTbunoXZCTqk= -github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f/go.mod h1:AuYgA5Kyo4c7HfUmvRGs/6rGlMMV/6B1bVnB9JxJEEg= -github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b h1:vYEG87HxbU6dXj5npkeulCS96Dtz5xg3jcfCgpcvbIw= -github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b/go.mod h1:ZpfEhSmds4ytuByIcDnOLkTHGUI6KNqRNPDLHDk+mUU= -github.com/shurcooL/highlight_go v0.0.0-20170515013102-78fb10f4a5f8/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= -github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20 h1:7pDq9pAMCQgRohFmd25X8hIH8VxmT3TaDm+r9LHxgBk= -github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= -github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9 h1:MPblCbqA5+z6XARjScMfz1TqtJC7TuTRj0U9VqIBs6k= -github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9/go.mod h1:+rgNQw2P9ARFAs37qieuu7ohDNQ3gds9msbT2yn85sg= -github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50 h1:crYRwvwjdVh1biHzzciFHe8DrZcYrVcZFlJtykhRctg= -github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50/go.mod h1:zPn1wHpTIePGnXSHpsVPWEktKXHr6+SS6x/IKRb7cpw= -github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc h1:eHRtZoIi6n9Wo1uR+RU44C247msLWwyA89hVKwRLkMk= -github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc/go.mod h1:aYMfkZ6DWSJPJ6c4Wwz3QtW22G7mf/PEgaB9k/ik5+Y= github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 h1:bUGsEnyNbVPw06Bs80sCeARAlK8lhwqGyi6UT8ymuGk= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= -github.com/shurcooL/httpgzip v0.0.0-20180522190206-b1c53ac65af9/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= -github.com/shurcooL/httpgzip v0.0.0-20190720172056-320755c1c1b0 h1:mj/nMDAwTBiaCqMEs4cYCqF7pO6Np7vhy1D1wcQGz+E= -github.com/shurcooL/httpgzip v0.0.0-20190720172056-320755c1c1b0/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= -github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191 h1:T4wuULTrzCKMFlg3HmKHgXAF8oStFb/+lOIupLV2v+o= -github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191/go.mod h1:e2qWDig5bLteJ4fwvDAc2NHzqFEthkqn7aOZAOpj+PQ= -github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241 h1:Y+TeIabU8sJD10Qwd/zMty2/LEaT9GNDaA6nyZf+jgo= -github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241/go.mod h1:NPpHK2TI7iSaM0buivtFUc9offApnI0Alt/K8hcHy0I= -github.com/shurcooL/markdownfmt v0.0.0-20190409060426-3438a10682f5 h1:1X30SFo6Em9oCyrReNh9//zC7uE6IDoc+XgVy/iFdlE= -github.com/shurcooL/markdownfmt v0.0.0-20190409060426-3438a10682f5/go.mod h1:wwC6+1FOCAA/hK8+pmBir20vneHxr8Nh0OGQNkyo2a8= -github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122 h1:TQVQrsyNaimGwF7bIhzoVC9QkKm4KsWd8cECGzFx8gI= -github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b5uSkrEVM1jQUspwbixRBhaIjIzL2xazXp6kntxYle0= -github.com/shurcooL/notificationsapp v0.0.0-20181114034014-0a6e54cc4198 h1:7QgoOp3Mt75G/Us+x63zoMpes773uWLpzYaVOJ+nUNs= -github.com/shurcooL/notificationsapp v0.0.0-20181114034014-0a6e54cc4198/go.mod h1:hk3wHCCz8slz+eGBb4+DQIy5nVnPH72adj2s9lMFfQo= -github.com/shurcooL/octicon v0.0.0-20180602230221-c42b0e3b24d9/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= -github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2 h1:bu666BQci+y4S0tVRVjsHUeRon6vUXmsGBwdowgMrg4= -github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= -github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82 h1:LneqU9PHDsg/AkPDU3AkqMxnMYL+imaqkpflHu73us8= -github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk= -github.com/shurcooL/resume v0.0.0-20190824223711-dc47c8f77a80 h1:vPvEqkxGS5EIFJKIc+F/FSPacFcyoGmD0DTv+/uJNfs= -github.com/shurcooL/resume v0.0.0-20190824223711-dc47c8f77a80/go.mod h1:PE5QMqQGr8EdiigTVrcorvUhBeSgd/PsCBWoq9L6foM= -github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537 h1:YGaxtkYjb8mnTvtufv2LKLwCQu2/C7qFB7UtrOlTWOY= -github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= github.com/shurcooL/vfsgen v0.0.0-20180825020608-02ddb050ef6b/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd h1:ug7PpSOB5RBPK1Kg6qskGBoP3Vnj/aNYFTznWvlkGo0= github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= -github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133 h1:JtcyT0rk/9PKOdnKQzuDR+FSjh7SGtJwpgVpfZBRKlQ= -github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= -github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= -github.com/sirupsen/logrus v1.1.0/go.mod h1:zrgwTnHtNr00buQ1vSptGe8m1f/BbgsPukg8qsT7A+A= -github.com/sirupsen/logrus v1.1.1/go.mod h1:zrgwTnHtNr00buQ1vSptGe8m1f/BbgsPukg8qsT7A+A= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9 h1:hp2CYQUINdZMHdvTdXtPOY2ainKl4IoMcpAXEf2xj3Q= -github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sony/gobreaker v0.4.1 h1:oMnRNZXX5j85zso6xCPRNPtmAycat+WcoKbklScLDgQ= -github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d h1:yKm7XZV6j9Ev6lojP2XaIshpT4ymkqhMeSghO5Ps00E= -github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= github.com/sourcegraph/go-diff v0.5.1 h1:gO6i5zugwzo1RVTvgvfwCOSVegNuvnNi6bAD1QCmkHs= github.com/sourcegraph/go-diff v0.5.1/go.mod h1:j2dHj3m8aZgQO8lMTcTnBcXkRRRqi34cd2MNlA9u1mE= -github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e h1:qpG93cPwA5f7s/ZPBJnGOYQNK/vKsaDaseuKT5Asee8= -github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.2.0/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/afero v1.2.1/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.4/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= 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/spf13/viper v1.2.1/go.mod h1:P4AexN0a+C9tGAnUFNwDMYYZv3pjFuvmeiMyKRaNVlI= -github.com/spf13/viper v1.3.0/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.3.1/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.4.1-0.20190911140308-99520c81d86e h1:D4jmJ9BqzeMv7BvAqjooNtXH2PXG7m+pcYRnj2Ojlrk= github.com/spf13/viper v1.4.1-0.20190911140308-99520c81d86e/go.mod h1:jUyf+v/KTOnRyUy2/AsjF537WfJWVv3AnlcKSNd+AIg= -github.com/src-d/gcfg v1.4.0 h1:xXbNR5AlLSA315x2UO+fTSSAXCDf+Ar38/6oyGbDKQ4= -github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= -github.com/stathat/go v1.0.0 h1:HFIS5YkyaI6tXu7JXIRRZBLRvYstdNZm034zcCeaybI= -github.com/stathat/go v1.0.0/go.mod h1:+9Eg2szqkcOGWv6gfheJmBBsmq9Qf5KDbzy8/aYYR0c= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94 h1:0ngsPmuP6XIjiFRNFYlvKwSr5zff2v+uPHaffZ6/M4k= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a h1:AhmOdSHeswKHBjhsLs/7+1voOxT+LLrSk/Nxvk35fug= -github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/streadway/quantile v0.0.0-20150917103942-b0c588724d25 h1:7z3LSn867ex6VSaahyKadf4WtSsJIgne6A1WLOAGM8A= github.com/streadway/quantile v0.0.0-20150917103942-b0c588724d25/go.mod h1:lbP8tGiBjZ5YWIc2fzuRpTaz0b/53vT6PEs3QuAWzuU= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -1801,46 +687,26 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= 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 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= -github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= -github.com/tambet/go-asana v0.0.0-20161015030314-6c0cb7090a14 h1:mv5oIIbRcPh6r80jbRM+9zYs4erKCx4700JaYqNBxKM= -github.com/tambet/go-asana v0.0.0-20161015030314-6c0cb7090a14/go.mod h1:erM8VNXdx5GeFvs939dYq4nfzij6d2Lzdc8COCDYZ6w= -github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07 h1:UyzmZLoiDWMRywV4DUYb9Fbt8uiOSooupjTq10vpvnU= -github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e h1:RumXZ56IrCj4CL+g1b9OL/oH0QnsF976bC8xQFYUD5Q= github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= -github.com/tinylib/msgp v1.1.0 h1:9fQd+ICuRIu/ue4vxJZu6/LzxN0HwMds2nq/0cFvxHU= -github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= -github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2 h1:eGaGNxrtoZf/mBURsnNQKDR7u50Klgcf2eFDQEnc8Bc= -github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eNAjXGDx2yma7uG2XoyRZTq1uv3M/o7imD0= -github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b h1:m74UWYy+HBs+jMFR9mdZU6shPewugMyH5+GV6LNgW8w= -github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b/go.mod h1:/yhzCV0xPfx6jb1bBgRFjl5lytqVqZXEaeqWP8lTEao= -github.com/tj/go-spin v1.1.0 h1:lhdWZsvImxvZ3q1C5OIB7d72DuOwP4O2NdBg9PyzNds= -github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31 h1:OXcKh35JaYsGMRzpvFkLv/MEyPuL49CThT1pZ8aSml4= -github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926 h1:G3dpKMzFDjgEh2q1Z7zUUtKa8ViPtH+ocF0bE0g00O8= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/uber-go/atomic v1.4.0 h1:yOuPqEq4ovnhEjpHmfFwsqBXDYbQeT6Nb0bwD6XnD5o= github.com/uber-go/atomic v1.4.0/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g= -github.com/uber-go/tally v3.3.12+incompatible h1:Qa0XrHsKXclmhEpHmBHTTEZotwvQHAbm3lvtJ6RNn+0= -github.com/uber-go/tally v3.3.12+incompatible/go.mod h1:YDTIBxdXyOU/sCWilKB4bgyufu1cEi0jdVnRdxvjnmU= github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/uber/jaeger-client-go v2.16.0+incompatible h1:Q2Pp6v3QYiocMxomCaJuwQGFt7E53bPYqEgug/AoBtY= github.com/uber/jaeger-client-go v2.16.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= -github.com/uber/jaeger-lib v2.0.0+incompatible h1:iMSCV0rmXEogjNWPh2D0xk9YVKvrtGoHJNe9ebLu/pw= -github.com/uber/jaeger-lib v2.0.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/uber/jaeger-lib v2.2.0+incompatible h1:MxZXOiR2JuoANZ3J6DE/U0kSFv/eJ/GfSYVCjK7dyaw= github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/uber/tchannel-go v1.10.0 h1:YOihLHuvkwT3nzvpgqFtexFW+pb5vD1Tz7h/bIWApgE= github.com/uber/tchannel-go v1.10.0/go.mod h1:Rrgz1eL8kMjW/nEzZos0t+Heq0O4LhnUJVA32OvWKHo= @@ -1848,111 +714,57 @@ github.com/ugorji/go v1.1.4 h1:j4s+tAvLfL3bZyefP2SEWmhBzmuIlH/eqNuPdFPgngw= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8 h1:3SVOIvH7Ae1KRYyQWRjXWJEA9sS/c/pjvH++55Gr648= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ultraware/funlen v0.0.2 h1:Av96YVBwwNSe4MLR7iI/BIa3VyI7/djnto/pK3Uxbdo= github.com/ultraware/funlen v0.0.2/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/whitespace v0.0.4 h1:If7Va4cM03mpgrNH9k49/VOicWpGoG70XPBFFODYDsg= github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= -github.com/unknwon/cae v1.0.0 h1:i39lOFaBXZxhGjQOy/RNbi8uzettCs6OQxpR0xXohGU= -github.com/unknwon/cae v1.0.0/go.mod h1:QaSeRctcea9fK6piJpAMCCPKxzJ01+xFcr2k1m3WRPU= -github.com/unrolled/secure v0.0.0-20180918153822-f340ee86eb8b/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= -github.com/unrolled/secure v0.0.0-20181005190816-ff9db2ff917f/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= -github.com/unrolled/secure v0.0.0-20181022170031-4b6b7cf51606/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= -github.com/unrolled/secure v0.0.0-20190103195806-76e6d4e9b90c h1:ZY4dowVsuIAQtXXwKJ9ezfonDQ2YT7pcXRpPF2iAy3Y= -github.com/unrolled/secure v0.0.0-20190103195806-76e6d4e9b90c/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= -github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/negroni v1.0.0 h1:kIimOitoypq34K7TG7DUaJ9kq/N4Ofuwi1sjz0KipXc= -github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= +github.com/uudashr/gocognit v0.0.0-20190926065955-1655d0de0517 h1:ChMKTho2hWKpks/nD/FL2KqM1wuVt62oJeiE8+eFpGs= github.com/uudashr/gocognit v0.0.0-20190926065955-1655d0de0517/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.2.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s= github.com/valyala/quicktemplate v1.2.0/go.mod h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOVRUAfrukLPuGJ4= github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= -github.com/xanzy/ssh-agent v0.2.0 h1:Adglfbi5p9Z0BmK2oKU9nTG+zKfniSfnaMYB+ULd+Ro= -github.com/xanzy/ssh-agent v0.2.0/go.mod h1:0NyE30eGUDliuLEHJgYte/zncp2zdTStcOnWhgSqHD8= -github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c h1:u40Z8hqBAAQyv+vATcGgV0YCnDjqSL7/q/JyPhhJSPk= -github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= -github.com/xdg/stringprep v1.0.0 h1:d9X0esnoa3dFsV0FG35rAT0RIhYFlPq7MiP+DW89La0= -github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6 h1:YdYsPAZ2pC6Tow/nPZOPQ96O3hm/ToAkGsPLzedXERk= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77 h1:ESFSdwYZvkeru3RtdrYueztKhOBCSAAzS4Gf+k0tEow= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/zenazn/goji v0.9.0 h1:RSQQAbXGArQ0dIDEq+PI6WqN6if+5KHu6x2Cx/GXLTQ= -github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= go.etcd.io/bbolt v1.3.2 h1:Z/90sZLPOeCy2PwprqkFa25PdkusRzaj9P8zm/KNyvk= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/etcd v3.3.17+incompatible h1:g8iRku1SID8QAW8cDlV0L/PkZlw63LSiYEHYHoE6j/s= -go.etcd.io/etcd v3.3.17+incompatible/go.mod h1:yaeTdrJi5lOmYerz05bd8+V7KubZs8YSFZfzsF9A6aI= go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.0.4 h1:bHxbjH6iwh1uInchXadI6hQR107KEbgYsMzoblDONmQ= go.mongodb.org/mongo-driver v1.0.4/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= -go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= 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.1 h1:8dP3SGL7MPB94crU3bEPplMPe83FI4EouesJUeFHv50= go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/automaxprocs v1.2.0 h1:+RUihKM+nmYUoB9w0D0Ov5TJ2PpFO2FgenTxMJiZBZA= -go.uber.org/automaxprocs v1.2.0/go.mod h1:YfO3fm683kQpzETxlTGZhGIVmXAhaw3gxeBADbpZtnU= go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go4.org v0.0.0-20180809161055-417644f6feb5 h1:+hE86LblG4AyDgwMCLTE6FOlM9+qjHSYS+rKqxUVdsM= -go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= -golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d h1:E2M5QgjZ/Jg+ObCQAudsXxuTsLj7Nl5RV/lZcQZmKSo= -golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180910181607-0e37d006457b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181015023909-0c41d7ab0a0e/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181024171144-74cb1d3d52f4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181025113841-85e1b3f9139a/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181025213731-e84da0312774/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181106171534-e4dc69e5b2fd/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181112202954-3d3f9f413869/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181127143415-eb0de9b17e85/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190102171810-8d7daa0c54b3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190103213133-ff983b9c42bc/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190122013713-64072686203f/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190130090550-b01c7a725664/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/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-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190403202508-8e1b8d32e692/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= -golang.org/x/crypto v0.0.0-20190404164418-38d8ce5564a5/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= -golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= -golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= 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-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 h1:HuIa8hRrWRSrqYzx1qI49NNxhdi2PrY7gxVSq1JjLDc= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392 h1:ACG4HJsFiNMf47Y4PeRoebLNy/2lXT9EtprMuTFWt1M= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522 h1:OeRHuibLsmZkFj773W4LcfAGsSxJgfPONhr8cmO+eLA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067 h1:KYGJGHOQy8oSi1fDlSpcZF0+juKwk/hEMv5SiwHogR0= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a h1:gHevYm0pO4QUbwy8Dmdr01R5r1BuKtfYqRqF0h/Cbh0= -golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 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= @@ -1965,28 +777,15 @@ golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e h1:JgcxKXxCjrA2tyDP/aNU9K0Ck golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180816102801-aaf60122140d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180921000356-2f5d2388922f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180926154720-4dfa2610cdf3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181017193950-04a2e542c03f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181102091132-c10e9556a7bc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181108082009-03003ca0c849/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-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181207154023-610586996380/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181213202711-891ebc4b82d6/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190119204137-ed066c81e75e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190206173232-65e2d4e15006/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= @@ -1994,7 +793,6 @@ golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn 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-20190514140710-3ec191127204/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= 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= @@ -2002,79 +800,42 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL 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 h1:Ao/3l156eZf2AW5wK8a7/smtodRU+gha3+BeqJ69lRk= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 h1:fHDIZ2oxGnUZRN6WgWFCbYBjH9uqVPRCUVUDhs0wnbA= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478 h1:l5EDrHhldLYb3ZRHDUhXF7Om7MvYXnkV9/iQNo1lX6g= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/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-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852 h1:xYq6+9AtI+xP3M4r0N1hCkHrInHDBohhquRgx9Kk6gI= -golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= 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-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180816055513-1c9583448a9c/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 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-20180903190138-2b024373dcd9/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-20180906133057-8cf3aee42992/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180921163948-d47a0f339242/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180927150500-dad3d9fb7b6e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181005133103-4497e2df6f9e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181011152604-fa43e7bc11ba/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181019084534-8f1d3d21f81b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181022134430-8a28ead16f52/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181024145615-5cd93ef61a7c/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181025063200-d989b31c8746/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026064943-731415f00dce/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181030150119-7e31e0c00fa0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181106135930-3a76605856fd/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181128092732-4ed8d59d0b35/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181206074257-70b957f3b65e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181213150753-586ba8c9bb14/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181213200352-4d1cda033e06/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190102155601-82a175fd1598/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190116161447-11f53e031339/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190122071731-054c452bb702/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-20190209173611-3b5209105503/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-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190220154126-629670e5acc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/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-20190321052220-f7bb7a8bee54/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-20190419153524-e8e3143a4f4a/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-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ= @@ -2090,144 +851,60 @@ golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5f golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20161028155119-f51c12702a4d/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181003024731-2f84ea8ef872/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181006002542-f60d9635b16a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181008205924-a2b3f7f249e9/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181013182035-5e66757b835f/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181017214349-06f26fdaaa28/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181019005945-6adeb8aab2de/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181024171208-a2dc47679d30/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181026183834-f60e5f99f081/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030151751-bb28844c46df/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181102223251-96e9e165b75e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181105230042-78dc5bac0cac/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181107215632-34b416bd17b3/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181109152631-138c20b93253/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181109202920-92d8274bd7b8/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181111003725-6d71ab8aade0/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181114190951-94339b83286c/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181117154741-2ddaf7f79a09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181119130350-139d099f6620/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181120060634-fc4f04983f62/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181122213734-04b5d21e00f1/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181127195227-b4e97c0ed882/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181127232545-e782529d0ddd/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181201035826-d0ca3933b724/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181203210056-e5f3ab76ea4b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181205224935-3576414c54a4/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181206194817-bcd4e47d0288/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181207183836-8bc39b988060/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181212172921-837e80568c09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181213190329-bbccd8cae4a9/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190102213336-ca9055ed7d04/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190104182027-498d95493402/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190111214448-fc1d57b08d7b/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-20190118193359-16909d206f00/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190122202912-9c309ee22fab/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190124004107-78ee07aa9465/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190131142011-8dbcc66f33bb/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206221403-44bcb96178d3/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190214204934-8dcb7bc8c7fe/go.mod h1:E6PF97AdD6v0s+fPshSmumCW1S1Ne85RbPQxELkKa44= -golang.org/x/tools v0.0.0-20190219135230-f000d56b39dc/go.mod h1:E6PF97AdD6v0s+fPshSmumCW1S1Ne85RbPQxELkKa44= -golang.org/x/tools v0.0.0-20190219185102-9394956cfdc5/go.mod h1:E6PF97AdD6v0s+fPshSmumCW1S1Ne85RbPQxELkKa44= -golang.org/x/tools v0.0.0-20190221204921-83362c3779f5/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= 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-20190311215038-5c2858a9cfe5/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-20190315044204-8b67d361bba2/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190318200714-bb1270c20edf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190404132500-923d25813098/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190407030857-0fdf0c73855b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190521203540-521d6ed310dd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190603152906-08e0b306e832/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190603231351-8aaa1484dc10/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190613204242-ed0dc450797f/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190617190820-da514acc4774/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-20190624180213-70d37148ca0c/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-20190719005602-e377ae9d6386/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= -golang.org/x/tools v0.0.0-20190809145639-6d4652c779c4/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190813034749-528a2984e271/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190825031127-d72b05d2b1b6/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190905035308-adb45749da8e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190906203814-12febf440ab1 h1:w4Q0TX3lC1NfGcWkzt5wG4ee4E5fUAPqh5myV0efeHI= -golang.org/x/tools v0.0.0-20190906203814-12febf440ab1/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190930201159-7c411dea38b0/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191004055002-72853e10c5a3/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191015150414-f936694f27bf/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191030062658-86caa796c7ab h1:tpc/nJ4vD66vAk/2KN0sw/DvQIz2sKmCpWvyKtPmfMQ= golang.org/x/tools v0.0.0-20191030062658-86caa796c7ab/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca h1:PupagGYwj8+I4ubCxcmcBRk3VlUWtTg5huQpZR9flmE= -gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6 h1:4WsZyVtkthqrHTbDCJfiTs8IWNYE4uvsSDgaV6xpp+o= -gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= -google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= 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.10.0 h1:7tmAxx3oKE98VMZ+SBZzvYYWRQ9HODBxmC8mXUsraSQ= google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= 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.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= -google.golang.org/genproto v0.0.0-20190201180003-4b09977fb922/go.mod h1:L3J43x8/uS+qIUoksaLKe6OS3nUKxOKuIFz1sl2/jx4= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/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-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64 h1:iKtrH9Y8mcbADOP0YFaEMth7OfuHY9xHOwNj4znpM1A= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= @@ -2237,83 +914,37 @@ google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0 h1:AzbTB6ux+okLTzP8Ru1Xs41C303zdcfEht7MQnYJt5A= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.24.0 h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s= -gopkg.in/airbrake/gobrake.v2 v2.0.9 h1:7z2uVWwn7oVeeugY1DtlPAy5H+KYgB1KeKTnqjNatLo= -gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= -gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= 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 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/cheggaaa/pb.v1 v1.0.28 h1:n1tBJnnK2r7g9OW2btFH91V92STTUevLXYFb8gy9EMk= -gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/fsnotify/fsnotify.v1 v1.4.7 h1:XNNYLJHt73EyYiCZi6+xjupS9CpvmiDgjPTAjrBlQbo= gopkg.in/fsnotify/fsnotify.v1 v1.4.7/go.mod h1:Fyux9zXlo4rWoMSIzpn9fDAYjalPqJ/K1qJ27s+7ltE= -gopkg.in/gcfg.v1 v1.2.3 h1:m8OOJ4ccYHnx2f4gQwpno8nAX5OGOh7RLaaz0pj3Ogs= -gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2 h1:OAj3g0cR6Dx/R07QgQe8wkA9RNjB2u4i700xBkIT4e0= -gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= -gopkg.in/go-playground/assert.v1 v1.2.1 h1:xoYuJVE7KT85PYWrN730RguIQO0ePzVRfFMXadIrXTM= -gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= -gopkg.in/go-playground/validator.v8 v8.18.2 h1:lFB4DoMU6B626w8ny76MV7VX6W2VHct2GVOI3xgiMrQ= -gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= -gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE= -gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw= -gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec h1:RlWgLqCMMIYYEVcAR5MDsuHlVkaIPDAF+5Dehzg8L5A= -gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/mail.v2 v2.0.0-20180731213649-a0242b2233b4 h1:a3llQg4+Czqaf+QH4diHuHiKv4j1abMwuRXwaRNHTPU= -gopkg.in/mail.v2 v2.0.0-20180731213649-a0242b2233b4/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw= -gopkg.in/pipe.v2 v2.0.0-20140414041502-3c2ca4d52544 h1:WJH1qsOB4/zb/li+zLMn0vaAUJ5FqPv6HYLI3aQVg1k= -gopkg.in/pipe.v2 v2.0.0-20140414041502-3c2ca4d52544/go.mod h1:UhTeH/yXCK/KY7TX24mqPkaQ7gZeqmWd/8SSS8B3aHw= gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/src-d/go-billy.v4 v4.2.1 h1:omN5CrMrMcQ+4I8bJ0wEhOBPanIRWzFC953IiXKdYzo= -gopkg.in/src-d/go-billy.v4 v4.2.1/go.mod h1:tm33zBoOwxjYHZIE+OV8bxTWFMJLrconzFMd38aARFk= -gopkg.in/src-d/go-git-fixtures.v3 v3.1.1 h1:XWW/s5W18RaJpmo1l0IYGqXKuJITWRFuA45iOf1dKJs= -gopkg.in/src-d/go-git-fixtures.v3 v3.1.1/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= -gopkg.in/src-d/go-git.v4 v4.8.1 h1:aAyBmkdE1QUUEHcP4YFCGKmsMQRAuRmUcPEQR7lOAa0= -gopkg.in/src-d/go-git.v4 v4.8.1/go.mod h1:Vtut8izDyrM8BUVQnzJ+YvmNcem2J89EmfZYCkLokZk= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/tomb.v2 v2.0.0-20161208151619-d5d1b5820637 h1:yiW+nvdHb9LVqSHQBXfZCieqV4fzYhNBql77zY0ykqs= -gopkg.in/tomb.v2 v2.0.0-20161208151619-d5d1b5820637/go.mod h1:BHsqpu/nsuzkT5BpiH1EMZPLyqSMM8JbIavyFACoFNk= -gopkg.in/validator.v2 v2.0.0-20191029180049-30e574a82075 h1:ZkdLG20PbbXJaM0hn3WOp6PDUEyai71k/0lK8XR8UY4= -gopkg.in/validator.v2 v2.0.0-20191029180049-30e574a82075/go.mod h1:o4V0GXN9/CAmCsvJ0oXYZvrZOe7syiDZSN1GWGZTGzc= -gopkg.in/vmihailenco/msgpack.v2 v2.9.1 h1:kb0VV7NuIojvRfzwslQeP3yArBqJHW9tOl4t38VS1jM= -gopkg.in/vmihailenco/msgpack.v2 v2.9.1/go.mod h1:/3Dn1Npt9+MYyLpYYXjInO/5jvMLamn+AEGwNEOatn8= -gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0 h1:POO/ycCATvegFmVuPpQzZFJ+pGZeX22Ufu6fibxDVjU= -gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -grpc.go4.org v0.0.0-20170609214715-11d0a25b4919 h1:tmXTu+dfa+d9Evp8NpJdgOy6+rt8/x4yG7qPBrtNfLY= -grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= -honnef.co/go/js/dom v0.0.0-20190526011328-ebc4cf92d81f h1:b3Q9PqH+5NYHfIjNUEN+f8lYvBh9A25AX+kPh8dpYmc= -honnef.co/go/js/dom v0.0.0-20190526011328-ebc4cf92d81f/go.mod h1:sUMDUKNB2ZcVjt92UnLy3cdGs+wDAcrPdV3JP6sVgA4= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -istio.io/gogo-genproto v0.0.0-20191024203824-d079cc8b1d55 h1:nvpx66mnuGvXYP4IfCWfUqB9YhiXBF3MvUDsclNnDzI= -istio.io/gogo-genproto v0.0.0-20191024203824-d079cc8b1d55/go.mod h1:OzpAts7jljZceG4Vqi5/zXy/pOg1b209T3jb7Nv5wIs= k8s.io/api v0.0.0-20190620084959-7cf5895f2711/go.mod h1:TBhBqb1AWbBQbW3XRusr7n7E4v2+5ZY8r8sAMnyFC5A= k8s.io/api v0.0.0-20190813020757-36bff7324fb7 h1:4uJOjRn9kWq4AqJRE8+qzmAy+lJd9rh8TY455dNef4U= k8s.io/api v0.0.0-20190813020757-36bff7324fb7/go.mod h1:3Iy+myeAORNCLgjd/Xu9ebwN7Vh59Bw0vh9jhoX+V58= @@ -2337,8 +968,11 @@ k8s.io/kube-openapi v0.0.0-20190722073852-5e22f3d471e6/go.mod h1:RZvgC8MSN6DjiMV k8s.io/utils v0.0.0-20190221042446-c2654d5206da/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3oVhZz7sSzSiPnVZayjIX0= k8s.io/utils v0.0.0-20190809000727-6c36bc71fc4a h1:uy5HAgt4Ha5rEMbhZA+aM1j2cq5LmR6LQ71EYC2sVH4= k8s.io/utils v0.0.0-20190809000727-6c36bc71fc4a/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo= mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= +mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f h1:Cq7MalBHYACRd6EesksG1Q8EoIAKOsiZviGKbOLIej4= mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f/go.mod h1:4G1h5nDURzA3bwVMZIVpwbkw+04kSxk3rAtzlimaUJw= rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= @@ -2346,15 +980,5 @@ sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e h1:4Z09Hglb sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 h1:ucqkfpjg9WzSUubAO62csmucvxl4/JeW3F4I4909XkM= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= -sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67 h1:e1sMhtVq9AfcEy8AXNb8eSg6gbzfdpYhoNqnPJa+GzI= -sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67/go.mod h1:L5q+DGLGOQFpo1snNEkLOJT2d1YTW66rWNzatr3He1k= -sourcegraph.com/sourcegraph/go-diff v0.5.0 h1:eTiIR0CoWjGzJcnQ3OkhIl/b9GJovq4lSAVRt0ZFEG8= -sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= -sourcegraph.com/sourcegraph/go-git v0.0.0-20190828120159-87e0e4ab9e95 h1:BXXbBIn17eUjrezW34vwkuHuMlLLjbHX+FqEaXkH9xo= -sourcegraph.com/sourcegraph/go-git v0.0.0-20190828120159-87e0e4ab9e95/go.mod h1:wuMupdBPOKq56tE4fMCsXV+Ouau8I/u45E7RnwPUvac= -sourcegraph.com/sourcegraph/go-vcs v0.0.0-20190409071845-d784c9520ccd h1:OUJzsDqNQQ0LULa4jkmL8zOi3POVWlIoLdI5l0mFOic= -sourcegraph.com/sourcegraph/go-vcs v0.0.0-20190409071845-d784c9520ccd/go.mod h1:rFelUayJfYYMJDKiqwmLc8YIWivajdW1a494kJsfXRg= sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4 h1:JPJh2pk3+X4lXAkZIk2RuE/7/FoK9maXw+TNPJhVS/c= sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= diff --git a/exporter/awsxrayexporter/translator/cause.go b/exporter/awsxrayexporter/translator/cause.go index df653b39e9bc..991382223389 100644 --- a/exporter/awsxrayexporter/translator/cause.go +++ b/exporter/awsxrayexporter/translator/cause.go @@ -22,13 +22,6 @@ import ( tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" ) -// OpenTelemetry Semantic Convention attribute names for error/fault/exception related attributes -const ( - ErrorObjectAttribute = "error.object" - ErrorMessageAttribute = "error.message" - ErrorKindAttribute = "error.kind" -) - // CauseData provides the shape for unmarshalling data that records exception. type CauseData struct { WorkingDirectory string `json:"working_directory,omitempty"` @@ -66,18 +59,10 @@ func makeCause(status *tracepb.Status, attributes map[string]string) (isError, i filtered = make(map[string]string) for key, value := range attributes { switch key { - case ErrorKindAttribute: - errorKind = value - case ErrorMessageAttribute: - if message == "" { - message = value - } case semconventions.AttributeHTTPStatusText: if message == "" { message = value } - case ErrorObjectAttribute: - errorObject = value default: filtered[key] = value } diff --git a/exporter/awsxrayexporter/translator/cause_test.go b/exporter/awsxrayexporter/translator/cause_test.go index 6170abc19d9d..b5c581246fda 100644 --- a/exporter/awsxrayexporter/translator/cause_test.go +++ b/exporter/awsxrayexporter/translator/cause_test.go @@ -75,31 +75,6 @@ func TestCauseWithHttpStatusMessage(t *testing.T) { assert.True(t, strings.Contains(jsonStr, errorMsg)) } -func TestCauseWithErrorMessage(t *testing.T) { - errorMsg := "this is a test" - attributes := make(map[string]interface{}) - attributes[semconventions.AttributeHTTPMethod] = "POST" - attributes[semconventions.AttributeHTTPURL] = "https://api.example.com/widgets" - attributes[semconventions.AttributeHTTPStatusCode] = 500 - attributes[ErrorMessageAttribute] = errorMsg - span := constructExceptionServerSpan(attributes) - filtered, _ := makeHTTP(span) - - isError, isFault, filtered, cause := makeCause(span.Status, filtered) - - assert.False(t, isError) - assert.True(t, isFault) - assert.NotNil(t, filtered) - assert.NotNil(t, cause) - w := testWriters.borrow() - if err := w.Encode(cause); err != nil { - assert.Fail(t, "invalid json") - } - jsonStr := w.String() - testWriters.release(w) - assert.True(t, strings.Contains(jsonStr, errorMsg)) -} - func constructExceptionServerSpan(attributes map[string]interface{}) *tracepb.Span { endTime := time.Now().Round(time.Second) startTime := endTime.Add(-90 * time.Second) diff --git a/exporter/awsxrayexporter/translator/segment.go b/exporter/awsxrayexporter/translator/segment.go index 6ad9066370b9..c1e4b6697a84 100644 --- a/exporter/awsxrayexporter/translator/segment.go +++ b/exporter/awsxrayexporter/translator/segment.go @@ -105,7 +105,7 @@ var ( writers = newWriterPool(2048) ) -// MakeSegmentDocumentString converts an Otel Span to an X-Ray Segment and then serialzies to JSON +// MakeSegmentDocumentString converts an OpenCensus Span to an X-Ray Segment and then serialzies to JSON func MakeSegmentDocumentString(name string, span *tracepb.Span) (string, error) { segment := MakeSegment(name, span) w := writers.borrow() @@ -117,7 +117,7 @@ func MakeSegmentDocumentString(name string, span *tracepb.Span) (string, error) return jsonStr, nil } -// MakeSegment converts an Otel Span to an X-Ray Segment +// MakeSegment converts an OpenCensus Span to an X-Ray Segment func MakeSegment(name string, span *tracepb.Span) Segment { var ( traceID = convertToAmazonTraceID(span.TraceId) diff --git a/exporter/awsxrayexporter/translator/segment_test.go b/exporter/awsxrayexporter/translator/segment_test.go index c6f72ff96084..b13ee923b6fa 100644 --- a/exporter/awsxrayexporter/translator/segment_test.go +++ b/exporter/awsxrayexporter/translator/segment_test.go @@ -89,7 +89,7 @@ func TestServerSpanWithInternalServerError(t *testing.T) { attributes[semconventions.AttributeHTTPURL] = "https://api.example.org/api/locations" attributes[semconventions.AttributeHTTPTarget] = "/api/locations" attributes[semconventions.AttributeHTTPStatusCode] = 500 - attributes[ErrorKindAttribute] = "java.lang.NullPointerException" + attributes[semconventions.AttributeHTTPStatusText] = "java.lang.NullPointerException" labels := constructDefaultResourceLabels() span := constructServerSpan(parentSpanID, spanName, tracetranslator.OCInternal, errorMessage, attributes, labels) timeEvents := constructTimedEventsWithSentMessageEvent(span.StartTime) From 9189a5a8fc11151d24c6d7b02d9b02c23123119e Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Wed, 11 Dec 2019 11:23:21 -0600 Subject: [PATCH 24/59] fix new static check issues --- exporter/awsxrayexporter/conn.go | 2 +- exporter/awsxrayexporter/conn_test.go | 2 +- exporter/awsxrayexporter/translator/http.go | 2 +- exporter/awsxrayexporter/translator/segment.go | 3 --- exporter/awsxrayexporter/translator/segment_test.go | 4 ++-- 5 files changed, 5 insertions(+), 8 deletions(-) diff --git a/exporter/awsxrayexporter/conn.go b/exporter/awsxrayexporter/conn.go index 1b46c36d4c54..924bfcb0b660 100644 --- a/exporter/awsxrayexporter/conn.go +++ b/exporter/awsxrayexporter/conn.go @@ -201,7 +201,7 @@ func (c *Conn) newAWSSession(logger *zap.Logger, roleArn string, region string) return s, err } } else { - stsCreds, err := getSTSCreds(logger, region, roleArn) + stsCreds, _ := getSTSCreds(logger, region, roleArn) s, err = session.NewSession(&aws.Config{ Credentials: stsCreds, diff --git a/exporter/awsxrayexporter/conn_test.go b/exporter/awsxrayexporter/conn_test.go index 0c19bf3f5923..649a54ea9f07 100644 --- a/exporter/awsxrayexporter/conn_test.go +++ b/exporter/awsxrayexporter/conn_test.go @@ -89,7 +89,7 @@ func loadExporterConfig(t *testing.T) *Config { assert.Nil(t, err) factory := &Factory{} factories.Exporters[factory.Type()] = factory - otelcfg, err := config.LoadConfigFile( + otelcfg, _ := config.LoadConfigFile( t, path.Join(".", "testdata", "config.yaml"), factories, ) xrayExporterCfg := otelcfg.Exporters["awsxray"].(*Config) diff --git a/exporter/awsxrayexporter/translator/http.go b/exporter/awsxrayexporter/translator/http.go index 933588235090..6a77a63fa5c7 100644 --- a/exporter/awsxrayexporter/translator/http.go +++ b/exporter/awsxrayexporter/translator/http.go @@ -206,7 +206,7 @@ func constructServerURL(component string, urlParts map[string]string) string { if !ok { host, ok = urlParts[semconventions.AttributeHTTPServerName] if !ok { - host, ok = urlParts[semconventions.AttributeHostName] + host = urlParts[semconventions.AttributeHostName] } port, ok = urlParts[semconventions.AttributeHTTPHostPort] if !ok { diff --git a/exporter/awsxrayexporter/translator/segment.go b/exporter/awsxrayexporter/translator/segment.go index c1e4b6697a84..d622d769837d 100644 --- a/exporter/awsxrayexporter/translator/segment.go +++ b/exporter/awsxrayexporter/translator/segment.go @@ -20,7 +20,6 @@ import ( "math/rand" "reflect" "regexp" - "sync" "time" resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" @@ -39,8 +38,6 @@ const ( var ( zeroSpanID = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - r = rand.New(rand.NewSource(time.Now().UnixNano())) // random, not secure - mutex = &sync.Mutex{} ) var ( diff --git a/exporter/awsxrayexporter/translator/segment_test.go b/exporter/awsxrayexporter/translator/segment_test.go index b13ee923b6fa..ed784ce347f2 100644 --- a/exporter/awsxrayexporter/translator/segment_test.go +++ b/exporter/awsxrayexporter/translator/segment_test.go @@ -317,7 +317,7 @@ func constructTimedEventsWithReceivedMessageEvent(tm *timestamp.Timestamp) trace Annotation: &annotation, }, } - events := make([]*tracepb.Span_TimeEvent, 1, 1) + events := make([]*tracepb.Span_TimeEvent, 1) events[0] = &event timeEvents := tracepb.Span_TimeEvents{ TimeEvent: events, @@ -353,7 +353,7 @@ func constructTimedEventsWithSentMessageEvent(tm *timestamp.Timestamp) tracepb.S Annotation: &annotation, }, } - events := make([]*tracepb.Span_TimeEvent, 1, 1) + events := make([]*tracepb.Span_TimeEvent, 1) events[0] = &event timeEvents := tracepb.Span_TimeEvents{ TimeEvent: events, From e8ac424b8f372cf9eddfd91b2dd2f51f77a93ae4 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Thu, 12 Dec 2019 08:56:10 -0600 Subject: [PATCH 25/59] fix test that breaks if no valid aws session available --- exporter/awsxrayexporter/awsxray.go | 7 +++++-- exporter/awsxrayexporter/awsxray_test.go | 5 +++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/exporter/awsxrayexporter/awsxray.go b/exporter/awsxrayexporter/awsxray.go index ffada0a1eb0e..8ac8cff63b3d 100644 --- a/exporter/awsxrayexporter/awsxray.go +++ b/exporter/awsxrayexporter/awsxray.go @@ -27,8 +27,8 @@ import ( "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter/translator" ) -// NewTraceExporter creates an exporter.TraceExporter that just drops the -// received data and logs debugging messages. +// NewTraceExporter creates an exporter.TraceExporter that converts to an X-Ray PutTraceSegments +// request and then posts the request to the configured region's X-Ray endpoint. func NewTraceExporter(config configmodels.Exporter, logger *zap.Logger, cn connAttr) (exporter.TraceExporter, error) { typeLog := zap.String("type", config.Type()) nameLog := zap.String("name", config.Name()) @@ -44,6 +44,9 @@ func NewTraceExporter(config configmodels.Exporter, logger *zap.Logger, cn connA droppedSpans, input := assembleRequest(td, logger) logger.Debug("request: " + input.String()) output, err := xrayClient.PutTraceSegments(input) + if config.(*Config).LocalMode { + err = nil // test mode, ignore errors + } logger.Debug("response: " + output.String()) if output != nil && output.UnprocessedTraceSegments != nil { droppedSpans += len(output.UnprocessedTraceSegments) diff --git a/exporter/awsxrayexporter/awsxray_test.go b/exporter/awsxrayexporter/awsxray_test.go index d165f58cd6ee..ab241a36c9e6 100644 --- a/exporter/awsxrayexporter/awsxray_test.go +++ b/exporter/awsxrayexporter/awsxray_test.go @@ -17,6 +17,7 @@ package awsxrayexporter import ( "context" "fmt" + "os" "reflect" "testing" "time" @@ -43,6 +44,10 @@ func TestTraceExport(t *testing.T) { } func initializeTraceExporter() exporter.TraceExporter { + os.Setenv("AWS_ACCESS_KEY_ID", "AKIASSWVJUY4PZXXXXXX") + os.Setenv("AWS_SECRET_ACCESS_KEY", "XYrudg2H87u+ADAAq19Wqx3D41a09RsTXXXXXXXX") + os.Setenv("AWS_DEFAULT_REGION", "us-east-1") + os.Setenv("AWS_REGION", "us-east-1") logger := zap.NewNop() factory := Factory{} config := factory.CreateDefaultConfig() From e900d2d5252d78c6ae9f676d6df76db00209d00a Mon Sep 17 00:00:00 2001 From: Tigran Najaryan <4194920+tigrannajaryan@users.noreply.github.com> Date: Thu, 12 Dec 2019 14:39:23 -0500 Subject: [PATCH 26/59] Update Collector Core dependency to latest `master` (#61) - Updated go.mod and testbed/go.mod to point to latest `master` commit for github.com/open-telemetry/opentelemetry-collector dependencies and fixed the code as needed. - Run `go mod tidy` on both go.mod files. --- exporter/sapmexporter/go.mod | 1 + go.mod | 3 +- go.sum | 47 +++------- testbed/go.mod | 5 +- testbed/go.sum | 162 ++++++++++++++++++++++++++++++++--- testbed/tests/trace_test.go | 6 +- 6 files changed, 172 insertions(+), 52 deletions(-) diff --git a/exporter/sapmexporter/go.mod b/exporter/sapmexporter/go.mod index 76cf1baf19c9..6d38a82c1b86 100644 --- a/exporter/sapmexporter/go.mod +++ b/exporter/sapmexporter/go.mod @@ -4,6 +4,7 @@ go 1.12 require ( github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191119152140-567e1046cefa + github.com/pierrec/lz4 v2.0.5+incompatible // indirect github.com/signalfx/sapm-proto v0.0.3-0.20191211161027-5e20f16d64d6 github.com/stretchr/testify v1.4.0 go.uber.org/atomic v1.5.1 // indirect diff --git a/go.mod b/go.mod index 8efae091f344..c612f32552a5 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.12 require ( github.com/client9/misspell v0.3.4 github.com/google/addlicense v0.0.0-20190907113143-be125746c2c4 - github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191209163440-5d463fe48816 + github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212134434-b4b3530a43d9 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter v0.0.0 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.0.0-00010101000000-000000000000 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.0.0-20191203211755-8ae89debd6c5 @@ -13,6 +13,7 @@ require ( github.com/open-telemetry/opentelemetry-collector-contrib/receiver/collectdreceiver v0.0.0-20191209163404-28d5712f4129 github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.0.0-20191209183045-9707a2732f37 github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinscribereceiver v0.0.0-20191126142441-b2a048090ad6 + github.com/open-telemetry/opentelemetry-collector-contrib/testbed v0.0.0-20191211173639-c78990cbbb53 // indirect github.com/pavius/impi v0.0.0-20180302134524-c1cbdcb8df2b golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f golang.org/x/tools v0.0.0-20191205225056-3393d29bb9fe diff --git a/go.sum b/go.sum index 16d13093c677..70a90163c265 100644 --- a/go.sum +++ b/go.sum @@ -53,6 +53,7 @@ github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdko github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -81,13 +82,10 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b h1:AP/Y7sqYicnjGDfD5VcY4CIfh1hRXBUavxrvELjTiOE= github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b/go.mod h1:ac9efd0D1fsDb3EJvhqgXRbFx7bs2wqZ10HQPeU8U/Q= -github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= github.com/bombsimon/wsl v1.2.5 h1:9gTOkIwVtoDZywvX802SDHokeX4kW1cKnV8ZTVAPkRs= github.com/bombsimon/wsl v1.2.5/go.mod h1:43lEF/i0kpXbLCeDXL9LMT8c92HyBywXb0AsgMHYngM= github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409 h1:Da6uN+CAo1Wf09Rz1U4i9QN8f0REjyNJ73BEwAq/paU= github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v3 v3.1.1 h1:UBHElAnr3ODEbpqPzX8g5sBcASjoLFtt3L/xwJ01L6E= -github.com/cenkalti/backoff/v3 v3.1.1/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v0.0.0-20181017004759-096ff4a8a059/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -119,7 +117,6 @@ github.com/dgryski/go-sip13 v0.0.0-20190329191031-25c5027a8c7b/go.mod h1:vAd38F8 github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= -github.com/dropbox/godropbox v0.0.0-20180512210157-31879d3884b9/go.mod h1:glr97hP/JuXb+WMYCizc4PIFuzw1lCR97mwbe1VVXhQ= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= @@ -133,8 +130,6 @@ github.com/evanphx/json-patch v0.0.0-20190203023257-5858425f7550/go.mod h1:50XU6 github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.5.0+incompatible h1:ouOWdg56aJriqS0huScTkVXPC5IcNrDCXZ6OoTAWu7M= github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= -github.com/facebookgo/stackerr v0.0.0-20150612192056-c2fcf88613f4/go.mod h1:SBHk9aNQtiw4R4bEuzHjVmZikkUKCnO1v3lPQ21HZGk= github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= @@ -146,7 +141,6 @@ github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0 github.com/go-critic/go-critic v0.3.5-0.20190904082202-d79a9f0c64db h1:GYXWx7Vr3+zv833u+8IoXbNnQY0AdXsxAgI0kX7xcwA= github.com/go-critic/go-critic v0.3.5-0.20190904082202-d79a9f0c64db/go.mod h1:+sE8vrLDS2M0pZkBk0wy6+nLdKexVDrl/jBqQOTDThA= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-kit/kit v0.7.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= @@ -157,6 +151,7 @@ github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80n github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.17.2/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= @@ -329,8 +324,6 @@ github.com/googleapis/gnostic v0.3.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTV github.com/gophercloud/gophercloud v0.0.0-20190126172459-c818fa66e4c8/go.mod h1:3WdhXV3rUYy9p6AUW8d94kr+HS62Y4VL9mBnFxsD8q4= github.com/gophercloud/gophercloud v0.3.0 h1:6sjpKIpVwRIIwmcEGp+WwNovNsem+c+2vm6oxshRpL8= github.com/gophercloud/gophercloud v0.3.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= @@ -417,10 +410,6 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024 h1:rBMNdl 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 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/juju/errors v0.0.0-20181012004132-a4583d0a56ea/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= -github.com/juju/loggo v0.0.0-20190526231331-6e530bcce5d8/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U= -github.com/juju/testing v0.0.0-20191001232224-ce9dec17d28b/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= @@ -443,7 +432,6 @@ github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kylelemons/godebug v0.0.0-20160406211939-eadb3ce320cb/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= -github.com/lestrrat-go/backoff v1.0.0/go.mod h1:c7OnDlnHsFXbH1vyIS8+txH+THcc+QFlSQTrJVe4EIM= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= @@ -451,12 +439,10 @@ github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czP github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20180606163543-3fdea8d05856/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb h1:RHba4YImhrUVQDHUCe2BNSOz4tVy2yGyXhvYDvxGgeE= github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= @@ -519,14 +505,17 @@ github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/open-telemetry/opentelemetry-collector v0.2.0 h1:38/NrGdEEXufWqYFkW/6yeW3koRvb1QbE/2owKSNQvI= github.com/open-telemetry/opentelemetry-collector v0.2.0/go.mod h1:zZf9V+57o0Fd3ik5HzaHamVsWhudJTOwnKw9kJvWoDo= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb0c1d1e h1:poxNKN8teT8QjLK6LwKN52cNQEPqHIOEsmPJv5ssZUU= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb0c1d1e/go.mod h1:zZf9V+57o0Fd3ik5HzaHamVsWhudJTOwnKw9kJvWoDo= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191119152140-567e1046cefa/go.mod h1:WCsoKuWfht1l33mnPISJ189n8l1p1G10TrQaKylV7no= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205151336-8e2473c5e754 h1:gG2Ig+OgvWCyKLk3/Mz10HkSFolKjsWerT8kE9u+qig= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205151336-8e2473c5e754/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= -github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191209163440-5d463fe48816 h1:jVHc4z0F+QFSVWwpyE5aq4qXMseHEDZFLVueVsFze6M= -github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191209163440-5d463fe48816/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205212659-419ed61e5bac/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191211145602-94066e4c70c1/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212134434-b4b3530a43d9 h1:BHePbk/BHLNV6U7Duk8kiCQVLHkiXPD6/1Lxcf+fqWw= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212134434-b4b3530a43d9/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.0.0-20191203211755-8ae89debd6c5 h1:ywGB3azaH+hCb67EbAwtdUBg7MXFTxwvCclPT1F8lp4= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.0.0-20191203211755-8ae89debd6c5/go.mod h1:KFAuDdKdP7ejK2iB1xW4RbqKR/dKrmr2uYpVY5e5SyM= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/stackdriverexporter v0.0.0-20191126142441-b2a048090ad6 h1:M1xqVTsqqd6EF1mSgQCgpOdcYQlUZEQ0Aclh/FG5tl4= @@ -537,6 +526,10 @@ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.0.0-20191209183045-9707a2732f37/go.mod h1:U1F1p3CcH3VYq2z+3OiO+WfhifaQvRknR5XlxiuZzcU= github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinscribereceiver v0.0.0-20191126142441-b2a048090ad6 h1:oFZnmX7g3xhvmsVoLLcR3XNSS3MZUzmDZhJdYaStKwo= github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinscribereceiver v0.0.0-20191126142441-b2a048090ad6/go.mod h1:GNDPC/bJ+7G66ttS6XjVKuQ2ZC80yUCESa/2DPI/75s= +github.com/open-telemetry/opentelemetry-collector-contrib/testbed v0.0.0-20191211173639-c78990cbbb53 h1:RQ+9HLFLhTSh7UHISSijpAPjz7vZfhnWTIJoHexbapg= +github.com/open-telemetry/opentelemetry-collector-contrib/testbed v0.0.0-20191211173639-c78990cbbb53/go.mod h1:/9quffm3KCkKiAm6d2OGrfQ5hnQe2YV5Sj11yXsIp+k= +github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191211145602-94066e4c70c1 h1:T/EY2fKzuUDkDcVZ7Nr9ZJPqcvyfoomC+3UIHuV2Liw= +github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191211145602-94066e4c70c1/go.mod h1:0x5LWC/8hyS8Q8fCi0elhTYf9S94RzRX6ZgL7EiYvlQ= github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9/go.mod h1:PLldrQSroqzH70Xl+1DQcGnefIbqsKR7UDaiux3zV+w= github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -606,7 +599,6 @@ github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/samuel/go-zookeeper v0.0.0-20180130194729-c4fab1ac1bec/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/samuel/go-zookeeper v0.0.0-20190810000440-0ceca61e4d75 h1:cA+Ubq9qEVIQhIWvP2kNuSZ2CmnfBJFSRq+kO1pu2cc= github.com/samuel/go-zookeeper v0.0.0-20190810000440-0ceca61e4d75/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/satori/go.uuid v0.0.0-20160603004225-b111a074d5ef/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= @@ -617,7 +609,8 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg github.com/securego/gosec v0.0.0-20191002120514-e680875ea14d h1:BzRvVq1EHuIjxpijCEKpAxzKUUMurOQ4sknehIATRh8= github.com/securego/gosec v0.0.0-20191002120514-e680875ea14d/go.mod h1:w5+eXa0mYznDkHaMCXA4XYffjlH+cy1oyKbfzJXa2Do= github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc= -github.com/shirou/gopsutil v2.18.10+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil v2.18.12+incompatible h1:1eaJvGomDnH74/5cF4CTmTbLHAriGFsTZppLXDX93OM= +github.com/shirou/gopsutil v2.18.12+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e h1:MZM7FHLqUHYI0Y/mQAt3d2aYa0SiNms/hFqC9qJYolM= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= @@ -627,24 +620,14 @@ github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJ github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/vfsgen v0.0.0-20180825020608-02ddb050ef6b/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= -github.com/signalfx/com_signalfx_metrics_protobuf v0.0.0-20190222193949-1fb69526e884/go.mod h1:muYA2clvwCdj7nzAJ5vJIXYpJsUumhAl4Uu1wUNpWzA= github.com/signalfx/com_signalfx_metrics_protobuf v0.0.0-20190530013331-054be550cb49 h1:a6us2VYa4abLd4FG6F3BaGEzuq6WIvloIx3M40ePaJ0= github.com/signalfx/com_signalfx_metrics_protobuf v0.0.0-20190530013331-054be550cb49/go.mod h1:muYA2clvwCdj7nzAJ5vJIXYpJsUumhAl4Uu1wUNpWzA= -github.com/signalfx/gohistogram v0.0.0-20160107210732-1ccfd2ff5083/go.mod h1:adPDS6s7WaajdFBV9mQ7i0dKfQ8xiDnF9ZNETVPpp7c= -github.com/signalfx/golib/v3 v3.0.0/go.mod h1:p+krygP/cDlWvCBEgdkQp3H16rbP4NW7YQa81TDMRe8= -github.com/signalfx/gomemcache v0.0.0-20180823214636-4f7ef64c72a9/go.mod h1:Ytb8KfCSyuwy/VILnROdgCvbQLA5ch0nkbG7lKT0BXw= github.com/signalfx/sapm-proto v0.0.2/go.mod h1:mnxTtJuYpsmOFW0F+f95bazdXGUnvjMMwbRNgSjaDb4= -github.com/signalfx/sapm-proto v0.0.3-0.20191210132251-3bc7d225b76d h1:FViLbVumRGKSV5LGSkZlXwCOkhklEOt84Y7MuKS29L4= -github.com/signalfx/sapm-proto v0.0.3-0.20191210132251-3bc7d225b76d/go.mod h1:IZihj/XeDgvA1z3fQx55O6V5LO3G8bC7rRkwySqDcng= github.com/signalfx/sapm-proto v0.0.3-0.20191211161027-5e20f16d64d6 h1:yOY4t2Wtvr0tIcwvTzrHwihjwnVR7F/BitjcOMiY2wY= github.com/signalfx/sapm-proto v0.0.3-0.20191211161027-5e20f16d64d6/go.mod h1:IZihj/XeDgvA1z3fQx55O6V5LO3G8bC7rRkwySqDcng= -github.com/signalfx/thrift v0.0.0-20181211001559-3838fa316492/go.mod h1:Xv29nl9fxdk0hmeqcUHgAZZwvYrOhduNW+9qk4H+6K0= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/assertions v0.0.0-20190215210624-980c5ac6f3ac/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4-0.20190306220146-200a235640ff/go.mod h1:KSQcGKpxUMHk3nbYzs/tIBAM2iDooCn0BmttHOJEbLs= github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/sourcegraph/go-diff v0.5.1 h1:gO6i5zugwzo1RVTvgvfwCOSVegNuvnNi6bAD1QCmkHs= @@ -715,7 +698,6 @@ github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyC github.com/valyala/fasthttp v1.2.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s= github.com/valyala/quicktemplate v1.2.0/go.mod h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOVRUAfrukLPuGJ4= github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= -github.com/vaughan0/go-ini v0.0.0-20130923145212-a98ad7ee00ec/go.mod h1:owBmyHYMLkxyrugmfwE/DLJyW8Ro9mkphwuVErQ0iUw= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= @@ -796,7 +778,6 @@ golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/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-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181207154023-610586996380/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190206173232-65e2d4e15006/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -866,7 +847,6 @@ golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190912141932-bc967efca4b8 h1:41hwlulw1prEMBxLQSlMSux1zxJf07B3WPsdjJlKZxE= golang.org/x/sys v0.0.0-20190912141932-bc967efca4b8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191119195528-f068ffe820e4 h1:FjhQftcbpdYXneEYSWZO7+6Bu+Bi1A8VPvGYWOIzIbw= golang.org/x/sys v0.0.0-20191119195528-f068ffe820e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e h1:9vRrk9YW2BTzLP0VCB9ZDjU4cPqkg+IDWL7XgxA1yxQ= @@ -991,7 +971,6 @@ gopkg.in/fsnotify/fsnotify.v1 v1.4.7/go.mod h1:Fyux9zXlo4rWoMSIzpn9fDAYjalPqJ/K1 gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= diff --git a/testbed/go.mod b/testbed/go.mod index bb3e54945f1e..fc2acd749196 100644 --- a/testbed/go.mod +++ b/testbed/go.mod @@ -3,7 +3,6 @@ module github.com/open-telemetry/opentelemetry-collector-contrib/testbed go 1.12 require ( - github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191211145602-94066e4c70c1 - github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191211145602-94066e4c70c1 - github.com/stretchr/testify v1.4.0 + github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212134434-b4b3530a43d9 // indirect + github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191212134434-b4b3530a43d9 ) diff --git a/testbed/go.sum b/testbed/go.sum index ba61c5712047..d381054bca49 100644 --- a/testbed/go.sum +++ b/testbed/go.sum @@ -1,22 +1,29 @@ 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 h1:7gXaI3V/b4DRaK++rTqhRajcT7z8gtP0qKMZTXqlySM= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= contrib.go.opencensus.io/exporter/jaeger v0.1.1-0.20190430175949-e8b55949d948 h1:xdP25yLqNGSnpfDmEChwA9ZuKLdiyL0jqJKPm/Ypfag= contrib.go.opencensus.io/exporter/jaeger v0.1.1-0.20190430175949-e8b55949d948/go.mod h1:ukdzwIYYHgZ7QYtwVFQUjiT28BJHiMhTERo32s6qVgM= contrib.go.opencensus.io/exporter/ocagent v0.6.0 h1:Z1n6UAyr0QwM284yUuh5Zd8JlvxUGAhFZcgMJkMPrGM= contrib.go.opencensus.io/exporter/ocagent v0.6.0/go.mod h1:zmKjrJcdo0aYcVS7bmEeSEBLPA9YJp5bjrofdU3pIXs= contrib.go.opencensus.io/exporter/prometheus v0.1.0/go.mod h1:cGFniUXGZlKRjzOyuZJ6mgB+PgBcCIa79kEKR8YCW+A= +contrib.go.opencensus.io/resource v0.1.2 h1:b4WFJV8u7/NzPWHeTqj3Ec2AW8OGhtJxC/hbphIOvbU= contrib.go.opencensus.io/resource v0.1.2/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= +github.com/Azure/azure-sdk-for-go v23.2.0+incompatible h1:bch1RS060vGpHpY3zvQDV4rOiRw25J1zmR/B9a76aSA= github.com/Azure/azure-sdk-for-go v23.2.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/go-autorest v11.1.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest v11.2.8+incompatible h1:Q2feRPMlcfVcqz3pF87PJzkm5lZrL+x6BDtzhODzNJM= github.com/Azure/go-autorest v11.2.8+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= 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/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/OneOfOne/xxhash v1.2.5 h1:zl/OfRA6nftbBK9qTohYBJ5xvw6C/oNKizR7cZGl3cI= github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= +github.com/OpenPeeDeeP/depguard v1.0.1 h1:VlW4R6jmBIv3/u1JNlawEvJMM4J+dPORPaZasQee8Us= github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= @@ -26,36 +33,46 @@ github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdko github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk= github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= 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 h1:Hs82Z41s6SdL1CELW+XaDYmOH4hkBN4/N9og/AsOv7E= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/apache/thrift v0.0.0-20161221203622-b2a4d4ae21c7 h1:Fv9bK1Q+ly/ROk4aJsVMeuIwPel4bEnD8EPiI91nZMg= github.com/apache/thrift v0.0.0-20161221203622-b2a4d4ae21c7/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878 h1:EFSB7Zo9Eg91v7MJPVsifUysc/wPdN+NOnVe6bWbdBM= github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878/go.mod h1:3AMJUQhVx52RsWOnlkpikZr01T/yAVN2gn0861vByNg= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/aws/aws-sdk-go v1.23.12 h1:2UnxgNO6Y5J1OrkXS8XNp0UatDxD1bWHiDT62RDPggI= github.com/aws/aws-sdk-go v1.23.12/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= 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 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= 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/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b h1:AP/Y7sqYicnjGDfD5VcY4CIfh1hRXBUavxrvELjTiOE= github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b/go.mod h1:ac9efd0D1fsDb3EJvhqgXRbFx7bs2wqZ10HQPeU8U/Q= +github.com/bombsimon/wsl v1.2.5 h1:9gTOkIwVtoDZywvX802SDHokeX4kW1cKnV8ZTVAPkRs= github.com/bombsimon/wsl v1.2.5/go.mod h1:43lEF/i0kpXbLCeDXL9LMT8c92HyBywXb0AsgMHYngM= github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v0.0.0-20181017004759-096ff4a8a059/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= @@ -70,6 +87,7 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs 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/dgrijalva/jwt-go v0.0.0-20160705203006-01aeca54ebda/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dgryski/go-sip13 v0.0.0-20190329191031-25c5027a8c7b/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= @@ -85,7 +103,9 @@ github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/evanphx/json-patch v0.0.0-20190203023257-5858425f7550/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.5.0+incompatible h1:ouOWdg56aJriqS0huScTkVXPC5IcNrDCXZ6OoTAWu7M= github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -93,14 +113,19 @@ github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2H github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/go-critic/go-critic v0.3.5-0.20190904082202-d79a9f0c64db h1:GYXWx7Vr3+zv833u+8IoXbNnQY0AdXsxAgI0kX7xcwA= github.com/go-critic/go-critic v0.3.5-0.20190904082202-d79a9f0c64db/go.mod h1:+sE8vrLDS2M0pZkBk0wy6+nLdKexVDrl/jBqQOTDThA= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-lintpack/lintpack v0.5.2 h1:DI5mA3+eKdWeJ40nU4d6Wc26qmdG8RCi/btYq0TuRN0= github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI= github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= @@ -150,21 +175,32 @@ github.com/go-openapi/swag v0.19.4/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh github.com/go-openapi/validate v0.17.2/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= +github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g= github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= +github.com/go-toolsmith/astcopy v1.0.0 h1:OMgl1b1MEpjFQ1m5ztEO06rz5CUd3oBv9RF7+DyvdG8= github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astequal v1.0.0 h1:4zxD8j3JRFNyLN46lodQuqz3xdKSrur7U/sr0SDS/gQ= github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= github.com/go-toolsmith/astfmt v0.0.0-20180903215011-8f8ee99c3086/go.mod h1:mP93XdblcopXwlyN4X4uodxXQhldPGZbcEJIimQHrkg= +github.com/go-toolsmith/astfmt v1.0.0 h1:A0vDDXt+vsvLEdbMFJAUBI/uTbRw1ffOPnxsILnFL6k= github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU= github.com/go-toolsmith/astp v0.0.0-20180903215135-0af7e3c24f30/go.mod h1:SV2ur98SGypH1UjcPpCatrV5hPazG6+IfNHbkDXBRrk= +github.com/go-toolsmith/astp v1.0.0 h1:alXE75TXgcmupDsMK1fRAy0YUzLzqPVvBKoyWV+KPXg= github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= github.com/go-toolsmith/pkgload v0.0.0-20181119091011-e9e65178eee8/go.mod h1:WoMrjiy4zvdS+Bg6z9jZH82QXwkcgCBX6nOfnmdaHks= +github.com/go-toolsmith/pkgload v1.0.0 h1:4DFWWMXVfbcN5So1sBNW9+yeiMqLFGl1wFLTL5R0Tgg= github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc= +github.com/go-toolsmith/strparse v1.0.0 h1:Vcw78DnpCAKlM20kSbAyO4mPfJn/lyYA4BJUDxe2Jb4= github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= +github.com/go-toolsmith/typep v1.0.0 h1:zKymWyA1TRYvqYrYDrfEMZULyrhcnGY3x7LDKU2XQaA= github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/gofrs/flock v0.0.0-20190320160742-5135e617513b h1:ekuhfTjngPhisSjOJ0QWKpPQE8/rbknHaes6WVJj5Hw= github.com/gofrs/flock v0.0.0-20190320160742-5135e617513b/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.3.0 h1:M695OaDJ5ipWvDPcoAg/YL9c3uORAegkEfBqTQF/fTQ= @@ -177,6 +213,7 @@ github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5 github.com/gogo/protobuf v1.2.2-0.20190730201129-28a6bbf47e48/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.0 h1:G8O7TerXerS4F6sx9OV7/nRfJdnXgHZu/S/7F2SN+UE= github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -191,31 +228,51 @@ github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0= github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM= github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6 h1:YYWNAGTKWhKpcLLt7aSj/odlKrSrelQwlovBpDuf19w= github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0= +github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613 h1:9kfjN3AdxcbsZBf8NjltjWihK2QfBBBZuv91cMFfDHw= github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= +github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3 h1:pe9JHs3cHHDQgOFXJJdYkK6fLz2PWyYtP4hthoCMvs8= github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3/go.mod h1:JXrF4TWy4tXYn62/9x8Wm/K/dm06p8tCKwFRDPZG/1o= +github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee h1:J2XAy40+7yz70uaOiMbNnluTg7gyQhtGqLQncQh+4J8= github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU= +github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a h1:iR3fYXUjHCR97qWS8ch1y9zPNsgXThGwjKPrYfqMPks= github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= +github.com/golangci/golangci-lint v1.21.0 h1:HxAxpR8Z0M8omihvQdsD3PF0qPjlqYqp2vMJzstoKeI= github.com/golangci/golangci-lint v1.21.0/go.mod h1:phxpHK52q7SE+5KpPnti4oZTdFCEsn/tKN+nFvCKXfk= +github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc h1:gLLhTLMk2/SutryVJ6D4VZCU3CUqr8YloG7FPIBWFpI= github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc/go.mod h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU= +github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA= github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA= github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= +github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770 h1:EL/O5HGrF7Jaq0yNhBLucz9hTuRzj2LdwGBOaENgxIk= github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21 h1:leSNB7iYzLYSSx3J/s5sVf4Drkc68W2wm4Ixh/mr0us= github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI= +github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0 h1:HVfrLniijszjS1aiNg8JbBMO2+E1WIQ+j/gL4SQqGPg= github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= +github.com/google/addlicense v0.0.0-20190510175307-22550fa7c1b0 h1:ydbHzabf84uucKri5fcfiqYxGg+rYgP/zQfLLN8lyP0= github.com/google/addlicense v0.0.0-20190510175307-22550fa7c1b0/go.mod h1:QtPG26W17m+OIQgE6gQ24gC1M6pUaMBAbFrTIDtwG/E= github.com/google/btree v0.0.0-20160524151835-7d79101e329e/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= 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 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= +github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= 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/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -226,17 +283,21 @@ github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/google/uuid v1.1.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/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 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gnostic v0.0.0-20170426233943-68f4ded48ba9/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.3.0 h1:CcQijm0XKekKjP/YCz28LXVSpgguuB+nCxaSjCe09y0= github.com/googleapis/gnostic v0.3.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/gophercloud/gophercloud v0.0.0-20190126172459-c818fa66e4c8/go.mod h1:3WdhXV3rUYy9p6AUW8d94kr+HS62Y4VL9mBnFxsD8q4= +github.com/gophercloud/gophercloud v0.3.0 h1:6sjpKIpVwRIIwmcEGp+WwNovNsem+c+2vm6oxshRpL8= github.com/gophercloud/gophercloud v0.3.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3 h1:JVnpOZS+qxli+rgVl98ILOXVNbW+kb5wcxeGx8ShUIw= github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= @@ -247,67 +308,90 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t github.com/grpc-ecosystem/grpc-gateway v1.11.1 h1:/dBYI+n4xIL+Y9SKXQrjlKTmJJDwCSlNLRwZ5nBhIek= github.com/grpc-ecosystem/grpc-gateway v1.11.1/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/api v1.2.0 h1:oPsuzLp2uk7I7rojPKuncWbZ+m5TMoD4Ivs+2Rkeh4Y= github.com/hashicorp/consul/api v1.2.0/go.mod h1:1SIkFYi2ZTXUE5Kgt179+4hH33djo11+0Eo2XgTAtkw= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.2.0 h1:GWFYFmry/k4b1hEoy7kSkmU8e30GAyI4VZHk0fRxeL4= github.com/hashicorp/consul/sdk v0.2.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.1.0 h1:vN9wG1D6KG6YHRTWr8512cxGOVgTMEfgEdSj/hr8MPc= github.com/hashicorp/go-immutable-radix v1.1.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-msgpack v0.5.5 h1:i9R9JSrqIz0QVLz3sz+i3YJdT7TTSLcfLLzJi9aZTuI= github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-rootcerts v1.0.1 h1:DMo4fmknnz0E0evoNYnV48RjWndOsmd6OW+09R3cEP8= github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= 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/golang-lru v0.5.3 h1:YPkqC67at8FYaadspW/6uE0COsBxS2656RLEr8Bppgk= github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= 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/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/memberlist v0.1.4 h1:gkyML/r71w3FL8gUi74Vk76avkj/9lYAY9lvg0OcoGs= github.com/hashicorp/memberlist v0.1.4/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/serf v0.8.3 h1:MWYcmct5EtKz0efYooPcL0yNkem+7kWxqXDi/UIh+8k= github.com/hashicorp/serf v0.8.3/go.mod h1:UpNcs7fFbpKIyZaUuSW6EPiH+eZC7OuyFD+wc1oal+k= +github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/influxdb v1.7.7/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= github.com/jaegertracing/jaeger v1.14.0 h1:C0En+gfcxf3NsAriMAvQ6LcSFrQ5VQGXddqfty1EpTI= github.com/jaegertracing/jaeger v1.14.0/go.mod h1:LUWPSnzNPGRubM8pk0inANGitpiMOOxihXx0+53llXI= github.com/jessevdk/go-flags v0.0.0-20180331124232-1c38ed7ad0cc/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7 h1:K//n/AqR5HjG3qxbrBCL4vJPW0MVFSs9CPK1OOJdRME= github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0= github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024 h1:rBMNdlhTLzJjJSDIjNEXX1Pz3Hmwmz91v+zycvx9PJc= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kylelemons/godebug v0.0.0-20160406211939-eadb3ce320cb/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= @@ -321,19 +405,26 @@ github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb h1:RHba4YImhrUVQDHUCe2BNSOz4tVy2yGyXhvYDvxGgeE= github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= +github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.15 h1:CSSIDtllwGLMoA6zjdKnaE6Tx6eVUxQ29LUgGetiDCI= github.com/miekg/dns v1.1.15/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= +github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= 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/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= @@ -342,49 +433,53 @@ github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:F github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= 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-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/mozilla/tls-observatory v0.0.0-20190404164649-a3c1b6cfecfd/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= 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 h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d h1:AREM5mwr4u1ORQBMvzfzBgpsctsbQikCVpvC+tX285E= github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v0.0.0-20170117200651-66bb6560562f/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v0.0.0-20190113212917-5533ce8a0da3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/open-telemetry/opentelemetry-collector v0.2.0 h1:38/NrGdEEXufWqYFkW/6yeW3koRvb1QbE/2owKSNQvI= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205212659-419ed61e5bac h1:Bif71iXGHh9WH9vA3sU96b0y19zM2kFl2PvaS2IS2v8= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205212659-419ed61e5bac/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= -github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191209163440-5d463fe48816 h1:jVHc4z0F+QFSVWwpyE5aq4qXMseHEDZFLVueVsFze6M= -github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191209163440-5d463fe48816/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= -github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191211145602-94066e4c70c1 h1:hpxbVMM+AK4T5xxugQGO6NF7h/Inj3F+BdRiYeiBRb8= -github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191211145602-94066e4c70c1/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= -github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191206193345-8739948139e0 h1:E0PePrVOI/qnjZLH46e5fDMZGiJpyQIZxC86wAIFp9w= -github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191206193345-8739948139e0/go.mod h1:bd5+hmcMPWQNXGrgUmfxTESLvlGpvRBUNaRX/TxTfuk= -github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191209163440-5d463fe48816 h1:vGnpaKTVNqf8Vdrw/vQBAGVM1pkb8I98YIvqWPFuw1I= -github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191209163440-5d463fe48816/go.mod h1:bd5+hmcMPWQNXGrgUmfxTESLvlGpvRBUNaRX/TxTfuk= -github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191211145602-94066e4c70c1 h1:T/EY2fKzuUDkDcVZ7Nr9ZJPqcvyfoomC+3UIHuV2Liw= -github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191211145602-94066e4c70c1/go.mod h1:0x5LWC/8hyS8Q8fCi0elhTYf9S94RzRX6ZgL7EiYvlQ= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212134434-b4b3530a43d9 h1:BHePbk/BHLNV6U7Duk8kiCQVLHkiXPD6/1Lxcf+fqWw= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212134434-b4b3530a43d9/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= +github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191212134434-b4b3530a43d9 h1:aktELw3sSDx5N+vHeNoyiF59DyYREgEjhnmGkfaMmVk= +github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191212134434-b4b3530a43d9/go.mod h1:0x5LWC/8hyS8Q8fCi0elhTYf9S94RzRX6ZgL7EiYvlQ= github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9/go.mod h1:PLldrQSroqzH70Xl+1DQcGnefIbqsKR7UDaiux3zV+w= github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/openzipkin/zipkin-go v0.2.1 h1:noL5/5Uf1HpVl3wNsfkZhIKbSWCVi5jgqkONNx8PXcA= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/orijtech/prometheus-go-metrics-exporter v0.0.3-0.20190313163149-b321c5297f60 h1:vN7d/Zv6aOXqhspiqoEMkb6uFHNARVESmYn5XtNeyrk= github.com/orijtech/prometheus-go-metrics-exporter v0.0.3-0.20190313163149-b321c5297f60/go.mod h1:+Mu9w51Uc2RNKSUTA95d6Pvy8cxFiRX3ANRPlCcnGLA= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pavius/impi v0.0.0-20180302134524-c1cbdcb8df2b h1:yS0+/i6mwRZCdssUd+MkFJkCn/Evh1PlUKCYe3aCtQw= github.com/pavius/impi v0.0.0-20180302134524-c1cbdcb8df2b/go.mod h1:x/hU0bfdWIhuOT1SKwiJg++yvkk6EuOtJk8WtDZqgr8= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= @@ -392,34 +487,41 @@ github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/9 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 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/prashantv/protectmem v0.0.0-20171002184600-e20412882b3a h1:AA9vgIBDjMHPC2McaGPojgV2dcI78ZC0TLNhYCXEKH8= github.com/prashantv/protectmem v0.0.0-20171002184600-e20412882b3a/go.mod h1:lzZQ3Noex5pfAy7mkAeCjcBDteYU85uWWnJ/y6gKU8k= github.com/prometheus/alertmanager v0.18.0/go.mod h1:WcxHBl40VSPuOaqWae6l6HpnEOVRIycEJ7i9iYkadEE= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.1.0 h1:BQ53HtBmfOitExawJ6LokA4x8ov/z0SYYb0+HxJfRI8= github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= 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 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= +github.com/prometheus/common v0.7.0 h1:L+1lyG48J1zAQXA3RBX/nG/B3gjlHq0zTt2tlbJLyCY= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= 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-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.3 h1:CTwfnzjQ+8dS6MhHHu4YswVAD99sL2wjPqP+VkURmKE= github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/prometheus v0.0.0-20180315085919-58e2a31db8de/go.mod h1:oAIUtOny2rjMX0OWN5vPR5/q/twIROJvdqnQKDdil/s= +github.com/prometheus/prometheus v1.8.2-0.20190924101040-52e0504f83ea h1:DkijwrDmxCei6erPY2JZPJMOr8srbkbOJVkWbhSYWH4= github.com/prometheus/prometheus v1.8.2-0.20190924101040-52e0504f83ea/go.mod h1:elNqjVbwD3sCZJqKzyN7uEuwGcCpeJvv67D6BrHsDbw= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= @@ -431,32 +533,42 @@ github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/samuel/go-zookeeper v0.0.0-20190810000440-0ceca61e4d75 h1:cA+Ubq9qEVIQhIWvP2kNuSZ2CmnfBJFSRq+kO1pu2cc= github.com/samuel/go-zookeeper v0.0.0-20190810000440-0ceca61e4d75/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/satori/go.uuid v0.0.0-20160603004225-b111a074d5ef/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/securego/gosec v0.0.0-20191002120514-e680875ea14d h1:BzRvVq1EHuIjxpijCEKpAxzKUUMurOQ4sknehIATRh8= github.com/securego/gosec v0.0.0-20191002120514-e680875ea14d/go.mod h1:w5+eXa0mYznDkHaMCXA4XYffjlH+cy1oyKbfzJXa2Do= github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc= github.com/shirou/gopsutil v2.18.12+incompatible h1:1eaJvGomDnH74/5cF4CTmTbLHAriGFsTZppLXDX93OM= github.com/shirou/gopsutil v2.18.12+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4 h1:udFKJ0aHUL60LboW/A+DfgoHVedieIzIXE8uylPue0U= github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= +github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e h1:MZM7FHLqUHYI0Y/mQAt3d2aYa0SiNms/hFqC9qJYolM= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041 h1:llrF3Fs4018ePo4+G/HV/uQUqEI1HMDjCeOf2V6puPc= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/vfsgen v0.0.0-20180825020608-02ddb050ef6b/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sourcegraph/go-diff v0.5.1 h1:gO6i5zugwzo1RVTvgvfwCOSVegNuvnNi6bAD1QCmkHs= github.com/sourcegraph/go-diff v0.5.1/go.mod h1:j2dHj3m8aZgQO8lMTcTnBcXkRRRqi34cd2MNlA9u1mE= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= @@ -470,9 +582,11 @@ github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/y github.com/spf13/viper v1.4.1-0.20190911140308-99520c81d86e h1:D4jmJ9BqzeMv7BvAqjooNtXH2PXG7m+pcYRnj2Ojlrk= github.com/spf13/viper v1.4.1-0.20190911140308-99520c81d86e/go.mod h1:jUyf+v/KTOnRyUy2/AsjF537WfJWVv3AnlcKSNd+AIg= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/quantile v0.0.0-20150917103942-b0c588724d25 h1:7z3LSn867ex6VSaahyKadf4WtSsJIgne6A1WLOAGM8A= github.com/streadway/quantile v0.0.0-20150917103942-b0c588724d25/go.mod h1:lbP8tGiBjZ5YWIc2fzuRpTaz0b/53vT6PEs3QuAWzuU= 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.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= @@ -482,6 +596,7 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e h1:RumXZ56IrCj4CL+g1b9OL/oH0QnsF976bC8xQFYUD5Q= github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= @@ -496,8 +611,11 @@ github.com/uber/tchannel-go v1.10.0 h1:YOihLHuvkwT3nzvpgqFtexFW+pb5vD1Tz7h/bIWAp github.com/uber/tchannel-go v1.10.0/go.mod h1:Rrgz1eL8kMjW/nEzZos0t+Heq0O4LhnUJVA32OvWKHo= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ultraware/funlen v0.0.2 h1:Av96YVBwwNSe4MLR7iI/BIa3VyI7/djnto/pK3Uxbdo= github.com/ultraware/funlen v0.0.2/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/whitespace v0.0.4 h1:If7Va4cM03mpgrNH9k49/VOicWpGoG70XPBFFODYDsg= github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= +github.com/uudashr/gocognit v0.0.0-20190926065955-1655d0de0517 h1:ChMKTho2hWKpks/nD/FL2KqM1wuVt62oJeiE8+eFpGs= github.com/uudashr/gocognit v0.0.0-20190926065955-1655d0de0517/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.2.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s= @@ -531,6 +649,7 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392 h1:ACG4HJsFiNMf47Y4PeRoebLNy/2lXT9EtprMuTFWt1M= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -571,6 +690,7 @@ golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLL 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-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/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= @@ -613,6 +733,7 @@ golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20161028155119-f51c12702a4d/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -642,6 +763,7 @@ golang.org/x/tools v0.0.0-20190719005602-e377ae9d6386/go.mod h1:jcCCGcm9btYwXyDq golang.org/x/tools v0.0.0-20190813034749-528a2984e271/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190930201159-7c411dea38b0/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191010075000-0337d82405ff h1:XdBG6es/oFDr1HwaxkxgVve7NB281QhxgK/i4voubFs= golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= @@ -652,6 +774,7 @@ google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhE 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 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= 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= @@ -673,13 +796,18 @@ google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/fsnotify/fsnotify.v1 v1.4.7 h1:XNNYLJHt73EyYiCZi6+xjupS9CpvmiDgjPTAjrBlQbo= gopkg.in/fsnotify/fsnotify.v1 v1.4.7/go.mod h1:Fyux9zXlo4rWoMSIzpn9fDAYjalPqJ/K1qJ27s+7ltE= gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -690,27 +818,39 @@ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWh 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 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= k8s.io/api v0.0.0-20190620084959-7cf5895f2711/go.mod h1:TBhBqb1AWbBQbW3XRusr7n7E4v2+5ZY8r8sAMnyFC5A= +k8s.io/api v0.0.0-20190813020757-36bff7324fb7 h1:4uJOjRn9kWq4AqJRE8+qzmAy+lJd9rh8TY455dNef4U= k8s.io/api v0.0.0-20190813020757-36bff7324fb7/go.mod h1:3Iy+myeAORNCLgjd/Xu9ebwN7Vh59Bw0vh9jhoX+V58= k8s.io/apimachinery v0.0.0-20190612205821-1799e75a0719/go.mod h1:I4A+glKBHiTgiEjQiCCQfCAIcIMFGt291SmsvcrFzJA= +k8s.io/apimachinery v0.0.0-20190809020650-423f5d784010 h1:pyoq062NftC1y/OcnbSvgolyZDJ8y4fmUPWMkdA6gfU= k8s.io/apimachinery v0.0.0-20190809020650-423f5d784010/go.mod h1:Waf/xTS2FGRrgXCkO5FP3XxTOWh0qLf2QhL1qFZZ/R8= k8s.io/client-go v0.0.0-20190620085101-78d2af792bab/go.mod h1:E95RaSlHr79aHaX0aGSwcPNfygDiPKOVXdmivCIZT0k= +k8s.io/client-go v12.0.0+incompatible h1:YlJxncpeVUC98/WMZKC3JZGk/OXQWCZjAB4Xr3B17RY= k8s.io/client-go v12.0.0+incompatible/go.mod h1:E95RaSlHr79aHaX0aGSwcPNfygDiPKOVXdmivCIZT0k= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.3.1/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.4.0 h1:lCJCxf/LIowc2IGS9TPjWDyXY4nOmdGdfcwwDQCOURQ= k8s.io/klog v0.4.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= k8s.io/kube-openapi v0.0.0-20190709113604-33be087ad058/go.mod h1:nfDlWeOsu3pUf4yWGL+ERqohP4YsZcBJXWMK+gkzOA4= +k8s.io/kube-openapi v0.0.0-20190722073852-5e22f3d471e6 h1:s9IxTKe9GwDH0S/WaX62nFYr0or32DsTWex9AileL7U= k8s.io/kube-openapi v0.0.0-20190722073852-5e22f3d471e6/go.mod h1:RZvgC8MSN6DjiMV6oIfEE9pDL9CYXokkfaCKZeHm3nc= k8s.io/utils v0.0.0-20190221042446-c2654d5206da/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3oVhZz7sSzSiPnVZayjIX0= +k8s.io/utils v0.0.0-20190809000727-6c36bc71fc4a h1:uy5HAgt4Ha5rEMbhZA+aM1j2cq5LmR6LQ71EYC2sVH4= k8s.io/utils v0.0.0-20190809000727-6c36bc71fc4a/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo= mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= +mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f h1:Cq7MalBHYACRd6EesksG1Q8EoIAKOsiZviGKbOLIej4= mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f/go.mod h1:4G1h5nDURzA3bwVMZIVpwbkw+04kSxk3rAtzlimaUJw= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= +sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4 h1:JPJh2pk3+X4lXAkZIk2RuE/7/FoK9maXw+TNPJhVS/c= sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= diff --git a/testbed/tests/trace_test.go b/testbed/tests/trace_test.go index 43340b2832e8..1560532d119f 100644 --- a/testbed/tests/trace_test.go +++ b/testbed/tests/trace_test.go @@ -32,16 +32,16 @@ func TestMain(m *testing.M) { func TestTrace10kSPS(t *testing.T) { tests := []struct { name string - receiver testbed.Receiver + receiver testbed.DataReceiver }{ - {"JaegerReceiver", testbed.NewJaegerReceiver(testbed.GetAvailablePort(t))}, + {"JaegerReceiver", testbed.NewJaegerDataReceiver(testbed.GetAvailablePort(t))}, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { scenarios.Scenario10kItemsPerSecond( t, - testbed.NewJaegerExporter(testbed.GetAvailablePort(t)), + testbed.NewJaegerDataSender(testbed.GetAvailablePort(t)), test.receiver, testbed.LoadOptions{}, ) From af8a37b00e745a7a01040a74c58b490c94140ef3 Mon Sep 17 00:00:00 2001 From: Owais Lone Date: Fri, 13 Dec 2019 09:08:54 +0530 Subject: [PATCH 27/59] Ported kinesis exporter from Omnition (#60) Porting the existing kinesis exporter from Omnition's Otel distribution to contrib. Porting from: https://github.com/Omnition/omnition-opentelemetry-collector/tree/master/exporter/kinesis --- cmd/otelcontribcol/components.go | 2 + exporter/kinesisexporter/Makefile | 1 + exporter/kinesisexporter/config.go | 55 ++ exporter/kinesisexporter/config_test.go | 119 +++ exporter/kinesisexporter/exporter.go | 70 ++ exporter/kinesisexporter/factory.go | 98 +++ exporter/kinesisexporter/go.mod | 10 + exporter/kinesisexporter/go.sum | 741 ++++++++++++++++++ exporter/kinesisexporter/testdata/config.yaml | 40 + .../kinesisexporter/testdata/default.yaml | 15 + go.mod | 6 +- go.sum | 45 +- 12 files changed, 1189 insertions(+), 13 deletions(-) create mode 100644 exporter/kinesisexporter/Makefile create mode 100644 exporter/kinesisexporter/config.go create mode 100644 exporter/kinesisexporter/config_test.go create mode 100644 exporter/kinesisexporter/exporter.go create mode 100644 exporter/kinesisexporter/factory.go create mode 100644 exporter/kinesisexporter/go.mod create mode 100644 exporter/kinesisexporter/go.sum create mode 100644 exporter/kinesisexporter/testdata/config.yaml create mode 100644 exporter/kinesisexporter/testdata/default.yaml diff --git a/cmd/otelcontribcol/components.go b/cmd/otelcontribcol/components.go index 1479ea544c6d..a49b7e6eb954 100644 --- a/cmd/otelcontribcol/components.go +++ b/cmd/otelcontribcol/components.go @@ -22,6 +22,7 @@ import ( "github.com/open-telemetry/opentelemetry-collector/receiver" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter" + "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kinesisexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/stackdriverexporter" @@ -55,6 +56,7 @@ func components() (config.Factories, error) { &azuremonitorexporter.Factory{}, &signalfxexporter.Factory{}, &sapmexporter.Factory{}, + &kinesisexporter.Factory{}, } for _, exp := range factories.Exporters { exporters = append(exporters, exp) diff --git a/exporter/kinesisexporter/Makefile b/exporter/kinesisexporter/Makefile new file mode 100644 index 000000000000..c1496226e590 --- /dev/null +++ b/exporter/kinesisexporter/Makefile @@ -0,0 +1 @@ +include ../../Makefile.Common \ No newline at end of file diff --git a/exporter/kinesisexporter/config.go b/exporter/kinesisexporter/config.go new file mode 100644 index 000000000000..4baafbe1ce43 --- /dev/null +++ b/exporter/kinesisexporter/config.go @@ -0,0 +1,55 @@ +// 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 kinesisexporter + +import ( + "github.com/open-telemetry/opentelemetry-collector/config/configmodels" +) + +// AWSConfig contains AWS specific configuration such as kinesis stream, region, etc. +type AWSConfig struct { + StreamName string `mapstructure:"stream_name"` + KinesisEndpoint string `mapstructure:"kinesis_endpoint"` + Region string `mapstructure:"region"` + Role string `mapstructure:"role"` +} + +// KPLConfig contains kinesis producer library related config to controls things +// like aggregation, batching, connections, retries, etc. +type KPLConfig struct { + AggregateBatchCount int `mapstructure:"aggregate_batch_count"` + AggregateBatchSize int `mapstructure:"aggregate_batch_size"` + BatchSize int `mapstructure:"batch_size"` + BatchCount int `mapstructure:"batch_count"` + BacklogCount int `mapstructure:"backlog_count"` + FlushIntervalSeconds int `mapstructure:"flush_interval_seconds"` + MaxConnections int `mapstructure:"max_connections"` + MaxRetries int `mapstructure:"max_retries"` + MaxBackoffSeconds int `mapstructure:"max_backoff_seconds"` +} + +// Config contains the main configuration options for the kinesis exporter +type Config struct { + configmodels.ExporterSettings `mapstructure:",squash"` + + AWS AWSConfig `mapstructure:"aws"` + KPL KPLConfig `mapstructure:"kpl"` + + QueueSize int `mapstructure:"queue_size"` + NumWorkers int `mapstructure:"num_workers"` + MaxBytesPerBatch int `mapstructure:"max_bytes_per_batch"` + MaxBytesPerSpan int `mapstructure:"max_bytes_per_span"` + FlushIntervalSeconds int `mapstructure:"flush_interval_seconds"` +} diff --git a/exporter/kinesisexporter/config_test.go b/exporter/kinesisexporter/config_test.go new file mode 100644 index 000000000000..9f353932e343 --- /dev/null +++ b/exporter/kinesisexporter/config_test.go @@ -0,0 +1,119 @@ +// 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 kinesisexporter + +import ( + "path" + "testing" + + "github.com/open-telemetry/opentelemetry-collector/config" + "github.com/open-telemetry/opentelemetry-collector/config/configcheck" + "github.com/open-telemetry/opentelemetry-collector/config/configmodels" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestDefaultConfig(t *testing.T) { + factories, err := config.ExampleComponents() + assert.Nil(t, err) + + factory := &Factory{} + factories.Exporters[factory.Type()] = factory + cfg, err := config.LoadConfigFile( + t, path.Join(".", "testdata", "default.yaml"), factories, + ) + require.NoError(t, err) + require.NotNil(t, cfg) + + e := cfg.Exporters["kinesis"] + + assert.Equal(t, e, + &Config{ + ExporterSettings: configmodels.ExporterSettings{ + TypeVal: "kinesis", + NameVal: "kinesis", + }, + AWS: AWSConfig{ + Region: "us-west-2", + }, + KPL: KPLConfig{ + BatchSize: 5242880, + BatchCount: 1000, + BacklogCount: 2000, + FlushIntervalSeconds: 5, + MaxConnections: 24, + }, + + QueueSize: 100000, + NumWorkers: 8, + FlushIntervalSeconds: 5, + MaxBytesPerBatch: 100000, + MaxBytesPerSpan: 900000, + }, + ) +} + +func TestConfig(t *testing.T) { + factories, err := config.ExampleComponents() + assert.Nil(t, err) + + factory := &Factory{} + factories.Exporters[factory.Type()] = factory + cfg, err := config.LoadConfigFile( + t, path.Join(".", "testdata", "config.yaml"), factories, + ) + + require.NoError(t, err) + require.NotNil(t, cfg) + + e := cfg.Exporters["kinesis"] + + assert.Equal(t, e, + &Config{ + ExporterSettings: configmodels.ExporterSettings{ + TypeVal: "kinesis", + NameVal: "kinesis", + }, + AWS: AWSConfig{ + StreamName: "test-stream", + KinesisEndpoint: "kinesis.mars-1.aws.galactic", + Region: "mars-1", + Role: "arn:test-role", + }, + KPL: KPLConfig{ + AggregateBatchCount: 10, + AggregateBatchSize: 11, + BatchSize: 12, + BatchCount: 13, + BacklogCount: 14, + FlushIntervalSeconds: 15, + MaxConnections: 16, + MaxRetries: 17, + MaxBackoffSeconds: 18, + }, + + QueueSize: 1, + NumWorkers: 2, + FlushIntervalSeconds: 3, + MaxBytesPerBatch: 4, + MaxBytesPerSpan: 5, + }, + ) +} + +func TestConfigCheck(t *testing.T) { + cfg := (&Factory{}).CreateDefaultConfig() + assert.NoError(t, configcheck.ValidateConfig(cfg)) +} diff --git a/exporter/kinesisexporter/exporter.go b/exporter/kinesisexporter/exporter.go new file mode 100644 index 000000000000..3186aebcd578 --- /dev/null +++ b/exporter/kinesisexporter/exporter.go @@ -0,0 +1,70 @@ +// 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 kinesisexporter + +import ( + "context" + + "github.com/open-telemetry/opentelemetry-collector/consumer/consumerdata" + "github.com/open-telemetry/opentelemetry-collector/consumer/consumererror" + "github.com/open-telemetry/opentelemetry-collector/exporter" + jaegertranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace/jaeger" + kinesis "github.com/signalfx/opencensus-go-exporter-kinesis" + "go.uber.org/zap" +) + +// Exporter implements an OpenTelemetry trace exporter that exports all spans to AWS Kinesis +type Exporter struct { + kinesis *kinesis.Exporter + logger *zap.Logger +} + +var _ (exporter.TraceExporter) = (*Exporter)(nil) + +// Start tells the exporter to start. The exporter may prepare for exporting +// by connecting to the endpoint. Host parameter can be used for communicating +// with the host after Start() has already returned. If error is returned by +// Start() then the collector startup will be aborted. +func (e Exporter) Start(host exporter.Host) error { + return nil +} + +// Shutdown is invoked during exporter shutdown. +func (e Exporter) Shutdown() error { + e.kinesis.Flush() + return nil +} + +// ConsumeTraceData receives a span batch and exports it to AWS Kinesis +func (e Exporter) ConsumeTraceData(c context.Context, td consumerdata.TraceData) error { + pBatch, err := jaegertranslator.OCProtoToJaegerProto(td) + if err != nil { + e.logger.Error("error translating span batch", zap.Error(err)) + return consumererror.Permanent(err) + } + // TODO: Use a multi error type + var exportErr error + for _, span := range pBatch.GetSpans() { + if span.Process == nil { + span.Process = pBatch.Process + } + err := e.kinesis.ExportSpan(span) + if err != nil { + e.logger.Error("error exporting span to kinesis", zap.Error(err)) + exportErr = err + } + } + return exportErr +} diff --git a/exporter/kinesisexporter/factory.go b/exporter/kinesisexporter/factory.go new file mode 100644 index 000000000000..12570e16f1dc --- /dev/null +++ b/exporter/kinesisexporter/factory.go @@ -0,0 +1,98 @@ +// 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 kinesisexporter + +import ( + "github.com/open-telemetry/opentelemetry-collector/config/configerror" + "github.com/open-telemetry/opentelemetry-collector/config/configmodels" + "github.com/open-telemetry/opentelemetry-collector/exporter" + kinesis "github.com/signalfx/opencensus-go-exporter-kinesis" + "go.uber.org/zap" +) + +const ( + // The value of "type" key in configuration. + typeStr = "kinesis" + exportFormat = "jaeger-proto" +) + +// Factory is the factory for Kinesis exporter. +type Factory struct { +} + +// Type gets the type of the Exporter config created by this factory. +func (f *Factory) Type() string { + return typeStr +} + +// CreateDefaultConfig creates the default configuration for exporter. +func (f *Factory) CreateDefaultConfig() configmodels.Exporter { + return &Config{ + AWS: AWSConfig{ + Region: "us-west-2", + }, + KPL: KPLConfig{ + BatchSize: 5242880, + BatchCount: 1000, + BacklogCount: 2000, + FlushIntervalSeconds: 5, + MaxConnections: 24, + }, + + QueueSize: 100000, + NumWorkers: 8, + FlushIntervalSeconds: 5, + MaxBytesPerBatch: 100000, + MaxBytesPerSpan: 900000, + } +} + +// CreateTraceExporter initializes and returns a new trace exporter +func (f *Factory) CreateTraceExporter(logger *zap.Logger, cfg configmodels.Exporter) (exporter.TraceExporter, error) { + c := cfg.(*Config) + k, err := kinesis.NewExporter(kinesis.Options{ + Name: c.Name(), + StreamName: c.AWS.StreamName, + AWSRegion: c.AWS.Region, + AWSRole: c.AWS.Role, + AWSKinesisEndpoint: c.AWS.KinesisEndpoint, + + KPLAggregateBatchSize: c.KPL.AggregateBatchSize, + KPLAggregateBatchCount: c.KPL.AggregateBatchCount, + KPLBatchSize: c.KPL.BatchSize, + KPLBatchCount: c.KPL.BatchCount, + KPLBacklogCount: c.KPL.BacklogCount, + KPLFlushIntervalSeconds: c.KPL.FlushIntervalSeconds, + KPLMaxConnections: c.KPL.MaxConnections, + KPLMaxRetries: c.KPL.MaxRetries, + KPLMaxBackoffSeconds: c.KPL.MaxBackoffSeconds, + + QueueSize: c.QueueSize, + NumWorkers: c.NumWorkers, + MaxAllowedSizePerSpan: c.MaxBytesPerSpan, + MaxListSize: c.MaxBytesPerBatch, + ListFlushInterval: c.FlushIntervalSeconds, + Encoding: exportFormat, + }, logger) + if err != nil { + return nil, err + } + return Exporter{k, logger}, nil +} + +// CreateMetricsExporter creates a metrics exporter based on this config. +func (f *Factory) CreateMetricsExporter(logger *zap.Logger, cfg configmodels.Exporter) (exporter.MetricsExporter, error) { + return nil, configerror.ErrDataTypeIsNotSupported +} diff --git a/exporter/kinesisexporter/go.mod b/exporter/kinesisexporter/go.mod new file mode 100644 index 000000000000..76850a23627d --- /dev/null +++ b/exporter/kinesisexporter/go.mod @@ -0,0 +1,10 @@ +module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kinesisexporter + +go 1.12 + +require ( + github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191119152140-567e1046cefa + github.com/signalfx/opencensus-go-exporter-kinesis v0.4.0 + github.com/stretchr/testify v1.4.0 + go.uber.org/zap v1.10.0 +) diff --git a/exporter/kinesisexporter/go.sum b/exporter/kinesisexporter/go.sum new file mode 100644 index 000000000000..adc7965fae81 --- /dev/null +++ b/exporter/kinesisexporter/go.sum @@ -0,0 +1,741 @@ +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 h1:7gXaI3V/b4DRaK++rTqhRajcT7z8gtP0qKMZTXqlySM= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +contrib.go.opencensus.io/exporter/jaeger v0.1.1-0.20190430175949-e8b55949d948 h1:xdP25yLqNGSnpfDmEChwA9ZuKLdiyL0jqJKPm/Ypfag= +contrib.go.opencensus.io/exporter/jaeger v0.1.1-0.20190430175949-e8b55949d948/go.mod h1:ukdzwIYYHgZ7QYtwVFQUjiT28BJHiMhTERo32s6qVgM= +contrib.go.opencensus.io/exporter/ocagent v0.6.0 h1:Z1n6UAyr0QwM284yUuh5Zd8JlvxUGAhFZcgMJkMPrGM= +contrib.go.opencensus.io/exporter/ocagent v0.6.0/go.mod h1:zmKjrJcdo0aYcVS7bmEeSEBLPA9YJp5bjrofdU3pIXs= +contrib.go.opencensus.io/exporter/prometheus v0.1.0/go.mod h1:cGFniUXGZlKRjzOyuZJ6mgB+PgBcCIa79kEKR8YCW+A= +contrib.go.opencensus.io/resource v0.1.2 h1:b4WFJV8u7/NzPWHeTqj3Ec2AW8OGhtJxC/hbphIOvbU= +contrib.go.opencensus.io/resource v0.1.2/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= +git.apache.org/thrift.git v0.12.0/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= +github.com/Azure/azure-sdk-for-go v23.2.0+incompatible h1:bch1RS060vGpHpY3zvQDV4rOiRw25J1zmR/B9a76aSA= +github.com/Azure/azure-sdk-for-go v23.2.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/go-autorest v11.1.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest v11.2.8+incompatible h1:Q2feRPMlcfVcqz3pF87PJzkm5lZrL+x6BDtzhODzNJM= +github.com/Azure/go-autorest v11.2.8+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= +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/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/OneOfOne/xxhash v1.2.5 h1:zl/OfRA6nftbBK9qTohYBJ5xvw6C/oNKizR7cZGl3cI= +github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= +github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= +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 h1:Hs82Z41s6SdL1CELW+XaDYmOH4hkBN4/N9og/AsOv7E= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/apache/thrift v0.0.0-20161221203622-b2a4d4ae21c7 h1:Fv9bK1Q+ly/ROk4aJsVMeuIwPel4bEnD8EPiI91nZMg= +github.com/apache/thrift v0.0.0-20161221203622-b2a4d4ae21c7/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878 h1:EFSB7Zo9Eg91v7MJPVsifUysc/wPdN+NOnVe6bWbdBM= +github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878/go.mod h1:3AMJUQhVx52RsWOnlkpikZr01T/yAVN2gn0861vByNg= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/aws/aws-sdk-go v1.16.26/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.23.12 h1:2UnxgNO6Y5J1OrkXS8XNp0UatDxD1bWHiDT62RDPggI= +github.com/aws/aws-sdk-go v1.23.12/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +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 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +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/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b h1:AP/Y7sqYicnjGDfD5VcY4CIfh1hRXBUavxrvELjTiOE= +github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b/go.mod h1:ac9efd0D1fsDb3EJvhqgXRbFx7bs2wqZ10HQPeU8U/Q= +github.com/brianvoe/gofakeit v3.17.0+incompatible h1:C1+30+c0GtjgGDtRC+iePZeP1WMiwsWCELNJhmc7aIc= +github.com/brianvoe/gofakeit v3.17.0+incompatible/go.mod h1:kfwdRA90vvNhPutZWfH7WPaDzUjz+CZFqG+rPkOjGOc= +github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v0.0.0-20181017004759-096ff4a8a059/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +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/dgrijalva/jwt-go v0.0.0-20160705203006-01aeca54ebda/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dgryski/go-sip13 v0.0.0-20190329191031-25c5027a8c7b/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= +github.com/evanphx/json-patch v0.0.0-20190203023257-5858425f7550/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= +github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.17.2/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= +github.com/go-openapi/analysis v0.19.4/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= +github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.17.2/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= +github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.17.2/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= +github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.17.2/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= +github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.17.2/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= +github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= +github.com/go-openapi/runtime v0.18.0/go.mod h1:uI6pHuxWYTy94zZxgcwJkUWa9wbIlhteGfloI10GD4U= +github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= +github.com/go-openapi/runtime v0.19.3/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= +github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.17.2/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= +github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.17.2/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= +github.com/go-openapi/strfmt v0.19.2/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= +github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.17.2/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.4/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/validate v0.17.2/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= +github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= +github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= +github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/googleapis v1.3.0 h1:M695OaDJ5ipWvDPcoAg/YL9c3uORAegkEfBqTQF/fTQ= +github.com/gogo/googleapis v1.3.0/go.mod h1:d+q1s/xVJxZGKWwC/6UfPIF33J+G1Tq4GYv9Y+Tg/EU= +github.com/gogo/protobuf v0.0.0-20171007142547-342cbe0a0415/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.2.2-0.20190730201129-28a6bbf47e48/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.0 h1:G8O7TerXerS4F6sx9OV7/nRfJdnXgHZu/S/7F2SN+UE= +github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= +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/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +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 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/addlicense v0.0.0-20190510175307-22550fa7c1b0 h1:ydbHzabf84uucKri5fcfiqYxGg+rYgP/zQfLLN8lyP0= +github.com/google/addlicense v0.0.0-20190510175307-22550fa7c1b0/go.mod h1:QtPG26W17m+OIQgE6gQ24gC1M6pUaMBAbFrTIDtwG/E= +github.com/google/btree v0.0.0-20160524151835-7d79101e329e/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= +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 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= +github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= +github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= +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/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-20190723021845-34ac40c74b70/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.1/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 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gnostic v0.0.0-20170426233943-68f4ded48ba9/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.3.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/gophercloud/gophercloud v0.0.0-20190126172459-c818fa66e4c8/go.mod h1:3WdhXV3rUYy9p6AUW8d94kr+HS62Y4VL9mBnFxsD8q4= +github.com/gophercloud/gophercloud v0.3.0 h1:6sjpKIpVwRIIwmcEGp+WwNovNsem+c+2vm6oxshRpL8= +github.com/gophercloud/gophercloud v0.3.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0 h1:Iju5GlWwrvL6UBg4zJJt3btmonfrMlCDdsejg4CZE7c= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.6.2/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= +github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.4/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.11.1 h1:/dBYI+n4xIL+Y9SKXQrjlKTmJJDwCSlNLRwZ5nBhIek= +github.com/grpc-ecosystem/grpc-gateway v1.11.1/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/api v1.2.0 h1:oPsuzLp2uk7I7rojPKuncWbZ+m5TMoD4Ivs+2Rkeh4Y= +github.com/hashicorp/consul/api v1.2.0/go.mod h1:1SIkFYi2ZTXUE5Kgt179+4hH33djo11+0Eo2XgTAtkw= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.2.0 h1:GWFYFmry/k4b1hEoy7kSkmU8e30GAyI4VZHk0fRxeL4= +github.com/hashicorp/consul/sdk v0.2.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.1.0 h1:vN9wG1D6KG6YHRTWr8512cxGOVgTMEfgEdSj/hr8MPc= +github.com/hashicorp/go-immutable-radix v1.1.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-msgpack v0.5.5 h1:i9R9JSrqIz0QVLz3sz+i3YJdT7TTSLcfLLzJi9aZTuI= +github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-rootcerts v1.0.1 h1:DMo4fmknnz0E0evoNYnV48RjWndOsmd6OW+09R3cEP8= +github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= +github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= +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/golang-lru v0.5.3 h1:YPkqC67at8FYaadspW/6uE0COsBxS2656RLEr8Bppgk= +github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +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/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/memberlist v0.1.4 h1:gkyML/r71w3FL8gUi74Vk76avkj/9lYAY9lvg0OcoGs= +github.com/hashicorp/memberlist v0.1.4/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/serf v0.8.3 h1:MWYcmct5EtKz0efYooPcL0yNkem+7kWxqXDi/UIh+8k= +github.com/hashicorp/serf v0.8.3/go.mod h1:UpNcs7fFbpKIyZaUuSW6EPiH+eZC7OuyFD+wc1oal+k= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/influxdata/influxdb v1.7.7/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= +github.com/jaegertracing/jaeger v1.8.2/go.mod h1:LUWPSnzNPGRubM8pk0inANGitpiMOOxihXx0+53llXI= +github.com/jaegertracing/jaeger v1.14.0 h1:C0En+gfcxf3NsAriMAvQ6LcSFrQ5VQGXddqfty1EpTI= +github.com/jaegertracing/jaeger v1.14.0/go.mod h1:LUWPSnzNPGRubM8pk0inANGitpiMOOxihXx0+53llXI= +github.com/jessevdk/go-flags v0.0.0-20180331124232-1c38ed7ad0cc/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7 h1:K//n/AqR5HjG3qxbrBCL4vJPW0MVFSs9CPK1OOJdRME= +github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0= +github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024 h1:rBMNdlhTLzJjJSDIjNEXX1Pz3Hmwmz91v+zycvx9PJc= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kylelemons/godebug v0.0.0-20160406211939-eadb3ce320cb/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= +github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +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 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.15 h1:CSSIDtllwGLMoA6zjdKnaE6Tx6eVUxQ29LUgGetiDCI= +github.com/miekg/dns v1.1.15/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= +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/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +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-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +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 h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/oklog/ulid v0.0.0-20170117200651-66bb6560562f/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v0.0.0-20190113212917-5533ce8a0da3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191119152140-567e1046cefa h1:RVCKEvgeZgfu3uaTaRwytpEejvgNIxF1MDK9mAsqPK0= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191119152140-567e1046cefa/go.mod h1:WCsoKuWfht1l33mnPISJ189n8l1p1G10TrQaKylV7no= +github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9/go.mod h1:PLldrQSroqzH70Xl+1DQcGnefIbqsKR7UDaiux3zV+w= +github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/openzipkin/zipkin-go v0.1.3/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= +github.com/openzipkin/zipkin-go v0.2.1 h1:noL5/5Uf1HpVl3wNsfkZhIKbSWCVi5jgqkONNx8PXcA= +github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/orijtech/prometheus-go-metrics-exporter v0.0.3-0.20190313163149-b321c5297f60 h1:vN7d/Zv6aOXqhspiqoEMkb6uFHNARVESmYn5XtNeyrk= +github.com/orijtech/prometheus-go-metrics-exporter v0.0.3-0.20190313163149-b321c5297f60/go.mod h1:+Mu9w51Uc2RNKSUTA95d6Pvy8cxFiRX3ANRPlCcnGLA= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +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/prashantv/protectmem v0.0.0-20171002184600-e20412882b3a h1:AA9vgIBDjMHPC2McaGPojgV2dcI78ZC0TLNhYCXEKH8= +github.com/prashantv/protectmem v0.0.0-20171002184600-e20412882b3a/go.mod h1:lzZQ3Noex5pfAy7mkAeCjcBDteYU85uWWnJ/y6gKU8k= +github.com/prometheus/alertmanager v0.18.0/go.mod h1:WcxHBl40VSPuOaqWae6l6HpnEOVRIycEJ7i9iYkadEE= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.1.0 h1:BQ53HtBmfOitExawJ6LokA4x8ov/z0SYYb0+HxJfRI8= +github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= +github.com/prometheus/common v0.7.0 h1:L+1lyG48J1zAQXA3RBX/nG/B3gjlHq0zTt2tlbJLyCY= +github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= +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-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.3 h1:CTwfnzjQ+8dS6MhHHu4YswVAD99sL2wjPqP+VkURmKE= +github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= +github.com/prometheus/prometheus v0.0.0-20180315085919-58e2a31db8de/go.mod h1:oAIUtOny2rjMX0OWN5vPR5/q/twIROJvdqnQKDdil/s= +github.com/prometheus/prometheus v1.8.2-0.20190924101040-52e0504f83ea h1:DkijwrDmxCei6erPY2JZPJMOr8srbkbOJVkWbhSYWH4= +github.com/prometheus/prometheus v1.8.2-0.20190924101040-52e0504f83ea/go.mod h1:elNqjVbwD3sCZJqKzyN7uEuwGcCpeJvv67D6BrHsDbw= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rs/cors v1.6.0 h1:G9tHG9lebljV9mfp9SNPDL36nCDxmo3zTlAf1YgvzmI= +github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/samuel/go-zookeeper v0.0.0-20190810000440-0ceca61e4d75 h1:cA+Ubq9qEVIQhIWvP2kNuSZ2CmnfBJFSRq+kO1pu2cc= +github.com/samuel/go-zookeeper v0.0.0-20190810000440-0ceca61e4d75/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/satori/go.uuid v0.0.0-20160603004225-b111a074d5ef/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= +github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= +github.com/shurcooL/vfsgen v0.0.0-20180825020608-02ddb050ef6b/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= +github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= +github.com/signalfx/omnition-kinesis-producer v0.4.6 h1:rs18AQ+zz7+B0akJfzJtwdrzqrX/gUIMDg/o8XV41bQ= +github.com/signalfx/omnition-kinesis-producer v0.4.6/go.mod h1:Qo5UjM14fq/eVKavLkovKbXWbNTTQwiyuADYnXoGx1I= +github.com/signalfx/opencensus-go-exporter-kinesis v0.4.0 h1:l6tnNSdU0nyRAn157IklHNPFN3LXTrs1IDm1b07wWLY= +github.com/signalfx/opencensus-go-exporter-kinesis v0.4.0/go.mod h1:moUthjX4ThpXwvVZhIGEZP5g0cOkt+dXs9pElpaaWQw= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.4.1-0.20190911140308-99520c81d86e h1:D4jmJ9BqzeMv7BvAqjooNtXH2PXG7m+pcYRnj2Ojlrk= +github.com/spf13/viper v1.4.1-0.20190911140308-99520c81d86e/go.mod h1:jUyf+v/KTOnRyUy2/AsjF537WfJWVv3AnlcKSNd+AIg= +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/quantile v0.0.0-20150917103942-b0c588724d25 h1:7z3LSn867ex6VSaahyKadf4WtSsJIgne6A1WLOAGM8A= +github.com/streadway/quantile v0.0.0-20150917103942-b0c588724d25/go.mod h1:lbP8tGiBjZ5YWIc2fzuRpTaz0b/53vT6PEs3QuAWzuU= +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.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +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 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/uber-go/atomic v1.4.0 h1:yOuPqEq4ovnhEjpHmfFwsqBXDYbQeT6Nb0bwD6XnD5o= +github.com/uber-go/atomic v1.4.0/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g= +github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-client-go v2.16.0+incompatible h1:Q2Pp6v3QYiocMxomCaJuwQGFt7E53bPYqEgug/AoBtY= +github.com/uber/jaeger-client-go v2.16.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v2.0.0+incompatible h1:iMSCV0rmXEogjNWPh2D0xk9YVKvrtGoHJNe9ebLu/pw= +github.com/uber/jaeger-lib v2.0.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/uber/tchannel-go v1.10.0 h1:YOihLHuvkwT3nzvpgqFtexFW+pb5vD1Tz7h/bIWApgE= +github.com/uber/tchannel-go v1.10.0/go.mod h1:Rrgz1eL8kMjW/nEzZos0t+Heq0O4LhnUJVA32OvWKHo= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.0.4/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.opencensus.io v0.19.1/go.mod h1:gug0GbSHa8Pafr0d2urOSgoXHZ6x/RUlaiT0d9pqb4A= +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.1 h1:8dP3SGL7MPB94crU3bEPplMPe83FI4EouesJUeFHv50= +go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA= +go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.5.1 h1:rsqfU5vBkVknbhUGbAUwQKR2H4ItV8tjJ+6kJX4cxHM= +go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.4.0 h1:f3WCSC2KzAcBXGATIxAB1E2XuCpNU255wNKZ505qi3E= +go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181025213731-e84da0312774/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/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-20190320223903-b7391e95e576/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-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 h1:HuIa8hRrWRSrqYzx1qI49NNxhdi2PrY7gxVSq1JjLDc= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20181217174547-8f45f776aaf1/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-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181106065722-10aee1819953/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-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190206173232-65e2d4e15006/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-20190320064053-1272bf9dcd53/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-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +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 h1:Ao/3l156eZf2AW5wK8a7/smtodRU+gha3+BeqJ69lRk= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/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-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/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 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +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-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181218192612-074acd46bca6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190209173611-3b5209105503/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-20190321052220-f7bb7a8bee54/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-20190502175342-a43fa875dd82/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-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/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.20180805044716-cb6730876b98/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 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/time v0.0.0-20161028155119-f51c12702a4d/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +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/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181219222714-6e267b5cc78e/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-20190118193359-16909d206f00/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-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190617190820-da514acc4774/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-20190813034749-528a2984e271/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190906203814-12febf440ab1/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.0.0-20181220000619-583d854617af/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +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.10.0 h1:7tmAxx3oKE98VMZ+SBZzvYYWRQ9HODBxmC8mXUsraSQ= +google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +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 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181219182458-5a97ab628bfb/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/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-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64 h1:iKtrH9Y8mcbADOP0YFaEMth7OfuHY9xHOwNj4znpM1A= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +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.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.0 h1:AzbTB6ux+okLTzP8Ru1Xs41C303zdcfEht7MQnYJt5A= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/fsnotify/fsnotify.v1 v1.4.7 h1:XNNYLJHt73EyYiCZi6+xjupS9CpvmiDgjPTAjrBlQbo= +gopkg.in/fsnotify/fsnotify.v1 v1.4.7/go.mod h1:Fyux9zXlo4rWoMSIzpn9fDAYjalPqJ/K1qJ27s+7ltE= +gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20180920025451-e3ad64cb4ed3/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +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 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +k8s.io/api v0.0.0-20190620084959-7cf5895f2711/go.mod h1:TBhBqb1AWbBQbW3XRusr7n7E4v2+5ZY8r8sAMnyFC5A= +k8s.io/api v0.0.0-20190813020757-36bff7324fb7 h1:4uJOjRn9kWq4AqJRE8+qzmAy+lJd9rh8TY455dNef4U= +k8s.io/api v0.0.0-20190813020757-36bff7324fb7/go.mod h1:3Iy+myeAORNCLgjd/Xu9ebwN7Vh59Bw0vh9jhoX+V58= +k8s.io/apimachinery v0.0.0-20190612205821-1799e75a0719/go.mod h1:I4A+glKBHiTgiEjQiCCQfCAIcIMFGt291SmsvcrFzJA= +k8s.io/apimachinery v0.0.0-20190809020650-423f5d784010 h1:pyoq062NftC1y/OcnbSvgolyZDJ8y4fmUPWMkdA6gfU= +k8s.io/apimachinery v0.0.0-20190809020650-423f5d784010/go.mod h1:Waf/xTS2FGRrgXCkO5FP3XxTOWh0qLf2QhL1qFZZ/R8= +k8s.io/client-go v0.0.0-20190620085101-78d2af792bab/go.mod h1:E95RaSlHr79aHaX0aGSwcPNfygDiPKOVXdmivCIZT0k= +k8s.io/client-go v12.0.0+incompatible/go.mod h1:E95RaSlHr79aHaX0aGSwcPNfygDiPKOVXdmivCIZT0k= +k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.3.1/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.4.0 h1:lCJCxf/LIowc2IGS9TPjWDyXY4nOmdGdfcwwDQCOURQ= +k8s.io/klog v0.4.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= +k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= +k8s.io/kube-openapi v0.0.0-20190709113604-33be087ad058/go.mod h1:nfDlWeOsu3pUf4yWGL+ERqohP4YsZcBJXWMK+gkzOA4= +k8s.io/kube-openapi v0.0.0-20190722073852-5e22f3d471e6/go.mod h1:RZvgC8MSN6DjiMV6oIfEE9pDL9CYXokkfaCKZeHm3nc= +k8s.io/utils v0.0.0-20190221042446-c2654d5206da/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3oVhZz7sSzSiPnVZayjIX0= +k8s.io/utils v0.0.0-20190809000727-6c36bc71fc4a/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= +sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= diff --git a/exporter/kinesisexporter/testdata/config.yaml b/exporter/kinesisexporter/testdata/config.yaml new file mode 100644 index 000000000000..4c4168819781 --- /dev/null +++ b/exporter/kinesisexporter/testdata/config.yaml @@ -0,0 +1,40 @@ +receivers: + examplereceiver: + disabled: false + +exporters: + kinesis: + disabled: false + queue_size: 1 + num_workers: 2 + flush_interval_seconds: 3 + max_bytes_per_batch: 4 + max_bytes_per_span: 5 + + aws: + stream_name: test-stream + region: mars-1 + role: arn:test-role + kinesis_endpoint: kinesis.mars-1.aws.galactic + + kpl: + aggregate_batch_count: 10 + aggregate_batch_size: 11 + batch_size: 12 + batch_count: 13 + backlog_count: 14 + flush_interval_seconds: 15 + max_connections: 16 + max_retries: 17 + max_backoff_seconds: 18 + +processors: + exampleprocessor: + disabled: false + +service: + pipelines: + traces: + receivers: [examplereceiver] + processors: [exampleprocessor] + exporters: [kinesis] diff --git a/exporter/kinesisexporter/testdata/default.yaml b/exporter/kinesisexporter/testdata/default.yaml new file mode 100644 index 000000000000..e4dd7cc5f14e --- /dev/null +++ b/exporter/kinesisexporter/testdata/default.yaml @@ -0,0 +1,15 @@ +receivers: + examplereceiver: + +exporters: + kinesis: + +processors: + exampleprocessor: + +service: + pipelines: + traces: + receivers: [examplereceiver] + processors: [exampleprocessor] + exporters: [kinesis] diff --git a/go.mod b/go.mod index c612f32552a5..acca89d859e8 100644 --- a/go.mod +++ b/go.mod @@ -5,15 +5,15 @@ go 1.12 require ( github.com/client9/misspell v0.3.4 github.com/google/addlicense v0.0.0-20190907113143-be125746c2c4 - github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212134434-b4b3530a43d9 + github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191211145602-94066e4c70c1 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter v0.0.0 + github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kinesisexporter v0.0.0-00010101000000-000000000000 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.0.0-00010101000000-000000000000 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.0.0-20191203211755-8ae89debd6c5 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/stackdriverexporter v0.0.0-20191126142441-b2a048090ad6 github.com/open-telemetry/opentelemetry-collector-contrib/receiver/collectdreceiver v0.0.0-20191209163404-28d5712f4129 github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.0.0-20191209183045-9707a2732f37 github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinscribereceiver v0.0.0-20191126142441-b2a048090ad6 - github.com/open-telemetry/opentelemetry-collector-contrib/testbed v0.0.0-20191211173639-c78990cbbb53 // indirect github.com/pavius/impi v0.0.0-20180302134524-c1cbdcb8df2b golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f golang.org/x/tools v0.0.0-20191205225056-3393d29bb9fe @@ -23,3 +23,5 @@ require ( replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter v0.0.0 => ./exporter/azuremonitorexporter replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter => ./exporter/sapmexporter + +replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kinesisexporter => ./exporter/kinesisexporter diff --git a/go.sum b/go.sum index 70a90163c265..054eac1353b2 100644 --- a/go.sum +++ b/go.sum @@ -28,6 +28,7 @@ contrib.go.opencensus.io/exporter/zipkin v0.1.1/go.mod h1:GMvdSl3eJ2gapOaLKzTKE3 contrib.go.opencensus.io/resource v0.1.2 h1:b4WFJV8u7/NzPWHeTqj3Ec2AW8OGhtJxC/hbphIOvbU= contrib.go.opencensus.io/resource v0.1.2/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +git.apache.org/thrift.git v0.12.0/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= github.com/Azure/azure-sdk-for-go v23.2.0+incompatible h1:bch1RS060vGpHpY3zvQDV4rOiRw25J1zmR/B9a76aSA= github.com/Azure/azure-sdk-for-go v23.2.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/go-autorest v11.1.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= @@ -53,7 +54,6 @@ github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdko github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -71,6 +71,7 @@ github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878/go.mod h1:3AMJUQh github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/aws/aws-sdk-go v1.16.26/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.23.12 h1:2UnxgNO6Y5J1OrkXS8XNp0UatDxD1bWHiDT62RDPggI= github.com/aws/aws-sdk-go v1.23.12/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.23.20 h1:2CBuL21P0yKdZN5urf2NxKa1ha8fhnY+A3pBCHFeZoA= @@ -84,6 +85,8 @@ github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b h1:AP/Y7sqYicnjGDf github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b/go.mod h1:ac9efd0D1fsDb3EJvhqgXRbFx7bs2wqZ10HQPeU8U/Q= github.com/bombsimon/wsl v1.2.5 h1:9gTOkIwVtoDZywvX802SDHokeX4kW1cKnV8ZTVAPkRs= github.com/bombsimon/wsl v1.2.5/go.mod h1:43lEF/i0kpXbLCeDXL9LMT8c92HyBywXb0AsgMHYngM= +github.com/brianvoe/gofakeit v3.17.0+incompatible h1:C1+30+c0GtjgGDtRC+iePZeP1WMiwsWCELNJhmc7aIc= +github.com/brianvoe/gofakeit v3.17.0+incompatible/go.mod h1:kfwdRA90vvNhPutZWfH7WPaDzUjz+CZFqG+rPkOjGOc= github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409 h1:Da6uN+CAo1Wf09Rz1U4i9QN8f0REjyNJ73BEwAq/paU= github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= @@ -151,7 +154,6 @@ github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80n github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= -github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.17.2/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= @@ -248,6 +250,7 @@ github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9 h1:uHTyIjqVhYRhLbJ8nIiOJHkEZZ+5YoOsAbD3sk82NiE= github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= 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= @@ -335,6 +338,8 @@ github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:Fecb github.com/grpc-ecosystem/go-grpc-middleware v1.0.0 h1:Iju5GlWwrvL6UBg4zJJt3btmonfrMlCDdsejg4CZE7c= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.6.2/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= +github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.4/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= @@ -391,6 +396,7 @@ github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJ github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/influxdb v1.7.7/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= +github.com/jaegertracing/jaeger v1.8.2/go.mod h1:LUWPSnzNPGRubM8pk0inANGitpiMOOxihXx0+53llXI= github.com/jaegertracing/jaeger v1.14.0 h1:C0En+gfcxf3NsAriMAvQ6LcSFrQ5VQGXddqfty1EpTI= github.com/jaegertracing/jaeger v1.14.0/go.mod h1:LUWPSnzNPGRubM8pk0inANGitpiMOOxihXx0+53llXI= github.com/jaegertracing/jaeger v1.15.1 h1:7QzNAXq+4ko9GtCjozDNAp2uonoABu+B2Rk94hjQcp4= @@ -512,10 +518,8 @@ github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191119152140-567e1046cefa/go.mod h1:WCsoKuWfht1l33mnPISJ189n8l1p1G10TrQaKylV7no= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205151336-8e2473c5e754 h1:gG2Ig+OgvWCyKLk3/Mz10HkSFolKjsWerT8kE9u+qig= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205151336-8e2473c5e754/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= -github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205212659-419ed61e5bac/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191211145602-94066e4c70c1 h1:hpxbVMM+AK4T5xxugQGO6NF7h/Inj3F+BdRiYeiBRb8= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191211145602-94066e4c70c1/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= -github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212134434-b4b3530a43d9 h1:BHePbk/BHLNV6U7Duk8kiCQVLHkiXPD6/1Lxcf+fqWw= -github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212134434-b4b3530a43d9/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.0.0-20191203211755-8ae89debd6c5 h1:ywGB3azaH+hCb67EbAwtdUBg7MXFTxwvCclPT1F8lp4= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.0.0-20191203211755-8ae89debd6c5/go.mod h1:KFAuDdKdP7ejK2iB1xW4RbqKR/dKrmr2uYpVY5e5SyM= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/stackdriverexporter v0.0.0-20191126142441-b2a048090ad6 h1:M1xqVTsqqd6EF1mSgQCgpOdcYQlUZEQ0Aclh/FG5tl4= @@ -526,13 +530,10 @@ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.0.0-20191209183045-9707a2732f37/go.mod h1:U1F1p3CcH3VYq2z+3OiO+WfhifaQvRknR5XlxiuZzcU= github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinscribereceiver v0.0.0-20191126142441-b2a048090ad6 h1:oFZnmX7g3xhvmsVoLLcR3XNSS3MZUzmDZhJdYaStKwo= github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinscribereceiver v0.0.0-20191126142441-b2a048090ad6/go.mod h1:GNDPC/bJ+7G66ttS6XjVKuQ2ZC80yUCESa/2DPI/75s= -github.com/open-telemetry/opentelemetry-collector-contrib/testbed v0.0.0-20191211173639-c78990cbbb53 h1:RQ+9HLFLhTSh7UHISSijpAPjz7vZfhnWTIJoHexbapg= -github.com/open-telemetry/opentelemetry-collector-contrib/testbed v0.0.0-20191211173639-c78990cbbb53/go.mod h1:/9quffm3KCkKiAm6d2OGrfQ5hnQe2YV5Sj11yXsIp+k= -github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191211145602-94066e4c70c1 h1:T/EY2fKzuUDkDcVZ7Nr9ZJPqcvyfoomC+3UIHuV2Liw= -github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191211145602-94066e4c70c1/go.mod h1:0x5LWC/8hyS8Q8fCi0elhTYf9S94RzRX6ZgL7EiYvlQ= github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9/go.mod h1:PLldrQSroqzH70Xl+1DQcGnefIbqsKR7UDaiux3zV+w= github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/openzipkin/zipkin-go v0.1.3/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1 h1:noL5/5Uf1HpVl3wNsfkZhIKbSWCVi5jgqkONNx8PXcA= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= @@ -562,11 +563,13 @@ github.com/prashantv/protectmem v0.0.0-20171002184600-e20412882b3a/go.mod h1:lzZ github.com/prometheus/alertmanager v0.18.0/go.mod h1:WcxHBl40VSPuOaqWae6l6HpnEOVRIycEJ7i9iYkadEE= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.1.0 h1:BQ53HtBmfOitExawJ6LokA4x8ov/z0SYYb0+HxJfRI8= github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -574,6 +577,7 @@ github.com/prometheus/client_model v0.0.0-20191202183732-d1d2010b5bee h1:iBZPTYk github.com/prometheus/client_model v0.0.0-20191202183732-d1d2010b5bee/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= @@ -581,6 +585,7 @@ github.com/prometheus/common v0.7.0 h1:L+1lyG48J1zAQXA3RBX/nG/B3gjlHq0zTt2tlbJLy github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= 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-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.3 h1:CTwfnzjQ+8dS6MhHHu4YswVAD99sL2wjPqP+VkURmKE= @@ -609,8 +614,6 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg github.com/securego/gosec v0.0.0-20191002120514-e680875ea14d h1:BzRvVq1EHuIjxpijCEKpAxzKUUMurOQ4sknehIATRh8= github.com/securego/gosec v0.0.0-20191002120514-e680875ea14d/go.mod h1:w5+eXa0mYznDkHaMCXA4XYffjlH+cy1oyKbfzJXa2Do= github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc= -github.com/shirou/gopsutil v2.18.12+incompatible h1:1eaJvGomDnH74/5cF4CTmTbLHAriGFsTZppLXDX93OM= -github.com/shirou/gopsutil v2.18.12+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e h1:MZM7FHLqUHYI0Y/mQAt3d2aYa0SiNms/hFqC9qJYolM= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= @@ -622,10 +625,15 @@ github.com/shurcooL/vfsgen v0.0.0-20180825020608-02ddb050ef6b/go.mod h1:TrYk7fJV github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/signalfx/com_signalfx_metrics_protobuf v0.0.0-20190530013331-054be550cb49 h1:a6us2VYa4abLd4FG6F3BaGEzuq6WIvloIx3M40ePaJ0= github.com/signalfx/com_signalfx_metrics_protobuf v0.0.0-20190530013331-054be550cb49/go.mod h1:muYA2clvwCdj7nzAJ5vJIXYpJsUumhAl4Uu1wUNpWzA= +github.com/signalfx/omnition-kinesis-producer v0.4.6 h1:rs18AQ+zz7+B0akJfzJtwdrzqrX/gUIMDg/o8XV41bQ= +github.com/signalfx/omnition-kinesis-producer v0.4.6/go.mod h1:Qo5UjM14fq/eVKavLkovKbXWbNTTQwiyuADYnXoGx1I= +github.com/signalfx/opencensus-go-exporter-kinesis v0.4.0 h1:l6tnNSdU0nyRAn157IklHNPFN3LXTrs1IDm1b07wWLY= +github.com/signalfx/opencensus-go-exporter-kinesis v0.4.0/go.mod h1:moUthjX4ThpXwvVZhIGEZP5g0cOkt+dXs9pElpaaWQw= github.com/signalfx/sapm-proto v0.0.2/go.mod h1:mnxTtJuYpsmOFW0F+f95bazdXGUnvjMMwbRNgSjaDb4= github.com/signalfx/sapm-proto v0.0.3-0.20191211161027-5e20f16d64d6 h1:yOY4t2Wtvr0tIcwvTzrHwihjwnVR7F/BitjcOMiY2wY= github.com/signalfx/sapm-proto v0.0.3-0.20191211161027-5e20f16d64d6/go.mod h1:IZihj/XeDgvA1z3fQx55O6V5LO3G8bC7rRkwySqDcng= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= @@ -704,6 +712,7 @@ github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1: go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.0.4/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.opencensus.io v0.19.1/go.mod h1:gug0GbSHa8Pafr0d2urOSgoXHZ6x/RUlaiT0d9pqb4A= 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.1 h1:8dP3SGL7MPB94crU3bEPplMPe83FI4EouesJUeFHv50= @@ -723,6 +732,7 @@ go.uber.org/multierr v1.4.0 h1:f3WCSC2KzAcBXGATIxAB1E2XuCpNU255wNKZ505qi3E= go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.12.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= @@ -753,7 +763,9 @@ golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm0 golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= 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-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20181217174547-8f45f776aaf1/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= @@ -776,10 +788,12 @@ golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181106065722-10aee1819953/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-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190206173232-65e2d4e15006/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= @@ -803,6 +817,7 @@ golang.org/x/net v0.0.0-20191119073136-fc4aabc6c914/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20191206103017-1ddd1de85cb0 h1:LxY/gQN/MrcW24/46nLyiip1GhN/Yi14QPbeNskTvQA= golang.org/x/net v0.0.0-20191206103017-1ddd1de85cb0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/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-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= @@ -827,6 +842,7 @@ golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181218192612-074acd46bca6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190209173611-3b5209105503/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-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -836,6 +852,7 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5 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-20190502175342-a43fa875dd82/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-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -872,6 +889,7 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181117154741-2ddaf7f79a09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181219222714-6e267b5cc78e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/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-20190118193359-16909d206f00/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -909,6 +927,7 @@ golang.org/x/tools v0.0.0-20191205225056-3393d29bb9fe h1:BEVcKURC7E0EF+vD1l52Jb3 golang.org/x/tools v0.0.0-20191205225056-3393d29bb9fe/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.0.0-20181220000619-583d854617af/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= 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= @@ -918,6 +937,7 @@ google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhE google.golang.org/api v0.14.0 h1:uMf5uLi4eQMRrMKhCplNik4U4H8Z6C1br3zOtAa/aDE= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= 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 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I= @@ -927,6 +947,7 @@ google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM= google.golang.org/appengine v1.6.5/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-20181219182458-5a97ab628bfb/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/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= @@ -942,6 +963,7 @@ google.golang.org/genproto v0.0.0-20191115221424-83cc0476cb11 h1:51D++eCgOHufw5V google.golang.org/genproto v0.0.0-20191115221424-83cc0476cb11/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191205163323-51378566eb59 h1:A2If0NMGFAltEHPrnAZY86sBw/gA9ESWJdgG7kVWt64= google.golang.org/genproto v0.0.0-20191205163323-51378566eb59/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -984,6 +1006,7 @@ gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.7 h1:VUgggvou5XRW9mHwD/yXxIYSMtY0zoKQf/v226p2nyo= gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20180920025451-e3ad64cb4ed3/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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= From 9d176f500da78ef9dcd191fbf59cc1a3b993e0e0 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Fri, 13 Dec 2019 08:45:46 -0600 Subject: [PATCH 28/59] fix pull request issues --- exporter/awsxrayexporter/awsxray_test.go | 36 ++++++++++++++----- exporter/awsxrayexporter/translator/cause.go | 2 +- .../awsxrayexporter/translator/cause_test.go | 6 ++-- .../awsxrayexporter/translator/http_test.go | 12 +++---- .../awsxrayexporter/translator/segment.go | 22 ++++++------ .../translator/segment_test.go | 33 +++++++++++++---- 6 files changed, 75 insertions(+), 36 deletions(-) diff --git a/exporter/awsxrayexporter/awsxray_test.go b/exporter/awsxrayexporter/awsxray_test.go index ab241a36c9e6..e7a03edf4d0d 100644 --- a/exporter/awsxrayexporter/awsxray_test.go +++ b/exporter/awsxrayexporter/awsxray_test.go @@ -16,7 +16,9 @@ package awsxrayexporter import ( "context" + "encoding/binary" "fmt" + "math/rand" "os" "reflect" "testing" @@ -31,8 +33,6 @@ import ( semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" "github.com/stretchr/testify/assert" "go.uber.org/zap" - - "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter/translator" ) func TestTraceExport(t *testing.T) { @@ -104,9 +104,9 @@ func constructHTTPClientSpan() *tracepb.Span { spanAttributes := constructSpanAttributes(attributes) return &tracepb.Span{ - TraceId: translator.NewTraceID(), - SpanId: translator.NewSegmentID(), - ParentSpanId: translator.NewSegmentID(), + TraceId: newTraceID(), + SpanId: newSegmentID(), + ParentSpanId: newSegmentID(), Name: &tracepb.TruncatableString{Value: "/users/junit"}, Kind: tracepb.Span_CLIENT, StartTime: convertTimeToTimestamp(startTime), @@ -140,9 +140,9 @@ func constructHTTPServerSpan() *tracepb.Span { spanAttributes := constructSpanAttributes(attributes) return &tracepb.Span{ - TraceId: translator.NewTraceID(), - SpanId: translator.NewSegmentID(), - ParentSpanId: translator.NewSegmentID(), + TraceId: newTraceID(), + SpanId: newSegmentID(), + ParentSpanId: newSegmentID(), Name: &tracepb.TruncatableString{Value: "/users/junit"}, Kind: tracepb.Span_SERVER, StartTime: convertTimeToTimestamp(startTime), @@ -197,3 +197,23 @@ func constructSpanAttributes(attributes map[string]interface{}) map[string]*trac } return attrs } + +func newTraceID() []byte { + var r [16]byte + epoch := time.Now().Unix() + binary.BigEndian.PutUint32(r[0:4], uint32(epoch)) + _, err := rand.Read(r[4:]) + if err != nil { + panic(err) + } + return r[:] +} + +func newSegmentID() []byte { + var r [8]byte + _, err := rand.Read(r[:]) + if err != nil { + panic(err) + } + return r[:] +} diff --git a/exporter/awsxrayexporter/translator/cause.go b/exporter/awsxrayexporter/translator/cause.go index 991382223389..a297d6a94f9a 100644 --- a/exporter/awsxrayexporter/translator/cause.go +++ b/exporter/awsxrayexporter/translator/cause.go @@ -72,7 +72,7 @@ func makeCause(status *tracepb.Status, attributes map[string]string) (isError, i } if message != "" { - id := NewSegmentID() + id := newSegmentID() hexID := hex.EncodeToString(id) cause = &CauseData{ diff --git a/exporter/awsxrayexporter/translator/cause_test.go b/exporter/awsxrayexporter/translator/cause_test.go index b5c581246fda..588f82ddc464 100644 --- a/exporter/awsxrayexporter/translator/cause_test.go +++ b/exporter/awsxrayexporter/translator/cause_test.go @@ -81,9 +81,9 @@ func constructExceptionServerSpan(attributes map[string]interface{}) *tracepb.Sp spanAttributes := constructSpanAttributes(attributes) return &tracepb.Span{ - TraceId: NewTraceID(), - SpanId: NewSegmentID(), - ParentSpanId: NewSegmentID(), + TraceId: newTraceID(), + SpanId: newSegmentID(), + ParentSpanId: newSegmentID(), Name: &tracepb.TruncatableString{Value: "/widgets"}, Kind: tracepb.Span_SERVER, StartTime: convertTimeToTimestamp(startTime), diff --git a/exporter/awsxrayexporter/translator/http_test.go b/exporter/awsxrayexporter/translator/http_test.go index 96ac2b86d6f9..b197fd9713e5 100644 --- a/exporter/awsxrayexporter/translator/http_test.go +++ b/exporter/awsxrayexporter/translator/http_test.go @@ -264,9 +264,9 @@ func constructHTTPClientSpan(attributes map[string]interface{}) *tracepb.Span { spanAttributes := constructSpanAttributes(attributes) return &tracepb.Span{ - TraceId: NewTraceID(), - SpanId: NewSegmentID(), - ParentSpanId: NewSegmentID(), + TraceId: newTraceID(), + SpanId: newSegmentID(), + ParentSpanId: newSegmentID(), Name: &tracepb.TruncatableString{Value: "/users/junit"}, Kind: tracepb.Span_CLIENT, StartTime: convertTimeToTimestamp(startTime), @@ -298,9 +298,9 @@ func constructHTTPServerSpan(attributes map[string]interface{}) *tracepb.Span { spanAttributes := constructSpanAttributes(attributes) return &tracepb.Span{ - TraceId: NewTraceID(), - SpanId: NewSegmentID(), - ParentSpanId: NewSegmentID(), + TraceId: newTraceID(), + SpanId: newSegmentID(), + ParentSpanId: newSegmentID(), Name: &tracepb.TruncatableString{Value: "/users/junit"}, Kind: tracepb.Span_SERVER, StartTime: convertTimeToTimestamp(startTime), diff --git a/exporter/awsxrayexporter/translator/segment.go b/exporter/awsxrayexporter/translator/segment.go index d622d769837d..0d54e927e845 100644 --- a/exporter/awsxrayexporter/translator/segment.go +++ b/exporter/awsxrayexporter/translator/segment.go @@ -127,7 +127,7 @@ func MakeSegment(name string, span *tracepb.Span) Segment { awsfiltered, aws = makeAws(causefiltered, span.Resource) service = makeService(span.Resource) sqlfiltered, sql = makeSQL(awsfiltered) - user, annotations = makeAnnotations(sqlfiltered) + annotations = makeAnnotations(sqlfiltered) namespace string ) @@ -151,7 +151,6 @@ func MakeSegment(name string, span *tracepb.Span) Segment { Cause: cause, Origin: origin, Namespace: namespace, - User: user, HTTP: http, AWS: aws, Service: service, @@ -161,8 +160,8 @@ func MakeSegment(name string, span *tracepb.Span) Segment { } } -// NewTraceID generates a new valid X-Ray TraceID -func NewTraceID() []byte { +// newTraceID generates a new valid X-Ray TraceID +func newTraceID() []byte { var r [16]byte epoch := time.Now().Unix() binary.BigEndian.PutUint32(r[0:4], uint32(epoch)) @@ -173,8 +172,8 @@ func NewTraceID() []byte { return r[:] } -// NewSegmentID generates a new valid X-Ray SegmentID -func NewSegmentID() []byte { +// newSegmentID generates a new valid X-Ray SegmentID +func newSegmentID() []byte { var r [8]byte _, err := rand.Read(r[:]) if err != nil { @@ -267,26 +266,25 @@ func timestampToFloatSeconds(ts *timestamp.Timestamp, startTs *timestamp.Timesta return float64(t.UnixNano()) / 1e9 } -func mergeAnnotations(dest map[string]interface{}, src map[string]string) { +func sanitizeAndTransferAnnotations(dest map[string]interface{}, src map[string]string) { for key, value := range src { key = fixAnnotationKey(key) dest[key] = value } } -func makeAnnotations(attributes map[string]string) (string, map[string]interface{}) { +func makeAnnotations(attributes map[string]string) map[string]interface{} { var ( result = map[string]interface{}{} - user string ) delete(attributes, semconventions.AttributeComponent) - mergeAnnotations(result, attributes) + sanitizeAndTransferAnnotations(result, attributes) if len(result) == 0 { - return user, nil + return nil } - return user, result + return result } // fixSegmentName removes any invalid characters from the span name. AWS X-Ray defines diff --git a/exporter/awsxrayexporter/translator/segment_test.go b/exporter/awsxrayexporter/translator/segment_test.go index ed784ce347f2..6b3371ad9306 100644 --- a/exporter/awsxrayexporter/translator/segment_test.go +++ b/exporter/awsxrayexporter/translator/segment_test.go @@ -56,7 +56,7 @@ func TestClientSpanWithGrpcComponent(t *testing.T) { func TestClientSpanWithAwsSdkClient(t *testing.T) { spanName := "AmazonDynamoDB.getItem" - parentSpanID := NewSegmentID() + parentSpanID := newSegmentID() user := "testingT" attributes := make(map[string]interface{}) attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP @@ -81,7 +81,7 @@ func TestClientSpanWithAwsSdkClient(t *testing.T) { func TestServerSpanWithInternalServerError(t *testing.T) { spanName := "/api/locations" - parentSpanID := NewSegmentID() + parentSpanID := newSegmentID() errorMessage := "java.lang.NullPointerException" attributes := make(map[string]interface{}) attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP @@ -172,11 +172,32 @@ func TestSpanWithInvalidTraceId(t *testing.T) { assert.False(t, strings.Contains(jsonStr, "1-11")) } +func TestFixSegmentName(t *testing.T) { + validName := "EP @ test_15.testing-d\u00F6main.org#GO" + fixedName := fixSegmentName(validName) + assert.Equal(t, validName, fixedName) + invalidName := ".example.com" + fixedName = fixSegmentName(invalidName) + assert.Equal(t, "subDomain.example.com", fixedName) + fullyInvalidName := "<>" + fixedName = fixSegmentName(fullyInvalidName) + assert.Equal(t, defaultSegmentName, fixedName) +} + +func TestFixAnnotationKey(t *testing.T) { + validKey := "Key_1" + fixedKey := fixAnnotationKey(validKey) + assert.Equal(t, validKey, fixedKey) + invalidKey := "Key@1" + fixedKey = fixAnnotationKey(invalidKey) + assert.Equal(t, "Key_1", fixedKey) +} + func constructClientSpan(parentSpanID []byte, name string, code int32, message string, attributes map[string]interface{}, rscLabels map[string]string) *tracepb.Span { var ( - traceID = NewTraceID() - spanID = NewSegmentID() + traceID = newTraceID() + spanID = newSegmentID() endTime = time.Now() startTime = endTime.Add(-215 * time.Millisecond) spanAttributes = constructSpanAttributes(attributes) @@ -207,8 +228,8 @@ func constructClientSpan(parentSpanID []byte, name string, code int32, message s func constructServerSpan(parentSpanID []byte, name string, code int32, message string, attributes map[string]interface{}, rscLabels map[string]string) *tracepb.Span { var ( - traceID = NewTraceID() - spanID = NewSegmentID() + traceID = newTraceID() + spanID = newSegmentID() endTime = time.Now() startTime = endTime.Add(-215 * time.Millisecond) spanAttributes = constructSpanAttributes(attributes) From 4d8548ad84864a93ccd60b0c38dbccb977ea4fb9 Mon Sep 17 00:00:00 2001 From: Owais Lone Date: Fri, 13 Dec 2019 21:49:29 +0530 Subject: [PATCH 29/59] Updated SAPM exporter dependencies (#59) --- exporter/sapmexporter/go.mod | 4 ++-- exporter/sapmexporter/go.sum | 43 ++++-------------------------------- go.sum | 4 ++-- 3 files changed, 8 insertions(+), 43 deletions(-) diff --git a/exporter/sapmexporter/go.mod b/exporter/sapmexporter/go.mod index 6d38a82c1b86..40407b84fff2 100644 --- a/exporter/sapmexporter/go.mod +++ b/exporter/sapmexporter/go.mod @@ -4,11 +4,11 @@ go 1.12 require ( github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191119152140-567e1046cefa - github.com/pierrec/lz4 v2.0.5+incompatible // indirect - github.com/signalfx/sapm-proto v0.0.3-0.20191211161027-5e20f16d64d6 + github.com/signalfx/sapm-proto v0.1.0 github.com/stretchr/testify v1.4.0 go.uber.org/atomic v1.5.1 // indirect go.uber.org/multierr v1.4.0 // indirect go.uber.org/zap v1.13.0 + google.golang.org/genproto v0.0.0-20191115221424-83cc0476cb11 // indirect google.golang.org/grpc v1.23.1 // indirect ) diff --git a/exporter/sapmexporter/go.sum b/exporter/sapmexporter/go.sum index a08e111a3fcf..082611d4b8d0 100644 --- a/exporter/sapmexporter/go.sum +++ b/exporter/sapmexporter/go.sum @@ -31,7 +31,6 @@ github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdko github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -58,11 +57,8 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b h1:AP/Y7sqYicnjGDfD5VcY4CIfh1hRXBUavxrvELjTiOE= github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b/go.mod h1:ac9efd0D1fsDb3EJvhqgXRbFx7bs2wqZ10HQPeU8U/Q= -github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409 h1:Da6uN+CAo1Wf09Rz1U4i9QN8f0REjyNJ73BEwAq/paU= github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v3 v3.1.1 h1:UBHElAnr3ODEbpqPzX8g5sBcASjoLFtt3L/xwJ01L6E= -github.com/cenkalti/backoff/v3 v3.1.1/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v0.0.0-20181017004759-096ff4a8a059/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -93,7 +89,6 @@ github.com/dgryski/go-sip13 v0.0.0-20190329191031-25c5027a8c7b/go.mod h1:vAd38F8 github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= -github.com/dropbox/godropbox v0.0.0-20180512210157-31879d3884b9/go.mod h1:glr97hP/JuXb+WMYCizc4PIFuzw1lCR97mwbe1VVXhQ= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= @@ -105,8 +100,6 @@ github.com/evanphx/json-patch v0.0.0-20190203023257-5858425f7550/go.mod h1:50XU6 github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.5.0+incompatible h1:ouOWdg56aJriqS0huScTkVXPC5IcNrDCXZ6OoTAWu7M= github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= -github.com/facebookgo/stackerr v0.0.0-20150612192056-c2fcf88613f4/go.mod h1:SBHk9aNQtiw4R4bEuzHjVmZikkUKCnO1v3lPQ21HZGk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -114,7 +107,6 @@ github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2H github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/go-kit/kit v0.7.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= @@ -122,7 +114,6 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9 github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= -github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.17.2/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= @@ -234,8 +225,6 @@ github.com/googleapis/gnostic v0.3.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTV github.com/gophercloud/gophercloud v0.0.0-20190126172459-c818fa66e4c8/go.mod h1:3WdhXV3rUYy9p6AUW8d94kr+HS62Y4VL9mBnFxsD8q4= github.com/gophercloud/gophercloud v0.3.0 h1:6sjpKIpVwRIIwmcEGp+WwNovNsem+c+2vm6oxshRpL8= github.com/gophercloud/gophercloud v0.3.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= @@ -317,13 +306,10 @@ github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62F github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024 h1:rBMNdlhTLzJjJSDIjNEXX1Pz3Hmwmz91v+zycvx9PJc= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/juju/errors v0.0.0-20181012004132-a4583d0a56ea/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= -github.com/juju/loggo v0.0.0-20190526231331-6e530bcce5d8/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U= -github.com/juju/testing v0.0.0-20191001232224-ce9dec17d28b/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= @@ -335,18 +321,15 @@ github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kylelemons/godebug v0.0.0-20160406211939-eadb3ce320cb/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= -github.com/lestrrat-go/backoff v1.0.0/go.mod h1:c7OnDlnHsFXbH1vyIS8+txH+THcc+QFlSQTrJVe4EIM= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20180606163543-3fdea8d05856/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= 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 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= @@ -407,6 +390,7 @@ github.com/orijtech/prometheus-go-metrics-exporter v0.0.3-0.20190313163149-b321c github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pavius/impi v0.0.0-20180302134524-c1cbdcb8df2b h1:yS0+/i6mwRZCdssUd+MkFJkCn/Evh1PlUKCYe3aCtQw= github.com/pavius/impi v0.0.0-20180302134524-c1cbdcb8df2b/go.mod h1:x/hU0bfdWIhuOT1SKwiJg++yvkk6EuOtJk8WtDZqgr8= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= @@ -460,33 +444,19 @@ github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/samuel/go-zookeeper v0.0.0-20180130194729-c4fab1ac1bec/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/samuel/go-zookeeper v0.0.0-20190810000440-0ceca61e4d75 h1:cA+Ubq9qEVIQhIWvP2kNuSZ2CmnfBJFSRq+kO1pu2cc= github.com/samuel/go-zookeeper v0.0.0-20190810000440-0ceca61e4d75/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/satori/go.uuid v0.0.0-20160603004225-b111a074d5ef/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/shirou/gopsutil v2.18.10+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/vfsgen v0.0.0-20180825020608-02ddb050ef6b/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= -github.com/signalfx/com_signalfx_metrics_protobuf v0.0.0-20190222193949-1fb69526e884/go.mod h1:muYA2clvwCdj7nzAJ5vJIXYpJsUumhAl4Uu1wUNpWzA= -github.com/signalfx/com_signalfx_metrics_protobuf v0.0.0-20190530013331-054be550cb49/go.mod h1:muYA2clvwCdj7nzAJ5vJIXYpJsUumhAl4Uu1wUNpWzA= -github.com/signalfx/gohistogram v0.0.0-20160107210732-1ccfd2ff5083/go.mod h1:adPDS6s7WaajdFBV9mQ7i0dKfQ8xiDnF9ZNETVPpp7c= -github.com/signalfx/golib/v3 v3.0.0/go.mod h1:p+krygP/cDlWvCBEgdkQp3H16rbP4NW7YQa81TDMRe8= -github.com/signalfx/gomemcache v0.0.0-20180823214636-4f7ef64c72a9/go.mod h1:Ytb8KfCSyuwy/VILnROdgCvbQLA5ch0nkbG7lKT0BXw= -github.com/signalfx/sapm-proto v0.0.3-0.20191210132251-3bc7d225b76d h1:FViLbVumRGKSV5LGSkZlXwCOkhklEOt84Y7MuKS29L4= -github.com/signalfx/sapm-proto v0.0.3-0.20191210132251-3bc7d225b76d/go.mod h1:IZihj/XeDgvA1z3fQx55O6V5LO3G8bC7rRkwySqDcng= -github.com/signalfx/sapm-proto v0.0.3-0.20191211161027-5e20f16d64d6 h1:yOY4t2Wtvr0tIcwvTzrHwihjwnVR7F/BitjcOMiY2wY= -github.com/signalfx/sapm-proto v0.0.3-0.20191211161027-5e20f16d64d6/go.mod h1:IZihj/XeDgvA1z3fQx55O6V5LO3G8bC7rRkwySqDcng= -github.com/signalfx/thrift v0.0.0-20181211001559-3838fa316492/go.mod h1:Xv29nl9fxdk0hmeqcUHgAZZwvYrOhduNW+9qk4H+6K0= +github.com/signalfx/sapm-proto v0.1.0 h1:HZoHIcx4Wt8sP2CHaj86M8kcqra0qC0QdK28OVD+WMk= +github.com/signalfx/sapm-proto v0.1.0/go.mod h1:IZihj/XeDgvA1z3fQx55O6V5LO3G8bC7rRkwySqDcng= 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/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/assertions v0.0.0-20190215210624-980c5ac6f3ac/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4-0.20190306220146-200a235640ff/go.mod h1:KSQcGKpxUMHk3nbYzs/tIBAM2iDooCn0BmttHOJEbLs= github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= @@ -536,7 +506,6 @@ github.com/uber/tchannel-go v1.10.0 h1:YOihLHuvkwT3nzvpgqFtexFW+pb5vD1Tz7h/bIWAp github.com/uber/tchannel-go v1.10.0/go.mod h1:Rrgz1eL8kMjW/nEzZos0t+Heq0O4LhnUJVA32OvWKHo= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/vaughan0/go-ini v0.0.0-20130923145212-a98ad7ee00ec/go.mod h1:owBmyHYMLkxyrugmfwE/DLJyW8Ro9mkphwuVErQ0iUw= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= @@ -594,7 +563,6 @@ golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/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-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181207154023-610586996380/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190206173232-65e2d4e15006/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -647,8 +615,6 @@ golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193GlqGZbnPFnPV/5Rsb4= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/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.20180805044716-cb6730876b98/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -729,7 +695,6 @@ gopkg.in/fsnotify/fsnotify.v1 v1.4.7/go.mod h1:Fyux9zXlo4rWoMSIzpn9fDAYjalPqJ/K1 gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= diff --git a/go.sum b/go.sum index 054eac1353b2..48f1b3c0bc57 100644 --- a/go.sum +++ b/go.sum @@ -630,8 +630,8 @@ github.com/signalfx/omnition-kinesis-producer v0.4.6/go.mod h1:Qo5UjM14fq/eVKavL github.com/signalfx/opencensus-go-exporter-kinesis v0.4.0 h1:l6tnNSdU0nyRAn157IklHNPFN3LXTrs1IDm1b07wWLY= github.com/signalfx/opencensus-go-exporter-kinesis v0.4.0/go.mod h1:moUthjX4ThpXwvVZhIGEZP5g0cOkt+dXs9pElpaaWQw= github.com/signalfx/sapm-proto v0.0.2/go.mod h1:mnxTtJuYpsmOFW0F+f95bazdXGUnvjMMwbRNgSjaDb4= -github.com/signalfx/sapm-proto v0.0.3-0.20191211161027-5e20f16d64d6 h1:yOY4t2Wtvr0tIcwvTzrHwihjwnVR7F/BitjcOMiY2wY= -github.com/signalfx/sapm-proto v0.0.3-0.20191211161027-5e20f16d64d6/go.mod h1:IZihj/XeDgvA1z3fQx55O6V5LO3G8bC7rRkwySqDcng= +github.com/signalfx/sapm-proto v0.1.0 h1:HZoHIcx4Wt8sP2CHaj86M8kcqra0qC0QdK28OVD+WMk= +github.com/signalfx/sapm-proto v0.1.0/go.mod h1:IZihj/XeDgvA1z3fQx55O6V5LO3G8bC7rRkwySqDcng= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= From 55b8658da81ac1913c00d4ae71b63005bb54961e Mon Sep 17 00:00:00 2001 From: Tigran Najaryan <4194920+tigrannajaryan@users.noreply.github.com> Date: Fri, 13 Dec 2019 11:22:02 -0500 Subject: [PATCH 30/59] Add E2E test for SAPM Receiver (#63) - Added DataSender for SAPM protocol. - Added SAPM protocol receiver test to TestTrace10K scenario. --- go.mod | 3 +- go.sum | 14 ++++- testbed/go.mod | 6 ++- testbed/go.sum | 48 +++++++++++++++-- testbed/tests/results/BASELINE.md | 7 ++- testbed/tests/senders.go | 86 +++++++++++++++++++++++++++++++ testbed/tests/trace_test.go | 16 ++++-- 7 files changed, 166 insertions(+), 14 deletions(-) create mode 100644 testbed/tests/senders.go diff --git a/go.mod b/go.mod index acca89d859e8..971655cdcc7e 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.12 require ( github.com/client9/misspell v0.3.4 github.com/google/addlicense v0.0.0-20190907113143-be125746c2c4 - github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191211145602-94066e4c70c1 + github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212224229-4e99ac7468fe github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter v0.0.0 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kinesisexporter v0.0.0-00010101000000-000000000000 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.0.0-00010101000000-000000000000 @@ -14,6 +14,7 @@ require ( github.com/open-telemetry/opentelemetry-collector-contrib/receiver/collectdreceiver v0.0.0-20191209163404-28d5712f4129 github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.0.0-20191209183045-9707a2732f37 github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinscribereceiver v0.0.0-20191126142441-b2a048090ad6 + github.com/open-telemetry/opentelemetry-collector-contrib/testbed v0.0.0-20191213033854-af8a37b00e74 // indirect github.com/pavius/impi v0.0.0-20180302134524-c1cbdcb8df2b golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f golang.org/x/tools v0.0.0-20191205225056-3393d29bb9fe diff --git a/go.sum b/go.sum index 48f1b3c0bc57..8bd66c60aebc 100644 --- a/go.sum +++ b/go.sum @@ -54,6 +54,7 @@ github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdko github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -154,6 +155,7 @@ github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80n github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.17.2/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= @@ -518,8 +520,10 @@ github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191119152140-567e1046cefa/go.mod h1:WCsoKuWfht1l33mnPISJ189n8l1p1G10TrQaKylV7no= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205151336-8e2473c5e754 h1:gG2Ig+OgvWCyKLk3/Mz10HkSFolKjsWerT8kE9u+qig= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205151336-8e2473c5e754/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= -github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191211145602-94066e4c70c1 h1:hpxbVMM+AK4T5xxugQGO6NF7h/Inj3F+BdRiYeiBRb8= -github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191211145602-94066e4c70c1/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205212659-419ed61e5bac/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212134434-b4b3530a43d9/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212224229-4e99ac7468fe h1:re+8oPIseiIDqCo6mSxT7vgNvDVJc4++uzKHC5TB6/o= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212224229-4e99ac7468fe/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.0.0-20191203211755-8ae89debd6c5 h1:ywGB3azaH+hCb67EbAwtdUBg7MXFTxwvCclPT1F8lp4= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.0.0-20191203211755-8ae89debd6c5/go.mod h1:KFAuDdKdP7ejK2iB1xW4RbqKR/dKrmr2uYpVY5e5SyM= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/stackdriverexporter v0.0.0-20191126142441-b2a048090ad6 h1:M1xqVTsqqd6EF1mSgQCgpOdcYQlUZEQ0Aclh/FG5tl4= @@ -530,6 +534,10 @@ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.0.0-20191209183045-9707a2732f37/go.mod h1:U1F1p3CcH3VYq2z+3OiO+WfhifaQvRknR5XlxiuZzcU= github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinscribereceiver v0.0.0-20191126142441-b2a048090ad6 h1:oFZnmX7g3xhvmsVoLLcR3XNSS3MZUzmDZhJdYaStKwo= github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinscribereceiver v0.0.0-20191126142441-b2a048090ad6/go.mod h1:GNDPC/bJ+7G66ttS6XjVKuQ2ZC80yUCESa/2DPI/75s= +github.com/open-telemetry/opentelemetry-collector-contrib/testbed v0.0.0-20191213033854-af8a37b00e74 h1:FpSk1gITif/94zsdwxOb6FODhRo7P3K0Gz5GIni9r2Y= +github.com/open-telemetry/opentelemetry-collector-contrib/testbed v0.0.0-20191213033854-af8a37b00e74/go.mod h1:MJTfqyEQGC8PDeYD6ZG9wj6q8PdCTJbYpqfO9H6WK6E= +github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191212134434-b4b3530a43d9 h1:aktELw3sSDx5N+vHeNoyiF59DyYREgEjhnmGkfaMmVk= +github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191212134434-b4b3530a43d9/go.mod h1:0x5LWC/8hyS8Q8fCi0elhTYf9S94RzRX6ZgL7EiYvlQ= github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9/go.mod h1:PLldrQSroqzH70Xl+1DQcGnefIbqsKR7UDaiux3zV+w= github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -614,6 +622,8 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg github.com/securego/gosec v0.0.0-20191002120514-e680875ea14d h1:BzRvVq1EHuIjxpijCEKpAxzKUUMurOQ4sknehIATRh8= github.com/securego/gosec v0.0.0-20191002120514-e680875ea14d/go.mod h1:w5+eXa0mYznDkHaMCXA4XYffjlH+cy1oyKbfzJXa2Do= github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc= +github.com/shirou/gopsutil v2.18.12+incompatible h1:1eaJvGomDnH74/5cF4CTmTbLHAriGFsTZppLXDX93OM= +github.com/shirou/gopsutil v2.18.12+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e h1:MZM7FHLqUHYI0Y/mQAt3d2aYa0SiNms/hFqC9qJYolM= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= diff --git a/testbed/go.mod b/testbed/go.mod index fc2acd749196..aba285ca585c 100644 --- a/testbed/go.mod +++ b/testbed/go.mod @@ -3,6 +3,8 @@ module github.com/open-telemetry/opentelemetry-collector-contrib/testbed go 1.12 require ( - github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212134434-b4b3530a43d9 // indirect - github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191212134434-b4b3530a43d9 + github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212224229-4e99ac7468fe + github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.0.0-20191213033854-af8a37b00e74 + github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191212224229-4e99ac7468fe + go.uber.org/zap v1.13.0 ) diff --git a/testbed/go.sum b/testbed/go.sum index d381054bca49..9d62f0ee3817 100644 --- a/testbed/go.sum +++ b/testbed/go.sum @@ -8,6 +8,7 @@ contrib.go.opencensus.io/exporter/jaeger v0.1.1-0.20190430175949-e8b55949d948/go contrib.go.opencensus.io/exporter/ocagent v0.6.0 h1:Z1n6UAyr0QwM284yUuh5Zd8JlvxUGAhFZcgMJkMPrGM= contrib.go.opencensus.io/exporter/ocagent v0.6.0/go.mod h1:zmKjrJcdo0aYcVS7bmEeSEBLPA9YJp5bjrofdU3pIXs= contrib.go.opencensus.io/exporter/prometheus v0.1.0/go.mod h1:cGFniUXGZlKRjzOyuZJ6mgB+PgBcCIa79kEKR8YCW+A= +contrib.go.opencensus.io/exporter/zipkin v0.1.1/go.mod h1:GMvdSl3eJ2gapOaLKzTKE3qDgUkJ86k9k3yY2eqwkzc= contrib.go.opencensus.io/resource v0.1.2 h1:b4WFJV8u7/NzPWHeTqj3Ec2AW8OGhtJxC/hbphIOvbU= contrib.go.opencensus.io/resource v0.1.2/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= github.com/Azure/azure-sdk-for-go v23.2.0+incompatible h1:bch1RS060vGpHpY3zvQDV4rOiRw25J1zmR/B9a76aSA= @@ -213,6 +214,8 @@ github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5 github.com/gogo/protobuf v1.2.2-0.20190730201129-28a6bbf47e48/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.0 h1:G8O7TerXerS4F6sx9OV7/nRfJdnXgHZu/S/7F2SN+UE= github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -360,6 +363,8 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt github.com/influxdata/influxdb v1.7.7/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= github.com/jaegertracing/jaeger v1.14.0 h1:C0En+gfcxf3NsAriMAvQ6LcSFrQ5VQGXddqfty1EpTI= github.com/jaegertracing/jaeger v1.14.0/go.mod h1:LUWPSnzNPGRubM8pk0inANGitpiMOOxihXx0+53llXI= +github.com/jaegertracing/jaeger v1.15.1 h1:7QzNAXq+4ko9GtCjozDNAp2uonoABu+B2Rk94hjQcp4= +github.com/jaegertracing/jaeger v1.15.1/go.mod h1:LUWPSnzNPGRubM8pk0inANGitpiMOOxihXx0+53llXI= github.com/jessevdk/go-flags v0.0.0-20180331124232-1c38ed7ad0cc/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= @@ -463,15 +468,20 @@ github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/open-telemetry/opentelemetry-collector v0.2.0/go.mod h1:zZf9V+57o0Fd3ik5HzaHamVsWhudJTOwnKw9kJvWoDo= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191119152140-567e1046cefa/go.mod h1:WCsoKuWfht1l33mnPISJ189n8l1p1G10TrQaKylV7no= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205212659-419ed61e5bac h1:Bif71iXGHh9WH9vA3sU96b0y19zM2kFl2PvaS2IS2v8= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205212659-419ed61e5bac/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= -github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212134434-b4b3530a43d9 h1:BHePbk/BHLNV6U7Duk8kiCQVLHkiXPD6/1Lxcf+fqWw= -github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212134434-b4b3530a43d9/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= -github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191212134434-b4b3530a43d9 h1:aktELw3sSDx5N+vHeNoyiF59DyYREgEjhnmGkfaMmVk= -github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191212134434-b4b3530a43d9/go.mod h1:0x5LWC/8hyS8Q8fCi0elhTYf9S94RzRX6ZgL7EiYvlQ= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212224229-4e99ac7468fe h1:re+8oPIseiIDqCo6mSxT7vgNvDVJc4++uzKHC5TB6/o= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212224229-4e99ac7468fe/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.0.0-20191213033854-af8a37b00e74 h1:YscnyY9NFYPCyE5WSbuRJbLnd1+Q9c9HUi+2bzlXzf8= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.0.0-20191213033854-af8a37b00e74/go.mod h1:4JDQQ/Ep3OeVl13pTRI4Ih3OyUqMYC79hPl6idCIo4Y= +github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191212224229-4e99ac7468fe h1:mfJ1zXpeycXAv7zOzqQBG+vELbXh1EX256TI46lE8MY= +github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191212224229-4e99ac7468fe/go.mod h1:0x5LWC/8hyS8Q8fCi0elhTYf9S94RzRX6ZgL7EiYvlQ= github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9/go.mod h1:PLldrQSroqzH70Xl+1DQcGnefIbqsKR7UDaiux3zV+w= github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1 h1:noL5/5Uf1HpVl3wNsfkZhIKbSWCVi5jgqkONNx8PXcA= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/orijtech/prometheus-go-metrics-exporter v0.0.3-0.20190313163149-b321c5297f60 h1:vN7d/Zv6aOXqhspiqoEMkb6uFHNARVESmYn5XtNeyrk= @@ -486,6 +496,7 @@ github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181 github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= +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 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -553,6 +564,8 @@ github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJ github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/vfsgen v0.0.0-20180825020608-02ddb050ef6b/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= +github.com/signalfx/sapm-proto v0.0.3-0.20191211161027-5e20f16d64d6 h1:yOY4t2Wtvr0tIcwvTzrHwihjwnVR7F/BitjcOMiY2wY= +github.com/signalfx/sapm-proto v0.0.3-0.20191211161027-5e20f16d64d6/go.mod h1:IZihj/XeDgvA1z3fQx55O6V5LO3G8bC7rRkwySqDcng= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -605,6 +618,7 @@ github.com/uber-go/atomic v1.4.0/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/uber/jaeger-client-go v2.16.0+incompatible h1:Q2Pp6v3QYiocMxomCaJuwQGFt7E53bPYqEgug/AoBtY= github.com/uber/jaeger-client-go v2.16.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v2.0.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/uber/jaeger-lib v2.2.0+incompatible h1:MxZXOiR2JuoANZ3J6DE/U0kSFv/eJ/GfSYVCjK7dyaw= github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/uber/tchannel-go v1.10.0 h1:YOihLHuvkwT3nzvpgqFtexFW+pb5vD1Tz7h/bIWApgE= @@ -631,12 +645,24 @@ 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.1 h1:8dP3SGL7MPB94crU3bEPplMPe83FI4EouesJUeFHv50= go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA= +go.opencensus.io v0.22.2 h1:75k/FF0Q2YM8QYo07VPddOLBslDt1MZOdEslOHvmzAs= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.5.1 h1:rsqfU5vBkVknbhUGbAUwQKR2H4ItV8tjJ+6kJX4cxHM= +go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.4.0 h1:f3WCSC2KzAcBXGATIxAB1E2XuCpNU255wNKZ505qi3E= +go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.13.0 h1:nR6NoDBgAf67s68NhaXbsojM+2gxp3S1hWkHDl27pVU= +go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181025213731-e84da0312774/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -659,6 +685,8 @@ golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvx 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-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -706,6 +734,7 @@ golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -737,6 +766,7 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZe golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -761,10 +791,14 @@ golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190719005602-e377ae9d6386/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= golang.org/x/tools v0.0.0-20190813034749-528a2984e271/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190906203814-12febf440ab1/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190930201159-7c411dea38b0/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191010075000-0337d82405ff h1:XdBG6es/oFDr1HwaxkxgVve7NB281QhxgK/i4voubFs= golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/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= @@ -784,6 +818,7 @@ google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRn google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64 h1:iKtrH9Y8mcbADOP0YFaEMth7OfuHY9xHOwNj4znpM1A= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= @@ -793,6 +828,8 @@ google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0 h1:AzbTB6ux+okLTzP8Ru1Xs41C303zdcfEht7MQnYJt5A= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1 h1:q4XQuHFC6I28BKZpo6IYyb3mNO+l7lSOxRuYTCiDfXk= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -814,6 +851,9 @@ 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.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5 h1:ymVxjfMaHvXD8RqPRmzHHsB3VvucivSkIAvJFDI5O3c= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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= diff --git a/testbed/tests/results/BASELINE.md b/testbed/tests/results/BASELINE.md index 9fc3072cdad9..5d75289c353a 100644 --- a/testbed/tests/results/BASELINE.md +++ b/testbed/tests/results/BASELINE.md @@ -1,6 +1,9 @@ # Test Results -Started: Wed, 11 Dec 2019 10:08:16 -0500 +Started: Thu, 12 Dec 2019 22:58:54 -0500 Test |Result|Duration|CPU Avg%|CPU Max%|RAM Avg MiB|RAM Max MiB|Sent Items|Received Items| ----------------------------------------|------|-------:|-------:|-------:|----------:|----------:|---------:|-------------:| -Trace10kSPS/JaegerReceiver |PASS | 16s| 49.4| 55.2| 20| 25| 149600| 149600| \ No newline at end of file +Trace10kSPS/JaegerReceiver |PASS | 15s| 47.0| 48.7| 20| 25| 149900| 149900| +Trace10kSPS/SAPMReceiver |PASS | 15s| 89.0| 91.4| 23| 28| 149750| 149750| + +Total duration: 30s diff --git a/testbed/tests/senders.go b/testbed/tests/senders.go new file mode 100644 index 000000000000..016a1c1e761a --- /dev/null +++ b/testbed/tests/senders.go @@ -0,0 +1,86 @@ +// 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 tests + +import ( + "context" + "fmt" + + "github.com/open-telemetry/opentelemetry-collector/consumer/consumerdata" + "github.com/open-telemetry/opentelemetry-collector/exporter" + "github.com/open-telemetry/opentelemetry-collector/testbed/testbed" + "go.uber.org/zap" + + "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter" +) + +// SapmDataSender implements TraceDataSender for SAPM protocol. +type SapmDataSender struct { + exporter exporter.TraceExporter + port int +} + +// Ensure SapmDataSender implements TraceDataSender. +var _ testbed.TraceDataSender = (*SapmDataSender)(nil) + +// NewSapmDataSender creates a new Sapm protocol sender that will send +// to the specified port after Start is called. +func NewSapmDataSender(port int) *SapmDataSender { + return &SapmDataSender{port: port} +} + +// Start the sender. +func (je *SapmDataSender) Start() error { + cfg := &sapmexporter.Config{ + Endpoint: fmt.Sprintf("http://localhost:%d/v2/trace", je.port), + } + + var err error + factory := sapmexporter.Factory{} + exporter, err := factory.CreateTraceExporter(zap.L(), cfg) + + if err != nil { + return err + } + + je.exporter = exporter + return err +} + +// SendSpans sends spans. Can be called after Start. +func (je *SapmDataSender) SendSpans(traces consumerdata.TraceData) error { + return je.exporter.ConsumeTraceData(context.Background(), traces) +} + +// Flush previously sent spans. +func (je *SapmDataSender) Flush() { +} + +// GenConfigYAMLStr returns receiver config for the agent. +func (je *SapmDataSender) GenConfigYAMLStr() string { + return fmt.Sprintf(` + sapm: + endpoint: "localhost:%d"`, je.port) +} + +// GetCollectorPort returns receiver port for the Collector. +func (je *SapmDataSender) GetCollectorPort() int { + return je.port +} + +// ProtocolName returns protocol name as it is specified in Collector config. +func (je *SapmDataSender) ProtocolName() string { + return "sapm" +} diff --git a/testbed/tests/trace_test.go b/testbed/tests/trace_test.go index 1560532d119f..092f5d92cd18 100644 --- a/testbed/tests/trace_test.go +++ b/testbed/tests/trace_test.go @@ -32,18 +32,28 @@ func TestMain(m *testing.M) { func TestTrace10kSPS(t *testing.T) { tests := []struct { name string + sender testbed.DataSender receiver testbed.DataReceiver }{ - {"JaegerReceiver", testbed.NewJaegerDataReceiver(testbed.GetAvailablePort(t))}, + { + "JaegerReceiver", + testbed.NewJaegerDataSender(testbed.GetAvailablePort(t)), + testbed.NewJaegerDataReceiver(testbed.GetAvailablePort(t)), + }, + { + "SAPMReceiver", + NewSapmDataSender(testbed.GetAvailablePort(t)), + testbed.NewJaegerDataReceiver(testbed.GetAvailablePort(t)), + }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { scenarios.Scenario10kItemsPerSecond( t, - testbed.NewJaegerDataSender(testbed.GetAvailablePort(t)), + test.sender, test.receiver, - testbed.LoadOptions{}, + testbed.LoadOptions{ItemsPerBatch: 100}, ) }) } From e747a7e3296fbfa3aeb3bf549267670709442f4a Mon Sep 17 00:00:00 2001 From: Owais Lone Date: Sat, 14 Dec 2019 03:20:51 +0530 Subject: [PATCH 31/59] Updated component dependencies (#64) --- go.mod | 15 +++++---------- go.sum | 12 ++++++++++++ 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/go.mod b/go.mod index 971655cdcc7e..a650fed11fed 100644 --- a/go.mod +++ b/go.mod @@ -6,23 +6,18 @@ require ( github.com/client9/misspell v0.3.4 github.com/google/addlicense v0.0.0-20190907113143-be125746c2c4 github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212224229-4e99ac7468fe - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter v0.0.0 - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kinesisexporter v0.0.0-00010101000000-000000000000 - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.0.0-00010101000000-000000000000 + github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter v0.0.0-20191213162202-55b8658da81a + github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kinesisexporter v0.0.0-20191213162202-55b8658da81a + github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.0.0-20191213162202-55b8658da81a github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.0.0-20191203211755-8ae89debd6c5 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/stackdriverexporter v0.0.0-20191126142441-b2a048090ad6 github.com/open-telemetry/opentelemetry-collector-contrib/receiver/collectdreceiver v0.0.0-20191209163404-28d5712f4129 - github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.0.0-20191209183045-9707a2732f37 + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.0.0-20191213162202-55b8658da81a github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinscribereceiver v0.0.0-20191126142441-b2a048090ad6 github.com/open-telemetry/opentelemetry-collector-contrib/testbed v0.0.0-20191213033854-af8a37b00e74 // indirect github.com/pavius/impi v0.0.0-20180302134524-c1cbdcb8df2b + github.com/pierrec/lz4 v2.0.5+incompatible // indirect golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f golang.org/x/tools v0.0.0-20191205225056-3393d29bb9fe honnef.co/go/tools v0.0.1-2019.2.3 ) - -replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter v0.0.0 => ./exporter/azuremonitorexporter - -replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter => ./exporter/sapmexporter - -replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kinesisexporter => ./exporter/kinesisexporter diff --git a/go.sum b/go.sum index 8bd66c60aebc..6d73d07fe3d0 100644 --- a/go.sum +++ b/go.sum @@ -524,6 +524,12 @@ github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205212659-419ed6 github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212134434-b4b3530a43d9/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212224229-4e99ac7468fe h1:re+8oPIseiIDqCo6mSxT7vgNvDVJc4++uzKHC5TB6/o= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212224229-4e99ac7468fe/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter v0.0.0-20191213162202-55b8658da81a h1:e413ZhWXyE595f0iDxvJJrxwws44XXHzie3QP42FF6w= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter v0.0.0-20191213162202-55b8658da81a/go.mod h1:f9HisVSyjWOxEyxkqsH706EguDYQqIk1xT5FbJUsopw= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kinesisexporter v0.0.0-20191213162202-55b8658da81a h1:0JcuLI26GWQLqgjTAupA0UMmLMdwYd0+D5MWzBudHZ8= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kinesisexporter v0.0.0-20191213162202-55b8658da81a/go.mod h1:YJ0pp5EG63ghRw4pbL9mycMx9Ry4t23EEZhkWnGZaS0= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.0.0-20191213162202-55b8658da81a h1:RCLKcv60md9hi8KU0AoB8xas3dSqOAfHfiwpuFNfRio= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.0.0-20191213162202-55b8658da81a/go.mod h1:mKclA4o6zDWbAotcpUwdum80rgoNanUNroX3VEZZLa8= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.0.0-20191203211755-8ae89debd6c5 h1:ywGB3azaH+hCb67EbAwtdUBg7MXFTxwvCclPT1F8lp4= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.0.0-20191203211755-8ae89debd6c5/go.mod h1:KFAuDdKdP7ejK2iB1xW4RbqKR/dKrmr2uYpVY5e5SyM= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/stackdriverexporter v0.0.0-20191126142441-b2a048090ad6 h1:M1xqVTsqqd6EF1mSgQCgpOdcYQlUZEQ0Aclh/FG5tl4= @@ -532,6 +538,8 @@ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/collectdrecei github.com/open-telemetry/opentelemetry-collector-contrib/receiver/collectdreceiver v0.0.0-20191209163404-28d5712f4129/go.mod h1:6+p7sEjtMKs4Dui1a7kzfmWS0vzcGjpQ1WkIjDXiciU= github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.0.0-20191209183045-9707a2732f37 h1:bdaaTQ0PcjMaFPWmUE8YmGLQ6+B/yKrDedz38pZLNSQ= github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.0.0-20191209183045-9707a2732f37/go.mod h1:U1F1p3CcH3VYq2z+3OiO+WfhifaQvRknR5XlxiuZzcU= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.0.0-20191213162202-55b8658da81a h1:K9n2YclHY8ez3dTKc/Yntbmhyyt+FR+GG5q/hxPBwZ4= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.0.0-20191213162202-55b8658da81a/go.mod h1:U1F1p3CcH3VYq2z+3OiO+WfhifaQvRknR5XlxiuZzcU= github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinscribereceiver v0.0.0-20191126142441-b2a048090ad6 h1:oFZnmX7g3xhvmsVoLLcR3XNSS3MZUzmDZhJdYaStKwo= github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinscribereceiver v0.0.0-20191126142441-b2a048090ad6/go.mod h1:GNDPC/bJ+7G66ttS6XjVKuQ2ZC80yUCESa/2DPI/75s= github.com/open-telemetry/opentelemetry-collector-contrib/testbed v0.0.0-20191213033854-af8a37b00e74 h1:FpSk1gITif/94zsdwxOb6FODhRo7P3K0Gz5GIni9r2Y= @@ -737,6 +745,7 @@ go.uber.org/atomic v1.5.1 h1:rsqfU5vBkVknbhUGbAUwQKR2H4ItV8tjJ+6kJX4cxHM= go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.3.0 h1:sFPn2GLc3poCkfrpIXGhBD2X0CMIo4Q/zSULXrj/+uc= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.4.0 h1:f3WCSC2KzAcBXGATIxAB1E2XuCpNU255wNKZ505qi3E= go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= @@ -745,6 +754,7 @@ go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9E go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.12.0 h1:dySoUQPFBGj6xwjmBzageVL8jGi8uxc6bEmJQjA06bw= go.uber.org/zap v1.12.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.13.0 h1:nR6NoDBgAf67s68NhaXbsojM+2gxp3S1hWkHDl27pVU= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= @@ -821,6 +831,7 @@ golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 h1:Ao/3l156eZf2AW5wK8a7/smto golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190912160710-24e19bdeb0f2 h1:4dVFTC832rPn4pomLSz1vA+are2+dU19w1H8OngV7nc= golang.org/x/net v0.0.0-20190912160710-24e19bdeb0f2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478 h1:l5EDrHhldLYb3ZRHDUhXF7Om7MvYXnkV9/iQNo1lX6g= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191119073136-fc4aabc6c914 h1:MlY3mEfbnWGmUi4rtHOtNnnnN4UJRGSyLPx+DXA5Sq4= golang.org/x/net v0.0.0-20191119073136-fc4aabc6c914/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -873,6 +884,7 @@ golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190912141932-bc967efca4b8 h1:41hwlulw1prEMBxLQSlMSux1zxJf07B3WPsdjJlKZxE= golang.org/x/sys v0.0.0-20190912141932-bc967efca4b8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69 h1:rOhMmluY6kLMhdnrivzec6lLgaVbMHMn2ISQXJeJ5EM= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191119195528-f068ffe820e4 h1:FjhQftcbpdYXneEYSWZO7+6Bu+Bi1A8VPvGYWOIzIbw= golang.org/x/sys v0.0.0-20191119195528-f068ffe820e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= From 0d77b22917727057c4ee75fedde1b90a3fea8ef2 Mon Sep 17 00:00:00 2001 From: rghetia Date: Fri, 13 Dec 2019 13:52:01 -0800 Subject: [PATCH 32/59] Fix build for go 1.13 (#65) --- .gitignore | 1 + Makefile | 9 ++++++--- Makefile.Common | 9 ++++++++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 9ac2286b663e..6989454bd2be 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ local/ # GoLand IDEA /.idea/ +*.iml # VS Code .vscode diff --git a/Makefile b/Makefile index 5ef0073e3f1b..aea9910ee54d 100644 --- a/Makefile +++ b/Makefile @@ -29,9 +29,12 @@ test-with-cover: @echo Verifying that all packages have test files to count in coverage @scripts/check-test-files.sh $(subst github.com/open-telemetry/opentelemetry-collector-contrib/,./,$(ALL_PKGS)) @echo pre-compiling tests - go test -i $(ALL_PKGS) - $(GOTEST) $(GOTEST_OPT_WITH_COVERAGE) $(ALL_PKGS) - go tool cover -html=coverage.txt -o coverage.html + set -e; for dir in $(ALL_TEST_DIRS); do \ + echo "go test ./... + coverage in $${dir}"; \ + (cd "$${dir}" && \ + $(GOTEST) $(GOTEST_OPT_WITH_COVERAGE) ./... && \ + go tool cover -html=coverage.txt -o coverage.html ); \ + done .PHONY: install-tools install-tools: diff --git a/Makefile.Common b/Makefile.Common index 15097c432eba..a94bb7fc7ac6 100644 --- a/Makefile.Common +++ b/Makefile.Common @@ -7,6 +7,8 @@ ALL_SRC_AND_DOC := $(shell find . \( -name "*.md" -o -name "*.go" -o -name "*.ya # ALL_PKGS is used with 'go cover' ALL_PKGS := $(shell go list $(sort $(dir $(ALL_SRC)))) +# ALL_TEST_DIRS includes ./* dirs (excludes . dir) +ALL_TEST_DIRS := $(shell find . -type f -name "go.mod" -exec dirname {} \; | sort | egrep '^./' ) GOTEST_OPT?= -race -timeout 30s GOTEST_OPT_WITH_COVERAGE = $(GOTEST_OPT) -coverprofile=coverage.txt -covermode=atomic @@ -35,7 +37,12 @@ common: addlicense fmt impi vet lint goimports misspell staticcheck test .PHONY: test test: - $(GOTEST) $(GOTEST_OPT) $(ALL_PKGS) + # $(GOTEST) $(GOTEST_OPT) $(ALL_TEST_DIRS) + set -e; for dir in $(ALL_TEST_DIRS); do \ + echo "go test ./... in $${dir}"; \ + (cd "$${dir}" && \ + $(GOTEST) ./... ); \ + done .PHONY: benchmark benchmark: From 7f4c30a03962576b8ef2831d4f04aade69ce378f Mon Sep 17 00:00:00 2001 From: Tigran Najaryan <4194920+tigrannajaryan@users.noreply.github.com> Date: Fri, 13 Dec 2019 17:02:32 -0500 Subject: [PATCH 33/59] Add E2E test for SAPM Exporter (#66) SAPM trace test was using SAPM Receiver and Jaeger Exporter. Now SAPM is used for both ends. --- exporter/sapmexporter/go.mod | 1 + testbed/go.mod | 8 +-- testbed/go.sum | 83 ++++++++++++++++++++++++++++--- testbed/tests/receivers.go | 77 ++++++++++++++++++++++++++++ testbed/tests/results/BASELINE.md | 8 +-- testbed/tests/trace_test.go | 6 +-- 6 files changed, 165 insertions(+), 18 deletions(-) create mode 100644 testbed/tests/receivers.go diff --git a/exporter/sapmexporter/go.mod b/exporter/sapmexporter/go.mod index 40407b84fff2..c88a783bc7c0 100644 --- a/exporter/sapmexporter/go.mod +++ b/exporter/sapmexporter/go.mod @@ -4,6 +4,7 @@ go 1.12 require ( github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191119152140-567e1046cefa + github.com/pierrec/lz4 v2.0.5+incompatible // indirect github.com/signalfx/sapm-proto v0.1.0 github.com/stretchr/testify v1.4.0 go.uber.org/atomic v1.5.1 // indirect diff --git a/testbed/go.mod b/testbed/go.mod index aba285ca585c..bdb13dfd7437 100644 --- a/testbed/go.mod +++ b/testbed/go.mod @@ -3,8 +3,10 @@ module github.com/open-telemetry/opentelemetry-collector-contrib/testbed go 1.12 require ( - github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212224229-4e99ac7468fe - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.0.0-20191213033854-af8a37b00e74 - github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191212224229-4e99ac7468fe + github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191213162008-563eac85a88c + github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.0.0-20191213162202-55b8658da81a + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.0.0-20191213162202-55b8658da81a + github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191213162008-563eac85a88c + github.com/pierrec/lz4 v2.0.5+incompatible // indirect go.uber.org/zap v1.13.0 ) diff --git a/testbed/go.sum b/testbed/go.sum index 9d62f0ee3817..271d11642eef 100644 --- a/testbed/go.sum +++ b/testbed/go.sum @@ -3,6 +3,15 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.44.1 h1:7gXaI3V/b4DRaK++rTqhRajcT7z8gtP0qKMZTXqlySM= 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.49.0 h1:CH+lkubJzcPYB1Ggupcq0+k8Ni2ILdG2lYjDIgavDBQ= +cloud.google.com/go v0.49.0/go.mod h1:hGvAdzcWNbyuxS3nWhD7H2cIJxjRRTRLQVB0bdputVY= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= contrib.go.opencensus.io/exporter/jaeger v0.1.1-0.20190430175949-e8b55949d948 h1:xdP25yLqNGSnpfDmEChwA9ZuKLdiyL0jqJKPm/Ypfag= contrib.go.opencensus.io/exporter/jaeger v0.1.1-0.20190430175949-e8b55949d948/go.mod h1:ukdzwIYYHgZ7QYtwVFQUjiT28BJHiMhTERo32s6qVgM= contrib.go.opencensus.io/exporter/ocagent v0.6.0 h1:Z1n6UAyr0QwM284yUuh5Zd8JlvxUGAhFZcgMJkMPrGM= @@ -11,6 +20,7 @@ contrib.go.opencensus.io/exporter/prometheus v0.1.0/go.mod h1:cGFniUXGZlKRjzOyuZ contrib.go.opencensus.io/exporter/zipkin v0.1.1/go.mod h1:GMvdSl3eJ2gapOaLKzTKE3qDgUkJ86k9k3yY2eqwkzc= contrib.go.opencensus.io/resource v0.1.2 h1:b4WFJV8u7/NzPWHeTqj3Ec2AW8OGhtJxC/hbphIOvbU= contrib.go.opencensus.io/resource v0.1.2/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-sdk-for-go v23.2.0+incompatible h1:bch1RS060vGpHpY3zvQDV4rOiRw25J1zmR/B9a76aSA= github.com/Azure/azure-sdk-for-go v23.2.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/go-autorest v11.1.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= @@ -102,6 +112,8 @@ github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaB github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v0.0.0-20190203023257-5858425f7550/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.5.0+incompatible h1:ouOWdg56aJriqS0huScTkVXPC5IcNrDCXZ6OoTAWu7M= @@ -116,6 +128,7 @@ github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0 github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/go-critic/go-critic v0.3.5-0.20190904082202-d79a9f0c64db h1:GYXWx7Vr3+zv833u+8IoXbNnQY0AdXsxAgI0kX7xcwA= github.com/go-critic/go-critic v0.3.5-0.20190904082202-d79a9f0c64db/go.mod h1:+sE8vrLDS2M0pZkBk0wy6+nLdKexVDrl/jBqQOTDThA= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= @@ -222,6 +235,8 @@ github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4er github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9 h1:uHTyIjqVhYRhLbJ8nIiOJHkEZZ+5YoOsAbD3sk82NiE= +github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 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= @@ -378,6 +393,8 @@ github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62F github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024 h1:rBMNdlhTLzJjJSDIjNEXX1Pz3Hmwmz91v+zycvx9PJc= 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 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= +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/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= @@ -468,16 +485,20 @@ github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/open-telemetry/opentelemetry-collector v0.2.0 h1:38/NrGdEEXufWqYFkW/6yeW3koRvb1QbE/2owKSNQvI= github.com/open-telemetry/opentelemetry-collector v0.2.0/go.mod h1:zZf9V+57o0Fd3ik5HzaHamVsWhudJTOwnKw9kJvWoDo= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191119152140-567e1046cefa/go.mod h1:WCsoKuWfht1l33mnPISJ189n8l1p1G10TrQaKylV7no= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205151336-8e2473c5e754/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205212659-419ed61e5bac h1:Bif71iXGHh9WH9vA3sU96b0y19zM2kFl2PvaS2IS2v8= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205212659-419ed61e5bac/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= -github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212224229-4e99ac7468fe h1:re+8oPIseiIDqCo6mSxT7vgNvDVJc4++uzKHC5TB6/o= -github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191212224229-4e99ac7468fe/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= -github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.0.0-20191213033854-af8a37b00e74 h1:YscnyY9NFYPCyE5WSbuRJbLnd1+Q9c9HUi+2bzlXzf8= -github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.0.0-20191213033854-af8a37b00e74/go.mod h1:4JDQQ/Ep3OeVl13pTRI4Ih3OyUqMYC79hPl6idCIo4Y= -github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191212224229-4e99ac7468fe h1:mfJ1zXpeycXAv7zOzqQBG+vELbXh1EX256TI46lE8MY= -github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191212224229-4e99ac7468fe/go.mod h1:0x5LWC/8hyS8Q8fCi0elhTYf9S94RzRX6ZgL7EiYvlQ= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191213162008-563eac85a88c h1:PtVtU4iX52uEC00v/aiSmOcrf8Gr8YatTxDWC0iL2W0= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191213162008-563eac85a88c/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.0.0-20191213162202-55b8658da81a h1:RCLKcv60md9hi8KU0AoB8xas3dSqOAfHfiwpuFNfRio= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.0.0-20191213162202-55b8658da81a/go.mod h1:mKclA4o6zDWbAotcpUwdum80rgoNanUNroX3VEZZLa8= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.0.0-20191213162202-55b8658da81a h1:K9n2YclHY8ez3dTKc/Yntbmhyyt+FR+GG5q/hxPBwZ4= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.0.0-20191213162202-55b8658da81a/go.mod h1:U1F1p3CcH3VYq2z+3OiO+WfhifaQvRknR5XlxiuZzcU= +github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191213162008-563eac85a88c h1:M7lSfZJXXHN010DA41JIls10l5mDh4d1emhNNaiKJwo= +github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191213162008-563eac85a88c/go.mod h1:0x5LWC/8hyS8Q8fCi0elhTYf9S94RzRX6ZgL7EiYvlQ= github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9/go.mod h1:PLldrQSroqzH70Xl+1DQcGnefIbqsKR7UDaiux3zV+w= github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -518,6 +539,8 @@ github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1: github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20191202183732-d1d2010b5bee h1:iBZPTYkGLvdu6+A5TsMUJQkQX9Ad4aCEnSQtdxPuTCQ= +github.com/prometheus/client_model v0.0.0-20191202183732-d1d2010b5bee/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= @@ -564,8 +587,9 @@ github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJ github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/vfsgen v0.0.0-20180825020608-02ddb050ef6b/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= -github.com/signalfx/sapm-proto v0.0.3-0.20191211161027-5e20f16d64d6 h1:yOY4t2Wtvr0tIcwvTzrHwihjwnVR7F/BitjcOMiY2wY= -github.com/signalfx/sapm-proto v0.0.3-0.20191211161027-5e20f16d64d6/go.mod h1:IZihj/XeDgvA1z3fQx55O6V5LO3G8bC7rRkwySqDcng= +github.com/signalfx/sapm-proto v0.0.2/go.mod h1:mnxTtJuYpsmOFW0F+f95bazdXGUnvjMMwbRNgSjaDb4= +github.com/signalfx/sapm-proto v0.1.0 h1:HZoHIcx4Wt8sP2CHaj86M8kcqra0qC0QdK28OVD+WMk= +github.com/signalfx/sapm-proto v0.1.0/go.mod h1:IZihj/XeDgvA1z3fQx55O6V5LO3G8bC7rRkwySqDcng= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -677,18 +701,29 @@ golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392 h1:ACG4HJsFiNMf47Y4PeRoebLNy/2lXT9EtprMuTFWt1M= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= +golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd h1:GGJVjV8waZKRHrgwvtH66z9ZGVurTD1MT0n1Bb+q4aM= +golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/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/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 h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f h1:J5lckAjkw6qYlOZNj90mLYNTEKDvWeuc1yieZ8qUzUE= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= 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/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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= @@ -715,17 +750,23 @@ golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478 h1:l5EDrHhldLYb3ZRHDUhXF7Om7MvYXnkV9/iQNo1lX6g= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191206103017-1ddd1de85cb0 h1:LxY/gQN/MrcW24/46nLyiip1GhN/Yi14QPbeNskTvQA= +golang.org/x/net v0.0.0-20191206103017-1ddd1de85cb0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 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-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6 h1:pE8b58s1HRDMi8RDc79m0HISf9D4TzseP40cEA6IGfs= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/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 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 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= @@ -753,6 +794,8 @@ golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69 h1:rOhMmluY6kLMhdnrivzec6lLgaVbMHMn2ISQXJeJ5EM= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e h1:9vRrk9YW2BTzLP0VCB9ZDjU4cPqkg+IDWL7XgxA1yxQ= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/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.20180805044716-cb6730876b98/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -764,6 +807,8 @@ golang.org/x/time v0.0.0-20161028155119-f51c12702a4d/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -791,25 +836,37 @@ golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190719005602-e377ae9d6386/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= golang.org/x/tools v0.0.0-20190813034749-528a2984e271/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190906203814-12febf440ab1/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/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-20190930201159-7c411dea38b0/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191010075000-0337d82405ff h1:XdBG6es/oFDr1HwaxkxgVve7NB281QhxgK/i4voubFs= golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/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-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/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-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191205225056-3393d29bb9fe h1:BEVcKURC7E0EF+vD1l52Jb3LOM5Iwu7OI5FpdPuU50o= +golang.org/x/tools v0.0.0-20191205225056-3393d29bb9fe/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/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.10.0 h1:7tmAxx3oKE98VMZ+SBZzvYYWRQ9HODBxmC8mXUsraSQ= google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.14.0 h1:uMf5uLi4eQMRrMKhCplNik4U4H8Z6C1br3zOtAa/aDE= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= 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 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM= +google.golang.org/appengine v1.6.5/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-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -818,6 +875,12 @@ google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRn google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64 h1:iKtrH9Y8mcbADOP0YFaEMth7OfuHY9xHOwNj4znpM1A= 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-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115221424-83cc0476cb11/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191205163323-51378566eb59 h1:A2If0NMGFAltEHPrnAZY86sBw/gA9ESWJdgG7kVWt64= +google.golang.org/genproto v0.0.0-20191205163323-51378566eb59/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -830,6 +893,8 @@ google.golang.org/grpc v1.23.0 h1:AzbTB6ux+okLTzP8Ru1Xs41C303zdcfEht7MQnYJt5A= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.1 h1:q4XQuHFC6I28BKZpo6IYyb3mNO+l7lSOxRuYTCiDfXk= google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1 h1:wdKvqQk7IttEw92GoRyKG2IDrUIpgpj6H6m81yfeMW0= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -853,6 +918,8 @@ gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5 h1:ymVxjfMaHvXD8RqPRmzHHsB3VvucivSkIAvJFDI5O3c= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.7 h1:VUgggvou5XRW9mHwD/yXxIYSMtY0zoKQf/v226p2nyo= +gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/testbed/tests/receivers.go b/testbed/tests/receivers.go new file mode 100644 index 000000000000..e9a314898138 --- /dev/null +++ b/testbed/tests/receivers.go @@ -0,0 +1,77 @@ +// 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 tests + +import ( + "context" + "fmt" + "log" + + "github.com/open-telemetry/opentelemetry-collector/config/configmodels" + "github.com/open-telemetry/opentelemetry-collector/receiver" + "github.com/open-telemetry/opentelemetry-collector/testbed/testbed" + "go.uber.org/zap" + + "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver" +) + +// SapmDataReceiver implements Sapm format receiver. +type SapmDataReceiver struct { + testbed.DataReceiverBase + receiver receiver.TraceReceiver +} + +// NewSapmDataReceiver creates a new SapmDataReceiver. +func NewSapmDataReceiver(port int) *SapmDataReceiver { + return &SapmDataReceiver{DataReceiverBase: testbed.DataReceiverBase{Port: port}} +} + +// Start the receiver. +func (sr *SapmDataReceiver) Start(tc *testbed.MockTraceConsumer, mc *testbed.MockMetricConsumer) error { + sapmCfg := sapmreceiver.Config{ + ReceiverSettings: configmodels.ReceiverSettings{ + Endpoint: fmt.Sprintf("localhost:%d", sr.Port), + }, + } + var err error + sr.receiver, err = sapmreceiver.New(context.Background(), zap.L(), &sapmCfg, tc) + if err != nil { + return err + } + + return sr.receiver.StartTraceReception(sr) +} + +// Stop the receiver. +func (sr *SapmDataReceiver) Stop() { + if sr.receiver != nil { + if err := sr.receiver.StopTraceReception(); err != nil { + log.Printf("Cannot stop Sapm receiver: %s", err.Error()) + } + } +} + +// GenConfigYAMLStr returns exporter config for the agent. +func (sr *SapmDataReceiver) GenConfigYAMLStr() string { + // Note that this generates an exporter config for agent. + return fmt.Sprintf(` + sapm: + endpoint: "http://localhost:%d/v2/trace"`, sr.Port) +} + +// ProtocolName returns protocol name as it is specified in Collector config. +func (sr *SapmDataReceiver) ProtocolName() string { + return "sapm" +} diff --git a/testbed/tests/results/BASELINE.md b/testbed/tests/results/BASELINE.md index 5d75289c353a..2f63e7437408 100644 --- a/testbed/tests/results/BASELINE.md +++ b/testbed/tests/results/BASELINE.md @@ -1,9 +1,9 @@ # Test Results -Started: Thu, 12 Dec 2019 22:58:54 -0500 +Started: Fri, 13 Dec 2019 15:39:39 -0500 Test |Result|Duration|CPU Avg%|CPU Max%|RAM Avg MiB|RAM Max MiB|Sent Items|Received Items| ----------------------------------------|------|-------:|-------:|-------:|----------:|----------:|---------:|-------------:| -Trace10kSPS/JaegerReceiver |PASS | 15s| 47.0| 48.7| 20| 25| 149900| 149900| -Trace10kSPS/SAPMReceiver |PASS | 15s| 89.0| 91.4| 23| 28| 149750| 149750| +Trace10kSPS/JaegerThrift |PASS | 15s| 37.7| 40.6| 20| 25| 150000| 150000| +Trace10kSPS/SAPM |PASS | 15s| 34.1| 35.3| 33| 41| 150000| 150000| -Total duration: 30s +Total duration: 30s \ No newline at end of file diff --git a/testbed/tests/trace_test.go b/testbed/tests/trace_test.go index 092f5d92cd18..b810c7e2981a 100644 --- a/testbed/tests/trace_test.go +++ b/testbed/tests/trace_test.go @@ -36,14 +36,14 @@ func TestTrace10kSPS(t *testing.T) { receiver testbed.DataReceiver }{ { - "JaegerReceiver", + "JaegerThrift", testbed.NewJaegerDataSender(testbed.GetAvailablePort(t)), testbed.NewJaegerDataReceiver(testbed.GetAvailablePort(t)), }, { - "SAPMReceiver", + "SAPM", NewSapmDataSender(testbed.GetAvailablePort(t)), - testbed.NewJaegerDataReceiver(testbed.GetAvailablePort(t)), + NewSapmDataReceiver(testbed.GetAvailablePort(t)), }, } From 4f69d2c99ed3123e8ec6a46344bc7675a7aed6c1 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Fri, 8 Nov 2019 15:26:25 -0600 Subject: [PATCH 34/59] initial def of aws xray exporter --- exporter/awsxrayexporter/Makefile | 1 + exporter/awsxrayexporter/awsxray.go | 42 + exporter/awsxrayexporter/config.go | 41 + exporter/awsxrayexporter/config_test.go | 60 + exporter/awsxrayexporter/doc.go | 17 + exporter/awsxrayexporter/error.go | 33 + exporter/awsxrayexporter/factory.go | 64 + exporter/awsxrayexporter/factory_test.go | 28 + exporter/awsxrayexporter/go.mod | 173 ++ exporter/awsxrayexporter/go.sum | 2279 +++++++++++++++++ exporter/awsxrayexporter/http.go | 147 ++ exporter/awsxrayexporter/segment.go | 475 ++++ exporter/awsxrayexporter/testdata/config.yaml | 21 + 13 files changed, 3381 insertions(+) create mode 100644 exporter/awsxrayexporter/Makefile create mode 100644 exporter/awsxrayexporter/awsxray.go create mode 100644 exporter/awsxrayexporter/config.go create mode 100644 exporter/awsxrayexporter/config_test.go create mode 100644 exporter/awsxrayexporter/doc.go create mode 100644 exporter/awsxrayexporter/error.go create mode 100644 exporter/awsxrayexporter/factory.go create mode 100644 exporter/awsxrayexporter/factory_test.go create mode 100644 exporter/awsxrayexporter/go.mod create mode 100644 exporter/awsxrayexporter/go.sum create mode 100644 exporter/awsxrayexporter/http.go create mode 100644 exporter/awsxrayexporter/segment.go create mode 100644 exporter/awsxrayexporter/testdata/config.yaml diff --git a/exporter/awsxrayexporter/Makefile b/exporter/awsxrayexporter/Makefile new file mode 100644 index 000000000000..c1496226e590 --- /dev/null +++ b/exporter/awsxrayexporter/Makefile @@ -0,0 +1 @@ +include ../../Makefile.Common \ No newline at end of file diff --git a/exporter/awsxrayexporter/awsxray.go b/exporter/awsxrayexporter/awsxray.go new file mode 100644 index 000000000000..a740ef095b49 --- /dev/null +++ b/exporter/awsxrayexporter/awsxray.go @@ -0,0 +1,42 @@ +// 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 awsxrayexporter + +import ( + "context" + "github.com/open-telemetry/opentelemetry-collector/config/configmodels" + "github.com/open-telemetry/opentelemetry-collector/consumer/consumerdata" + "github.com/open-telemetry/opentelemetry-collector/exporter" + "github.com/open-telemetry/opentelemetry-collector/exporter/exporterhelper" + "go.uber.org/zap" +) + +// NewTraceExporter creates an exporter.TraceExporter that just drops the +// received data and logs debugging messages. +func NewTraceExporter(config configmodels.Exporter, logger *zap.Logger) (exporter.TraceExporter, error) { + typeLog := zap.String("type", config.Type()) + nameLog := zap.String("name", config.Name()) + return exporterhelper.NewTraceExporter( + config, + func(ctx context.Context, td consumerdata.TraceData) (int, error) { + logger.Info("TraceExporter", typeLog, nameLog, zap.Int("#spans", len(td.Spans))) + // TODO: Add ability to record the received data + return 0, nil + }, + exporterhelper.WithTracing(true), + exporterhelper.WithMetrics(false), + exporterhelper.WithShutdown(logger.Sync), + ) +} diff --git a/exporter/awsxrayexporter/config.go b/exporter/awsxrayexporter/config.go new file mode 100644 index 000000000000..8b403a7e0060 --- /dev/null +++ b/exporter/awsxrayexporter/config.go @@ -0,0 +1,41 @@ +// 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 awsxrayexporter + +import "github.com/open-telemetry/opentelemetry-collector/config/configmodels" + +// Config defines configuration for AWS X-Ray exporter. +type Config struct { + configmodels.ExporterSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct. + // Maximum number of concurrent calls to AWS X-Ray to upload segment documents. + Concurrency int `mapstructure:"num_workers"` + // X-Ray service endpoint to which the daemon sends segment documents. + Endpoint string `mapstructure:"endpoint"` + // Send segments to AWS X-Ray service in a specific region. + Region string `mapstructure:"region"` + // Local mode to skip EC2 instance metadata check. + LocalMode bool `mapstructure:"local_mode"` + // Amazon Resource Name (ARN) of the AWS resource running the daemon. + ResourceARN string `mapstructure:"resource_arn"` + // IAM role to upload segments to a different account. + RoleARN string `mapstructure:"role_arn"` + // Enable or disable TLS certificate verification. + NoVerifySSL bool `mapstructure:"no_verify_ssl"` + // Upload segments to AWS X-Ray through a proxy. + ProxyAddress string `mapstructure:"proxy_address"` + // Default AWS resource type of trace data origin + // [AWS::EC2::Instance | AWS::ECS::Container | AWS::ElasticBeanstalk::Environment] + Origin string `mapstructure:"origin"` +} diff --git a/exporter/awsxrayexporter/config_test.go b/exporter/awsxrayexporter/config_test.go new file mode 100644 index 000000000000..da686ff4cbfe --- /dev/null +++ b/exporter/awsxrayexporter/config_test.go @@ -0,0 +1,60 @@ +// 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 awsxrayexporter + +import ( + "path" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/open-telemetry/opentelemetry-collector/config" + "github.com/open-telemetry/opentelemetry-collector/config/configmodels" +) + +func TestLoadConfig(t *testing.T) { + factories, err := config.ExampleComponents() + assert.Nil(t, err) + + factory := &Factory{} + factories.Exporters[typeStr] = factory + cfg, err := config.LoadConfigFile( + t, path.Join(".", "testdata", "config.yaml"), factories, + ) + + require.NoError(t, err) + require.NotNil(t, cfg) + + assert.Equal(t, len(cfg.Exporters), 2) + + r0 := cfg.Exporters["awsxray"] + assert.Equal(t, r0, factory.CreateDefaultConfig()) + + r1 := cfg.Exporters["awsxray/customname"].(*Config) + assert.Equal(t, r1, + &Config{ + ExporterSettings: configmodels.ExporterSettings{TypeVal: typeStr, NameVal: "awsxray/customname"}, + Concurrency: 8, + Endpoint: "", + Region: "us-east-1", + LocalMode: false, + ResourceARN: "", + RoleARN: "", + NoVerifySSL: false, + ProxyAddress: "", + Origin: "AWS::ECS::Container", + }) +} diff --git a/exporter/awsxrayexporter/doc.go b/exporter/awsxrayexporter/doc.go new file mode 100644 index 000000000000..bd542c44e340 --- /dev/null +++ b/exporter/awsxrayexporter/doc.go @@ -0,0 +1,17 @@ +// 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 awsxrayexporter implements an Otel Collector exporter that sends trace data to +// AWS X-Ray in the region the collector is running in using the PutTraceSegments API. +package awsxrayexporter diff --git a/exporter/awsxrayexporter/error.go b/exporter/awsxrayexporter/error.go new file mode 100644 index 000000000000..0dacc67800eb --- /dev/null +++ b/exporter/awsxrayexporter/error.go @@ -0,0 +1,33 @@ +// 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 awsxrayexporter + +type exception struct { + // ID – A 64-bit identifier for the exception, unique among segments in the same trace, + // in 16 hexadecimal digits. + ID string `json:"id"` + + // Message – The exception message. + Message string `json:"message,omitempty"` +} + +// cause - A cause can be either a 16 character exception ID or an object with the following fields: +type errCause struct { + // WorkingDirectory – The full path of the working directory when the exception occurred. + WorkingDirectory string `json:"working_directory"` + + // Exceptions - The array of exception objects. + Exceptions []exception `json:"exceptions,omitempty"` +} diff --git a/exporter/awsxrayexporter/factory.go b/exporter/awsxrayexporter/factory.go new file mode 100644 index 000000000000..bc229610c4e7 --- /dev/null +++ b/exporter/awsxrayexporter/factory.go @@ -0,0 +1,64 @@ +// 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 awsxrayexporter + +import ( + "github.com/open-telemetry/opentelemetry-collector/config/configmodels" + "github.com/open-telemetry/opentelemetry-collector/exporter" + "go.uber.org/zap" +) + +const ( + // The value of "type" key in configuration. + typeStr = "awsxray" +) + +// Factory is the factory for AWS X-Ray exporter. +type Factory struct { +} + +// Type gets the type of the Exporter config created by this factory. +func (f *Factory) Type() string { + return typeStr +} + +// CreateDefaultConfig creates the default configuration for exporter. +func (f *Factory) CreateDefaultConfig() configmodels.Exporter { + return &Config{ + ExporterSettings: configmodels.ExporterSettings{ + TypeVal: typeStr, + NameVal: typeStr, + }, + Concurrency: 8, + Endpoint: "", + Region: "", + LocalMode: false, + ResourceARN: "", + RoleARN: "", + NoVerifySSL: false, + ProxyAddress: "", + Origin: "AWS::EC2::Instance", + } +} + +// CreateTraceExporter creates a trace exporter based on this config. +func (f *Factory) CreateTraceExporter(logger *zap.Logger, cfg configmodels.Exporter) (exporter.TraceExporter, error) { + eCfg := cfg.(*Config) + return NewTraceExporter(eCfg, logger) +} + +func (f *Factory) CreateMetricsExporter(logger *zap.Logger, cfg configmodels.Exporter) (exporter.MetricsExporter, error) { + return nil, nil +} diff --git a/exporter/awsxrayexporter/factory_test.go b/exporter/awsxrayexporter/factory_test.go new file mode 100644 index 000000000000..99a30ef25149 --- /dev/null +++ b/exporter/awsxrayexporter/factory_test.go @@ -0,0 +1,28 @@ +// 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 awsxrayexporter + +import ( + "github.com/open-telemetry/opentelemetry-collector/config/configcheck" + "github.com/stretchr/testify/assert" + "testing" +) + +func TestCreateDefaultConfig(t *testing.T) { + factory := Factory{} + cfg := factory.CreateDefaultConfig() + assert.NotNil(t, cfg, "failed to create default config") + assert.NoError(t, configcheck.ValidateConfig(cfg)) +} diff --git a/exporter/awsxrayexporter/go.mod b/exporter/awsxrayexporter/go.mod new file mode 100644 index 000000000000..60dcf2fa3a0a --- /dev/null +++ b/exporter/awsxrayexporter/go.mod @@ -0,0 +1,173 @@ +module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter + +go 1.12 + +require ( + cloud.google.com/go/datastore v1.0.0 // indirect + collectd.org v0.3.0 // indirect + dmitri.shuralyov.com/route/github v0.0.0-20180323232716-ce4edef1f8c9 // indirect + git.apache.org/thrift.git v0.13.0 // indirect + github.com/AaronO/go-git-http v0.0.0-20161214145340-1d9485b3a98f // indirect + github.com/aclements/go-gg v0.0.0-20170323211221-abd1f791f5ee // indirect + github.com/aclements/go-moremath v0.0.0-20190830160640-d16893ddf098 // indirect + github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 // indirect + github.com/ajstarks/deck v0.0.0-20191009173945-82d717002242 // indirect + github.com/ajstarks/svgo v0.0.0-20190826172357-de52242f3d65 // indirect + github.com/andygrunwald/go-gerrit v0.0.0-20191101112536-3f5e365ccf57 // indirect + github.com/apache/arrow/go/arrow v0.0.0-20191105160933-1afbcb6bb2a6 // indirect + github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a // indirect + github.com/aws/aws-sdk-go v1.23.12 + github.com/aws/aws-sdk-go-v2 v0.15.0 // indirect + github.com/aws/aws-xray-sdk-go v0.9.4 // indirect + github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59 // indirect + github.com/beyang/hgo v0.0.0-20150825035631-d45f1891a48a // indirect + github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40 // indirect + github.com/boltdb/bolt v1.3.1 // indirect + github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b // indirect + github.com/bsm/sarama-cluster v2.1.15+incompatible // indirect + github.com/cactus/go-statsd-client/statsd v0.0.0-20191030180650-a68a2246f89c // indirect + github.com/casbin/casbin v1.9.1 // indirect + github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect + github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec // indirect + github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0 // indirect + github.com/coreos/etcd v3.3.17+incompatible // indirect + github.com/crossdock/crossdock-go v0.0.0-20160816171116-049aabb0122b // indirect + github.com/cznic/cc v0.0.0-20181122101902-d673e9b70d4d // indirect + github.com/cznic/fileutil v0.0.0-20181122101858-4d67cfea8c87 // indirect + github.com/cznic/golex v0.0.0-20181122101858-9c343928389c // indirect + github.com/cznic/internal v0.0.0-20181122101858-3279554c546e // indirect + github.com/cznic/ir v0.0.0-20181122101859-da7ba2ecce8b // indirect + github.com/cznic/lex v0.0.0-20181122101858-ce0fb5e9bb1b // indirect + github.com/cznic/lexer v0.0.0-20181122101858-e884d4bd112e // indirect + github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 // indirect + github.com/cznic/strutil v0.0.0-20181122101858-275e90344537 // indirect + github.com/cznic/xc v0.0.0-20181122101856-45b06973881e // indirect + github.com/dgraph-io/badger v1.6.0 // indirect + github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8 // indirect + github.com/dimchansky/utfbom v1.1.0 // indirect + github.com/disintegration/gift v1.2.1 // indirect + github.com/djherbis/buffer v1.1.0 // indirect + github.com/djherbis/nio v2.0.3+incompatible // indirect + github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 // indirect + github.com/emicklei/go-restful-swagger12 v0.0.0-20170926063155-7524189396c6 // indirect + github.com/fogleman/gg v1.3.0 // indirect + github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8 // indirect + github.com/garyburd/redigo v1.6.0 // indirect + github.com/gin-gonic/gin v1.4.0 // indirect + github.com/glycerine/go-unsnap-stream v0.0.0-20190901134440-81cf024a9e0a // indirect + github.com/go-chi/chi v4.0.2+incompatible // indirect + github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab // indirect + github.com/gobuffalo/buffalo v0.15.0 // indirect + github.com/gobwas/glob v0.2.3 // indirect + github.com/gocql/gocql v0.0.0-20191102131523-9faa4c08d962 // indirect + github.com/godbus/dbus v4.1.0+incompatible // indirect + github.com/goji/param v0.0.0-20160927210335-d7f49fd7d1ed // indirect + github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect + github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac // indirect + github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82 // indirect + github.com/gonum/internal v0.0.0-20181124074243-f884aa714029 // indirect + github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9 // indirect + github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9 // indirect + github.com/gorilla/handlers v1.4.2 // indirect + github.com/gorilla/schema v1.1.0 // indirect + github.com/graph-gophers/graphql-go v0.0.0-20191031232829-adde0d0f76a3 // indirect + github.com/hashicorp/go-hclog v0.10.0 // indirect + github.com/hashicorp/go-plugin v1.0.1 // indirect + github.com/hudl/fargo v1.3.0 // indirect + github.com/iancoleman/strcase v0.0.0-20190422225806-e506e3ef7365 // indirect + github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6 // indirect + github.com/inconshreveable/go-vhost v0.0.0-20160627193104-06d84117953b // indirect + github.com/inconshreveable/log15 v0.0.0-20180818164646-67afb5ed74ec // indirect + github.com/influxdata/flux v0.53.0 // indirect + github.com/influxdata/influxdb1-client v0.0.0-20190809212627-fc22c7df067e // indirect + github.com/influxdata/influxql v1.0.1 // indirect + github.com/influxdata/roaring v0.4.12 // indirect + github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368 // indirect + github.com/jsternberg/zap-logfmt v1.2.0 // indirect + github.com/jung-kurt/gofpdf v1.13.0 // indirect + github.com/justinas/alice v1.2.0 // indirect + github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef // indirect + github.com/kisielk/sqlstruct v0.0.0-20150923205031-648daed35d49 // indirect + github.com/klauspost/compress v1.9.1 // indirect + github.com/klauspost/pgzip v1.2.1 // indirect + github.com/lightstep/lightstep-tracer-go v0.17.1 // indirect + github.com/lyft/protoc-gen-star v0.4.11 // indirect + github.com/m3db/prometheus_client_golang v0.8.1 // indirect + github.com/m3db/prometheus_client_model v0.1.0 // indirect + github.com/m3db/prometheus_common v0.1.0 // indirect + github.com/m3db/prometheus_procfs v0.8.1 // indirect + github.com/marstr/goalias v0.0.0-20180416201319-8dff9a14db64 // indirect + github.com/marstr/guid v1.1.0 // indirect + github.com/marstr/randname v0.0.0-20181206212954-d5b0f288ab8c // indirect + github.com/martini-contrib/render v0.0.0-20150707142108-ec18f8345a11 // indirect + github.com/mjibson/appstats v0.0.0-20151004071057-0542d5f0e87e // indirect + github.com/montanaflynn/stats v0.5.0 // indirect + github.com/nats-io/nats.go v1.9.1 // indirect + github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d // indirect + github.com/oklog/oklog v0.3.2 // indirect + github.com/olekukonko/tablewriter v0.0.1 // indirect + github.com/olivere/elastic v6.2.26+incompatible // indirect + github.com/olivere/env v1.1.0 // indirect + github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 // indirect + // TODO: pin a released version + github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb0c1d1e + github.com/opentracing/basictracer-go v1.0.0 // indirect + github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.4 // indirect + github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c // indirect + github.com/paulbellamy/ratecounter v0.2.0 // indirect + github.com/pborman/getopt v0.0.0-20190409184431-ee0cd42419d3 // indirect + github.com/performancecopilot/speed v3.0.0+incompatible // indirect + github.com/peterh/liner v1.1.0 // indirect + github.com/philhofer/fwd v1.0.0 // indirect + github.com/pkg/sftp v1.10.1 // indirect + github.com/pressly/chi v4.0.2+incompatible // indirect + github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237 // indirect + github.com/retailnext/hllpp v1.0.0 // indirect + github.com/rogpeppe/go-charset v0.0.0-20190617161244-0dc95cdf6f31 // indirect + github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd // indirect + github.com/samuel/go-thrift v0.0.0-20190219015601-e8b6b52668fe // indirect + github.com/shopspring/decimal v0.0.0-20191009025716-f1972eb1d1f5 // indirect + github.com/shurcooL/frontend v0.0.0-20180531171852-7e359e4b7b17 // indirect + github.com/shurcooL/githubv4 v0.0.0-20191102174205-af46314aec7b // indirect + github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f // indirect + github.com/shurcooL/httpgzip v0.0.0-20190720172056-320755c1c1b0 // indirect + github.com/shurcooL/markdownfmt v0.0.0-20190409060426-3438a10682f5 // indirect + github.com/shurcooL/notificationsapp v0.0.0-20181114034014-0a6e54cc4198 // indirect + github.com/shurcooL/resume v0.0.0-20190824223711-dc47c8f77a80 // indirect + github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9 // indirect + github.com/sony/gobreaker v0.4.1 // indirect + github.com/sourcegraph/go-diff v0.5.1 // indirect + github.com/stathat/go v1.0.0 // indirect + github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a // indirect + github.com/stretchr/testify v1.4.0 + github.com/syndtr/goleveldb v1.0.0 // indirect + github.com/tambet/go-asana v0.0.0-20161015030314-6c0cb7090a14 // indirect + github.com/tinylib/msgp v1.1.0 // indirect + github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2 // indirect + github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b // indirect + github.com/tj/go-spin v1.1.0 // indirect + github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31 // indirect + github.com/uber-go/tally v3.3.12+incompatible // indirect + github.com/unknwon/cae v1.0.0 // indirect + github.com/urfave/cli v1.22.1 // indirect + github.com/urfave/negroni v1.0.0 // indirect + github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c // indirect + github.com/xdg/stringprep v1.0.0 // indirect + go.etcd.io/etcd v3.3.17+incompatible // indirect + go.opencensus.io v0.22.1 + go.uber.org/automaxprocs v1.2.0 // indirect + go.uber.org/zap v1.10.0 + gopkg.in/cheggaaa/pb.v1 v1.0.28 // indirect + gopkg.in/gcfg.v1 v1.2.3 // indirect + gopkg.in/pipe.v2 v2.0.0-20140414041502-3c2ca4d52544 // indirect + gopkg.in/tomb.v2 v2.0.0-20161208151619-d5d1b5820637 // indirect + gopkg.in/validator.v2 v2.0.0-20191029180049-30e574a82075 // indirect + gopkg.in/vmihailenco/msgpack.v2 v2.9.1 // indirect + gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0 // indirect + honnef.co/go/js/dom v0.0.0-20190526011328-ebc4cf92d81f // indirect + istio.io/gogo-genproto v0.0.0-20191024203824-d079cc8b1d55 // indirect + sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 // indirect + sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67 // indirect + sourcegraph.com/sourcegraph/go-git v0.0.0-20190828120159-87e0e4ab9e95 // indirect + sourcegraph.com/sourcegraph/go-vcs v0.0.0-20190409071845-d784c9520ccd // indirect +) diff --git a/exporter/awsxrayexporter/go.sum b/exporter/awsxrayexporter/go.sum new file mode 100644 index 000000000000..c1d923b9f90e --- /dev/null +++ b/exporter/awsxrayexporter/go.sum @@ -0,0 +1,2279 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.36.0/go.mod h1:RUoy9p/M4ge0HzT8L+SDZ8jg+Q6fth0CiBuhFJpSV40= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= +cloud.google.com/go v0.44.1 h1:7gXaI3V/b4DRaK++rTqhRajcT7z8gtP0qKMZTXqlySM= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.47.0 h1:1JUtpcY9E7+eTospEwWS2QXP3DEn7poB3E2j0jN74mM= +cloud.google.com/go/datastore v1.0.0 h1:Kt+gOPPp2LEPWp8CSfxhsM8ik9CcyE/gYu+0r+RnZvM= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +collectd.org v0.3.0 h1:iNBHGw1VvPJxH2B6RiFWFZ+vsjo1lCdRszBeOuwGi00= +collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= +contrib.go.opencensus.io/exporter/jaeger v0.1.1-0.20190430175949-e8b55949d948 h1:xdP25yLqNGSnpfDmEChwA9ZuKLdiyL0jqJKPm/Ypfag= +contrib.go.opencensus.io/exporter/jaeger v0.1.1-0.20190430175949-e8b55949d948/go.mod h1:ukdzwIYYHgZ7QYtwVFQUjiT28BJHiMhTERo32s6qVgM= +contrib.go.opencensus.io/exporter/ocagent v0.6.0 h1:Z1n6UAyr0QwM284yUuh5Zd8JlvxUGAhFZcgMJkMPrGM= +contrib.go.opencensus.io/exporter/ocagent v0.6.0/go.mod h1:zmKjrJcdo0aYcVS7bmEeSEBLPA9YJp5bjrofdU3pIXs= +contrib.go.opencensus.io/exporter/prometheus v0.1.0 h1:SByaIoWwNgMdPSgl5sMqM2KDE5H/ukPWBRo314xiDvg= +contrib.go.opencensus.io/exporter/prometheus v0.1.0/go.mod h1:cGFniUXGZlKRjzOyuZJ6mgB+PgBcCIa79kEKR8YCW+A= +contrib.go.opencensus.io/exporter/zipkin v0.1.1 h1:PR+1zWqY8ceXs1qDQQIlgXe+sdiwCf0n32bH4+Epk8g= +contrib.go.opencensus.io/exporter/zipkin v0.1.1/go.mod h1:GMvdSl3eJ2gapOaLKzTKE3qDgUkJ86k9k3yY2eqwkzc= +contrib.go.opencensus.io/resource v0.1.2 h1:b4WFJV8u7/NzPWHeTqj3Ec2AW8OGhtJxC/hbphIOvbU= +contrib.go.opencensus.io/resource v0.1.2/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= +dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3 h1:hJiie5Bf3QucGRa4ymsAUOxyhYwGEz1xrsVk0P8erlw= +dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= +dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0 h1:SPOUaucgtVls75mg+X7CXigS71EnsfVUK/2CgVrwqgw= +dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= +dmitri.shuralyov.com/route/github v0.0.0-20180323232716-ce4edef1f8c9 h1:7rFRFegk+s3dVmOi/f8wDQ5O+uI29iNA7MzzMFVOmzU= +dmitri.shuralyov.com/route/github v0.0.0-20180323232716-ce4edef1f8c9/go.mod h1:5oSmIM2HxgXgKSUK0E6F3pcAfHztRSpKaVxglL+HLSk= +dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412 h1:GvWw74lx5noHocd+f6HBMXK6DuggBB1dhVkuGZbv7qM= +dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= +dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c h1:ivON6cwHK1OH26MZyWDCnbTRZZf0IhNsENoNAKFS1g4= +dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= +git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= +git.apache.org/thrift.git v0.13.0 h1:/3bz5WZ+sqYArk7MBBBbDufMxKKOA56/6JO6psDpUDY= +git.apache.org/thrift.git v0.13.0/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= +github.com/AaronO/go-git-http v0.0.0-20161214145340-1d9485b3a98f h1:x/RDwGRneK2/891S2o7KhZt3MhHMSCssoeDOfvolTMk= +github.com/AaronO/go-git-http v0.0.0-20161214145340-1d9485b3a98f/go.mod h1:+6Yuq73F9068Na+mSBNXCvyuxvgw4f/g5ii40e3U8Sc= +github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9 h1:HD8gA2tkByhMAwYaFAX9w2l7vxvBQ5NMoxDrkhqhtn4= +github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= +github.com/Azure/azure-sdk-for-go v23.2.0+incompatible h1:bch1RS060vGpHpY3zvQDV4rOiRw25J1zmR/B9a76aSA= +github.com/Azure/azure-sdk-for-go v23.2.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/go-autorest v11.1.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest v11.2.8+incompatible h1:Q2feRPMlcfVcqz3pF87PJzkm5lZrL+x6BDtzhODzNJM= +github.com/Azure/go-autorest v11.2.8+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DATA-DOG/go-sqlmock v1.3.3 h1:CWUqKXe0s8A2z6qCgkP4Kru7wC11YoAnoupUKFDnH08= +github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/DataDog/datadog-go v2.2.0+incompatible h1:V5BKkxACZLjzHjSgBbr2gvLA2Ae49yhc6CSY7MLy5k4= +github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46 h1:lsxEuwrXEAokXB9qhlbKWPpo3KMLZQ5WB5WLQRW1uq0= +github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/OneOfOne/xxhash v1.2.5 h1:zl/OfRA6nftbBK9qTohYBJ5xvw6C/oNKizR7cZGl3cI= +github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= +github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/Shopify/sarama v1.19.0 h1:9oksLxC6uxVPHPVYUmq6xhr1BOF/hHobWH2UzO67z1s= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= +github.com/aclements/go-gg v0.0.0-20170323211221-abd1f791f5ee h1:KJgh99JlYRhfgHtb7XyhAZSJMdfkjVmo3PP7XO1/HO8= +github.com/aclements/go-gg v0.0.0-20170323211221-abd1f791f5ee/go.mod h1:55qNq4vcpkIuHowELi5C8e+1yUHtoLoOUR9QU5j7Tes= +github.com/aclements/go-moremath v0.0.0-20190830160640-d16893ddf098 h1:a7+Y8VlXRC2VX5ue6tpCutr4PsrkRkWWVZv4zqfaHuc= +github.com/aclements/go-moremath v0.0.0-20190830160640-d16893ddf098/go.mod h1:idZL3yvz4kzx1dsBOAC+oYv6L92P1oFEhUXUB1A/lwQ= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 h1:rFw4nCn9iMW+Vajsk51NtYIcwSTkXr+JGrMd36kTDJw= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/ajg/form v0.0.0-20160822230020-523a5da1a92f/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= +github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= +github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= +github.com/ajstarks/deck v0.0.0-20191009173945-82d717002242 h1:30XVZzSxUv+pE25mnlAL5nW/KsUDBmldePggLIAEJgk= +github.com/ajstarks/deck v0.0.0-20191009173945-82d717002242/go.mod h1:j3f/59diR4DorW5A78eDYvRkdrkh+nps4p5LA1Tl05U= +github.com/ajstarks/svgo v0.0.0-20190826172357-de52242f3d65 h1:kZegOsPGxfV9mM8WzfllNZOx3MvM5zItmhQlvITKVvA= +github.com/ajstarks/svgo v0.0.0-20190826172357-de52242f3d65/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/alecthomas/kingpin v2.2.6+incompatible h1:5svnBTFgJjZvGKyYBtMB0+m5wvrbUHiqye8wRJMlnYI= +github.com/alecthomas/kingpin v2.2.6+incompatible/go.mod h1:59OFYbFVLKQKq+mqrL6Rw5bR0c3ACQaawgXx0QYndlE= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= +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 h1:Hs82Z41s6SdL1CELW+XaDYmOH4hkBN4/N9og/AsOv7E= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/andygrunwald/go-gerrit v0.0.0-20191101112536-3f5e365ccf57 h1:wtSQ14h8qAUezER6QPfYmCh5+W5Ly1lVruhm/QeOVUE= +github.com/andygrunwald/go-gerrit v0.0.0-20191101112536-3f5e365ccf57/go.mod h1:0iuRQp6WJ44ts+iihy5E/WlPqfg5RNeQxOmzRkxCdtk= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/apache/arrow v0.0.0-20191105160933-1afbcb6bb2a6 h1:0Cn1JoEEOLKPNpSQhiug+H2aot6rVVSAigTROSX4YxE= +github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= +github.com/apache/arrow/go/arrow v0.0.0-20191105160933-1afbcb6bb2a6 h1:Cm45hoKQzk6EQbR6X0B6zfQhUMLYo0MEjLt3+PWZNx0= +github.com/apache/arrow/go/arrow v0.0.0-20191105160933-1afbcb6bb2a6/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= +github.com/apache/thrift v0.0.0-20161221203622-b2a4d4ae21c7 h1:Fv9bK1Q+ly/ROk4aJsVMeuIwPel4bEnD8EPiI91nZMg= +github.com/apache/thrift v0.0.0-20161221203622-b2a4d4ae21c7/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.12.0 h1:pODnxUFNcjP9UTLZGTdeh+j16A8lJbRvD3rOtrk/7bs= +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apex/log v1.1.0 h1:J5rld6WVFi6NxA6m8GJ1LJqu3+GiTFIt3mYv27gdQWI= +github.com/apex/log v1.1.0/go.mod h1:yA770aXIDQrhVOIGurT/pVdfCpSq1GQV/auzMN5fzvY= +github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a h1:2KLQMJ8msqoPHIPDufkxVcoTtcmE5+1sL9950m4R9Pk= +github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a/go.mod h1:3NqKYiepwy8kCu4PNA+aP7WUV72eXWJeP9/r3/K9aLE= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 h1:G1bPvciwNyF7IUmKXNt9Ak3m6u9DE1rF+RmtIkBpVdA= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878 h1:EFSB7Zo9Eg91v7MJPVsifUysc/wPdN+NOnVe6bWbdBM= +github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878/go.mod h1:3AMJUQhVx52RsWOnlkpikZr01T/yAVN2gn0861vByNg= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310 h1:BUAU3CGlLvorLI26FmByPp2eC2qla6E1Tw+scpcg/to= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA= +github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/aws/aws-sdk-go v1.15.64/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= +github.com/aws/aws-sdk-go v1.15.77/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= +github.com/aws/aws-sdk-go v1.23.12 h1:2UnxgNO6Y5J1OrkXS8XNp0UatDxD1bWHiDT62RDPggI= +github.com/aws/aws-sdk-go v1.23.12/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go-v2 v0.15.0 h1:mQCV2MV4I0L02Nwi1xs0HM7yWbrcWjjUOy1UAv27sw8= +github.com/aws/aws-sdk-go-v2 v0.15.0/go.mod h1:pFLIN9LDjOEwHfruGweAXEq0XaD6uRkY8FsRkxhuBIg= +github.com/aws/aws-xray-sdk-go v0.9.4 h1:3mtFCrgFR5IefmWFV5pscHp9TTyOWuqaIKJIY0d1Y4g= +github.com/aws/aws-xray-sdk-go v0.9.4/go.mod h1:XtMKdBQfpVut+tJEwI7+dJFRxxRdxHDyVNp2tHXRq04= +github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59 h1:WWB576BN5zNSZc/M9d/10pqEx5VHNhaQ/yOVAkmj5Yo= +github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I= +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 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/beyang/hgo v0.0.0-20150825035631-d45f1891a48a h1:Gfewj+rrM2kJ2DI3+dfJj3W+PPEfNqwX/6R7lax9j14= +github.com/beyang/hgo v0.0.0-20150825035631-d45f1891a48a/go.mod h1:n88RubZnITBFvoKP88nD4ajBX+PekZgpQOCgxazSTTA= +github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 h1:mXoPYz/Ul5HYEDvkta6I8/rnYM5gSdSV2tJ6XbZuEtY= +github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= +github.com/blakesmith/ar v0.0.0-20150311145944-8bd4349a67f2 h1:oMCHnXa6CCCafdPDbMh/lWRhRByN0VFLvv+g+ayx1SI= +github.com/blakesmith/ar v0.0.0-20150311145944-8bd4349a67f2/go.mod h1:PkYb9DJNAwrSvRx5DYA+gUcOIgTGVMNkfSCbZM8cWpI= +github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= +github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= +github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= +github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40 h1:y4B3+GPxKlrigF1ha5FFErxK+sr6sWxQovRMzwMhejo= +github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= +github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b h1:AP/Y7sqYicnjGDfD5VcY4CIfh1hRXBUavxrvELjTiOE= +github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b/go.mod h1:ac9efd0D1fsDb3EJvhqgXRbFx7bs2wqZ10HQPeU8U/Q= +github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/boombuler/barcode v1.0.0 h1:s1TvRnXwL2xJRaccrdcBQMZxq6X7DvsMogtmJeHDdrc= +github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625 h1:ckJgFhFWywOx+YLEMIJsTb+NV6NexWICk5+AMSuz3ss= +github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= +github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b h1:L/QXpzIa3pOvUGt1D1lA5KjYhPBAN/3iWdP7xeFS9F0= +github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA= +github.com/bsm/sarama-cluster v2.1.15+incompatible h1:RkV6WiNRnqEEbp81druK8zYhmnIgdOjqSVi0+9Cnl2A= +github.com/bsm/sarama-cluster v2.1.15+incompatible/go.mod h1:r7ao+4tTNXvWm+VRpRJchr2kQhqxgmAp2iEX5W96gMM= +github.com/c-bata/go-prompt v0.2.2 h1:uyKRz6Z6DUyj49QVijyM339UJV9yhbr70gESwbNU3e0= +github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= +github.com/caarlos0/ctrlc v1.0.0 h1:2DtF8GSIcajgffDFJzyG15vO+1PuBWOMUdFut7NnXhw= +github.com/caarlos0/ctrlc v1.0.0/go.mod h1:CdXpj4rmq0q/1Eb44M9zi2nKB0QraNKuRGYGrrHhcQw= +github.com/cactus/go-statsd-client v3.2.0+incompatible h1:ZJpQV7zHnerDzsEQS1wnI38tpR7wX3QFmL7WzTerEmY= +github.com/cactus/go-statsd-client/statsd v0.0.0-20191030180650-a68a2246f89c h1:rrLWPlpOKwnBpVUXitbgM3+Nie1eBaFfBZqfiPpxVj8= +github.com/cactus/go-statsd-client/statsd v0.0.0-20191030180650-a68a2246f89c/go.mod h1:l/bIBLeOl9eX+wxJAzxS4TveKRtAqlyDpHjhkfO0MEI= +github.com/campoy/unique v0.0.0-20180121183637-88950e537e7e h1:V9a67dfYqPLAvzk5hMQOXYJlZ4SLIXgyKIE+ZiHzgGQ= +github.com/campoy/unique v0.0.0-20180121183637-88950e537e7e/go.mod h1:9IOqJGCPMSc6E5ydlp5NIonxObaeu/Iub/X03EKPVYo= +github.com/casbin/casbin v1.9.1 h1:ucjbS5zTrmSLtH4XogqOG920Poe6QatdXtz1FEbApeM= +github.com/casbin/casbin v1.9.1/go.mod h1:z8uPsfBJGUsnkagrt3G8QvjgTKFMBJ32UP8HpZllfog= +github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409 h1:Da6uN+CAo1Wf09Rz1U4i9QN8f0REjyNJ73BEwAq/paU= +github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v0.0.0-20181017004759-096ff4a8a059/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible h1:C29Ae4G5GtYyYMm1aztcyj/J5ckgJm2zwdDajFbx1NY= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3 h1:TJH+oke8D16535+jHExHj4nQvzlZrj7ug5D7I/orNUA= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec h1:EdRZT3IeKQmfCSrgo8SZ8V3MEnskuJP0wCYNpe+aiXo= +github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= +github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= +github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= +github.com/cockroachdb/cockroach-go v0.0.0-20181001143604-e0a95dfd547c/go.mod h1:XGLbWH/ujMcbPbhZq52Nv6UrCghb1yGn//133kEsvDk= +github.com/cockroachdb/cockroach-go v0.0.0-20190916165215-ad57a61cc915 h1:QX2Zc22B15gdWwDCwS7BXmbeD/SWdcRK12gOfZ5BsIs= +github.com/cockroachdb/cockroach-go v0.0.0-20190916165215-ad57a61cc915/go.mod h1:XGLbWH/ujMcbPbhZq52Nv6UrCghb1yGn//133kEsvDk= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0 h1:sDMmm+q/3+BukdIpxwO365v/Rbspp2Nt5XntgQRXq8Q= +github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= +github.com/codegangsta/negroni v1.0.0 h1:+aYywywx4bnKXWvoWtRfJ91vC59NbEhEY03sZjQhbVY= +github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0= +github.com/coreos/bbolt v1.3.2 h1:wZwiHHUieZCquLkDL0B8UhzreNWsPHooDAG3q34zk0s= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible h1:jFneRYjIvLMLhDLCzuTuU4rSJUjRplcJQ7pD7MnhC04= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/etcd v3.3.17+incompatible h1:f/Z3EoDSx1yjaIjLQGo1diYUlQYSBrrAQ5vP8NjwXwo= +github.com/coreos/etcd v3.3.17+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible h1:bXhRBIXoTm9BYHS3gE0TtQuyNZyeEMux2sDi4oo5YOo= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-semver v0.2.0 h1:3Jm3tLmsgAYcjC+4Up7hJrFBPr+n7rAqYeSw/SZazuY= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f h1:JOrtw2xFKzlg+cbHpyrpLDmnN1HqhBfnX7WDiW7eG2c= +github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/creack/pty v1.1.7 h1:6pwm8kMQKCmgUg0ZHTm5+/YvRK0s3THD/28+T6/kk4A= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/crossdock/crossdock-go v0.0.0-20160816171116-049aabb0122b h1:WR1qVJzbvrVywhAk4kMQKRPx09AZVI0NdEdYs59iHcA= +github.com/crossdock/crossdock-go v0.0.0-20160816171116-049aabb0122b/go.mod h1:v9FBN7gdVTpiD/+LZ7Po0UKvROyT87uLVxTHVky/dlQ= +github.com/cznic/cc v0.0.0-20181122101902-d673e9b70d4d h1:AePLLLsGE1yOEDAmaJlQ9zd/9qiaEVskYukZ1f2srAA= +github.com/cznic/cc v0.0.0-20181122101902-d673e9b70d4d/go.mod h1:m3fD/V+XTB35Kh9zw6dzjMY+We0Q7PMf6LLIC4vuG9k= +github.com/cznic/fileutil v0.0.0-20181122101858-4d67cfea8c87 h1:94XgeeTZ+3Xi9zsdgBjP1Byx/wywCImjF8FzQ7OaKdU= +github.com/cznic/fileutil v0.0.0-20181122101858-4d67cfea8c87/go.mod h1:8S58EK26zhXSxzv7NQFpnliaOQsmDUxvoQO3rt154Vg= +github.com/cznic/golex v0.0.0-20181122101858-9c343928389c h1:G8zTsaqyVfIHpgMFcGgdbhHSFhlNc77rAKkhVbQ9kQg= +github.com/cznic/golex v0.0.0-20181122101858-9c343928389c/go.mod h1:+bmmJDNmKlhWNG+gwWCkaBoTy39Fs+bzRxVBzoTQbIc= +github.com/cznic/internal v0.0.0-20181122101858-3279554c546e h1:58AcyflCe84EONph4gkyo3eDOEQcW5HIPfQBrD76W68= +github.com/cznic/internal v0.0.0-20181122101858-3279554c546e/go.mod h1:olo7eAdKwJdXxb55TKGLiJ6xt1H0/tiiRCWKVLmtjY4= +github.com/cznic/ir v0.0.0-20181122101859-da7ba2ecce8b h1:GelTfvbS1tZtnyCTx3aMIHbRw5euyrfHd6H3rLqLlHU= +github.com/cznic/ir v0.0.0-20181122101859-da7ba2ecce8b/go.mod h1:bctvsSxTD8Lpaj5RRQ0OrAAu4+0mD4KognDQItBNMn0= +github.com/cznic/lex v0.0.0-20181122101858-ce0fb5e9bb1b h1:KJtZdP0G3jUnpgEWZdJ7326WvTbREwcwlDSOpkpNZGY= +github.com/cznic/lex v0.0.0-20181122101858-ce0fb5e9bb1b/go.mod h1:LcYbbl1tn/c31gGxe2EOWyzr7EaBcdQOoIVGvJMc7Dc= +github.com/cznic/lexer v0.0.0-20181122101858-e884d4bd112e h1:K5kIaw68kxYw40mp8YKuwKrb63R0BPCR1iEGvBR6Mfs= +github.com/cznic/lexer v0.0.0-20181122101858-e884d4bd112e/go.mod h1:YNGh5qsZlhFHDfWBp/3DrJ37Uy4pRqlwxtL+LS7a/Qw= +github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 h1:iwZdTE0PVqJCos1vaoKsclOGD3ADKpshg3SRtYBbwso= +github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM= +github.com/cznic/strutil v0.0.0-20181122101858-275e90344537 h1:MZRmHqDBd0vxNwenEbKSQqRVT24d3C05ft8kduSwlqM= +github.com/cznic/strutil v0.0.0-20181122101858-275e90344537/go.mod h1:AHHPPPXTw0h6pVabbcbyGRK1DckRn7r/STdZEeIDzZc= +github.com/cznic/xc v0.0.0-20181122101856-45b06973881e h1:U9mUTtTukbCdFuphv3QiJBjtImXsUTHcX5toZZi4OzY= +github.com/cznic/xc v0.0.0-20181122101856-45b06973881e/go.mod h1:3oFoiOvCDBYH+swwf5+k/woVmWy7h1Fcyu8Qig/jjX0= +github.com/dave/jennifer v1.2.0 h1:S15ZkFMRoJ36mGAQgWL1tnr0NQJh9rZ8qatseX/VbBc= +github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= +github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +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/dgraph-io/badger v1.6.0 h1:DshxFxZWXUcO0xX476VJC07Xsr6ZCBVRHKZ93Oh7Evo= +github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= +github.com/dgrijalva/jwt-go v0.0.0-20160705203006-01aeca54ebda/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8 h1:akOQj8IVgoeFfBTzGOEQakCYshWD6RNo1M5pivFXt70= +github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= +github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= +github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dgryski/go-sip13 v0.0.0-20190329191031-25c5027a8c7b h1:Yqiad0+sloMPdd/0Fg22actpFx0dekpzt1xJmVNVkU0= +github.com/dgryski/go-sip13 v0.0.0-20190329191031-25c5027a8c7b/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= +github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= +github.com/disintegration/gift v1.2.1 h1:Y005a1X4Z7Uc+0gLpSAsKhWi4qLtsdEcMIbbdvdZ6pc= +github.com/disintegration/gift v1.2.1/go.mod h1:Jh2i7f7Q2BM7Ezno3PhfezbR1xpUg9dUg3/RlKGr4HI= +github.com/djherbis/buffer v1.1.0 h1:uGQ+DZDAMlfC2z3khbBtLcAHC0wyoNrX9lpOml3g3fg= +github.com/djherbis/buffer v1.1.0/go.mod h1:VwN8VdFkMY0DCALdY8o00d3IZ6Amz/UNVMWcSaJT44o= +github.com/djherbis/nio v2.0.3+incompatible h1:CidFHoR25he4511AIQ3RW9LH9XkLMOoNML8xd7R7Irc= +github.com/djherbis/nio v2.0.3+incompatible/go.mod h1:v74owXPROGWsr1y28T13rlXf5Hn/bWJ1bbX8M+BqyPo= +github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96 h1:cenwrSVm+Z7QLSV/BsnenAOcDXdX4cMv4wP0B/5QbPg= +github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 h1:bWDMxwH3px2JBh6AyO7hdCn/PkvCZXii8TGj7sbtEbQ= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/dustin/go-humanize v0.0.0-20180713052910-9f541cc9db5d/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/eapache/go-resiliency v1.1.0 h1:1NtRmCAqadE2FN4ZcN6g90TP3uk8cg9rn9eNK2197aU= +github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/eclipse/paho.mqtt.golang v1.2.0 h1:1F8mhG9+aO5/xpdtFkW4SxOJB67ukuDC3t2y2qayIX0= +github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= +github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e h1:p1yVGRW3nmb85p1Sh1ZJSDm4A4iKLS5QNbvUHMgGu/M= +github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633 h1:H2pdYOb3KQ1/YsqVWoWNLQO+fusocsw354rqGTZtAgw= +github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful-swagger12 v0.0.0-20170926063155-7524189396c6 h1:V94anc0ZG3Pa/cAMwP2m1aQW3+/FF8Qmw/GsFyTJAp4= +github.com/emicklei/go-restful-swagger12 v0.0.0-20170926063155-7524189396c6/go.mod h1:qr0VowGBT4CS4Q8vFF8BSeKz34PuqKGxs/L0IAQA9DQ= +github.com/emirpasic/gods v1.9.0 h1:rUF4PuzEjMChMiNsVjdI+SyLu7rEqpQ5reNFnhC7oFo= +github.com/emirpasic/gods v1.9.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/envoyproxy/go-control-plane v0.6.9 h1:deEH9W8ZAUGNbCdX+9iNzBOGrAOrnpJGoy0PcTqk/tE= +github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= +github.com/evanphx/json-patch v0.0.0-20190203023257-5858425f7550/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.5.0+incompatible h1:ouOWdg56aJriqS0huScTkVXPC5IcNrDCXZ6OoTAWu7M= +github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/structs v1.0.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= +github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8= +github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8 h1:a9ENSRDFBUPkJ5lCgVZh26+ZbGyoVJG7yb5SSzF5H54= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= +github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/garyburd/redigo v1.6.0 h1:0VruCpn7yAIIu7pWVClQC8wxCJEcG3nyzpMSHKi1PQc= +github.com/garyburd/redigo v1.6.0/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= +github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3 h1:t8FVkw33L+wilf2QiWkw0UV77qRpcH/JHPKGpKa2E8g= +github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= +github.com/gin-gonic/gin v1.4.0 h1:3tMoCCfM7ppqsR0ptz/wi1impNpT7/9wQtMZ8lr1mCQ= +github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= +github.com/gliderlabs/ssh v0.1.1 h1:j3L6gSLQalDETeEg/Jg0mGY0/y/N6zI2xX1978P0Uqw= +github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8 h1:DujepqpGd1hyOd7aW59XpK7Qymp8iy83xq74fLr21is= +github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/glycerine/go-unsnap-stream v0.0.0-20190901134440-81cf024a9e0a h1:FQqoVvjbiUioBBFUL5up+h+GdCa/AnJsL/1bIs/veSI= +github.com/glycerine/go-unsnap-stream v0.0.0-20190901134440-81cf024a9e0a/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= +github.com/go-chi/chi v4.0.2+incompatible h1:maB6vn6FqCxrpz4FqWdh4+lwpyZIQS7YEAUcHlgXVRs= +github.com/go-chi/chi v4.0.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= +github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab h1:xveKWz2iaueeTaUgdetzel+U7exyigDYBryyVfV/rZk= +github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= +github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= +github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.17.2/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= +github.com/go-openapi/analysis v0.19.4 h1:1TjOzrWkj+9BrjnM1yPAICbaoC0FyfD49oVkTBrSSa0= +github.com/go-openapi/analysis v0.19.4/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= +github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.17.2/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.19.2 h1:a2kIyV3w+OS3S97zxUndRVD46+FhGOUBDFY7nmu4CsY= +github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= +github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.17.2/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.19.2 h1:A9+F4Dc/MCNB5jibxf6rRvOvR/iFgQdyNx9eIhnGqq0= +github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= +github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.17.2/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.19.2 h1:o20suLFB4Ri0tuzpWtyHlh7E7HnkqTNLq6aR6WVNS1w= +github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= +github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.17.2/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.2 h1:rf5ArTHmIJxyV5Oiks+Su0mUens1+AjpkPoWr5xFRcI= +github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= +github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= +github.com/go-openapi/runtime v0.18.0/go.mod h1:uI6pHuxWYTy94zZxgcwJkUWa9wbIlhteGfloI10GD4U= +github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= +github.com/go-openapi/runtime v0.19.3 h1:pyVE0l7ybsThmn9Y9kWRK3o/cUmaT8WVfd6pDCIKeNE= +github.com/go-openapi/runtime v0.19.3/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= +github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.17.2/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.19.2 h1:SStNd1jRcYtfKCN7R0laGNs80WYYvn5CbBjM2sOmCrE= +github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= +github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.17.2/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= +github.com/go-openapi/strfmt v0.19.2 h1:clPGfBnJohokno0e+d7hs6Yocrzjlgz6EsQSDncCRnE= +github.com/go-openapi/strfmt v0.19.2/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= +github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.17.2/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.4 h1:i/65mCM9s1h8eCkT07F5Z/C1e/f8VTgEwer+00yevpA= +github.com/go-openapi/swag v0.19.4/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/validate v0.17.2/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= +github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= +github.com/go-openapi/validate v0.19.2 h1:ky5l57HjyVRrsJfd2+Ro5Z9PjGuKbsmftwyMtk8H7js= +github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= +github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gobuffalo/attrs v0.0.0-20190219185331-f338c9388485/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= +github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= +github.com/gobuffalo/attrs v0.1.0 h1:LY6/rbhPD/hfa+AfviaMXBmZBGb0fGHF12yg7f3dPQA= +github.com/gobuffalo/attrs v0.1.0/go.mod h1:fmNpaWyHM0tRm8gCZWKx8yY9fvaNLo2PyzBNSrBZ5Hw= +github.com/gobuffalo/buffalo v0.12.8-0.20181004233540-fac9bb505aa8/go.mod h1:sLyT7/dceRXJUxSsE813JTQtA3Eb1vjxWfo/N//vXIY= +github.com/gobuffalo/buffalo v0.13.0/go.mod h1:Mjn1Ba9wpIbpbrD+lIDMy99pQ0H0LiddMIIDGse7qT4= +github.com/gobuffalo/buffalo v0.13.1/go.mod h1:K9c22KLfDz7obgxvHv1amvJtCQEZNiox9+q6FDJ1Zcs= +github.com/gobuffalo/buffalo v0.13.2/go.mod h1:vA8I4Dwcfkx7RAzIRHVDZxfS3QJR7muiOjX4r8P2/GE= +github.com/gobuffalo/buffalo v0.13.4/go.mod h1:y2jbKkO0k49OrNIOAkbWQiPBqxAFpHn5OKnkc7BDh+I= +github.com/gobuffalo/buffalo v0.13.5/go.mod h1:hPcP12TkFSZmT3gUVHZ24KRhTX3deSgu6QSgn0nbWf4= +github.com/gobuffalo/buffalo v0.13.6/go.mod h1:/Pm0MPLusPhWDayjRD+/vKYnelScIiv0sX9YYek0wpg= +github.com/gobuffalo/buffalo v0.13.7/go.mod h1:3gQwZhI8DSbqmDqlFh7kfwuv/wd40rqdVxXtFWlCQHw= +github.com/gobuffalo/buffalo v0.13.9/go.mod h1:vIItiQkTHq46D1p+bw8mFc5w3BwrtJhMvYjSIYK3yjE= +github.com/gobuffalo/buffalo v0.13.12/go.mod h1:Y9e0p0cdo/eI+lHm7EFzlkc9YzjwGo5QeDj+FbsyqVA= +github.com/gobuffalo/buffalo v0.13.13/go.mod h1:WAL36xBN8OkU71lNjuYv6llmgl0o8twjlY+j7oGUmYw= +github.com/gobuffalo/buffalo v0.14.0/go.mod h1:A9JI3juErlXNrPBeJ/0Pdky9Wz+GffEg7ZN0d1B5h48= +github.com/gobuffalo/buffalo v0.14.2/go.mod h1:VNMTzddg7bMnkVxCUXzqTS4PvUo6cDOs/imtG8Cnt/k= +github.com/gobuffalo/buffalo v0.14.3/go.mod h1:3O9vB/a4UNb16TevehTvDCaPnb98NWvYz0msJQ6ZlVA= +github.com/gobuffalo/buffalo v0.14.5/go.mod h1:RWK6evR4hY4nRVfw9xie9V/LYK3j0U9wU2oKgQUFZ88= +github.com/gobuffalo/buffalo v0.14.6/go.mod h1:71Un+T2JGgwXLjBqYFdGSooz/OUjw15BJM0nbbcAM0o= +github.com/gobuffalo/buffalo v0.14.9/go.mod h1:M8XWw+Rcotn7C4NYpCEGBg3yX+O1TeD1pBfmiILhgHw= +github.com/gobuffalo/buffalo v0.14.10/go.mod h1:49A7/JYlsCyTkVHtvKl91w6rG35ZiywwjWMVC1zKWsQ= +github.com/gobuffalo/buffalo v0.14.11/go.mod h1:RO5OwOJQjv6/TukzszV5ELA54lg84D1kZwla6oAkTlo= +github.com/gobuffalo/buffalo v0.15.0 h1:VsxIcfJaDm4u2UirLHGgMfQpfHVwJP3JoDmGyeeNnc0= +github.com/gobuffalo/buffalo v0.15.0/go.mod h1:WBSrSdbxiww/yXZlh2D69FByhM5xdYT1aDIwEQssTto= +github.com/gobuffalo/buffalo-docker v1.0.5/go.mod h1:NZ3+21WIdqOUlOlM2onCt7cwojYp4Qwlsngoolw8zlE= +github.com/gobuffalo/buffalo-docker v1.0.6/go.mod h1:UlqKHJD8CQvyIb+pFq+m/JQW2w2mXuhxsaKaTj1X1XI= +github.com/gobuffalo/buffalo-docker v1.0.7 h1:kj+AfChcev54v4N8N6PzNFWyiVSenzu6djrgxTBvbTk= +github.com/gobuffalo/buffalo-docker v1.0.7/go.mod h1:BdB8AhcmjwR6Lo3rDPMzyh/+eNjYnZ1TAO0eZeLkhig= +github.com/gobuffalo/buffalo-plugins v1.0.2/go.mod h1:pOp/uF7X3IShFHyobahTkTLZaeUXwb0GrUTb9ngJWTs= +github.com/gobuffalo/buffalo-plugins v1.0.4/go.mod h1:pWS1vjtQ6uD17MVFWf7i3zfThrEKWlI5+PYLw/NaDB4= +github.com/gobuffalo/buffalo-plugins v1.4.3/go.mod h1:uCzTY0woez4nDMdQjkcOYKanngeUVRO2HZi7ezmAjWY= +github.com/gobuffalo/buffalo-plugins v1.5.1/go.mod h1:jbmwSZK5+PiAP9cC09VQOrGMZFCa/P0UMlIS3O12r5w= +github.com/gobuffalo/buffalo-plugins v1.6.1/go.mod h1:/XZt7UuuDnx5P4v3cStK0+XoYiNOA2f0wDIsm1oLJQA= +github.com/gobuffalo/buffalo-plugins v1.6.4/go.mod h1:/+N1aophkA2jZ1ifB2O3Y9yGwu6gKOVMtUmJnbg+OZI= +github.com/gobuffalo/buffalo-plugins v1.6.5/go.mod h1:0HVkbgrVs/MnPZ/FOseDMVanCTm2RNcdM0PuXcL1NNI= +github.com/gobuffalo/buffalo-plugins v1.6.6/go.mod h1:hSWAEkJyL9RENJlmanMivgnNkrQ9RC4xJARz8dQryi0= +github.com/gobuffalo/buffalo-plugins v1.6.7/go.mod h1:ZGZRkzz2PiKWHs0z7QsPBOTo2EpcGRArMEym6ghKYgk= +github.com/gobuffalo/buffalo-plugins v1.6.9/go.mod h1:yYlYTrPdMCz+6/+UaXg5Jm4gN3xhsvsQ2ygVatZV5vw= +github.com/gobuffalo/buffalo-plugins v1.6.10/go.mod h1:HxzPZjAEzh9H0gnHelObxxrut9O+1dxydf7U93SYsc8= +github.com/gobuffalo/buffalo-plugins v1.6.11/go.mod h1:eAA6xJIL8OuynJZ8amXjRmHND6YiusVAaJdHDN1Lu8Q= +github.com/gobuffalo/buffalo-plugins v1.7.2/go.mod h1:vEbx30cLFeeZ48gBA/rkhbqC2M/2JpsKs5CoESWhkPw= +github.com/gobuffalo/buffalo-plugins v1.8.1/go.mod h1:vu71J3fD4b7KKywJQ1tyaJGtahG837Cj6kgbxX0e4UI= +github.com/gobuffalo/buffalo-plugins v1.8.2/go.mod h1:9te6/VjEQ7pKp7lXlDIMqzxgGpjlKoAcAANdCgoR960= +github.com/gobuffalo/buffalo-plugins v1.8.3/go.mod h1:IAWq6vjZJVXebIq2qGTLOdlXzmpyTZ5iJG5b59fza5U= +github.com/gobuffalo/buffalo-plugins v1.9.3/go.mod h1:BNRunDThMZKjqx6R+n14Rk3sRSOWgbMuzCKXLqbd7m0= +github.com/gobuffalo/buffalo-plugins v1.9.4/go.mod h1:grCV6DGsQlVzQwk6XdgcL3ZPgLm9BVxlBmXPMF8oBHI= +github.com/gobuffalo/buffalo-plugins v1.10.0/go.mod h1:4osg8d9s60txLuGwXnqH+RCjPHj9K466cDFRl3PErHI= +github.com/gobuffalo/buffalo-plugins v1.11.0/go.mod h1:rtIvAYRjYibgmWhnjKmo7OadtnxuMG5ZQLr25ozAzjg= +github.com/gobuffalo/buffalo-plugins v1.12.0/go.mod h1:kw4Mj2vQXqe4X5TI36PEQgswbL30heGQwJEeDKd1v+4= +github.com/gobuffalo/buffalo-plugins v1.13.0/go.mod h1:Y9nH2VwHVkeKhmdM380ulNXmhhD5On81nRVeD+WlDTQ= +github.com/gobuffalo/buffalo-plugins v1.13.1/go.mod h1:VcvhrgWcZLhOp8JPLckHBDtv05KepY/MxHsT2+06xX4= +github.com/gobuffalo/buffalo-plugins v1.14.0/go.mod h1:r2lykSXBT79c3T5JK1ouivVDrHvvCZUdZBmn+lPMHU8= +github.com/gobuffalo/buffalo-plugins v1.14.1 h1:ZL22sNZif+k/0I9X7LB8cpVMWh7zcVjfpiqxFlH4xSY= +github.com/gobuffalo/buffalo-plugins v1.14.1/go.mod h1:9BRBvXuKxR0m4YttVFRtuUcAP9Rs97mGq6OleyDbIuo= +github.com/gobuffalo/buffalo-pop v1.0.5/go.mod h1:Fw/LfFDnSmB/vvQXPvcXEjzP98Tc+AudyNWUBWKCwQ8= +github.com/gobuffalo/buffalo-pop v1.1.2/go.mod h1:czNLXcYbg5/fjr+uht0NyjZaQ0V2W23H1jzyORgCzQ4= +github.com/gobuffalo/buffalo-pop v1.1.5/go.mod h1:H01JIg42XwOHS4gRMhSeDZqBovNVlfBUsVXckU617s4= +github.com/gobuffalo/buffalo-pop v1.1.8/go.mod h1:1uaxOFzzVud/zR5f1OEBr21tMVLQS3OZpQ1A5cr0svE= +github.com/gobuffalo/buffalo-pop v1.1.13/go.mod h1:47GQoBjCMcl5Pw40iCWHQYJvd0HsT9kdaOPWgnzHzk4= +github.com/gobuffalo/buffalo-pop v1.1.14/go.mod h1:sAMh6+s7wytCn5cHqZIuItJbAqzvs6M7FemLexl+pwc= +github.com/gobuffalo/buffalo-pop v1.1.15/go.mod h1:vnvvxhbEFAaEbac9E2ZPjsBeL7WHkma2UyKNVA4y9Wo= +github.com/gobuffalo/buffalo-pop v1.2.1/go.mod h1:SHqojN0bVzaAzCbQDdWtsib202FDIxqwmCO8VDdweF4= +github.com/gobuffalo/buffalo-pop v1.3.0/go.mod h1:P0PhA225dRGyv0WkgYjYKqgoxPdDPDFZDvHj60AGF5w= +github.com/gobuffalo/buffalo-pop v1.6.0/go.mod h1:vrEVNOBKe042HjSNMj72J4FgER/VG6lt4xW6WMpTdlY= +github.com/gobuffalo/buffalo-pop v1.7.0/go.mod h1:UB5HHeFucJG7esTPUPjinBaJTEpVoREJHfSJJELnyeI= +github.com/gobuffalo/buffalo-pop v1.9.0/go.mod h1:MfrkBg0iN9+RdlxdHHAqqGFAC/iyCfTiKqH7Jvt+vhE= +github.com/gobuffalo/buffalo-pop v1.10.0/go.mod h1:C3/cFXB8Zd38XiGgHFdE7dw3Wu9MOKeD7bfELQicGPI= +github.com/gobuffalo/buffalo-pop v1.12.0/go.mod h1:pO2ONSJOCjyroGp4BwVHfMkfd7sLg1U9BvMJqRy6Otk= +github.com/gobuffalo/buffalo-pop v1.13.0/go.mod h1:h+zfyXCUFwihFqz6jmo9xsdsZ1Tm9n7knYpQjW0gv18= +github.com/gobuffalo/buffalo-pop v1.16.0/go.mod h1:XYA72cNFvL6m1o7PZ+Z7Yd/WDQTPcOiuDukiHvEo2KY= +github.com/gobuffalo/buffalo-pop v1.17.2/go.mod h1:nyOm0mtmp9/+m2NaXrp+9SqtuKZslA7Ys2DBaT/t2n4= +github.com/gobuffalo/buffalo-pop v1.22.0/go.mod h1:S8uJpbC9PUMFA6ZWbPnbk3c32n4vJ32p5NLsREcz+H8= +github.com/gobuffalo/buffalo-pop v1.23.1 h1:AnxJQZu/ZN7HCm3L8YBJoNWc2UiwSe6UHv5S4DfXUDA= +github.com/gobuffalo/buffalo-pop v1.23.1/go.mod h1:Sb+fy/hLtxfhOrtLAJiL7JsKqazydmAVqp5rcHio/yg= +github.com/gobuffalo/clara v0.4.1/go.mod h1:3QgAPqYgPqAzhfGbNLlp4UztaZRi2SOg+ZrZwaq9L94= +github.com/gobuffalo/clara v0.6.0/go.mod h1:RKZxkcH80pLykRi2hLkoxGMxA8T06Dc9fN/pFvutMFY= +github.com/gobuffalo/clara v0.7.0/go.mod h1:pen7ZMmnuYUYVF/3BbnvidYVAbMEfkyO4O+Tc+FKICU= +github.com/gobuffalo/clara v0.9.1 h1:LYjwmKG0VwwW/nOG2f5jNamvAcfdm2Ysokc/eoVhtZ8= +github.com/gobuffalo/clara v0.9.1/go.mod h1:OQ3HmSqLQJHaMmKhuTkmBCvBLL4BhgjweNpywRGulWo= +github.com/gobuffalo/depgen v0.0.0-20190219190223-ba8c93fa0c2c/go.mod h1:CE/HUV4vDCXtJayRf6WoMWgezb1yH4QHg8GNK8FL0JI= +github.com/gobuffalo/depgen v0.0.0-20190315122043-8442b3fa16db/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= +github.com/gobuffalo/depgen v0.0.0-20190315124901-e02f65b90669/go.mod h1:yTQe8xo5pGIDOApkeO95DjePS4ZOSSSx+ItkqJHxUG4= +github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= +github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= +github.com/gobuffalo/depgen v0.1.1/go.mod h1:65EOv3g7CMe4kc8J1Ds+l2bjcwrWKGXkE4/vpRRLPWY= +github.com/gobuffalo/depgen v0.2.0 h1:CYuqsR8sq+L9G9+A6uUcTEuaK8AGenAjtYOm238fN3M= +github.com/gobuffalo/depgen v0.2.0/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= +github.com/gobuffalo/envy v1.6.4/go.mod h1:Abh+Jfw475/NWtYMEt+hnJWRiC8INKWibIMyNt1w2Mc= +github.com/gobuffalo/envy v1.6.5/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= +github.com/gobuffalo/envy v1.6.6/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= +github.com/gobuffalo/envy v1.6.7/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= +github.com/gobuffalo/envy v1.6.8/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= +github.com/gobuffalo/envy v1.6.9/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= +github.com/gobuffalo/envy v1.6.10/go.mod h1:X0CFllQjTV5ogsnUrg+Oks2yTI+PU2dGYBJOEI2D1Uo= +github.com/gobuffalo/envy v1.6.11/go.mod h1:Fiq52W7nrHGDggFPhn2ZCcHw4u/rqXkqo+i7FB6EAcg= +github.com/gobuffalo/envy v1.6.12/go.mod h1:qJNrJhKkZpEW0glh5xP2syQHH5kgdmgsKss2Kk8PTP0= +github.com/gobuffalo/envy v1.6.13/go.mod h1:w9DJppgl51JwUFWWd/M/6/otrPtWV3WYMa+NNLunqKA= +github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/envy v1.7.1 h1:OQl5ys5MBea7OGCdvPbBJWRgnhC/fGona6QKfvFeau8= +github.com/gobuffalo/envy v1.7.1/go.mod h1:FurDp9+EDPE4aIUS3ZLyD+7/9fpx7YRt/ukY6jIHf0w= +github.com/gobuffalo/events v1.0.3/go.mod h1:Txo8WmqScapa7zimEQIwgiJBvMECMe9gJjsKNPN3uZw= +github.com/gobuffalo/events v1.0.7/go.mod h1:z8txf6H9jWhQ5Scr7YPLWg/cgXBRj8Q4uYI+rsVCCSQ= +github.com/gobuffalo/events v1.0.8/go.mod h1:A5KyqT1sA+3GJiBE4QKZibse9mtOcI9nw8gGrDdqYGs= +github.com/gobuffalo/events v1.1.1/go.mod h1:Ia9OgHMco9pEhJaPrPQJ4u4+IZlkxYVco2VbJ2XgnAE= +github.com/gobuffalo/events v1.1.3/go.mod h1:9yPGWYv11GENtzrIRApwQRMYSbUgCsZ1w6R503fCfrk= +github.com/gobuffalo/events v1.1.4/go.mod h1:09/YRRgZHEOts5Isov+g9X2xajxdvOAcUuAHIX/O//A= +github.com/gobuffalo/events v1.1.5/go.mod h1:3YUSzgHfYctSjEjLCWbkXP6djH2M+MLaVRzb4ymbAK0= +github.com/gobuffalo/events v1.1.6/go.mod h1:H/3ZB9BA+WorMb/0F79UvU6u0Cyo2hU97WA51bG2ONY= +github.com/gobuffalo/events v1.1.7/go.mod h1:6fGqxH2ing5XMb3EYRq9LEkVlyPGs4oO/eLzh+S8CxY= +github.com/gobuffalo/events v1.1.8/go.mod h1:UFy+W6X6VbCWS8k2iT81HYX65dMtiuVycMy04cplt/8= +github.com/gobuffalo/events v1.1.9/go.mod h1:/0nf8lMtP5TkgNbzYxR6Bl4GzBy5s5TebgNTdRfRbPM= +github.com/gobuffalo/events v1.2.0/go.mod h1:pxvpvsKXKZNPtHuIxUV3K+g+KP5o4forzaeFj++bh68= +github.com/gobuffalo/events v1.3.1/go.mod h1:9JOkQVoyRtailYVE/JJ2ZQ/6i4gTjM5t2HsZK4C1cSA= +github.com/gobuffalo/events v1.4.0 h1:Vje/vgTWs+dyhIS0U03oLpvx1SUdAqutv/hDWIz2ErM= +github.com/gobuffalo/events v1.4.0/go.mod h1:gQbNh681BwO+urxPpHHBiVD8Y+2lg17Wj2xuCMMKr8E= +github.com/gobuffalo/fizz v1.0.12/go.mod h1:C0sltPxpYK8Ftvf64kbsQa2yiCZY4RZviurNxXdAKwc= +github.com/gobuffalo/fizz v1.0.15/go.mod h1:EI3mEpjImuji6Bwu++N2uXhljQwOhwtimZQJ89zwyF4= +github.com/gobuffalo/fizz v1.0.16/go.mod h1:EI3mEpjImuji6Bwu++N2uXhljQwOhwtimZQJ89zwyF4= +github.com/gobuffalo/fizz v1.1.2/go.mod h1:THqzNTlNxNaF5hq3ddp16SnEcl2m83bTeTzJEoD+kqc= +github.com/gobuffalo/fizz v1.1.3/go.mod h1:THqzNTlNxNaF5hq3ddp16SnEcl2m83bTeTzJEoD+kqc= +github.com/gobuffalo/fizz v1.3.0/go.mod h1:THqzNTlNxNaF5hq3ddp16SnEcl2m83bTeTzJEoD+kqc= +github.com/gobuffalo/fizz v1.5.0/go.mod h1:Uu3ch14M4S7LDU7LAP1GQ+KNCRmZYd05Gqasc96XLa0= +github.com/gobuffalo/fizz v1.6.0/go.mod h1:V4V6EA8eYu/L43y6gZj7mjmPkigl9m+Eu3Pe+SWQRRg= +github.com/gobuffalo/fizz v1.6.1/go.mod h1:V4V6EA8eYu/L43y6gZj7mjmPkigl9m+Eu3Pe+SWQRRg= +github.com/gobuffalo/fizz v1.8.0/go.mod h1:2LqJOOGUp1JpN9m54ac5jMQ1MpbNvSVbFi9BY+AEXOo= +github.com/gobuffalo/fizz v1.9.0/go.mod h1:2LqJOOGUp1JpN9m54ac5jMQ1MpbNvSVbFi9BY+AEXOo= +github.com/gobuffalo/fizz v1.9.2/go.mod h1:XJb7Do1keOPkaJnJ48OCjV+7ABQ7mbOqui2WfDobXTQ= +github.com/gobuffalo/fizz v1.9.5 h1:Qh0GkP7MYtJs9RZwBkPJ0CzEXynVowdNfrjg8b+TOxA= +github.com/gobuffalo/fizz v1.9.5/go.mod h1:v9cFl56oXm+hNNayTsIQHnq209bTDUbIM8GYWCJw3TE= +github.com/gobuffalo/flect v0.0.0-20180907193754-dc14d8acaf9f/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= +github.com/gobuffalo/flect v0.0.0-20181002182613-4571df4b1daf/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= +github.com/gobuffalo/flect v0.0.0-20181007231023-ae7ed6bfe683/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= +github.com/gobuffalo/flect v0.0.0-20181018182602-fd24a256709f/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= +github.com/gobuffalo/flect v0.0.0-20181019110701-3d6f0b585514/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= +github.com/gobuffalo/flect v0.0.0-20181024204909-8f6be1a8c6c2/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= +github.com/gobuffalo/flect v0.0.0-20181104133451-1f6e9779237a/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= +github.com/gobuffalo/flect v0.0.0-20181108195648-8fe1b44cfe32/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= +github.com/gobuffalo/flect v0.0.0-20181109221320-179d36177b5b/go.mod h1:0HvNbHdfh+WOvDSIASqJOSxTOWSxCCUF++k/Y53v9rI= +github.com/gobuffalo/flect v0.0.0-20181114183036-47375f6d8328/go.mod h1:0HvNbHdfh+WOvDSIASqJOSxTOWSxCCUF++k/Y53v9rI= +github.com/gobuffalo/flect v0.0.0-20181210151238-24a2b68e0316/go.mod h1:en58vff74S9b99Eg42Dr+/9yPu437QjlNsO/hBYPuOk= +github.com/gobuffalo/flect v0.0.0-20190104192022-4af577e09bf2/go.mod h1:en58vff74S9b99Eg42Dr+/9yPu437QjlNsO/hBYPuOk= +github.com/gobuffalo/flect v0.0.0-20190117212819-a62e61d96794/go.mod h1:397QT6v05LkZkn07oJXXT6y9FCfwC8Pug0WA2/2mE9k= +github.com/gobuffalo/flect v0.0.0-20190205211104-b2cb381e56e0/go.mod h1:397QT6v05LkZkn07oJXXT6y9FCfwC8Pug0WA2/2mE9k= +github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs= +github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/flect v0.1.5/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= +github.com/gobuffalo/flect v0.1.6 h1:D7KWNRFiCknJKA495/e1BO7oxqf8tbieaLv/ehoZ/+g= +github.com/gobuffalo/flect v0.1.6/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= +github.com/gobuffalo/genny v0.0.0-20180924032338-7af3a40f2252/go.mod h1:tUTQOogrr7tAQnhajMSH6rv1BVev34H2sa1xNHMy94g= +github.com/gobuffalo/genny v0.0.0-20181003150629-3786a0744c5d/go.mod h1:WAd8HmjMVrnkAZbmfgH5dLBUchsZfqzp/WS5sQz+uTM= +github.com/gobuffalo/genny v0.0.0-20181005145118-318a41a134cc/go.mod h1:WAd8HmjMVrnkAZbmfgH5dLBUchsZfqzp/WS5sQz+uTM= +github.com/gobuffalo/genny v0.0.0-20181007153042-b8de7d566757/go.mod h1:+oG5Ljrw04czAHbPXREwaFojJbpUvcIy4DiOnbEJFTA= +github.com/gobuffalo/genny v0.0.0-20181012161047-33e5f43d83a6/go.mod h1:+oG5Ljrw04czAHbPXREwaFojJbpUvcIy4DiOnbEJFTA= +github.com/gobuffalo/genny v0.0.0-20181017160347-90a774534246/go.mod h1:+oG5Ljrw04czAHbPXREwaFojJbpUvcIy4DiOnbEJFTA= +github.com/gobuffalo/genny v0.0.0-20181019144442-df0a36fdd146/go.mod h1:IyRrGrQb/sbHu/0z9i5mbpZroIsdxjCYfj+zFiFiWZQ= +github.com/gobuffalo/genny v0.0.0-20181024195656-51392254bf53/go.mod h1:o9GEH5gn5sCKLVB5rHFC4tq40rQ3VRUzmx6WwmaqISE= +github.com/gobuffalo/genny v0.0.0-20181025145300-af3f81d526b8/go.mod h1:uZ1fFYvdcP8mu0B/Ynarf6dsGvp7QFIpk/QACUuFUVI= +github.com/gobuffalo/genny v0.0.0-20181027191429-94d6cfb5c7fc/go.mod h1:x7SkrQQBx204Y+O9EwRXeszLJDTaWN0GnEasxgLrQTA= +github.com/gobuffalo/genny v0.0.0-20181027195209-3887b7171c4f/go.mod h1:JbKx8HSWICu5zyqWOa0dVV1pbbXOHusrSzQUprW6g+w= +github.com/gobuffalo/genny v0.0.0-20181030163439-ed103521b8ec/go.mod h1:3Xm9z7/2oRxlB7PSPLxvadZ60/0UIek1YWmcC7QSaVs= +github.com/gobuffalo/genny v0.0.0-20181106193839-7dcb0924caf1/go.mod h1:x61yHxvbDCgQ/7cOAbJCacZQuHgB0KMSzoYcw5debjU= +github.com/gobuffalo/genny v0.0.0-20181107223128-f18346459dbe/go.mod h1:utQD3aKKEsdb03oR+Vi/6ztQb1j7pO10N3OBoowRcSU= +github.com/gobuffalo/genny v0.0.0-20181109163038-9539921b620f/go.mod h1:118bnhJR2oviiji++mZj0IH/IaFBCzwkWHaI4OQq5hQ= +github.com/gobuffalo/genny v0.0.0-20181110202416-7b7d8756a9e2/go.mod h1:118bnhJR2oviiji++mZj0IH/IaFBCzwkWHaI4OQq5hQ= +github.com/gobuffalo/genny v0.0.0-20181111200257-599b33630ab4/go.mod h1:w+iD/cdtIpPDFax6LlUFuCdXFD0DLRUXsfp3IeT/Doc= +github.com/gobuffalo/genny v0.0.0-20181114215459-0a4decd77f5d/go.mod h1:kN2KZ8VgXF9VIIOj/GM0Eo7YK+un4Q3tTreKOf0q1ng= +github.com/gobuffalo/genny v0.0.0-20181119162812-e8ff4adce8bb/go.mod h1:BA9htSe4bZwBDJLe8CUkoqkypq3hn3+CkoHqVOW718E= +github.com/gobuffalo/genny v0.0.0-20181127225641-2d959acc795b/go.mod h1:l54xLXNkteX/PdZ+HlgPk1qtcrgeOr3XUBBPDbH+7CQ= +github.com/gobuffalo/genny v0.0.0-20181128191930-77e34f71ba2a/go.mod h1:FW/D9p7cEEOqxYA71/hnrkOWm62JZ5ZNxcNIVJEaWBU= +github.com/gobuffalo/genny v0.0.0-20181203165245-fda8bcce96b1/go.mod h1:wpNSANu9UErftfiaAlz1pDZclrYzLtO5lALifODyjuM= +github.com/gobuffalo/genny v0.0.0-20181203201232-849d2c9534ea/go.mod h1:wpNSANu9UErftfiaAlz1pDZclrYzLtO5lALifODyjuM= +github.com/gobuffalo/genny v0.0.0-20181206121324-d6fb8a0dbe36/go.mod h1:wpNSANu9UErftfiaAlz1pDZclrYzLtO5lALifODyjuM= +github.com/gobuffalo/genny v0.0.0-20181207164119-84844398a37d/go.mod h1:y0ysCHGGQf2T3vOhCrGHheYN54Y/REj0ayd0Suf4C/8= +github.com/gobuffalo/genny v0.0.0-20181211165820-e26c8466f14d/go.mod h1:sHnK+ZSU4e2feXP3PA29ouij6PUEiN+RCwECjCTB3yM= +github.com/gobuffalo/genny v0.0.0-20190104222617-a71664fc38e7/go.mod h1:QPsQ1FnhEsiU8f+O0qKWXz2RE4TiDqLVChWkBuh1WaY= +github.com/gobuffalo/genny v0.0.0-20190112155932-f31a84fcacf5/go.mod h1:CIaHCrSIuJ4il6ka3Hub4DR4adDrGoXGEEt2FbBxoIo= +github.com/gobuffalo/genny v0.0.0-20190124191459-3310289fa4b4/go.mod h1:yIRqxhZV2sAzb+B3iPUMLauTRrYP8tJUlZ1zV9teKik= +github.com/gobuffalo/genny v0.0.0-20190131150032-1045e97d19fb/go.mod h1:yIRqxhZV2sAzb+B3iPUMLauTRrYP8tJUlZ1zV9teKik= +github.com/gobuffalo/genny v0.0.0-20190131190646-008a76242145/go.mod h1:NJvPZJxb9M4z790P6N2SMZKSUYpASpEvLuUWnHGKzb4= +github.com/gobuffalo/genny v0.0.0-20190219203444-c95082806342/go.mod h1:3BLT+Vs94EEz3fKR8WWOkYpL6c1tdJcZUNCe3LZAnvQ= +github.com/gobuffalo/genny v0.0.0-20190315121735-8b38fb089e88/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= +github.com/gobuffalo/genny v0.0.0-20190315124720-e16e52a93c79/go.mod h1:nKeefjbhYowo36ys9nG9VUvD9FRIS0p3BC2JFfcOucM= +github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= +github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28= +github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo= +github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk= +github.com/gobuffalo/genny v0.2.0/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= +github.com/gobuffalo/genny v0.3.0/go.mod h1:ywJ2CoXrTZj7rbS8HTbzv7uybnLKlsNSBhEQ+yFI3E8= +github.com/gobuffalo/genny v0.4.0/go.mod h1:Kdo8wsw5zmooVvEfMkfv4JI9Ogz/PMvBNvl133soylI= +github.com/gobuffalo/genny v0.4.1 h1:ylgRyFoVGtfq92Ziq0kyi0Sdwh//pqWEwg+vD3eK1ZA= +github.com/gobuffalo/genny v0.4.1/go.mod h1:dpded+KBgICFciAb+6R5Lo+1VxzofjqHgKqFYIL8M7U= +github.com/gobuffalo/gitgen v0.0.0-20190219185555-91c2c5f0aad5/go.mod h1:ZzGIrxBvCJEluaU4i3CN0GFlu1Qmb3yK8ziV02evJ1E= +github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211 h1:mSVZ4vj4khv+oThUfS+SQU3UuFIZ5Zo6UNcvK8E8Mz8= +github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw= +github.com/gobuffalo/github_flavored_markdown v1.0.4/go.mod h1:uRowCdK+q8d/RF0Kt3/DSalaIXbb0De/dmTqMQdkQ4I= +github.com/gobuffalo/github_flavored_markdown v1.0.5/go.mod h1:U0643QShPF+OF2tJvYNiYDLDGDuQmJZXsf/bHOJPsMY= +github.com/gobuffalo/github_flavored_markdown v1.0.7/go.mod h1:w93Pd9Lz6LvyQXEG6DktTPHkOtCbr+arAD5mkwMzXLI= +github.com/gobuffalo/github_flavored_markdown v1.1.0 h1:8Zzj4fTRl/OP2R7sGerzSf6g2nEJnaBEJe7UAOiEvbQ= +github.com/gobuffalo/github_flavored_markdown v1.1.0/go.mod h1:TSpTKWcRTI0+v7W3x8dkSKMLJSUpuVitlptCkpeY8ic= +github.com/gobuffalo/gogen v0.0.0-20190219194924-d32a17ad9761/go.mod h1:v47C8sid+ZM2qK+YpQ2MGJKssKAqyTsH1wl/pTCPdz8= +github.com/gobuffalo/gogen v0.0.0-20190224213239-1c6076128bbc/go.mod h1:tQqPADZKflmJCR4FHRHYNPP79cXPICyxUiUHyhuXtqg= +github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= +github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= +github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= +github.com/gobuffalo/gogen v0.2.0 h1:Xx7NCe+/y++eII2aWAFZ09/81MhDCsZwvMzIFJoQRnU= +github.com/gobuffalo/gogen v0.2.0/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= +github.com/gobuffalo/helpers v0.0.0-20190422082217-384f90c6579f/go.mod h1:g0I3qKQEyJxwnHtEmLugD75eoOiWxEtibcV62tYah9w= +github.com/gobuffalo/helpers v0.0.0-20190506214229-8e6f634af7c3/go.mod h1:HlNpmw2+Rjx882VUf6hJfNJs5wpNRzX02KcqCXDlLGc= +github.com/gobuffalo/helpers v0.2.1/go.mod h1:5UhA1EfGvyPZfzo9PqhKkSgmLolaTpnWYDbqCJcmiAE= +github.com/gobuffalo/helpers v0.2.2/go.mod h1:xYbzUdCUpVzLwLnqV8HIjT6hmG0Cs7YIBCJkNM597jw= +github.com/gobuffalo/helpers v0.2.4/go.mod h1:NX7v27yxPDOPTgUFYmJ5ow37EbxdoLraucOGvMNawyk= +github.com/gobuffalo/helpers v0.4.0 h1:DR/iYihrVCXv1cYeIGSK3EZz2CljO+DqDLQPWZAod9c= +github.com/gobuffalo/helpers v0.4.0/go.mod h1:2q/ZnVxCehM4/y1bNz3+wXsvWvWUY+iTUr7mPC6QqGQ= +github.com/gobuffalo/here v0.2.3 h1:1xamq7i4CKjGgICCXY0qpxPeXGdB8oVNSevkpqwd5X4= +github.com/gobuffalo/here v0.2.3/go.mod h1:2a6G14FaAKOGJMK/5UNa4Og/+iyFS5cq3MnlvFR7YDk= +github.com/gobuffalo/httptest v1.0.2/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E= +github.com/gobuffalo/httptest v1.0.3/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E= +github.com/gobuffalo/httptest v1.0.4/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E= +github.com/gobuffalo/httptest v1.0.5/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E= +github.com/gobuffalo/httptest v1.0.6/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E= +github.com/gobuffalo/httptest v1.1.0/go.mod h1:BIfCgiqCOotRc5xYwCcZN7IFYag4277Ynqjar/Ra3iI= +github.com/gobuffalo/httptest v1.2.0/go.mod h1:0KfourZCsapuvkljDMSr7YM+66kCt/rXv54YcWRWwhc= +github.com/gobuffalo/httptest v1.3.0/go.mod h1:Y4qebOsMH91XdB0cZuS8OUdAKHGV7hVDcjgzGupoYlk= +github.com/gobuffalo/httptest v1.4.0 h1:DaoTl/2iFRTk9Uau6b0Lh644tcbRtBNMHcWg6WhieS8= +github.com/gobuffalo/httptest v1.4.0/go.mod h1:VDkgCFmIxAunkLNts49TC949NRLTtvyLKuN67o6hrXM= +github.com/gobuffalo/licenser v0.0.0-20180924033006-eae28e638a42/go.mod h1:Ubo90Np8gpsSZqNScZZkVXXAo5DGhTb+WYFIjlnog8w= +github.com/gobuffalo/licenser v0.0.0-20181025145548-437d89de4f75/go.mod h1:x3lEpYxkRG/XtGCUNkio+6RZ/dlOvLzTI9M1auIwFcw= +github.com/gobuffalo/licenser v0.0.0-20181027200154-58051a75da95/go.mod h1:BzhaaxGd1tq1+OLKObzgdCV9kqVhbTulxOpYbvMQWS0= +github.com/gobuffalo/licenser v0.0.0-20181109171355-91a2a7aac9a7/go.mod h1:m+Ygox92pi9bdg+gVaycvqE8RVSjZp7mWw75+K5NPHk= +github.com/gobuffalo/licenser v0.0.0-20181116224424-1b7fd3f9cbb4/go.mod h1:icHYfF2FVDi6CpI8BK9Sy1ChkSijz/0GNN7Qzzdk6JE= +github.com/gobuffalo/licenser v0.0.0-20181128165715-cc7305f8abed/go.mod h1:oU9F9UCE+AzI/MueCKZamsezGOOHfSirltllOVeRTAE= +github.com/gobuffalo/licenser v0.0.0-20181128170751-82cc989582b9/go.mod h1:oU9F9UCE+AzI/MueCKZamsezGOOHfSirltllOVeRTAE= +github.com/gobuffalo/licenser v0.0.0-20181203160806-fe900bbede07/go.mod h1:ph6VDNvOzt1CdfaWC+9XwcBnlSTBz2j49PBwum6RFaU= +github.com/gobuffalo/licenser v0.0.0-20181211173111-f8a311c51159/go.mod h1:ve/Ue99DRuvnTaLq2zKa6F4KtHiYf7W046tDjuGYPfM= +github.com/gobuffalo/licenser v0.0.0-20190224205124-37799bc2ebf6/go.mod h1:ve/Ue99DRuvnTaLq2zKa6F4KtHiYf7W046tDjuGYPfM= +github.com/gobuffalo/licenser v0.0.0-20190329153211-c35c0a2813b2/go.mod h1:ZVWE6uKUE3rGf7sedUHWVjNWrEgxaUQLVFL+pQiWpfY= +github.com/gobuffalo/licenser v1.1.0/go.mod h1:ZVWE6uKUE3rGf7sedUHWVjNWrEgxaUQLVFL+pQiWpfY= +github.com/gobuffalo/licenser v1.2.0/go.mod h1:ZqDQ+UOqsXPovl65rbCr3Tye6+nKjT4ovwurjVxvMQM= +github.com/gobuffalo/licenser v1.4.0 h1:S8WY0nLT9zkBTjFYcbJ0E9MEK7SgE86aMfjsnuThQjY= +github.com/gobuffalo/licenser v1.4.0/go.mod h1:YkyTh2T/d7KECTh32j65auPV876gkJJk55aAdBfDehg= +github.com/gobuffalo/logger v0.0.0-20181022175615-46cfb361fc27/go.mod h1:8sQkgyhWipz1mIctHF4jTxmJh1Vxhp7mP8IqbljgJZo= +github.com/gobuffalo/logger v0.0.0-20181027144941-73d08d2bb969/go.mod h1:7uGg2duHKpWnN4+YmyKBdLXfhopkAdVM6H3nKbyFbz8= +github.com/gobuffalo/logger v0.0.0-20181027193913-9cf4dd0efe46/go.mod h1:7uGg2duHKpWnN4+YmyKBdLXfhopkAdVM6H3nKbyFbz8= +github.com/gobuffalo/logger v0.0.0-20181109185836-3feeab578c17/go.mod h1:oNErH0xLe+utO+OW8ptXMSA5DkiSEDW1u3zGIt8F9Ew= +github.com/gobuffalo/logger v0.0.0-20181117211126-8e9b89b7c264/go.mod h1:5etB91IE0uBlw9k756fVKZJdS+7M7ejVhmpXXiSFj0I= +github.com/gobuffalo/logger v0.0.0-20181127160119-5b956e21995c/go.mod h1:+HxKANrR9VGw9yN3aOAppJKvhO05ctDi63w4mDnKv2U= +github.com/gobuffalo/logger v0.0.0-20190224201004-be78ebfea0fa/go.mod h1:+HxKANrR9VGw9yN3aOAppJKvhO05ctDi63w4mDnKv2U= +github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= +github.com/gobuffalo/logger v1.0.0/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs= +github.com/gobuffalo/logger v1.0.1 h1:ZEgyRGgAm4ZAhAO45YXMs5Fp+bzGLESFewzAVBMKuTg= +github.com/gobuffalo/logger v1.0.1/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs= +github.com/gobuffalo/makr v1.1.5/go.mod h1:Y+o0btAH1kYAMDJW/TX3+oAXEu0bmSLLoC9mIFxtzOw= +github.com/gobuffalo/makr v1.2.0 h1:TA6ThoZEcq0F9FCrc/7xS1ycdCIL0K6Ux+5wmwYV7BY= +github.com/gobuffalo/makr v1.2.0/go.mod h1:SFQUrDtwDpmQ6BxKJqxg0emc4KkNzzvUtAtnHiVK/QQ= +github.com/gobuffalo/mapi v1.0.0/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/mapi v1.1.0 h1:VEhxtd2aoPXFqVmliLXGSmqPh541OprxYYZFwgNcjn4= +github.com/gobuffalo/mapi v1.1.0/go.mod h1:pqQ1XAqvpy/JYtRwoieNps2yU8MFiMxBUpAm2FBtQ50= +github.com/gobuffalo/meta v0.0.0-20181018155829-df62557efcd3/go.mod h1:XTTOhwMNryif3x9LkTTBO/Llrveezd71u3quLd0u7CM= +github.com/gobuffalo/meta v0.0.0-20181018192820-8c6cef77dab3/go.mod h1:E94EPzx9NERGCY69UWlcj6Hipf2uK/vnfrF4QD0plVE= +github.com/gobuffalo/meta v0.0.0-20181025145500-3a985a084b0a/go.mod h1:YDAKBud2FP7NZdruCSlmTmDOZbVSa6bpK7LJ/A/nlKg= +github.com/gobuffalo/meta v0.0.0-20181109154556-f76929ccd5fa/go.mod h1:1rYI5QsanV6cLpT1BlTAkrFi9rtCZrGkvSK8PglwfS8= +github.com/gobuffalo/meta v0.0.0-20181114191255-b130ebedd2f7/go.mod h1:K6cRZ29ozr4Btvsqkjvg5nDFTLOgTqf03KA70Ks0ypE= +github.com/gobuffalo/meta v0.0.0-20181116202903-8850e47774f5/go.mod h1:K6cRZ29ozr4Btvsqkjvg5nDFTLOgTqf03KA70Ks0ypE= +github.com/gobuffalo/meta v0.0.0-20181127070345-0d7e59dd540b/go.mod h1:RLO7tMvE0IAKAM8wny1aN12pvEKn7EtkBLkUZR00Qf8= +github.com/gobuffalo/meta v0.0.0-20190120163247-50bbb1fa260d/go.mod h1:KKsH44nIK2gA8p0PJmRT9GvWJUdphkDUA8AJEvFWiqM= +github.com/gobuffalo/meta v0.0.0-20190121163014-ecaa953cbfb3/go.mod h1:KLfkGnS+Tucc+iTkUcAUBtxpwOJGfhw2pHRLddPxMQY= +github.com/gobuffalo/meta v0.0.0-20190126124307-c8fb6f4eb5a9/go.mod h1:zoh6GLgkk9+iI/62dST4amAuVAczZrBXoAk/t64n7Ew= +github.com/gobuffalo/meta v0.0.0-20190207205153-50a99e08b8cf/go.mod h1:+VGfK9Jm9I7oJyFeJzIT6omCPvrDktzAtpHJKaieugY= +github.com/gobuffalo/meta v0.0.0-20190320152240-a5320142224a/go.mod h1:+VGfK9Jm9I7oJyFeJzIT6omCPvrDktzAtpHJKaieugY= +github.com/gobuffalo/meta v0.0.0-20190329152330-e161e8a93e3b/go.mod h1:mCRSy5F47tjK8yaIDcJad4oe9fXxY5gLrx3Xx2spK+0= +github.com/gobuffalo/meta v0.1.0/go.mod h1:vAgu28tKdaPIkt8j60wYv1dLuJ1UwOmAjZtYOnLJlko= +github.com/gobuffalo/meta v0.2.0 h1:QSDlR2nbGewl0OVL9kqtU8SeKq6zSonrKWB6G3EgADs= +github.com/gobuffalo/meta v0.2.0/go.mod h1:KZ9Hk/o+kFpwRhzUO95EOuxf3jXU4GleCTUDSTpe3hQ= +github.com/gobuffalo/mw-basicauth v1.0.3/go.mod h1:dg7+ilMZOKnQFHDefUzUHufNyTswVUviCBgF244C1+0= +github.com/gobuffalo/mw-basicauth v1.0.6/go.mod h1:RFyeGeDLZlVgp/eBflqu2eavFqyv0j0fVVP87WPYFwY= +github.com/gobuffalo/mw-basicauth v1.0.7 h1:9zTxCpu0ozzwpwvw5MO31w8nEoySNRNfZwM1YAWfGZs= +github.com/gobuffalo/mw-basicauth v1.0.7/go.mod h1:xJ9/OSiOWl+kZkjaSun62srODr3Cx8OB4AKr+G4FlS4= +github.com/gobuffalo/mw-contenttype v0.0.0-20180802152300-74f5a47f4d56/go.mod h1:7EvcmzBbeCvFtQm5GqF9ys6QnCxz2UM1x0moiWLq1No= +github.com/gobuffalo/mw-contenttype v0.0.0-20190129203934-2554e742333b h1:6LKJWRvshByPo/dvV4B1E2wvsqXp1uoynVndvuuOZZc= +github.com/gobuffalo/mw-contenttype v0.0.0-20190129203934-2554e742333b/go.mod h1:7x87+mDrr9Peh7AqhOtESyJLanMd2zQNz2Hts+vtBoE= +github.com/gobuffalo/mw-csrf v0.0.0-20180802151833-446ff26e108b/go.mod h1:sbGtb8DmDZuDUQoxjr8hG1ZbLtZboD9xsn6p77ppcHo= +github.com/gobuffalo/mw-csrf v0.0.0-20190129204204-25460a055517 h1:pOOXwl1xPLLP8oZw3e3t2wwrc/KSzmlRBcaQwGpG9oo= +github.com/gobuffalo/mw-csrf v0.0.0-20190129204204-25460a055517/go.mod h1:o5u+nnN0Oa7LBeDYH9QP36qeMPnXV9qbVnbZ4D+Kb0Q= +github.com/gobuffalo/mw-forcessl v0.0.0-20180802152810-73921ae7a130 h1:v94+IGhlBro0Lz1gOR3lrdAVSZ0mJF2NxsdppKd7FnI= +github.com/gobuffalo/mw-forcessl v0.0.0-20180802152810-73921ae7a130/go.mod h1:JvNHRj7bYNAMUr/5XMkZaDcw3jZhUZpsmzhd//FFWmQ= +github.com/gobuffalo/mw-i18n v0.0.0-20180802152014-e3060b7e13d6/go.mod h1:91AQfukc52A6hdfIfkxzyr+kpVYDodgAeT5cjX1UIj4= +github.com/gobuffalo/mw-i18n v0.0.0-20181027200759-09e0c99be4d3/go.mod h1:1PpGPgqP8VsfUppgBA9FrTOXjI6X9gjqhh/8dmg48lg= +github.com/gobuffalo/mw-i18n v0.0.0-20190129204410-552713a3ebb4 h1:c1fFPCxA7SozZPqMhpfZoOVa3wUpCl11gyCEZ4nYqUE= +github.com/gobuffalo/mw-i18n v0.0.0-20190129204410-552713a3ebb4/go.mod h1:rBg2eHxsyxVjtYra6fGy4GSF5C8NysOvz+Znnzk42EM= +github.com/gobuffalo/mw-paramlogger v0.0.0-20181005191442-d6ee392ec72e/go.mod h1:6OJr6VwSzgJMqWMj7TYmRUqzNe2LXu/W1rRW4MAz/ME= +github.com/gobuffalo/mw-paramlogger v0.0.0-20190129202837-395da1998525 h1:2QoD5giw2UrYJu65UKDEo9HFcz9yun387twL2zzn+/Q= +github.com/gobuffalo/mw-paramlogger v0.0.0-20190129202837-395da1998525/go.mod h1:gEo/ABCsKqvpp/KCxN2AIzDEe0OJUXbJ9293FYrXw+w= +github.com/gobuffalo/mw-tokenauth v0.0.0-20181001105134-8545f626c189/go.mod h1:UqBF00IfKvd39ni5+yI5MLMjAf4gX7cDKN/26zDOD6c= +github.com/gobuffalo/mw-tokenauth v0.0.0-20190129201951-95847f29c5c8 h1:dqwRMSzfhe3rL0vMDaRvc2ozLqxapWFBEDH6/f0nQT0= +github.com/gobuffalo/mw-tokenauth v0.0.0-20190129201951-95847f29c5c8/go.mod h1:n2oa93LHGD94hGI+PoJO+6cf60DNrXrAIv9L/Ke3GXc= +github.com/gobuffalo/nulls v0.0.0-20190305142546-85f3c9250d87/go.mod h1:KhaLCW+kFA/G97tZkmVkIxhRw3gvZszJn7JjPLI3gtI= +github.com/gobuffalo/nulls v0.1.0 h1:pR3SDzXyFcQrzyPreZj+OzNHSxI4DphSOFaQuidxrfw= +github.com/gobuffalo/nulls v0.1.0/go.mod h1:/HRtuDRoVoN5fABk3J6jzZaGEdcIZEMs0qczj71eKZY= +github.com/gobuffalo/packd v0.0.0-20181027182251-01ad393492c8/go.mod h1:SmdBdhj6uhOsg1Ui4SFAyrhuc7U4VCildosO5IDJ3lc= +github.com/gobuffalo/packd v0.0.0-20181027190505-aafc0d02c411/go.mod h1:SmdBdhj6uhOsg1Ui4SFAyrhuc7U4VCildosO5IDJ3lc= +github.com/gobuffalo/packd v0.0.0-20181027194105-7ae579e6d213/go.mod h1:SmdBdhj6uhOsg1Ui4SFAyrhuc7U4VCildosO5IDJ3lc= +github.com/gobuffalo/packd v0.0.0-20181028162033-6d52e0eabf41/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= +github.com/gobuffalo/packd v0.0.0-20181029140631-cf76bd87a5a6/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= +github.com/gobuffalo/packd v0.0.0-20181031195726-c82734870264/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= +github.com/gobuffalo/packd v0.0.0-20181103221656-16c4ed88b296/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= +github.com/gobuffalo/packd v0.0.0-20181104210303-d376b15f8e96/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= +github.com/gobuffalo/packd v0.0.0-20181111195323-b2e760a5f0ff/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= +github.com/gobuffalo/packd v0.0.0-20181114190715-f25c5d2471d7/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= +github.com/gobuffalo/packd v0.0.0-20181124090624-311c6248e5fb/go.mod h1:Foenia9ZvITEvG05ab6XpiD5EfBHPL8A6hush8SJ0o8= +github.com/gobuffalo/packd v0.0.0-20181207120301-c49825f8f6f4/go.mod h1:LYc0TGKFBBFTRC9dg2pcRcMqGCTMD7T2BIMP7OBuQAA= +github.com/gobuffalo/packd v0.0.0-20181212173646-eca3b8fd6687/go.mod h1:LYc0TGKFBBFTRC9dg2pcRcMqGCTMD7T2BIMP7OBuQAA= +github.com/gobuffalo/packd v0.0.0-20190224160250-d04dd98aca5b/go.mod h1:LYc0TGKFBBFTRC9dg2pcRcMqGCTMD7T2BIMP7OBuQAA= +github.com/gobuffalo/packd v0.0.0-20190315122247-83d601d65093/go.mod h1:LpEu7OkoplvlhztyAEePkS6JwcGgANdgGL5pB4Knxaw= +github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packd v0.2.0/go.mod h1:k2CkHP3bjbqL2GwxwhxUy1DgnlbW644hkLC9iIUvZwY= +github.com/gobuffalo/packd v0.3.0 h1:eMwymTkA1uXsqxS0Tpoop3Lc0u3kTfiMBE6nKtQU4g4= +github.com/gobuffalo/packd v0.3.0/go.mod h1:zC7QkmNkYVGKPw4tHpBQ+ml7W/3tIebgeo1b36chA3Q= +github.com/gobuffalo/packr v1.13.7/go.mod h1:KkinLIn/n6+3tVXMwg6KkNvWwVsrRAz4ph+jgpk3Z24= +github.com/gobuffalo/packr v1.15.0/go.mod h1:t5gXzEhIviQwVlNx/+3SfS07GS+cZ2hn76WLzPp6MGI= +github.com/gobuffalo/packr v1.15.1/go.mod h1:IeqicJ7jm8182yrVmNbM6PR4g79SjN9tZLH8KduZZwE= +github.com/gobuffalo/packr v1.16.0/go.mod h1:Yx/lcR/7mDLXhuJSzsz2MauD/HUwSc+EK6oigMRGGsM= +github.com/gobuffalo/packr v1.19.0/go.mod h1:MstrNkfCQhd5o+Ct4IJ0skWlxN8emOq8DsoT1G98VIU= +github.com/gobuffalo/packr v1.20.0/go.mod h1:JDytk1t2gP+my1ig7iI4NcVaXr886+N0ecUga6884zw= +github.com/gobuffalo/packr v1.21.0/go.mod h1:H00jGfj1qFKxscFJSw8wcL4hpQtPe1PfU2wa6sg/SR0= +github.com/gobuffalo/packr v1.21.5/go.mod h1:zCvDxrZzFmq5Xd7Jw4vaGe/OYwzuXnma31D2EbTHMWk= +github.com/gobuffalo/packr v1.21.7/go.mod h1:73tmYjwi4Cvb1eNiAwpmrzZ0gxVA4KBqVSZ2FNeJodM= +github.com/gobuffalo/packr v1.21.9/go.mod h1:GC76q6nMzRtR+AEN/VV4w0z2/4q7SOaEmXh3Ooa8sOE= +github.com/gobuffalo/packr v1.22.0/go.mod h1:Qr3Wtxr3+HuQEwWqlLnNW4t1oTvK+7Gc/Rnoi/lDFvA= +github.com/gobuffalo/packr v1.24.0/go.mod h1:p9Sgang00I1hlr1ub+tgI9AQdFd4f+WH1h62jYpzetM= +github.com/gobuffalo/packr v1.24.1/go.mod h1:absPnW/XUUa4DmIh5ga7AipGXXg0DOcd5YWKk5RZs8Y= +github.com/gobuffalo/packr v1.25.0 h1:NtPK45yOKFdTKHTvRGKL+UIKAKmJVWIVJOZBDI/qEdY= +github.com/gobuffalo/packr v1.25.0/go.mod h1:NqsGg8CSB2ZD+6RBIRs18G7aZqdYDlYNNvsSqP6T4/U= +github.com/gobuffalo/packr/v2 v2.0.0-rc.5/go.mod h1:e6gmOfhf3KmT4zl2X/NDRSfBXk2oV4TXZ+NNOM0xwt8= +github.com/gobuffalo/packr/v2 v2.0.0-rc.7/go.mod h1:BzhceHWfF3DMAkbPUONHYWs63uacCZxygFY1b4H9N2A= +github.com/gobuffalo/packr/v2 v2.0.0-rc.8/go.mod h1:y60QCdzwuMwO2R49fdQhsjCPv7tLQFR0ayzxxla9zes= +github.com/gobuffalo/packr/v2 v2.0.0-rc.9/go.mod h1:fQqADRfZpEsgkc7c/K7aMew3n4aF1Kji7+lIZeR98Fc= +github.com/gobuffalo/packr/v2 v2.0.0-rc.10/go.mod h1:4CWWn4I5T3v4c1OsJ55HbHlUEKNWMITG5iIkdr4Px4w= +github.com/gobuffalo/packr/v2 v2.0.0-rc.11/go.mod h1:JoieH/3h3U4UmatmV93QmqyPUdf4wVM9HELaHEu+3fk= +github.com/gobuffalo/packr/v2 v2.0.0-rc.12/go.mod h1:FV1zZTsVFi1DSCboO36Xgs4pzCZBjB/tDV9Cz/lSaR8= +github.com/gobuffalo/packr/v2 v2.0.0-rc.13/go.mod h1:2Mp7GhBFMdJlOK8vGfl7SYtfMP3+5roE39ejlfjw0rA= +github.com/gobuffalo/packr/v2 v2.0.0-rc.14/go.mod h1:06otbrNvDKO1eNQ3b8hst+1010UooI2MFg+B2Ze4MV8= +github.com/gobuffalo/packr/v2 v2.0.0-rc.15/go.mod h1:IMe7H2nJvcKXSF90y4X1rjYIRlNMJYCxEhssBXNZwWs= +github.com/gobuffalo/packr/v2 v2.0.0/go.mod h1:7McfLpSxaPUoSQm7gYpTZRQSK63mX8EKzzYSEFKvfkM= +github.com/gobuffalo/packr/v2 v2.0.1/go.mod h1:tp5/5A2e67F1lUGTiNadtA2ToP045+mvkWzaqMCsZr4= +github.com/gobuffalo/packr/v2 v2.0.2/go.mod h1:6Y+2NY9cHDlrz96xkJG8bfPwLlCdJVS/irhNJmwD7kM= +github.com/gobuffalo/packr/v2 v2.0.6/go.mod h1:/TYKOjadT7P9jRWZtj4BRTgeXy2tIYntifGkD+aM2KY= +github.com/gobuffalo/packr/v2 v2.0.7/go.mod h1:1SBFAIr3YnxYdJRyrceR7zhOrhV/YhHzOjDwA9LLZ5Y= +github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= +github.com/gobuffalo/packr/v2 v2.0.10/go.mod h1:n90ZuXIc2KN2vFAOQascnPItp9A2g9QYSvYvS3AjQEM= +github.com/gobuffalo/packr/v2 v2.1.0/go.mod h1:n90ZuXIc2KN2vFAOQascnPItp9A2g9QYSvYvS3AjQEM= +github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= +github.com/gobuffalo/packr/v2 v2.3.2/go.mod h1:93elRVdDhpUgox9GnXswWK5dzpVBQsnlQjnnncSLoiU= +github.com/gobuffalo/packr/v2 v2.4.0/go.mod h1:ra341gygw9/61nSjAbfwcwh8IrYL4WmR4IsPkPBhQiY= +github.com/gobuffalo/packr/v2 v2.5.1/go.mod h1:8f9c96ITobJlPzI44jj+4tHnEKNt0xXWSVlXRN9X1Iw= +github.com/gobuffalo/packr/v2 v2.5.2/go.mod h1:sgEE1xNZ6G0FNN5xn9pevVu4nywaxHvgup67xisti08= +github.com/gobuffalo/packr/v2 v2.5.3/go.mod h1:sgEE1xNZ6G0FNN5xn9pevVu4nywaxHvgup67xisti08= +github.com/gobuffalo/packr/v2 v2.6.0/go.mod h1:sgEE1xNZ6G0FNN5xn9pevVu4nywaxHvgup67xisti08= +github.com/gobuffalo/packr/v2 v2.7.1 h1:n3CIW5T17T8v4GGK5sWXLVWJhCz7b5aNLSxW6gYim4o= +github.com/gobuffalo/packr/v2 v2.7.1/go.mod h1:qYEvAazPaVxy7Y7KR0W8qYEE+RymX74kETFqjFoFlOc= +github.com/gobuffalo/plush v3.7.16+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plush v3.7.20+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plush v3.7.21+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plush v3.7.22+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plush v3.7.23+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plush v3.7.30+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plush v3.7.31+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plush v3.7.32+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plush v3.7.33+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plush v3.7.34+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plush v3.8.0+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plush v3.8.2+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plush v3.8.3+incompatible h1:kzvUTnFPhwyfPEsx7U7LI05/IIslZVGnAlMA1heWub8= +github.com/gobuffalo/plush v3.8.3+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= +github.com/gobuffalo/plushgen v0.0.0-20181128164830-d29dcb966cb2/go.mod h1:r9QwptTFnuvSaSRjpSp4S2/4e2D3tJhARYbvEBcKSb4= +github.com/gobuffalo/plushgen v0.0.0-20181203163832-9fc4964505c2/go.mod h1:opEdT33AA2HdrIwK1aibqnTJDVVKXC02Bar/GT1YRVs= +github.com/gobuffalo/plushgen v0.0.0-20181207152837-eedb135bd51b/go.mod h1:Lcw7HQbEVm09sAQrCLzIxuhFbB3nAgp4c55E+UlynR0= +github.com/gobuffalo/plushgen v0.0.0-20190104222512-177cd2b872b3/go.mod h1:tYxCozi8X62bpZyKXYHw1ncx2ZtT2nFvG42kuLwYjoc= +github.com/gobuffalo/plushgen v0.0.0-20190224160205-347ea233336e/go.mod h1:tYxCozi8X62bpZyKXYHw1ncx2ZtT2nFvG42kuLwYjoc= +github.com/gobuffalo/plushgen v0.0.0-20190329152458-0555238fe0d9/go.mod h1:3U71v6HWZpVER1nInTXeAwdoRNsRd4W8aeIa1Lyp+Bk= +github.com/gobuffalo/plushgen v0.1.0/go.mod h1:NK33QLkRK/xKexiPFSxlWRT286F4yStZUa/Fbx0guvo= +github.com/gobuffalo/plushgen v0.1.2 h1:s4yAgNdfNMyMQ7o+Is4f1VlH2L1tKosT+m7BF28C8H4= +github.com/gobuffalo/plushgen v0.1.2/go.mod h1:3U71v6HWZpVER1nInTXeAwdoRNsRd4W8aeIa1Lyp+Bk= +github.com/gobuffalo/pop v4.8.2+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.8.3+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.8.4+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.8.5+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.8.7+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.8.8+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.9.0+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.9.1+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.9.2+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.9.3+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.9.5+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.9.6+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.9.8+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.9.9+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.10.0+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.11.0+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.11.1+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.11.2+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.11.3+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.12.0+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.12.1+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/pop v4.12.2+incompatible h1:WFHMzzHbVLulZnEium1VlYRnWkzHz39FzVLov6rZdDI= +github.com/gobuffalo/pop v4.12.2+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= +github.com/gobuffalo/release v1.0.35/go.mod h1:VtHFAKs61vO3wboCec5xr9JPTjYyWYcvaM3lclkc4x4= +github.com/gobuffalo/release v1.0.38/go.mod h1:VtHFAKs61vO3wboCec5xr9JPTjYyWYcvaM3lclkc4x4= +github.com/gobuffalo/release v1.0.42/go.mod h1:RPs7EtafH4oylgetOJpGP0yCZZUiO4vqHfTHJjSdpug= +github.com/gobuffalo/release v1.0.51/go.mod h1:RPs7EtafH4oylgetOJpGP0yCZZUiO4vqHfTHJjSdpug= +github.com/gobuffalo/release v1.0.52/go.mod h1:RPs7EtafH4oylgetOJpGP0yCZZUiO4vqHfTHJjSdpug= +github.com/gobuffalo/release v1.0.53/go.mod h1:FdF257nd8rqhNaqtDWFGhxdJ/Ig4J7VcS3KL7n/a+aA= +github.com/gobuffalo/release v1.0.54/go.mod h1:Pe5/RxRa/BE8whDpGfRqSI7D1a0evGK1T4JDm339tJc= +github.com/gobuffalo/release v1.0.61/go.mod h1:mfIO38ujUNVDlBziIYqXquYfBF+8FDHUjKZgYC1Hj24= +github.com/gobuffalo/release v1.0.63/go.mod h1:/7hQAikt0l8Iu/tAX7slC1qiOhD6Nb+3KMmn/htiUfc= +github.com/gobuffalo/release v1.0.72/go.mod h1:NP5NXgg/IX3M5XmHmWR99D687/3Dt9qZtTK/Lbwc1hU= +github.com/gobuffalo/release v1.0.74/go.mod h1:NP5NXgg/IX3M5XmHmWR99D687/3Dt9qZtTK/Lbwc1hU= +github.com/gobuffalo/release v1.1.1/go.mod h1:Sluak1Xd6kcp6snkluR1jeXAogdJZpFFRzTYRs/2uwg= +github.com/gobuffalo/release v1.1.3/go.mod h1:CuXc5/m+4zuq8idoDt1l4va0AXAn/OSs08uHOfMVr8E= +github.com/gobuffalo/release v1.1.6/go.mod h1:18naWa3kBsqO0cItXZNJuefCKOENpbbUIqRL1g+p6z0= +github.com/gobuffalo/release v1.2.2/go.mod h1:tkFFZua2N5WRxyGDk2cSwQjzkZ/apKKXl5T8P+kEO+E= +github.com/gobuffalo/release v1.2.5/go.mod h1:tkFFZua2N5WRxyGDk2cSwQjzkZ/apKKXl5T8P+kEO+E= +github.com/gobuffalo/release v1.4.0/go.mod h1:f4uUPnD9dxrWxVy9yy0k/mvDf3EzhFtf7/byl0tTdY4= +github.com/gobuffalo/release v1.7.0/go.mod h1:xH2NjAueVSY89XgC4qx24ojEQ4zQ9XCGVs5eXwJTkEs= +github.com/gobuffalo/release v1.8.3/go.mod h1:gCk/x5WD+aIGkPodO4CuLxdnhYn9Jgp7yFYxntK/8mk= +github.com/gobuffalo/release v1.13.4/go.mod h1:5Cc4TSNxP4QFV2ZUYcgPiBBV7YyRomHecGTQuuy26G4= +github.com/gobuffalo/release v1.14.0 h1:+Jy7eLN5md6Fg+AMuFRUiK4sTNq4+zXxRho7/wJe1HU= +github.com/gobuffalo/release v1.14.0/go.mod h1:5Cc4TSNxP4QFV2ZUYcgPiBBV7YyRomHecGTQuuy26G4= +github.com/gobuffalo/shoulders v1.0.1/go.mod h1:V33CcVmaQ4gRUmHKwq1fiTXuf8Gp/qjQBUL5tHPmvbA= +github.com/gobuffalo/shoulders v1.0.3/go.mod h1:LqMcHhKRuBPMAYElqOe3POHiZ1x7Ry0BE8ZZ84Bx+k4= +github.com/gobuffalo/shoulders v1.0.4/go.mod h1:LqMcHhKRuBPMAYElqOe3POHiZ1x7Ry0BE8ZZ84Bx+k4= +github.com/gobuffalo/shoulders v1.1.0/go.mod h1:kcIJs3p7VqoBJ36Mzs+x767NyzTx0pxBvzZdWTWZYF8= +github.com/gobuffalo/shoulders v1.2.0 h1:XcPmWbzN7944VXS/I//R7o2eupUHEp3mLFWbUlk1Sco= +github.com/gobuffalo/shoulders v1.2.0/go.mod h1:Ia3oFybQWg4711cb2S5JkFSt9V4rMiLGusWZ6mRAdNM= +github.com/gobuffalo/syncx v0.0.0-20181120191700-98333ab04150/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= +github.com/gobuffalo/syncx v0.0.0-20181120194010-558ac7de985f/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= +github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754 h1:tpom+2CJmpzAWj5/VEHync2rJGi+epHNIeRSWjzGA+4= +github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= +github.com/gobuffalo/tags v2.0.11+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= +github.com/gobuffalo/tags v2.0.14+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= +github.com/gobuffalo/tags v2.0.15+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= +github.com/gobuffalo/tags v2.0.16+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= +github.com/gobuffalo/tags v2.1.0+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= +github.com/gobuffalo/tags v2.1.5+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= +github.com/gobuffalo/tags v2.1.6+incompatible h1:xaWOM48Xz8lBh+C8l5R7vSmLAZJK4KeWcLo+0pJ516g= +github.com/gobuffalo/tags v2.1.6+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= +github.com/gobuffalo/uuid v2.0.3+incompatible/go.mod h1:ErhIzkRhm0FtRuiE/PeORqcw4cVi1RtSpnwYrxuvkfE= +github.com/gobuffalo/uuid v2.0.4+incompatible/go.mod h1:ErhIzkRhm0FtRuiE/PeORqcw4cVi1RtSpnwYrxuvkfE= +github.com/gobuffalo/uuid v2.0.5+incompatible h1:c5uWRuEnYggYCrT9AJm0U2v1QTG7OVDAvxhj8tIV5Gc= +github.com/gobuffalo/uuid v2.0.5+incompatible/go.mod h1:ErhIzkRhm0FtRuiE/PeORqcw4cVi1RtSpnwYrxuvkfE= +github.com/gobuffalo/validate v2.0.3+incompatible h1:6f4JCEz11Zi6iIlexMv7Jz10RBPvgI795AOaubtCwTE= +github.com/gobuffalo/validate v2.0.3+incompatible/go.mod h1:N+EtDe0J8252BgfzQUChBgfd6L93m9weay53EWFVsMM= +github.com/gobuffalo/x v0.0.0-20181003152136-452098b06085/go.mod h1:WevpGD+5YOreDJznWevcn8NTmQEW5STSBgIkpkjzqXc= +github.com/gobuffalo/x v0.0.0-20181007152206-913e47c59ca7/go.mod h1:9rDPXaB3kXdKWzMc4odGQQdG2e2DIEmANy5aSJ9yesY= +github.com/gobuffalo/x v0.0.0-20181025165825-f204f550da9d/go.mod h1:Qh2Pb/Ak1Ko2mzHlGPigrnxkhO4WTTCI1jJM58sbgtE= +github.com/gobuffalo/x v0.0.0-20181025192250-1ef645d63fe8/go.mod h1:AIlnMGlYXOCsoCntLPFLYtrJNS/pc2HD4IdSXH62TpU= +github.com/gobuffalo/x v0.0.0-20181109195216-5b3131238124/go.mod h1:GpdLUY6/Ztf/3FfxfwsLkDqAGZ0brhlh7LzIibHyZp0= +github.com/gobuffalo/x v0.0.0-20181110221217-14085ca3e1a9/go.mod h1:ig5vdn4+5IPtxgESlZWo1SSDyHKKef8EjVVKhY9kkIQ= +github.com/gobuffalo/x v0.0.0-20190224155809-6bb134105960 h1:DoUD23uwnzKJ3t5HH2SeTIszWmc13AV9TAdMhtXQts8= +github.com/gobuffalo/x v0.0.0-20190224155809-6bb134105960/go.mod h1:ig5vdn4+5IPtxgESlZWo1SSDyHKKef8EjVVKhY9kkIQ= +github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/gocql/gocql v0.0.0-20191102131523-9faa4c08d962 h1:+YAUiFOQF5pIjD9FYvk0xqpyuzDdJkgP9uzSC3pBk0E= +github.com/gocql/gocql v0.0.0-20191102131523-9faa4c08d962/go.mod h1:DL0ekTmBSTdlNF25Orwt/JMzqIq3EJ4MVa/J/uK64OY= +github.com/godbus/dbus v4.1.0+incompatible h1:WqqLRTsQic3apZUK9qC5sGNfXthmPXzUZ7nQPrNITa4= +github.com/godbus/dbus v4.1.0+incompatible/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= +github.com/gofrs/uuid v3.1.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE= +github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/googleapis v1.3.0 h1:M695OaDJ5ipWvDPcoAg/YL9c3uORAegkEfBqTQF/fTQ= +github.com/gogo/googleapis v1.3.0/go.mod h1:d+q1s/xVJxZGKWwC/6UfPIF33J+G1Tq4GYv9Y+Tg/EU= +github.com/gogo/protobuf v0.0.0-20171007142547-342cbe0a0415/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.2.2-0.20190730201129-28a6bbf47e48/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.0 h1:G8O7TerXerS4F6sx9OV7/nRfJdnXgHZu/S/7F2SN+UE= +github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/goji/param v0.0.0-20160927210335-d7f49fd7d1ed h1:4ZXAJ/IvcryiUPDddal4P7mu6V0+PoBe+2tKG6TNQtc= +github.com/goji/param v0.0.0-20160927210335-d7f49fd7d1ed/go.mod h1:GZJblUu7ACjguvQUK2un6nQBlnZk7H1MzXZdfrFUd8Q= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/lint v0.0.0-20180702182130-06c8688daad7 h1:2hRPrmiwPrp3fQX967rNJIhQPtiGXdlQWAxKbKw3VHA= +github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= +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 h1:qGJ6qTW+x6xX/my+8YUVl4WNpX9B7+/l2tRsHGZ7f2s= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +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 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0= +github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= +github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac h1:Q0Jsdxl5jbxouNs1TQYt0gxesYMU4VXRbsTlgDloZ50= +github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= +github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82 h1:EvokxLQsaaQjcWVWSV38221VAK7qc2zhaO17bKys/18= +github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82/go.mod h1:PxC8OnwL11+aosOB5+iEPoV3picfs8tUpkVd0pDo+Kg= +github.com/gonum/internal v0.0.0-20181124074243-f884aa714029 h1:8jtTdc+Nfj9AR+0soOeia9UZSvYBvETVHZrugUowJ7M= +github.com/gonum/internal v0.0.0-20181124074243-f884aa714029/go.mod h1:Pu4dmpkhSyOzRwuXkOgAvijx4o+4YMUJJo9OvPYMkks= +github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9 h1:7qnwS9+oeSiOIsiUMajT+0R7HR6hw5NegnKPmn/94oI= +github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9/go.mod h1:XA3DeT6rxh2EAE789SSiSJNqxPaC0aE9J8NTOI0Jo/A= +github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9 h1:V2IgdyerlBa/MxaEFRbV5juy/C3MGdj4ePi+g6ePIp4= +github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9/go.mod h1:0EXg4mc1CNP0HCqCz+K4ts155PXIlUywf0wqN+GfPZw= +github.com/google/addlicense v0.0.0-20190510175307-22550fa7c1b0 h1:ydbHzabf84uucKri5fcfiqYxGg+rYgP/zQfLLN8lyP0= +github.com/google/addlicense v0.0.0-20190510175307-22550fa7c1b0/go.mod h1:QtPG26W17m+OIQgE6gQ24gC1M6pUaMBAbFrTIDtwG/E= +github.com/google/btree v0.0.0-20160524151835-7d79101e329e/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/flatbuffers v1.11.0 h1:O7CEyB8Cb3/DmtxODGtLHcEvpr81Jm5qLg/hsHnxA2A= +github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +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 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY= +github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= +github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= +github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= +github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +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-20190723021845-34ac40c74b70 h1:XTnP8fJpa4Kvpw2qARB4KS9izqxPS0Sd92cDlY3uk+w= +github.com/google/pprof v0.0.0-20190723021845-34ac40c74b70/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go v2.0.0+incompatible h1:j0GKcs05QVmm7yesiZq2+9cxHkNK9YM6zKx4D2qucQU= +github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= +github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gnostic v0.0.0-20170426233943-68f4ded48ba9/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.3.0 h1:CcQijm0XKekKjP/YCz28LXVSpgguuB+nCxaSjCe09y0= +github.com/googleapis/gnostic v0.3.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/gophercloud/gophercloud v0.0.0-20190126172459-c818fa66e4c8/go.mod h1:3WdhXV3rUYy9p6AUW8d94kr+HS62Y4VL9mBnFxsD8q4= +github.com/gophercloud/gophercloud v0.3.0 h1:6sjpKIpVwRIIwmcEGp+WwNovNsem+c+2vm6oxshRpL8= +github.com/gophercloud/gophercloud v0.3.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/goreleaser/goreleaser v0.94.0 h1:2CFMxMTLODjYfNOx2sADNzpgCwH9ltMqvQYtj+ntK1Q= +github.com/goreleaser/goreleaser v0.94.0/go.mod h1:OjbYR2NhOI6AEUWCowMSBzo9nP1aRif3sYtx+rhp+Zo= +github.com/goreleaser/nfpm v0.9.7 h1:h8RQMDztu6cW7b0/s4PGbdeMYykAbJG0UMXaWG5uBMI= +github.com/goreleaser/nfpm v0.9.7/go.mod h1:F2yzin6cBAL9gb+mSiReuXdsfTrOQwDMsuSpULof+y4= +github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg= +github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/pat v0.0.0-20180118222023-199c85a7f6d1 h1:LqbZZ9sNMWVjeXS4NN5oVvhMjDyLhmA1LG86oSo+IqY= +github.com/gorilla/pat v0.0.0-20180118222023-199c85a7f6d1/go.mod h1:YeAe0gNeiNT5hoiZRI4yiOky6jVdNvfO2N6Kav/HmxY= +github.com/gorilla/schema v1.1.0 h1:CamqUDOFUBqzrvxuz2vEwo8+SUdwsluFh7IlzJh30LY= +github.com/gorilla/schema v1.1.0/go.mod h1:kgLaKoK1FELgZqMAVxx/5cbj0kT+57qxUrAlIO2eleU= +github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= +github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= +github.com/gorilla/sessions v1.1.2/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w= +github.com/gorilla/sessions v1.1.3/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w= +github.com/gorilla/sessions v1.2.0 h1:S7P+1Hm5V/AT9cjEcUD5uDaQSX0OE577aCXgoaKpYbQ= +github.com/gorilla/sessions v1.2.0/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= +github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/graph-gophers/graphql-go v0.0.0-20191031232829-adde0d0f76a3 h1:HwRCZlPXN00r58jaIPE11HXn7EvhheQrE+Cxw0vkrH0= +github.com/graph-gophers/graphql-go v0.0.0-20191031232829-adde0d0f76a3/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= +github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7 h1:6TSoaYExHper8PYsJu23GWVNOyYRCSnIFyxKgLSZ54w= +github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0 h1:Iju5GlWwrvL6UBg4zJJt3btmonfrMlCDdsejg4CZE7c= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.4/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.11.1 h1:/dBYI+n4xIL+Y9SKXQrjlKTmJJDwCSlNLRwZ5nBhIek= +github.com/grpc-ecosystem/grpc-gateway v1.11.1/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8= +github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4= +github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/api v1.2.0 h1:oPsuzLp2uk7I7rojPKuncWbZ+m5TMoD4Ivs+2Rkeh4Y= +github.com/hashicorp/consul/api v1.2.0/go.mod h1:1SIkFYi2ZTXUE5Kgt179+4hH33djo11+0Eo2XgTAtkw= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.2.0 h1:GWFYFmry/k4b1hEoy7kSkmU8e30GAyI4VZHk0fRxeL4= +github.com/hashicorp/consul/sdk v0.2.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= +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.10.0 h1:b86HUuA126IcSHyC55WjPo7KtCOVeTCKIjr+3lBhPxI= +github.com/hashicorp/go-hclog v0.10.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.1.0 h1:vN9wG1D6KG6YHRTWr8512cxGOVgTMEfgEdSj/hr8MPc= +github.com/hashicorp/go-immutable-radix v1.1.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-msgpack v0.5.5 h1:i9R9JSrqIz0QVLz3sz+i3YJdT7TTSLcfLLzJi9aZTuI= +github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-plugin v1.0.1 h1:4OtAfUGbnKC6yS48p0CtMX2oFYtzFZVv6rok3cRWgnE= +github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY= +github.com/hashicorp/go-retryablehttp v0.5.3 h1:QlWt0KvWT0lq8MFppF9tsJGF+ynG7ztc2KIPhzRGk7s= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-rootcerts v1.0.1 h1:DMo4fmknnz0E0evoNYnV48RjWndOsmd6OW+09R3cEP8= +github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= +github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= +github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go.net v0.0.1 h1:sNCoNyDEvN1xa+X0baata4RdcpKwcMS6DH+xwfqPgjw= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= +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/golang-lru v0.5.3 h1:YPkqC67at8FYaadspW/6uE0COsBxS2656RLEr8Bppgk= +github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +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/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0 h1:WhIgCr5a7AaVH6jPUwjtRuuE7/RDufnUvzIr48smyxs= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/memberlist v0.1.4 h1:gkyML/r71w3FL8gUi74Vk76avkj/9lYAY9lvg0OcoGs= +github.com/hashicorp/memberlist v0.1.4/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/serf v0.8.3 h1:MWYcmct5EtKz0efYooPcL0yNkem+7kWxqXDi/UIh+8k= +github.com/hashicorp/serf v0.8.3/go.mod h1:UpNcs7fFbpKIyZaUuSW6EPiH+eZC7OuyFD+wc1oal+k= +github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb h1:b5rjCoWHc7eqmAS4/qyk21ZsHyb6Mxv/jykxvNTkU4M= +github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= +github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/hudl/fargo v1.3.0 h1:0U6+BtN6LhaYuTnIJq4Wyq5cpn6O2kWrxAtcqBmYY6w= +github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/iancoleman/strcase v0.0.0-20190422225806-e506e3ef7365 h1:ECW73yc9MY7935nNYXUkK7Dz17YuSUI9yqRqYS8aBww= +github.com/iancoleman/strcase v0.0.0-20190422225806-e506e3ef7365/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6 h1:UDMh68UUwekSh5iP2OMhRRZJiiBccgV7axzUG8vi56c= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.5 h1:JboBksRwiiAJWvIYJVo46AfV+IAIKZpfrSzVKj42R4Q= +github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28= +github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/inconshreveable/go-vhost v0.0.0-20160627193104-06d84117953b h1:IpLPmn6Re21F0MaV6Zsc5RdSE6KuoFpWmHiUSEs3PrE= +github.com/inconshreveable/go-vhost v0.0.0-20160627193104-06d84117953b/go.mod h1:aA6DnFhALT3zH0y+A39we+zbrdMC2N0X/q21e6FI0LU= +github.com/inconshreveable/log15 v0.0.0-20180818164646-67afb5ed74ec h1:CGkYB1Q7DSsH/ku+to+foV4agt2F2miquaLUgF6L178= +github.com/inconshreveable/log15 v0.0.0-20180818164646-67afb5ed74ec/go.mod h1:cOaXtrgN4ScfRrD9Bre7U1thNq5RtJ8ZoP4iXVGRj6o= +github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/influxdata/changelog v1.1.0 h1:HXhmLZDrbuC+Ca5YX7g8B8cH5DmJpaOjd844d9Y7aTQ= +github.com/influxdata/changelog v1.1.0/go.mod h1:uzpGWE/qehT8L426YuXwpMQub+a63vIINhIeEI9mnSM= +github.com/influxdata/flux v0.53.0 h1:pQCXohOPM9gAA+ahh+Wdi1sxjuGTnPbN/6btpv9vIMY= +github.com/influxdata/flux v0.53.0/go.mod h1:ZFf4F0c8ACFP/5BkfCwk9I/vUwcByr0vMdLxwgOk57E= +github.com/influxdata/influxdb v1.7.7 h1:UvNzAPfBrKMENVbQ4mr4ccA9sW+W1Ihl0Yh1s0BiVAg= +github.com/influxdata/influxdb v1.7.7/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= +github.com/influxdata/influxdb1-client v0.0.0-20190809212627-fc22c7df067e h1:txQltCyjXAqVVSZDArPEhUTg35hKwVIuXwtQo7eAMNQ= +github.com/influxdata/influxdb1-client v0.0.0-20190809212627-fc22c7df067e/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/influxdata/influxql v1.0.1 h1:6PGG0SunRmptIMIreNRolhQ38Sq4qDfi2dS3BS1YD8Y= +github.com/influxdata/influxql v1.0.1/go.mod h1:KpVI7okXjK6PRi3Z5B+mtKZli+R1DnZgb3N+tzevNgo= +github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e h1:/o3vQtpWJhvnIbXley4/jwzzqNeigJK9z+LZcJZ9zfM= +github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= +github.com/influxdata/promql/v2 v2.12.0 h1:kXn3p0D7zPw16rOtfDR+wo6aaiH8tSMfhPwONTxrlEc= +github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= +github.com/influxdata/roaring v0.4.12 h1:3DzTjKHcXFs4P3D7xRLpCqVrfK6eFRQT0c8BG99M3Ms= +github.com/influxdata/roaring v0.4.12/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= +github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9 h1:MHTrDWmQpHq/hkq+7cw9oYAt2PqUw52TZazRA0N7PGE= +github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= +github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368 h1:+TUUmaFa4YD1Q+7bH9o5NCHQGPMqZCYJiNW6lIIS9z4= +github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= +github.com/jackc/chunkreader v1.0.0 h1:4s39bBR8ByfqH+DKm8rQA3E1LHZWB9XWcrz8fqaZbe0= +github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= +github.com/jackc/chunkreader/v2 v2.0.0 h1:DUwgMQuuPnS0rhMXenUtZpqZqrR/30NWY+qQvTpSvEs= +github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= +github.com/jackc/fake v0.0.0-20150926172116-812a484cc733 h1:vr3AYkKovP8uR8AvSGGUK1IDqRa5lAAvEkZG1LKaCRc= +github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ= +github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA= +github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE= +github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s= +github.com/jackc/pgconn v1.0.1 h1:ZANo4pIkeHKIVD1cQMcxu8fwrwIICLblzi9HCjooZeQ= +github.com/jackc/pgconn v1.0.1/go.mod h1:GgY/Lbj1VonNaVdNUHs9AwWom3yP2eymFQ1C8z9r/Lk= +github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= +github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= +github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2 h1:JVX6jT/XfzNqIjye4717ITLaNwV9mWbJx0dLCpcRzdA= +github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= +github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgproto3 v1.1.0 h1:FYYE4yRw+AgI8wXIinMlNjBbp/UitDJwfj5LqqewP1A= +github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78= +github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA= +github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg= +github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= +github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= +github.com/jackc/pgproto3/v2 v2.0.0 h1:FApgMJ/GtaXfI0s8Lvd0kaLaRwMOhs4VH92pwkwQQvU= +github.com/jackc/pgproto3/v2 v2.0.0/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= +github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= +github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= +github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59 h1:xOamcCJ9MFJTxR5bvw3ZXmiP8evQMohdt2VJ57C0W8Q= +github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= +github.com/jackc/pgx v3.2.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= +github.com/jackc/pgx v3.3.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= +github.com/jackc/pgx v3.5.0+incompatible h1:BRJ4G3UPtvml5R1ey0biqqGuYUGayMYekm3woO75orY= +github.com/jackc/pgx v3.5.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= +github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= +github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= +github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186 h1:ZQM8qLT/E/CGD6XX0E6q9FAwxJYmWpJufzmLMaFuzgQ= +github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= +github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9 h1:KLBBPU++1T3DHtm1B1QaIHy80Vhu0wNMErIFCNgAL8Y= +github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jaegertracing/jaeger v1.14.0 h1:C0En+gfcxf3NsAriMAvQ6LcSFrQ5VQGXddqfty1EpTI= +github.com/jaegertracing/jaeger v1.14.0/go.mod h1:LUWPSnzNPGRubM8pk0inANGitpiMOOxihXx0+53llXI= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1 h1:ujPKutqRlJtcfWk6toYVYagwra7HQHbXOaS171b4Tg8= +github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= +github.com/jessevdk/go-flags v0.0.0-20180331124232-1c38ed7ad0cc h1:0L2sGkaj6MWuV1BfXsrLJ/+XA8RzKKVsYlLVXNkK1Lw= +github.com/jessevdk/go-flags v0.0.0-20180331124232-1c38ed7ad0cc/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= +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-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmoiron/sqlx v0.0.0-20180614180643-0dae4fefe7c0/go.mod h1:IiEW3SEiiErVyFdH8NTuWjSifiEQKUoyK3LNqr2kCHU= +github.com/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA= +github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= +github.com/joho/godotenv v1.2.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= +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 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7 h1:K//n/AqR5HjG3qxbrBCL4vJPW0MVFSs9CPK1OOJdRME= +github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0= +github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024 h1:rBMNdlhTLzJjJSDIjNEXX1Pz3Hmwmz91v+zycvx9PJc= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jsternberg/zap-logfmt v1.2.0 h1:1v+PK4/B48cy8cfQbxL4FmmNZrjnIMr2BsnyEmXqv2o= +github.com/jsternberg/zap-logfmt v1.2.0/go.mod h1:kz+1CUmCutPWABnNkOu9hOHKdT2q3TDYCcsFy9hpqb0= +github.com/julienschmidt/httprouter v1.2.0 h1:TDTW5Yz1mjftljbcKqRcrYhd4XeOoI98t+9HbQbYf7g= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/jung-kurt/gofpdf v1.13.0 h1:OrLyhb9VU2dNdxzDu5lpMhX5/vpfm6RY5Jlr4iPQ6ME= +github.com/jung-kurt/gofpdf v1.13.0/go.mod h1:1hl7y57EsiPAkLbOwzpzqgx1A30nQCk/YmFV8S2vmK0= +github.com/justinas/alice v1.2.0 h1:+MHSA/vccVCF4Uq37S42jwlkvI2Xzl7zTPCN5BnZNVo= +github.com/justinas/alice v1.2.0/go.mod h1:fN5HRH/reO/zrUflLfTN43t3vXvKzvZIENsNEe7i7qA= +github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef h1:2jNeR4YUziVtswNP9sEFAI913cVrzH85T+8Q6LpYbT0= +github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= +github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= +github.com/karrick/godirwalk v1.7.7/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= +github.com/karrick/godirwalk v1.7.8/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= +github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= +github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= +github.com/karrick/godirwalk v1.10.12/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= +github.com/karrick/godirwalk v1.12.0 h1:nkS4xxsjiZMvVlazd0mFyiwD4BR9f3m6LXGhM2TUx3Y= +github.com/karrick/godirwalk v1.12.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= +github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e h1:RgQk53JHp/Cjunrr1WlsXSZpqXn+uREuHvUVcK82CV8= +github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0 h1:reN85Pxc5larApoH1keMBiu2GWtPqXQ1nc9gx+jOU+E= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kisielk/sqlstruct v0.0.0-20150923205031-648daed35d49 h1:o/c0aWEP/m6n61xlYW2QP4t9424qlJOsxugn5Zds2Rg= +github.com/kisielk/sqlstruct v0.0.0-20150923205031-648daed35d49/go.mod h1:yyMNCyc/Ib3bDTKd379tNMpB/7/H5TjM2Y9QJ5THLbE= +github.com/klauspost/compress v1.9.1 h1:TWy0o9J9c6LK9C8t7Msh6IAJNXbsU/nvKLTQUU5HdaY= +github.com/klauspost/compress v1.9.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/pgzip v1.2.1 h1:oIPZROsWuPHpOdMVWLuJZXwgjhrW8r1yEX8UqMyeNHM= +github.com/klauspost/pgzip v1.2.1/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/konsorten/go-windows-terminal-sequences v0.0.0-20180402223658-b729f2633dfe/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= +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.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.5 h1:hyz3dwM5QLc1Rfoz4FuWJQG5BN7tc6K1MndAUnGpQr4= +github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= +github.com/kr/pty v1.1.8 h1:AkaSdXYQOWeaO3neb8EM634ahkXXe3jYbVh/F9lq+GI= +github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kylelemons/godebug v0.0.0-20160406211939-eadb3ce320cb h1:iiMILPl9HQFqdFXIuwfYT73NYtH0KApnCmyF7y5wYhs= +github.com/kylelemons/godebug v0.0.0-20160406211939-eadb3ce320cb/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0= +github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743 h1:143Bb8f8DuGWck/xpNUOckBVYfFbBTnLevfRZ1aVVqo= +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= +github.com/lightstep/lightstep-tracer-go v0.17.1 h1:PgitbgUDool2AcHopDNTlvwq7BQeZssTGs4EVwcGhr8= +github.com/lightstep/lightstep-tracer-go v0.17.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/lyft/protoc-gen-star v0.4.11 h1:zW6fJQBtCtVeSiO/Kbpzv32GO0J/Z8egSLeohES202w= +github.com/lyft/protoc-gen-star v0.4.11/go.mod h1:mE8fbna26u7aEA2QCVvvfBU/ZrPgocG1206xAFPcs94= +github.com/lyft/protoc-gen-validate v0.0.13 h1:KNt/RhmQTOLr7Aj8PsJ7mTronaFyx80mRTT9qF261dA= +github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= +github.com/lyft/protoc-gen-validate v0.1.0 h1:NytKd9K7UW7Szxn+9PYNsaJ/98TL/WsDq4ro4ZVuh5o= +github.com/m3db/prometheus_client_golang v0.8.1 h1:t7w/tcFws81JL1j5sqmpqcOyQOpH4RDOmIe3A3fdN3w= +github.com/m3db/prometheus_client_golang v0.8.1/go.mod h1:8R/f1xYhXWq59KD/mbRqoBulXejss7vYtYzWmruNUwI= +github.com/m3db/prometheus_client_model v0.1.0 h1:cg1+DiuyT6x8h9voibtarkH1KT6CmsewBSaBhe8wzLo= +github.com/m3db/prometheus_client_model v0.1.0/go.mod h1:Qfsxn+LypxzF+lNhak7cF7k0zxK7uB/ynGYoj80zcD4= +github.com/m3db/prometheus_common v0.1.0 h1:YJu6eCIV6MQlcwND24cRG/aRkZDX1jvYbsNNs1ZYr0w= +github.com/m3db/prometheus_common v0.1.0/go.mod h1:EBmDQaMAy4B8i+qsg1wMXAelLNVbp49i/JOeVszQ/rs= +github.com/m3db/prometheus_procfs v0.8.1 h1:LsxWzVELhDU9sLsZTaFLCeAwCn7bC7qecZcK4zobs/g= +github.com/m3db/prometheus_procfs v0.8.1/go.mod h1:N8lv8fLh3U3koZx1Bnisj60GYUMDpWb09x1R+dmMOJo= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq0y3QnmWAArdw9PqbmotexnWx/FU8= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/markbates/deplist v1.0.4/go.mod h1:gRRbPbbuA8TmMiRvaOzUlRfzfjeCCBqX2A6arxN01MM= +github.com/markbates/deplist v1.0.5/go.mod h1:gRRbPbbuA8TmMiRvaOzUlRfzfjeCCBqX2A6arxN01MM= +github.com/markbates/deplist v1.1.3/go.mod h1:BF7ioVzAJYEtzQN/os4rt8H8Ti3h0T7EoN+7eyALktE= +github.com/markbates/deplist v1.2.0/go.mod h1:dtsWLZ5bWoazbM0rCxZncQaAPifWbvHgBJk8UNI1Yfk= +github.com/markbates/deplist v1.3.0 h1:uPgoloPraPBPYtNSxj2UwZBh2EHW9TmMvQCP2FBiRlU= +github.com/markbates/deplist v1.3.0/go.mod h1:dtsWLZ5bWoazbM0rCxZncQaAPifWbvHgBJk8UNI1Yfk= +github.com/markbates/going v1.0.2/go.mod h1:UWCk3zm0UKefHZ7l8BNqi26UyiEMniznk8naLdTcy6c= +github.com/markbates/going v1.0.3 h1:mY45T5TvW+Xz5A6jY7lf4+NLg9D8+iuStIHyR7M8qsE= +github.com/markbates/going v1.0.3/go.mod h1:fQiT6v6yQar9UD6bd/D4Z5Afbk9J6BBVBtLiyY4gp2o= +github.com/markbates/grift v1.0.4/go.mod h1:wbmtW74veyx+cgfwFhlnnMWqhoz55rnHR47oMXzsyVs= +github.com/markbates/grift v1.0.5/go.mod h1:EHmVIjOQoj/OOBDzlZ8RW0ZkvOtQ4xRHjrPvmfoiFaU= +github.com/markbates/grift v1.0.6/go.mod h1:2AUYA/+pODhwonRbYwsltPVPIztBzw5nIJEGiWgKMPM= +github.com/markbates/grift v1.1.0 h1:DsljFKUSK1ELpU22ZE+Gi93jiQI3cYD/RQ+vHM/PpY8= +github.com/markbates/grift v1.1.0/go.mod h1:8N7ybWEcnMOvtSb0kW+dLJpYii9eq/FP3Gtu/cNPDTY= +github.com/markbates/hmax v1.0.0/go.mod h1:cOkR9dktiESxIMu+65oc/r/bdY4bE8zZw3OLhLx0X2c= +github.com/markbates/hmax v1.1.0 h1:MswE0ks4Iv1UAQNlvAyFpsyFQSBHolckas95gRUkka4= +github.com/markbates/hmax v1.1.0/go.mod h1:hhn8pJiRwNTEmNlxhfiTbL+CtEYiAX3wuhSf/kg/6wI= +github.com/markbates/inflect v1.0.0/go.mod h1:oTeZL2KHA7CUX6X+fovmK9OvIOFuqu0TwdQrZjLTh88= +github.com/markbates/inflect v1.0.1/go.mod h1:uv3UVNBe5qBIfCm8O8Q+DW+S1EopeyINj+Ikhc7rnCk= +github.com/markbates/inflect v1.0.3/go.mod h1:1fR9+pO2KHEO9ZRtto13gDwwZaAKstQzferVeWqbgNs= +github.com/markbates/inflect v1.0.4 h1:5fh1gzTFhfae06u3hzHYO9xe3l3v3nW5Pwt3naLTP5g= +github.com/markbates/inflect v1.0.4/go.mod h1:1fR9+pO2KHEO9ZRtto13gDwwZaAKstQzferVeWqbgNs= +github.com/markbates/oncer v0.0.0-20180924031910-e862a676800b/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= +github.com/markbates/oncer v0.0.0-20180924034138-723ad0170a46/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= +github.com/markbates/oncer v0.0.0-20181014194634-05fccaae8fc4/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= +github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= +github.com/markbates/oncer v1.0.0 h1:E83IaVAHygyndzPimgUYJjbshhDTALZyXxvk9FOlQRY= +github.com/markbates/oncer v1.0.0/go.mod h1:Z59JA581E9GP6w96jai+TGqafHPW+cPfRxz2aSZ0mcI= +github.com/markbates/refresh v1.4.10/go.mod h1:NDPHvotuZmTmesXxr95C9bjlw1/0frJwtME2dzcVKhc= +github.com/markbates/refresh v1.4.11/go.mod h1:awpJuyo4zgexB/JaHfmBX0sRdvOjo2dXwIayWIz9i3g= +github.com/markbates/refresh v1.5.0/go.mod h1:ZYMLkxV+x7wXQ2Xd7bXAPyF0EXiEWAMfiy/4URYb1+M= +github.com/markbates/refresh v1.6.0/go.mod h1:p8jWGABFUaFf/cSw0pxbo0MQVujiz5NTQ0bmCHLC4ac= +github.com/markbates/refresh v1.7.1/go.mod h1:hcGVJc3m5EeskliwSVJxcTHzUtMz2h8gBtCS0V94CgE= +github.com/markbates/refresh v1.8.0 h1:ELMS9kKyO/H6cJrqFo6qCyE0cRx2JeHWC9yusDkVeM8= +github.com/markbates/refresh v1.8.0/go.mod h1:ppl0l94oz3OKBAx3MV65vCDWPo51JQnypdtFUmps1NM= +github.com/markbates/safe v1.0.0/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= +github.com/markbates/safe v1.0.1 h1:yjZkbvRM6IzKj9tlu/zMJLS0n/V351OZWRnF3QfaUxI= +github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= +github.com/markbates/sigtx v1.0.0 h1:y/xtkBvNPRjD4KeEplf4w9rJVSc23/xl+jXYGowTwy0= +github.com/markbates/sigtx v1.0.0/go.mod h1:QF1Hv6Ic6Ca6W+T+DL0Y/ypborFKyvUY9HmuCD4VeTc= +github.com/markbates/willie v1.0.9 h1:394PpHImWjScL9X2VRCDXJAcc77sHsSr3w3sOnL/DVc= +github.com/markbates/willie v1.0.9/go.mod h1:fsrFVWl91+gXpx/6dv715j7i11fYPfZ9ZGfH0DQzY7w= +github.com/marstr/collection v1.0.1 h1:j61osRfyny7zxBlLRtoCvOZ2VX7HEyybkZcsLNLJ0z0= +github.com/marstr/collection v1.0.1/go.mod h1:HHDXVxjLO3UYCBXJWY+J/ZrxCUOYqrO66ob1AzIsmYA= +github.com/marstr/goalias v0.0.0-20180416201319-8dff9a14db64 h1:boT2QecCbBI45GoZDMlEFzSMQQFR4Yq+9v5XHt+XE00= +github.com/marstr/goalias v0.0.0-20180416201319-8dff9a14db64/go.mod h1:sFzSHdiOc23IPzkHolbVUGlnVBrTLPvx3B0uZ2uHAVc= +github.com/marstr/guid v1.1.0 h1:/M4H/1G4avsieL6BbUwCOBzulmoeKVP5ux/3mQNnbyI= +github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= +github.com/marstr/randname v0.0.0-20181206212954-d5b0f288ab8c h1:JE+MDz5rhFN5EC9Dj/N8dLYKboTWm6FXeWhnyKVj0vA= +github.com/marstr/randname v0.0.0-20181206212954-d5b0f288ab8c/go.mod h1:Xc224oUXd7/sKMjWKl17cfkYOKQ1S+HSOW7YHEGXauI= +github.com/martini-contrib/render v0.0.0-20150707142108-ec18f8345a11 h1:YFh+sjyJTMQSYjKwM4dFKhJPJC/wfo98tPUc17HdoYw= +github.com/martini-contrib/render v0.0.0-20150707142108-ec18f8345a11/go.mod h1:Ah2dBMoxZEqk118as2T4u4fjfXarE0pPnMJaArZQZsI= +github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-isatty v0.0.3 h1:ns/ykhmWi7G9O+8a448SecJU3nSMBXJfqQkl0upE1jI= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-runewidth v0.0.3 h1:a+kO+98RDGEfo6asOGMmpodZq4FNtnGP54yps8BzLR4= +github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-sqlite3 v1.10.0 h1:jbhqpg7tQe4SupckyijYiy0mJJ/pRyHvXf7JdWK860o= +github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104 h1:d8RFOZ2IiFtFWBcKEHAFYJcPTf0wY5q0exFNJZVWa1U= +github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= +github.com/mattn/go-zglob v0.0.0-20171230104132-4959821b4817/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= +github.com/mattn/go-zglob v0.0.0-20180803001819-2ea3427bfa53 h1:tGfIHhDghvEnneeRhODvGYOt305TPwingKt6p90F4MU= +github.com/mattn/go-zglob v0.0.0-20180803001819-2ea3427bfa53/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= +github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= +github.com/microcosm-cc/bluemonday v1.0.2 h1:5lPfLTTAvAbtS0VqT+94yOtFnGfUWYyx0+iToC3Os3s= +github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.15 h1:CSSIDtllwGLMoA6zjdKnaE6Tx6eVUxQ29LUgGetiDCI= +github.com/miekg/dns v1.1.15/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mitchellh/cli v1.0.0 h1:iGBIsUe3+HZ/AD/Vd7DErOt5sU9fa8Uj7A2s1aggv1Y= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= +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 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4= +github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= +github.com/mitchellh/gox v0.4.0 h1:lfGJxY7ToLJQjHHwi0EX6uYBdK78egf954SQl13PQJc= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.0.0/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mjibson/appstats v0.0.0-20151004071057-0542d5f0e87e h1:Jpn5gwt6vuJ9gcWP7sZdFQ6zDRjOU2UJHYb+iK1IC8c= +github.com/mjibson/appstats v0.0.0-20151004071057-0542d5f0e87e/go.mod h1:9oJenpYx/HCuJuv/fdEVpSb8PZ2t3tBFBbu+i6jU3UU= +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-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/monoculum/formam v0.0.0-20180901015400-4e68be1d79ba/go.mod h1:RKgILGEJq24YyJ2ban8EO0RUVSJlF1pGsEvoLEACr/Q= +github.com/monoculum/formam v0.0.0-20190307031628-bc555adff0cd/go.mod h1:JKa2av1XVkGjhxdLS59nDoXa2JpmIHpnURWNbzCtXtc= +github.com/monoculum/formam v0.0.0-20190730134247-0612307a4099/go.mod h1:JKa2av1XVkGjhxdLS59nDoXa2JpmIHpnURWNbzCtXtc= +github.com/monoculum/formam v0.0.0-20190830100315-7ff9597b1407 h1:ZU5O9BawmEx9Mu1lxn9NLIwO9DrqRfjE+HWKU+e9GKQ= +github.com/monoculum/formam v0.0.0-20190830100315-7ff9597b1407/go.mod h1:JKa2av1XVkGjhxdLS59nDoXa2JpmIHpnURWNbzCtXtc= +github.com/montanaflynn/stats v0.5.0 h1:2EkzeTSqBB4V4bJwWrt5gIIrZmpJBcoIRGS2kWLgzmk= +github.com/montanaflynn/stats v0.5.0/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d h1:7PxY7LVfSZm7PEeBTyK1rj1gABdCO2mbri6GKO1cMDs= +github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +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 h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/nats-io/jwt v0.3.0 h1:xdnzwFETV++jNc4W1mw//qFyJGb2ABOombmZJQS4+Qo= +github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= +github.com/nats-io/nats.go v1.9.1 h1:ik3HbLhZ0YABLto7iX80pZLPw/6dx3T+++MZJwLnMrQ= +github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nkeys v0.1.0 h1:qMd4+pRHgdr1nAClu+2h/2a5F2TmKcCzjCDazVgRoX4= +github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d h1:AREM5mwr4u1ORQBMvzfzBgpsctsbQikCVpvC+tX285E= +github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= +github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86 h1:D6paGObi5Wud7xg83MaEFyjxQB1W5bz5d0IFppr+ymk= +github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= +github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab h1:eFXv9Nu1lGbrNbj619aWwZfVF5HBrm9Plte8aNptuTI= +github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= +github.com/nicksnyder/go-i18n v1.10.0 h1:5AzlPKvXBH4qBzmZ09Ua9Gipyruv6uApMcrNZdo96+Q= +github.com/nicksnyder/go-i18n v1.10.0/go.mod h1:HrK7VCrbOvQoUAQ7Vpy7i87N7JZZZ7R2xBGjv0j365Q= +github.com/oklog/oklog v0.3.2 h1:wVfs8F+in6nTBMkA7CbRw+zZMIB7nNM825cM1wuzoTk= +github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= +github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= +github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/oklog/ulid v0.0.0-20170117200651-66bb6560562f/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.1 h1:b3iUnf1v+ppJiOfNX4yxxqfWKMQPZR5yoh8urCTFX88= +github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olivere/elastic v6.2.26+incompatible h1:3PjUHKyt8xKwbFQpRC5cgtEY7Qz6ejopBkukhI7UWvE= +github.com/olivere/elastic v6.2.26+incompatible/go.mod h1:J+q1zQJTgAz9woqsbVRqGeB5G1iqDKVBWLNSYW8yfJ8= +github.com/olivere/env v1.1.0 h1:owp/uwMwhru5668JjMDp8UTG3JGT27GTCk4ufYQfaTw= +github.com/olivere/env v1.1.0/go.mod h1:zaoXy53SjZfxqZBGiGrZCkuVLYPdwrc+vArPuUVhJdQ= +github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w= +github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.9.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo= +github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v0.0.0-20190113212917-5533ce8a0da3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.6.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= +github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb0c1d1e h1:poxNKN8teT8QjLK6LwKN52cNQEPqHIOEsmPJv5ssZUU= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb0c1d1e/go.mod h1:zZf9V+57o0Fd3ik5HzaHamVsWhudJTOwnKw9kJvWoDo= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 h1:lM6RxxfUMrYL/f8bWEUqdXrANWtrL7Nndbm9iFN0DlU= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= +github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9 h1:QsgXACQhd9QJhEmRumbsMQQvBtmdS0mafoVEBplWXEg= +github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9/go.mod h1:PLldrQSroqzH70Xl+1DQcGnefIbqsKR7UDaiux3zV+w= +github.com/opentracing/basictracer-go v1.0.0 h1:YyUAhaEfjoWXclZVJ9sGoNct7j4TVk7lZWlQw5UXuoo= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= +github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.4 h1:bzTJRoOZEN7uI1gq594S5HhMYNSud4FKUEwd4aFbsEI= +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.4/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= +github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= +github.com/openzipkin/zipkin-go v0.2.1 h1:noL5/5Uf1HpVl3wNsfkZhIKbSWCVi5jgqkONNx8PXcA= +github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/orijtech/prometheus-go-metrics-exporter v0.0.3-0.20190313163149-b321c5297f60 h1:vN7d/Zv6aOXqhspiqoEMkb6uFHNARVESmYn5XtNeyrk= +github.com/orijtech/prometheus-go-metrics-exporter v0.0.3-0.20190313163149-b321c5297f60/go.mod h1:+Mu9w51Uc2RNKSUTA95d6Pvy8cxFiRX3ANRPlCcnGLA= +github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw= +github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/paulbellamy/ratecounter v0.2.0 h1:2L/RhJq+HA8gBQImDXtLPrDXK5qAj6ozWVK/zFXVJGs= +github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= +github.com/pborman/getopt v0.0.0-20190409184431-ee0cd42419d3 h1:YtFkrqsMEj7YqpIhRteVxJxCeC3jJBieuLr0d4C4rSA= +github.com/pborman/getopt v0.0.0-20190409184431-ee0cd42419d3/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= +github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-buffruneio v0.2.0 h1:U4t4R6YkofJ5xHm3dJzuRpPZ0mr5MMCoAWooScCR7aA= +github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= +github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/performancecopilot/speed v3.0.0+incompatible h1:2WnRzIquHa5QxaJKShDkLM+sc0JPuwhXzK8OYOyt3Vg= +github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/peterh/liner v1.1.0 h1:f+aAedNJA6uk7+6rXsYBnhdo4Xux7ESLe+kcuVUF5os= +github.com/peterh/liner v1.1.0/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= +github.com/philhofer/fwd v1.0.0 h1:UbZqGr5Y38ApvM/V/jEljVxwocdweyH+vmYvRPBnbqQ= +github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +github.com/phpdave11/gofpdi v1.0.7 h1:k2oy4yhkQopCK+qW8KjCla0iU2RpDow+QUDmH9DDt44= +github.com/phpdave11/gofpdi v1.0.7/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= +github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= +github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I= +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 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/profile v1.2.1 h1:F++O52m40owAmADcojzM+9gyjmMOY/T4oYJkgFDH8RE= +github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pkg/sftp v1.10.1 h1:VasscCm72135zRysgrJDKsntdmPN+OuU3+nnHYA9wyc= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5 h1:tFwafIEMf0B7NlcxV/zJ6leBIa81D3hgGSgsE5hCkOQ= +github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= +github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +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 h1:ccV59UEOTzVDnDUEFdT95ZzHVZ+5+158q8+SJb2QV5w= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/prashantv/protectmem v0.0.0-20171002184600-e20412882b3a h1:AA9vgIBDjMHPC2McaGPojgV2dcI78ZC0TLNhYCXEKH8= +github.com/prashantv/protectmem v0.0.0-20171002184600-e20412882b3a/go.mod h1:lzZQ3Noex5pfAy7mkAeCjcBDteYU85uWWnJ/y6gKU8k= +github.com/pressly/chi v4.0.2+incompatible h1:IQCvpYSGI/zsVuwr8+Q2R/13k9EHaFi05M3g8thnyqs= +github.com/pressly/chi v4.0.2+incompatible/go.mod h1:s/kslmeFE633XtTPvfX2olbs4ymzIHxGGXmEJ/AvPT8= +github.com/prometheus/alertmanager v0.18.0 h1:sPppYFge7kdf9O96KIh3fd093D1xN8JxIp03wW6yAEE= +github.com/prometheus/alertmanager v0.18.0/go.mod h1:WcxHBl40VSPuOaqWae6l6HpnEOVRIycEJ7i9iYkadEE= +github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.1.0 h1:BQ53HtBmfOitExawJ6LokA4x8ov/z0SYYb0+HxJfRI8= +github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= +github.com/prometheus/common v0.7.0 h1:L+1lyG48J1zAQXA3RBX/nG/B3gjlHq0zTt2tlbJLyCY= +github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= +github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +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-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.3 h1:CTwfnzjQ+8dS6MhHHu4YswVAD99sL2wjPqP+VkURmKE= +github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= +github.com/prometheus/prometheus v0.0.0-20180315085919-58e2a31db8de/go.mod h1:oAIUtOny2rjMX0OWN5vPR5/q/twIROJvdqnQKDdil/s= +github.com/prometheus/prometheus v1.8.2-0.20190924101040-52e0504f83ea h1:DkijwrDmxCei6erPY2JZPJMOr8srbkbOJVkWbhSYWH4= +github.com/prometheus/prometheus v1.8.2-0.20190924101040-52e0504f83ea/go.mod h1:elNqjVbwD3sCZJqKzyN7uEuwGcCpeJvv67D6BrHsDbw= +github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a h1:9ZKAASQSHhDYGoxY8uLVpewe1GDZ2vu2Tr/vTdVAkFQ= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237 h1:HQagqIiBmr8YXawX/le3+O26N+vPPC1PtjaF3mwnook= +github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/retailnext/hllpp v1.0.0 h1:7+NffI2mo7lZG78NruEsf3jEnjJ6Z0n1otEyFqdK8zA= +github.com/retailnext/hllpp v1.0.0/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af h1:gu+uRPtBe88sKxUCEXRoeCvVG90TJmwhiqRpvdhQFng= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/go-charset v0.0.0-20190617161244-0dc95cdf6f31 h1:DE4LcMKyqAVa6a0CGmVxANbnVb7stzMmPkQiieyNmfQ= +github.com/rogpeppe/go-charset v0.0.0-20190617161244-0dc95cdf6f31/go.mod h1:qgYeAmZ5ZIpBWTGllZSQnw97Dj+woV0toclVaRGI8pc= +github.com/rogpeppe/go-internal v1.0.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.3.0 h1:RR9dF3JtopPvtkroDZuVD7qquD0bnHlKSqaQhgwt8yk= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.3.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.4.0 h1:LUa41nrWTQNGhzdsZ5lTnkwbNjj6rXTdazA1cSdjkOY= +github.com/rogpeppe/go-internal v1.4.0/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rs/cors v1.6.0 h1:G9tHG9lebljV9mfp9SNPDL36nCDxmo3zTlAf1YgvzmI= +github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc= +github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= +github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= +github.com/rs/zerolog v1.15.0 h1:uPRuwkWF4J6fGsJ2R0Gn2jB1EQiav9k3S6CSdygQJXY= +github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= +github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday v1.5.3-0.20190124082335-a477dd164691 h1:auJkuUc4uOuZNoH9jGLvqVaDLiuCOh/LY+Qw5NBFo4I= +github.com/russross/blackfriday v1.5.3-0.20190124082335-a477dd164691/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58 h1:nlG4Wa5+minh3S9LVFtNoY+GVRiudA2e3EVfcCi3RCA= +github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= +github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd h1:CmH9+J6ZSsIjUK3dcGsnCnO41eRBOnY12zwkn5qVwgc= +github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/ryanuber/columnize v2.1.0+incompatible h1:j1Wcmh8OrK4Q7GXY+V7SVSY8nUWQxHW5TkBe7YUl+2s= +github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/samuel/go-thrift v0.0.0-20190219015601-e8b6b52668fe h1:gD4vkYmuoWVgdV6UwI3tPo9MtMfVoIRY+Xn9919SJBg= +github.com/samuel/go-thrift v0.0.0-20190219015601-e8b6b52668fe/go.mod h1:Vrkh1pnjV9Bl8c3P9zH0/D4NlOHWP5d4/hF4YTULaec= +github.com/samuel/go-zookeeper v0.0.0-20190810000440-0ceca61e4d75 h1:cA+Ubq9qEVIQhIWvP2kNuSZ2CmnfBJFSRq+kO1pu2cc= +github.com/samuel/go-zookeeper v0.0.0-20190810000440-0ceca61e4d75/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/satori/go.uuid v0.0.0-20160603004225-b111a074d5ef h1:RoeI7K0oZIcUirMHsFpQjTVDrl1ouNh8T7v3eNsUxL0= +github.com/satori/go.uuid v0.0.0-20160603004225-b111a074d5ef/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/segmentio/kafka-go v0.1.0 h1:IXCHG+sXPNiIR5pC/vTEItZduPKu4cnpr85YgxpxlW0= +github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= +github.com/serenize/snaker v0.0.0-20171204205717-a683aaf2d516 h1:ofR1ZdrNSkiWcMsRrubK9tb2/SlZVWttAfqUjJi6QYc= +github.com/serenize/snaker v0.0.0-20171204205717-a683aaf2d516/go.mod h1:Yow6lPLSAXx2ifx470yD/nUe22Dv5vBvxK/UK9UUTVs= +github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= +github.com/shopspring/decimal v0.0.0-20191009025716-f1972eb1d1f5 h1:Gojs/hac/DoYEM7WEICT45+hNWczIeuL5D21e5/HPAw= +github.com/shopspring/decimal v0.0.0-20191009025716-f1972eb1d1f5/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= +github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4 h1:Fth6mevc5rX7glNLpbAMJnqKlfIkcTjZCSHEeqvKbcI= +github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= +github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48 h1:vabduItPAIz9px5iryD5peyx7O3Ya8TBThapgXim98o= +github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= +github.com/shurcooL/frontend v0.0.0-20180531171852-7e359e4b7b17 h1:IXoSIR8kdcag4uLYYWHu7meIZOE6Z1fF0njklq5EKiE= +github.com/shurcooL/frontend v0.0.0-20180531171852-7e359e4b7b17/go.mod h1:ALtiPMc4jQz4RRgcPDF3/+NYQrVW2jjP9W1hPxSoK7c= +github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470 h1:qb9IthCFBmROJ6YBS31BEMeSYjOscSiG+EO+JVNTz64= +github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= +github.com/shurcooL/githubv4 v0.0.0-20191102174205-af46314aec7b h1:Cocq9/ZZxCoiybhygOR7hX4E3/PkV8eNbd1AEcUvaHM= +github.com/shurcooL/githubv4 v0.0.0-20191102174205-af46314aec7b/go.mod h1:hAF0iLZy4td2EX+/8Tw+4nodhlMrwN3HupfaXj3zkGo= +github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e h1:MZM7FHLqUHYI0Y/mQAt3d2aYa0SiNms/hFqC9qJYolM= +github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041 h1:llrF3Fs4018ePo4+G/HV/uQUqEI1HMDjCeOf2V6puPc= +github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= +github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d h1:Yoy/IzG4lULT6qZg62sVC+qyBL8DQkmD2zv6i7OImrc= +github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d/go.mod h1:05UtEgK5zq39gLST6uB0cf3NEHjETfB4Fgr3Gx5R9Vw= +github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c h1:UOk+nlt1BJtTcH15CT7iNO7YVWTfTv/DNwEAQHLIaDQ= +github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c/go.mod h1:8d3azKNyqcHP1GaQE/c6dDgjkgSx2BZ4IoEi4F1reUI= +github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f h1:tygelZueB1EtXkPI6mQ4o9DQ0+FKW41hTbunoXZCTqk= +github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f/go.mod h1:AuYgA5Kyo4c7HfUmvRGs/6rGlMMV/6B1bVnB9JxJEEg= +github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b h1:vYEG87HxbU6dXj5npkeulCS96Dtz5xg3jcfCgpcvbIw= +github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b/go.mod h1:ZpfEhSmds4ytuByIcDnOLkTHGUI6KNqRNPDLHDk+mUU= +github.com/shurcooL/highlight_go v0.0.0-20170515013102-78fb10f4a5f8/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= +github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20 h1:7pDq9pAMCQgRohFmd25X8hIH8VxmT3TaDm+r9LHxgBk= +github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= +github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9 h1:MPblCbqA5+z6XARjScMfz1TqtJC7TuTRj0U9VqIBs6k= +github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9/go.mod h1:+rgNQw2P9ARFAs37qieuu7ohDNQ3gds9msbT2yn85sg= +github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50 h1:crYRwvwjdVh1biHzzciFHe8DrZcYrVcZFlJtykhRctg= +github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50/go.mod h1:zPn1wHpTIePGnXSHpsVPWEktKXHr6+SS6x/IKRb7cpw= +github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc h1:eHRtZoIi6n9Wo1uR+RU44C247msLWwyA89hVKwRLkMk= +github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc/go.mod h1:aYMfkZ6DWSJPJ6c4Wwz3QtW22G7mf/PEgaB9k/ik5+Y= +github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= +github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 h1:bUGsEnyNbVPw06Bs80sCeARAlK8lhwqGyi6UT8ymuGk= +github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= +github.com/shurcooL/httpgzip v0.0.0-20180522190206-b1c53ac65af9/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= +github.com/shurcooL/httpgzip v0.0.0-20190720172056-320755c1c1b0 h1:mj/nMDAwTBiaCqMEs4cYCqF7pO6Np7vhy1D1wcQGz+E= +github.com/shurcooL/httpgzip v0.0.0-20190720172056-320755c1c1b0/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= +github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191 h1:T4wuULTrzCKMFlg3HmKHgXAF8oStFb/+lOIupLV2v+o= +github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191/go.mod h1:e2qWDig5bLteJ4fwvDAc2NHzqFEthkqn7aOZAOpj+PQ= +github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241 h1:Y+TeIabU8sJD10Qwd/zMty2/LEaT9GNDaA6nyZf+jgo= +github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241/go.mod h1:NPpHK2TI7iSaM0buivtFUc9offApnI0Alt/K8hcHy0I= +github.com/shurcooL/markdownfmt v0.0.0-20190409060426-3438a10682f5 h1:1X30SFo6Em9oCyrReNh9//zC7uE6IDoc+XgVy/iFdlE= +github.com/shurcooL/markdownfmt v0.0.0-20190409060426-3438a10682f5/go.mod h1:wwC6+1FOCAA/hK8+pmBir20vneHxr8Nh0OGQNkyo2a8= +github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122 h1:TQVQrsyNaimGwF7bIhzoVC9QkKm4KsWd8cECGzFx8gI= +github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b5uSkrEVM1jQUspwbixRBhaIjIzL2xazXp6kntxYle0= +github.com/shurcooL/notificationsapp v0.0.0-20181114034014-0a6e54cc4198 h1:7QgoOp3Mt75G/Us+x63zoMpes773uWLpzYaVOJ+nUNs= +github.com/shurcooL/notificationsapp v0.0.0-20181114034014-0a6e54cc4198/go.mod h1:hk3wHCCz8slz+eGBb4+DQIy5nVnPH72adj2s9lMFfQo= +github.com/shurcooL/octicon v0.0.0-20180602230221-c42b0e3b24d9/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= +github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2 h1:bu666BQci+y4S0tVRVjsHUeRon6vUXmsGBwdowgMrg4= +github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= +github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82 h1:LneqU9PHDsg/AkPDU3AkqMxnMYL+imaqkpflHu73us8= +github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk= +github.com/shurcooL/resume v0.0.0-20190824223711-dc47c8f77a80 h1:vPvEqkxGS5EIFJKIc+F/FSPacFcyoGmD0DTv+/uJNfs= +github.com/shurcooL/resume v0.0.0-20190824223711-dc47c8f77a80/go.mod h1:PE5QMqQGr8EdiigTVrcorvUhBeSgd/PsCBWoq9L6foM= +github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537 h1:YGaxtkYjb8mnTvtufv2LKLwCQu2/C7qFB7UtrOlTWOY= +github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= +github.com/shurcooL/vfsgen v0.0.0-20180825020608-02ddb050ef6b/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= +github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd h1:ug7PpSOB5RBPK1Kg6qskGBoP3Vnj/aNYFTznWvlkGo0= +github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= +github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133 h1:JtcyT0rk/9PKOdnKQzuDR+FSjh7SGtJwpgVpfZBRKlQ= +github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= +github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= +github.com/sirupsen/logrus v1.1.0/go.mod h1:zrgwTnHtNr00buQ1vSptGe8m1f/BbgsPukg8qsT7A+A= +github.com/sirupsen/logrus v1.1.1/go.mod h1:zrgwTnHtNr00buQ1vSptGe8m1f/BbgsPukg8qsT7A+A= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9 h1:hp2CYQUINdZMHdvTdXtPOY2ainKl4IoMcpAXEf2xj3Q= +github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= +github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sony/gobreaker v0.4.1 h1:oMnRNZXX5j85zso6xCPRNPtmAycat+WcoKbklScLDgQ= +github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d h1:yKm7XZV6j9Ev6lojP2XaIshpT4ymkqhMeSghO5Ps00E= +github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= +github.com/sourcegraph/go-diff v0.5.1 h1:gO6i5zugwzo1RVTvgvfwCOSVegNuvnNi6bAD1QCmkHs= +github.com/sourcegraph/go-diff v0.5.1/go.mod h1:j2dHj3m8aZgQO8lMTcTnBcXkRRRqi34cd2MNlA9u1mE= +github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e h1:qpG93cPwA5f7s/ZPBJnGOYQNK/vKsaDaseuKT5Asee8= +github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.2.0/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/afero v1.2.1/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= +github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.4/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +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/spf13/viper v1.2.1/go.mod h1:P4AexN0a+C9tGAnUFNwDMYYZv3pjFuvmeiMyKRaNVlI= +github.com/spf13/viper v1.3.0/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.3.1/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/spf13/viper v1.4.1-0.20190911140308-99520c81d86e h1:D4jmJ9BqzeMv7BvAqjooNtXH2PXG7m+pcYRnj2Ojlrk= +github.com/spf13/viper v1.4.1-0.20190911140308-99520c81d86e/go.mod h1:jUyf+v/KTOnRyUy2/AsjF537WfJWVv3AnlcKSNd+AIg= +github.com/src-d/gcfg v1.4.0 h1:xXbNR5AlLSA315x2UO+fTSSAXCDf+Ar38/6oyGbDKQ4= +github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= +github.com/stathat/go v1.0.0 h1:HFIS5YkyaI6tXu7JXIRRZBLRvYstdNZm034zcCeaybI= +github.com/stathat/go v1.0.0/go.mod h1:+9Eg2szqkcOGWv6gfheJmBBsmq9Qf5KDbzy8/aYYR0c= +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94 h1:0ngsPmuP6XIjiFRNFYlvKwSr5zff2v+uPHaffZ6/M4k= +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a h1:AhmOdSHeswKHBjhsLs/7+1voOxT+LLrSk/Nxvk35fug= +github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +github.com/streadway/quantile v0.0.0-20150917103942-b0c588724d25 h1:7z3LSn867ex6VSaahyKadf4WtSsJIgne6A1WLOAGM8A= +github.com/streadway/quantile v0.0.0-20150917103942-b0c588724d25/go.mod h1:lbP8tGiBjZ5YWIc2fzuRpTaz0b/53vT6PEs3QuAWzuU= +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.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +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 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= +github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= +github.com/tambet/go-asana v0.0.0-20161015030314-6c0cb7090a14 h1:mv5oIIbRcPh6r80jbRM+9zYs4erKCx4700JaYqNBxKM= +github.com/tambet/go-asana v0.0.0-20161015030314-6c0cb7090a14/go.mod h1:erM8VNXdx5GeFvs939dYq4nfzij6d2Lzdc8COCDYZ6w= +github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07 h1:UyzmZLoiDWMRywV4DUYb9Fbt8uiOSooupjTq10vpvnU= +github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= +github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= +github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tinylib/msgp v1.1.0 h1:9fQd+ICuRIu/ue4vxJZu6/LzxN0HwMds2nq/0cFvxHU= +github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= +github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2 h1:eGaGNxrtoZf/mBURsnNQKDR7u50Klgcf2eFDQEnc8Bc= +github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eNAjXGDx2yma7uG2XoyRZTq1uv3M/o7imD0= +github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b h1:m74UWYy+HBs+jMFR9mdZU6shPewugMyH5+GV6LNgW8w= +github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b/go.mod h1:/yhzCV0xPfx6jb1bBgRFjl5lytqVqZXEaeqWP8lTEao= +github.com/tj/go-spin v1.1.0 h1:lhdWZsvImxvZ3q1C5OIB7d72DuOwP4O2NdBg9PyzNds= +github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31 h1:OXcKh35JaYsGMRzpvFkLv/MEyPuL49CThT1pZ8aSml4= +github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926 h1:G3dpKMzFDjgEh2q1Z7zUUtKa8ViPtH+ocF0bE0g00O8= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/uber-go/atomic v1.4.0 h1:yOuPqEq4ovnhEjpHmfFwsqBXDYbQeT6Nb0bwD6XnD5o= +github.com/uber-go/atomic v1.4.0/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g= +github.com/uber-go/tally v3.3.12+incompatible h1:Qa0XrHsKXclmhEpHmBHTTEZotwvQHAbm3lvtJ6RNn+0= +github.com/uber-go/tally v3.3.12+incompatible/go.mod h1:YDTIBxdXyOU/sCWilKB4bgyufu1cEi0jdVnRdxvjnmU= +github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-client-go v2.16.0+incompatible h1:Q2Pp6v3QYiocMxomCaJuwQGFt7E53bPYqEgug/AoBtY= +github.com/uber/jaeger-client-go v2.16.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v2.0.0+incompatible h1:iMSCV0rmXEogjNWPh2D0xk9YVKvrtGoHJNe9ebLu/pw= +github.com/uber/jaeger-lib v2.0.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/uber/tchannel-go v1.10.0 h1:YOihLHuvkwT3nzvpgqFtexFW+pb5vD1Tz7h/bIWApgE= +github.com/uber/tchannel-go v1.10.0/go.mod h1:Rrgz1eL8kMjW/nEzZos0t+Heq0O4LhnUJVA32OvWKHo= +github.com/ugorji/go v1.1.4 h1:j4s+tAvLfL3bZyefP2SEWmhBzmuIlH/eqNuPdFPgngw= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8 h1:3SVOIvH7Ae1KRYyQWRjXWJEA9sS/c/pjvH++55Gr648= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/unknwon/cae v1.0.0 h1:i39lOFaBXZxhGjQOy/RNbi8uzettCs6OQxpR0xXohGU= +github.com/unknwon/cae v1.0.0/go.mod h1:QaSeRctcea9fK6piJpAMCCPKxzJ01+xFcr2k1m3WRPU= +github.com/unrolled/secure v0.0.0-20180918153822-f340ee86eb8b/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= +github.com/unrolled/secure v0.0.0-20181005190816-ff9db2ff917f/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= +github.com/unrolled/secure v0.0.0-20181022170031-4b6b7cf51606/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= +github.com/unrolled/secure v0.0.0-20190103195806-76e6d4e9b90c h1:ZY4dowVsuIAQtXXwKJ9ezfonDQ2YT7pcXRpPF2iAy3Y= +github.com/unrolled/secure v0.0.0-20190103195806-76e6d4e9b90c/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= +github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/negroni v1.0.0 h1:kIimOitoypq34K7TG7DUaJ9kq/N4Ofuwi1sjz0KipXc= +github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= +github.com/xanzy/ssh-agent v0.2.0 h1:Adglfbi5p9Z0BmK2oKU9nTG+zKfniSfnaMYB+ULd+Ro= +github.com/xanzy/ssh-agent v0.2.0/go.mod h1:0NyE30eGUDliuLEHJgYte/zncp2zdTStcOnWhgSqHD8= +github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c h1:u40Z8hqBAAQyv+vATcGgV0YCnDjqSL7/q/JyPhhJSPk= +github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= +github.com/xdg/stringprep v1.0.0 h1:d9X0esnoa3dFsV0FG35rAT0RIhYFlPq7MiP+DW89La0= +github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6 h1:YdYsPAZ2pC6Tow/nPZOPQ96O3hm/ToAkGsPLzedXERk= +github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77 h1:ESFSdwYZvkeru3RtdrYueztKhOBCSAAzS4Gf+k0tEow= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/zenazn/goji v0.9.0 h1:RSQQAbXGArQ0dIDEq+PI6WqN6if+5KHu6x2Cx/GXLTQ= +github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= +go.etcd.io/bbolt v1.3.2 h1:Z/90sZLPOeCy2PwprqkFa25PdkusRzaj9P8zm/KNyvk= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/etcd v3.3.17+incompatible h1:g8iRku1SID8QAW8cDlV0L/PkZlw63LSiYEHYHoE6j/s= +go.etcd.io/etcd v3.3.17+incompatible/go.mod h1:yaeTdrJi5lOmYerz05bd8+V7KubZs8YSFZfzsF9A6aI= +go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.0.4 h1:bHxbjH6iwh1uInchXadI6hQR107KEbgYsMzoblDONmQ= +go.mongodb.org/mongo-driver v1.0.4/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +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.1 h1:8dP3SGL7MPB94crU3bEPplMPe83FI4EouesJUeFHv50= +go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/automaxprocs v1.2.0 h1:+RUihKM+nmYUoB9w0D0Ov5TJ2PpFO2FgenTxMJiZBZA= +go.uber.org/automaxprocs v1.2.0/go.mod h1:YfO3fm683kQpzETxlTGZhGIVmXAhaw3gxeBADbpZtnU= +go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go4.org v0.0.0-20180809161055-417644f6feb5 h1:+hE86LblG4AyDgwMCLTE6FOlM9+qjHSYS+rKqxUVdsM= +go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= +golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d h1:E2M5QgjZ/Jg+ObCQAudsXxuTsLj7Nl5RV/lZcQZmKSo= +golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180910181607-0e37d006457b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181015023909-0c41d7ab0a0e/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181024171144-74cb1d3d52f4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181025113841-85e1b3f9139a/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181025213731-e84da0312774/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181106171534-e4dc69e5b2fd/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181112202954-3d3f9f413869/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181127143415-eb0de9b17e85/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190102171810-8d7daa0c54b3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190103213133-ff983b9c42bc/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190122013713-64072686203f/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190130090550-b01c7a725664/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/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-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190403202508-8e1b8d32e692/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190404164418-38d8ce5564a5/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +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-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 h1:HuIa8hRrWRSrqYzx1qI49NNxhdi2PrY7gxVSq1JjLDc= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522 h1:OeRHuibLsmZkFj773W4LcfAGsSxJgfPONhr8cmO+eLA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067 h1:KYGJGHOQy8oSi1fDlSpcZF0+juKwk/hEMv5SiwHogR0= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a h1:gHevYm0pO4QUbwy8Dmdr01R5r1BuKtfYqRqF0h/Cbh0= +golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +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 h1:QzoH/1pFpZguR8NrRHLcO6jKqfv2zpuSqZLgdm7ZmjI= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6 h1:Tus/Y4w3V77xDsGwKUC8a/QrV7jScpU557J77lFffNs= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e h1:JgcxKXxCjrA2tyDP/aNU9K0Ck5Czfk6C7e2tMw7+bSI= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180816102801-aaf60122140d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180921000356-2f5d2388922f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180926154720-4dfa2610cdf3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181017193950-04a2e542c03f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181102091132-c10e9556a7bc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181108082009-03003ca0c849/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-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181207154023-610586996380/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181213202711-891ebc4b82d6/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190119204137-ed066c81e75e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190206173232-65e2d4e15006/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-20190320064053-1272bf9dcd53/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-20190514140710-3ec191127204/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +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 h1:Ao/3l156eZf2AW5wK8a7/smtodRU+gha3+BeqJ69lRk= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 h1:fHDIZ2oxGnUZRN6WgWFCbYBjH9uqVPRCUVUDhs0wnbA= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/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-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852 h1:xYq6+9AtI+xP3M4r0N1hCkHrInHDBohhquRgx9Kk6gI= +golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= +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-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180816055513-1c9583448a9c/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +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-20180903190138-2b024373dcd9/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-20180906133057-8cf3aee42992/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180921163948-d47a0f339242/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180927150500-dad3d9fb7b6e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181005133103-4497e2df6f9e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181011152604-fa43e7bc11ba/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181019084534-8f1d3d21f81b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181022134430-8a28ead16f52/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181024145615-5cd93ef61a7c/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181025063200-d989b31c8746/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026064943-731415f00dce/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181030150119-7e31e0c00fa0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181106135930-3a76605856fd/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181128092732-4ed8d59d0b35/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181206074257-70b957f3b65e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181213150753-586ba8c9bb14/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181213200352-4d1cda033e06/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190102155601-82a175fd1598/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190116161447-11f53e031339/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190122071731-054c452bb702/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-20190209173611-3b5209105503/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-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190220154126-629670e5acc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/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-20190321052220-f7bb7a8bee54/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-20190419153524-e8e3143a4f4a/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-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be h1:QAcqgptGM8IQBC9K/RC4o+O9YmqEm0diQn9QmZw/0mU= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/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.20180805044716-cb6730876b98/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 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/time v0.0.0-20161028155119-f51c12702a4d/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181003024731-2f84ea8ef872/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181006002542-f60d9635b16a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181008205924-a2b3f7f249e9/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181013182035-5e66757b835f/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181017214349-06f26fdaaa28/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181019005945-6adeb8aab2de/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181024171208-a2dc47679d30/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181026183834-f60e5f99f081/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030151751-bb28844c46df/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181102223251-96e9e165b75e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181105230042-78dc5bac0cac/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181107215632-34b416bd17b3/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181109152631-138c20b93253/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181109202920-92d8274bd7b8/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181111003725-6d71ab8aade0/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181114190951-94339b83286c/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181119130350-139d099f6620/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181120060634-fc4f04983f62/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181122213734-04b5d21e00f1/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181127195227-b4e97c0ed882/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181127232545-e782529d0ddd/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181201035826-d0ca3933b724/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181203210056-e5f3ab76ea4b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181205224935-3576414c54a4/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181206194817-bcd4e47d0288/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181207183836-8bc39b988060/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181212172921-837e80568c09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181213190329-bbccd8cae4a9/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190102213336-ca9055ed7d04/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190104182027-498d95493402/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190111214448-fc1d57b08d7b/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-20190118193359-16909d206f00/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190122202912-9c309ee22fab/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190124004107-78ee07aa9465/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190131142011-8dbcc66f33bb/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206221403-44bcb96178d3/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190214204934-8dcb7bc8c7fe/go.mod h1:E6PF97AdD6v0s+fPshSmumCW1S1Ne85RbPQxELkKa44= +golang.org/x/tools v0.0.0-20190219135230-f000d56b39dc/go.mod h1:E6PF97AdD6v0s+fPshSmumCW1S1Ne85RbPQxELkKa44= +golang.org/x/tools v0.0.0-20190219185102-9394956cfdc5/go.mod h1:E6PF97AdD6v0s+fPshSmumCW1S1Ne85RbPQxELkKa44= +golang.org/x/tools v0.0.0-20190221204921-83362c3779f5/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +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-20190315044204-8b67d361bba2/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190318200714-bb1270c20edf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190404132500-923d25813098/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190407030857-0fdf0c73855b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/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-20190603152906-08e0b306e832/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190603231351-8aaa1484dc10/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190613204242-ed0dc450797f/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190617190820-da514acc4774/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-20190624180213-70d37148ca0c/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-20190809145639-6d4652c779c4/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190813034749-528a2984e271/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190825031127-d72b05d2b1b6/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190905035308-adb45749da8e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190906203814-12febf440ab1 h1:w4Q0TX3lC1NfGcWkzt5wG4ee4E5fUAPqh5myV0efeHI= +golang.org/x/tools v0.0.0-20190906203814-12febf440ab1/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191004055002-72853e10c5a3/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191015150414-f936694f27bf/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191030062658-86caa796c7ab h1:tpc/nJ4vD66vAk/2KN0sw/DvQIz2sKmCpWvyKtPmfMQ= +golang.org/x/tools v0.0.0-20191030062658-86caa796c7ab/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca h1:PupagGYwj8+I4ubCxcmcBRk3VlUWtTg5huQpZR9flmE= +gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6 h1:4WsZyVtkthqrHTbDCJfiTs8IWNYE4uvsSDgaV6xpp+o= +gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= +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.10.0 h1:7tmAxx3oKE98VMZ+SBZzvYYWRQ9HODBxmC8mXUsraSQ= +google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +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.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= +google.golang.org/genproto v0.0.0-20190201180003-4b09977fb922/go.mod h1:L3J43x8/uS+qIUoksaLKe6OS3nUKxOKuIFz1sl2/jx4= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/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-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64 h1:iKtrH9Y8mcbADOP0YFaEMth7OfuHY9xHOwNj4znpM1A= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +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.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.0 h1:AzbTB6ux+okLTzP8Ru1Xs41C303zdcfEht7MQnYJt5A= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.24.0 h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s= +gopkg.in/airbrake/gobrake.v2 v2.0.9 h1:7z2uVWwn7oVeeugY1DtlPAy5H+KYgB1KeKTnqjNatLo= +gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= +gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= +gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= +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 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/cheggaaa/pb.v1 v1.0.28 h1:n1tBJnnK2r7g9OW2btFH91V92STTUevLXYFb8gy9EMk= +gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/fsnotify/fsnotify.v1 v1.4.7 h1:XNNYLJHt73EyYiCZi6+xjupS9CpvmiDgjPTAjrBlQbo= +gopkg.in/fsnotify/fsnotify.v1 v1.4.7/go.mod h1:Fyux9zXlo4rWoMSIzpn9fDAYjalPqJ/K1qJ27s+7ltE= +gopkg.in/gcfg.v1 v1.2.3 h1:m8OOJ4ccYHnx2f4gQwpno8nAX5OGOh7RLaaz0pj3Ogs= +gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2 h1:OAj3g0cR6Dx/R07QgQe8wkA9RNjB2u4i700xBkIT4e0= +gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= +gopkg.in/go-playground/assert.v1 v1.2.1 h1:xoYuJVE7KT85PYWrN730RguIQO0ePzVRfFMXadIrXTM= +gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= +gopkg.in/go-playground/validator.v8 v8.18.2 h1:lFB4DoMU6B626w8ny76MV7VX6W2VHct2GVOI3xgiMrQ= +gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= +gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE= +gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw= +gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec h1:RlWgLqCMMIYYEVcAR5MDsuHlVkaIPDAF+5Dehzg8L5A= +gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= +gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/mail.v2 v2.0.0-20180731213649-a0242b2233b4 h1:a3llQg4+Czqaf+QH4diHuHiKv4j1abMwuRXwaRNHTPU= +gopkg.in/mail.v2 v2.0.0-20180731213649-a0242b2233b4/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw= +gopkg.in/pipe.v2 v2.0.0-20140414041502-3c2ca4d52544 h1:WJH1qsOB4/zb/li+zLMn0vaAUJ5FqPv6HYLI3aQVg1k= +gopkg.in/pipe.v2 v2.0.0-20140414041502-3c2ca4d52544/go.mod h1:UhTeH/yXCK/KY7TX24mqPkaQ7gZeqmWd/8SSS8B3aHw= +gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/src-d/go-billy.v4 v4.2.1 h1:omN5CrMrMcQ+4I8bJ0wEhOBPanIRWzFC953IiXKdYzo= +gopkg.in/src-d/go-billy.v4 v4.2.1/go.mod h1:tm33zBoOwxjYHZIE+OV8bxTWFMJLrconzFMd38aARFk= +gopkg.in/src-d/go-git-fixtures.v3 v3.1.1 h1:XWW/s5W18RaJpmo1l0IYGqXKuJITWRFuA45iOf1dKJs= +gopkg.in/src-d/go-git-fixtures.v3 v3.1.1/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= +gopkg.in/src-d/go-git.v4 v4.8.1 h1:aAyBmkdE1QUUEHcP4YFCGKmsMQRAuRmUcPEQR7lOAa0= +gopkg.in/src-d/go-git.v4 v4.8.1/go.mod h1:Vtut8izDyrM8BUVQnzJ+YvmNcem2J89EmfZYCkLokZk= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/tomb.v2 v2.0.0-20161208151619-d5d1b5820637 h1:yiW+nvdHb9LVqSHQBXfZCieqV4fzYhNBql77zY0ykqs= +gopkg.in/tomb.v2 v2.0.0-20161208151619-d5d1b5820637/go.mod h1:BHsqpu/nsuzkT5BpiH1EMZPLyqSMM8JbIavyFACoFNk= +gopkg.in/validator.v2 v2.0.0-20191029180049-30e574a82075 h1:ZkdLG20PbbXJaM0hn3WOp6PDUEyai71k/0lK8XR8UY4= +gopkg.in/validator.v2 v2.0.0-20191029180049-30e574a82075/go.mod h1:o4V0GXN9/CAmCsvJ0oXYZvrZOe7syiDZSN1GWGZTGzc= +gopkg.in/vmihailenco/msgpack.v2 v2.9.1 h1:kb0VV7NuIojvRfzwslQeP3yArBqJHW9tOl4t38VS1jM= +gopkg.in/vmihailenco/msgpack.v2 v2.9.1/go.mod h1:/3Dn1Npt9+MYyLpYYXjInO/5jvMLamn+AEGwNEOatn8= +gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0 h1:POO/ycCATvegFmVuPpQzZFJ+pGZeX22Ufu6fibxDVjU= +gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +grpc.go4.org v0.0.0-20170609214715-11d0a25b4919 h1:tmXTu+dfa+d9Evp8NpJdgOy6+rt8/x4yG7qPBrtNfLY= +grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= +honnef.co/go/js/dom v0.0.0-20190526011328-ebc4cf92d81f h1:b3Q9PqH+5NYHfIjNUEN+f8lYvBh9A25AX+kPh8dpYmc= +honnef.co/go/js/dom v0.0.0-20190526011328-ebc4cf92d81f/go.mod h1:sUMDUKNB2ZcVjt92UnLy3cdGs+wDAcrPdV3JP6sVgA4= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +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 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +istio.io/gogo-genproto v0.0.0-20191024203824-d079cc8b1d55 h1:nvpx66mnuGvXYP4IfCWfUqB9YhiXBF3MvUDsclNnDzI= +istio.io/gogo-genproto v0.0.0-20191024203824-d079cc8b1d55/go.mod h1:OzpAts7jljZceG4Vqi5/zXy/pOg1b209T3jb7Nv5wIs= +k8s.io/api v0.0.0-20190620084959-7cf5895f2711/go.mod h1:TBhBqb1AWbBQbW3XRusr7n7E4v2+5ZY8r8sAMnyFC5A= +k8s.io/api v0.0.0-20190813020757-36bff7324fb7 h1:4uJOjRn9kWq4AqJRE8+qzmAy+lJd9rh8TY455dNef4U= +k8s.io/api v0.0.0-20190813020757-36bff7324fb7/go.mod h1:3Iy+myeAORNCLgjd/Xu9ebwN7Vh59Bw0vh9jhoX+V58= +k8s.io/apimachinery v0.0.0-20190612205821-1799e75a0719/go.mod h1:I4A+glKBHiTgiEjQiCCQfCAIcIMFGt291SmsvcrFzJA= +k8s.io/apimachinery v0.0.0-20190809020650-423f5d784010 h1:pyoq062NftC1y/OcnbSvgolyZDJ8y4fmUPWMkdA6gfU= +k8s.io/apimachinery v0.0.0-20190809020650-423f5d784010/go.mod h1:Waf/xTS2FGRrgXCkO5FP3XxTOWh0qLf2QhL1qFZZ/R8= +k8s.io/client-go v0.0.0-20190620085101-78d2af792bab/go.mod h1:E95RaSlHr79aHaX0aGSwcPNfygDiPKOVXdmivCIZT0k= +k8s.io/client-go v12.0.0+incompatible h1:YlJxncpeVUC98/WMZKC3JZGk/OXQWCZjAB4Xr3B17RY= +k8s.io/client-go v12.0.0+incompatible/go.mod h1:E95RaSlHr79aHaX0aGSwcPNfygDiPKOVXdmivCIZT0k= +k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6 h1:4s3/R4+OYYYUKptXPhZKjQ04WJ6EhQQVFdjOFvCazDk= +k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.3.1/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.4.0 h1:lCJCxf/LIowc2IGS9TPjWDyXY4nOmdGdfcwwDQCOURQ= +k8s.io/klog v0.4.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= +k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= +k8s.io/kube-openapi v0.0.0-20190709113604-33be087ad058/go.mod h1:nfDlWeOsu3pUf4yWGL+ERqohP4YsZcBJXWMK+gkzOA4= +k8s.io/kube-openapi v0.0.0-20190722073852-5e22f3d471e6 h1:s9IxTKe9GwDH0S/WaX62nFYr0or32DsTWex9AileL7U= +k8s.io/kube-openapi v0.0.0-20190722073852-5e22f3d471e6/go.mod h1:RZvgC8MSN6DjiMV6oIfEE9pDL9CYXokkfaCKZeHm3nc= +k8s.io/utils v0.0.0-20190221042446-c2654d5206da/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3oVhZz7sSzSiPnVZayjIX0= +k8s.io/utils v0.0.0-20190809000727-6c36bc71fc4a h1:uy5HAgt4Ha5rEMbhZA+aM1j2cq5LmR6LQ71EYC2sVH4= +k8s.io/utils v0.0.0-20190809000727-6c36bc71fc4a/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e h1:4Z09Hglb792X0kfOBBJUPFEyvVfQWrYT/l8h5EKA6JQ= +sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= +sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 h1:ucqkfpjg9WzSUubAO62csmucvxl4/JeW3F4I4909XkM= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= +sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67 h1:e1sMhtVq9AfcEy8AXNb8eSg6gbzfdpYhoNqnPJa+GzI= +sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67/go.mod h1:L5q+DGLGOQFpo1snNEkLOJT2d1YTW66rWNzatr3He1k= +sourcegraph.com/sourcegraph/go-diff v0.5.0 h1:eTiIR0CoWjGzJcnQ3OkhIl/b9GJovq4lSAVRt0ZFEG8= +sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= +sourcegraph.com/sourcegraph/go-git v0.0.0-20190828120159-87e0e4ab9e95 h1:BXXbBIn17eUjrezW34vwkuHuMlLLjbHX+FqEaXkH9xo= +sourcegraph.com/sourcegraph/go-git v0.0.0-20190828120159-87e0e4ab9e95/go.mod h1:wuMupdBPOKq56tE4fMCsXV+Ouau8I/u45E7RnwPUvac= +sourcegraph.com/sourcegraph/go-vcs v0.0.0-20190409071845-d784c9520ccd h1:OUJzsDqNQQ0LULa4jkmL8zOi3POVWlIoLdI5l0mFOic= +sourcegraph.com/sourcegraph/go-vcs v0.0.0-20190409071845-d784c9520ccd/go.mod h1:rFelUayJfYYMJDKiqwmLc8YIWivajdW1a494kJsfXRg= +sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4 h1:JPJh2pk3+X4lXAkZIk2RuE/7/FoK9maXw+TNPJhVS/c= +sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= diff --git a/exporter/awsxrayexporter/http.go b/exporter/awsxrayexporter/http.go new file mode 100644 index 000000000000..d31a5ad7cdc7 --- /dev/null +++ b/exporter/awsxrayexporter/http.go @@ -0,0 +1,147 @@ +// 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 awsxrayexporter + +import ( + "go.opencensus.io/plugin/ochttp" + "go.opencensus.io/trace" + "net/http" +) + +// httpRequest – Information about an http request. +type httpRequest struct { + // Method – The request method. For example, GET. + Method string `json:"method,omitempty"` + + // URL – The full URL of the request, compiled from the protocol, hostname, + // and path of the request. + URL string `json:"url,omitempty"` + + // UserAgent – The user agent string from the requester's client. + UserAgent string `json:"user_agent,omitempty"` + + // ClientIP – The IP address of the requester. Can be retrieved from the IP + // packet's Source Address or, for forwarded requests, from an X-Forwarded-For + // header. + ClientIP string `json:"client_ip,omitempty"` + + // XForwardedFor – (segments only) boolean indicating that the client_ip was + // read from an X-Forwarded-For header and is not reliable as it could have + // been forged. + XForwardedFor string `json:"x_forwarded_for,omitempty"` + + // Traced – (subsegments only) boolean indicating that the downstream call + // is to another traced service. If this field is set to true, X-Ray considers + // the trace to be broken until the downstream service uploads a segment with + // a parent_id that matches the id of the subsegment that contains this block. + // + // TODO - need to understand the impact of this field + //Traced bool `json:"traced"` +} + +// httpResponse - Information about an http response. +type httpResponse struct { + // Status – number indicating the HTTP status of the response. + Status int64 `json:"status,omitempty"` + + // ContentLength – number indicating the length of the response body in bytes. + ContentLength int64 `json:"content_length,omitempty"` +} + +type httpInfo struct { + Request httpRequest `json:"request"` + Response httpResponse `json:"response"` +} + +func convertToStatusCode(code int32) int64 { + // https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto + // Status codes for use with Span.SetStatus. These correspond to the status + // codes used by gRPC defined here: https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto + switch code { + case trace.StatusCodeOK: + return http.StatusOK + case trace.StatusCodeCancelled: + return 499 // Client Closed Request + case trace.StatusCodeUnknown: + return http.StatusInternalServerError + case trace.StatusCodeInvalidArgument: + return http.StatusBadRequest + case trace.StatusCodeDeadlineExceeded: + return http.StatusGatewayTimeout + case trace.StatusCodeNotFound: + return http.StatusNotFound + case trace.StatusCodeAlreadyExists: + return http.StatusConflict + case trace.StatusCodePermissionDenied: + return http.StatusForbidden + case trace.StatusCodeResourceExhausted: + return http.StatusTooManyRequests + case trace.StatusCodeFailedPrecondition: + return http.StatusBadRequest + case trace.StatusCodeAborted: + return http.StatusConflict + case trace.StatusCodeOutOfRange: + return http.StatusBadRequest + case trace.StatusCodeUnimplemented: + return http.StatusNotImplemented + case trace.StatusCodeInternal: + return http.StatusInternalServerError + case trace.StatusCodeUnavailable: + return http.StatusServiceUnavailable + case trace.StatusCodeDataLoss: + return http.StatusInternalServerError + case trace.StatusCodeUnauthenticated: + return http.StatusUnauthorized + default: + return http.StatusInternalServerError + } +} + +func makeHttp(spanName string, code int32, attributes map[string]interface{}) (map[string]interface{}, *httpInfo) { + var ( + info httpInfo + filtered = map[string]interface{}{} + ) + + for key, value := range attributes { + switch key { + case ochttp.MethodAttribute: + info.Request.Method, _ = value.(string) + + case ochttp.UserAgentAttribute: + info.Request.UserAgent, _ = value.(string) + + case ochttp.StatusCodeAttribute: + info.Response.Status, _ = value.(int64) + + default: + filtered[key] = value + } + } + + info.Request.URL = spanName + + if info.Response.Status == 0 { + // this is a fallback because the ochttp.StatusCodeAttribute isn't being set by opencensus-go + // https://github.com/census-instrumentation/opencensus-go/issues/899 + info.Response.Status = convertToStatusCode(code) + } + + if len(filtered) == len(attributes) { + return attributes, nil + } + + return filtered, &info +} diff --git a/exporter/awsxrayexporter/segment.go b/exporter/awsxrayexporter/segment.go new file mode 100644 index 000000000000..12b34d971488 --- /dev/null +++ b/exporter/awsxrayexporter/segment.go @@ -0,0 +1,475 @@ +// 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 awsxrayexporter + +import ( + "bytes" + "encoding/binary" + "encoding/hex" + "encoding/json" + "fmt" + "go.opencensus.io/trace" + "math/rand" + "os" + "regexp" + "sync" + "time" +) + +// origin contains the support aws origin values, +// https://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html +type origin string + +const ( + // OriginEC2 span originated from EC2 + OriginEC2 origin = "AWS::EC2::Instance" + + // OriginECS span originated from Elastic Container Service (ECS) + OriginECS origin = "AWS::ECS::Container" + + // OriginEB span originated from Elastic Beanstalk (EB) + OriginEB origin = "AWS::ElasticBeanstalk::Environment" +) + +const ( + httpHeaderMaxSize = 200 + httpHeader = `X-Amzn-Trace-Id` + prefixRoot = "Root=" + prefixParent = "Parent=" + prefixSampled = "Sampled=" + separator = ";" // separator used by x-ray to split parts of X-Amzn-Trace-Id header +) + +var ( + zeroSpanID = trace.SpanID{} + r = rand.New(rand.NewSource(time.Now().UnixNano())) // random, not secure + mutex = &sync.Mutex{} +) + +var ( + // reInvalidSpanCharacters defines the invalid letters in a span name as per + // https://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html + reInvalidSpanCharacters = regexp.MustCompile(`[^ 0-9\p{L}N_.:/%&#=+,\-@]`) + // reInvalidAnnotationCharacters defines the invalid letters in an annotation key as per + // https://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html + reInvalidAnnotationCharacters = regexp.MustCompile(`[^a-zA-Z0-9_]`) +) + +const ( + // defaultSpanName will be used if there are no valid xray characters in the + // span name + defaultSegmentName = "span" + + // maxSegmentNameLength the maximum length of a segment name + maxSegmentNameLength = 200 +) + +const ( + traceIDLength = 35 // fixed length of aws trace id + spanIDLength = 16 // fixed length of aws span id + epochOffset = 2 // offset of epoch secs + identifierOffset = 11 // offset of identifier within traceID +) + +type segment struct { + // ID - A 64-bit identifier for the segment, unique among segments in the same trace, + // in 16 hexadecimal digits. + ID string `json:"id"` + + // Name - The logical name of the service that handled the request, up to 200 characters. + // For example, your application's name or domain name. Names can contain Unicode + // letters, numbers, and whitespace, and the following symbols: _, ., :, /, %, &, #, =, + // +, \, -, @ + Name string `json:"name,omitempty"` + + // StartTime - number that is the time the segment was created, in floating point seconds + // in epoch time.. For example, 1480615200.010 or 1.480615200010E9. Use as many decimal + // places as you need. Microsecond resolution is recommended when available. + StartTime float64 `json:"start_time"` + + // TraceID - A unique identifier that connects all segments and subsegments originating + // from a single client request. + // * The version number, that is, 1. + // * The time of the original request, in Unix epoch time, in 8 hexadecimal digits. + // * For example, 10:00AM December 2nd, 2016 PST in epoch time is 1480615200 seconds, or 58406520 in hexadecimal. + // * A 96-bit identifier for the trace, globally unique, in 24 hexadecimal digits. + TraceID string `json:"trace_id,omitempty"` + + // EndTime - number that is the time the segment was closed. For example, 1480615200.090 + // or 1.480615200090E9. Specify either an end_time or in_progress. + EndTime float64 `json:"end_time"` + + /* ---------------------------------------------------- */ + + // Service - An object with information about your application. + //Service service `json:"service,omitempty"` + + // User - A string that identifies the user who sent the request. + //User string `json:"user,omitempty"` + + // Origin - The type of AWS resource running your application. + Origin string `json:"origin,omitempty"` + + // Namespace - aws for AWS SDK calls; remote for other downstream calls. + Namespace string `json:"namespace,omitempty"` + + // ParentID – A subsegment ID you specify if the request originated from an instrumented + // application. The X-Ray SDK adds the parent subsegment ID to the tracing header for + // downstream HTTP calls. + ParentID string `json:"parent_id,omitempty"` + + // Annotations - object with key-value pairs that you want X-Ray to index for search + Annotations map[string]interface{} `json:"annotations,omitempty"` + + // SubSegments contains the list of child segments + SubSegments []*segment `json:"subsegments,omitempty"` + + // Service - optional service definition + Service *service `json:"service,omitempty"` + + // Http - optional xray specific http settings + Http *httpInfo `json:"http,omitempty"` + + // Error - boolean indicating that a client error occurred + // (response status code was 4XX Client Error). + Error bool `json:"error,omitempty"` + + // Fault - boolean indicating that a server error occurred + // (response status code was 5XX Server Error). + Fault bool `json:"fault,omitempty"` + + // Cause + Cause *errCause `json:"cause,omitempty"` + + /* -- Used by SubSegments only ------------------------ */ + + // Type indicates span is a subsegment; should either be subsegment or blank + Type string `json:"type,omitempty"` +} + +type service struct { + // Version - A string that identifies the version of your application that served the request. + Version string `json:"version,omitempty"` +} + +// TraceHeader converts an OpenTelemetry span context to AWS X-Ray trace header. +func TraceHeader(sc trace.SpanContext) string { + header := make([]byte, 0, 64) + amazonTraceID := convertToAmazonTraceID(sc.TraceID) + amazonSpanID := convertToAmazonSpanID(sc.SpanID) + + header = append(header, prefixRoot...) + header = append(header, amazonTraceID...) + header = append(header, ";"...) + header = append(header, prefixParent...) + header = append(header, amazonSpanID...) + header = append(header, ";"...) + header = append(header, prefixSampled...) + + if sc.TraceOptions&0x1 == 1 { + header = append(header, "1"...) + } else { + header = append(header, "0"...) + } + + return string(header) +} + +// convertToAmazonTraceID converts a trace ID to the Amazon format. +// +// A trace ID unique identifier that connects all segments and subsegments +// originating from a single client request. +// * A trace_id consists of three numbers separated by hyphens. For example, +// 1-58406520-a006649127e371903a2de979. This includes: +// * The version number, that is, 1. +// * The time of the original request, in Unix epoch time, in 8 hexadecimal digits. +// * For example, 10:00AM December 2nd, 2016 PST in epoch time is 1480615200 seconds, +// or 58406520 in hexadecimal. +// * A 96-bit identifier for the trace, globally unique, in 24 hexadecimal digits. +func convertToAmazonTraceID(traceID trace.TraceID) string { + const ( + // maxAge of 28 days. AWS has a 30 day limit, let's be conservative rather than + // hit the limit + maxAge = 60 * 60 * 24 * 28 + + // maxSkew allows for 5m of clock skew + maxSkew = 60 * 5 + ) + + var ( + content = [traceIDLength]byte{} + epochNow = time.Now().Unix() + epoch = int64(binary.BigEndian.Uint32(traceID[0:4])) + b = [4]byte{} + ) + + // If AWS traceID originally came from AWS, no problem. However, if oc generated + // the traceID, then the epoch may be outside the accepted AWS range of within the + // past 30 days. + // + // In that case, we use the current time as the epoch and accept that a new span + // may be created + if delta := epochNow - epoch; delta > maxAge || delta < -maxSkew { + epoch = epochNow + } + + binary.BigEndian.PutUint32(b[0:4], uint32(epoch)) + + content[0] = '1' + content[1] = '-' + hex.Encode(content[2:10], b[0:4]) + content[10] = '-' + hex.Encode(content[identifierOffset:], traceID[4:16]) // overwrite with identifier + + return string(content[0:traceIDLength]) +} + +// parseAmazonTraceID parses an amazon traceID string in the format 1-5759e988-bd862e3fe1be46a994272793 +func parseAmazonTraceID(t string) (trace.TraceID, error) { + if v := len(t); v != traceIDLength { + return trace.TraceID{}, fmt.Errorf("invalid amazon trace id; got length %v, want %v", v, traceIDLength) + } + + epoch, err := hex.DecodeString(t[epochOffset : epochOffset+8]) + if err != nil { + return trace.TraceID{}, fmt.Errorf("unable to decode epoch from amazon trace id, %v", err) + } + + identifier, err := hex.DecodeString(t[identifierOffset:]) + if err != nil { + return trace.TraceID{}, fmt.Errorf("unable to decode identifier from amazon trace id, %v", err) + } + + var traceID trace.TraceID + binary.BigEndian.PutUint32(traceID[0:4], binary.BigEndian.Uint32(epoch)) + for index, b := range identifier { + traceID[index+4] = b + } + + return traceID, nil +} + +// convertToAmazonSpanID generates an Amazon spanID from a trace.SpanID - a 64-bit identifier +// for the segment, unique among segments in the same trace, in 16 hexadecimal digits. +func convertToAmazonSpanID(v trace.SpanID) string { + if v == zeroSpanID { + return "" + } + return hex.EncodeToString(v[0:8]) +} + +// parseAmazonSpanID parses an amazon spanID +func parseAmazonSpanID(v string) (trace.SpanID, error) { + if v == "" { + return zeroSpanID, nil + } + + if len(v) != spanIDLength { + return trace.SpanID{}, fmt.Errorf("invalid amazon span id; got length %v, want %v", v, spanIDLength) + } + + data, err := hex.DecodeString(v) + if err != nil { + return trace.SpanID{}, fmt.Errorf("unable to decode epoch from amazon trace id, %v", err) + } + + var spanID trace.SpanID + copy(spanID[:], data) + + return spanID, nil +} + +// mergeAnnotations all string, bool, and numeric values from src to dest, fixing keys as needed +func mergeAnnotations(dest, src map[string]interface{}) { + for key, value := range src { + key = fixAnnotationKey(key) + switch value.(type) { + case bool: + dest[key] = value + case string: + dest[key] = value + case int, int8, int16, int32, int64: + dest[key] = value + case uint, uint8, uint16, uint32, uint64: + dest[key] = value + case float32, float64: + dest[key] = value + } + } +} + +func makeAnnotations(annotations []trace.Annotation, attributes map[string]interface{}) map[string]interface{} { + var result = map[string]interface{}{} + + for _, annotation := range annotations { + mergeAnnotations(result, annotation.Attributes) + } + mergeAnnotations(result, attributes) + + if len(result) == 0 { + return nil + } + return result +} + +func makeCause(status trace.Status) (isError, isFault bool, cause *errCause) { + if status.Code == 0 { + return + } + + if status.Message != "" { + id := make([]byte, 8) + mutex.Lock() + r.Read(id) // rand.Read always returns nil + mutex.Unlock() + + hexID := hex.EncodeToString(id) + + cause = &errCause{ + Exceptions: []exception{ + { + ID: hexID, + Message: status.Message, + }, + }, + } + + if dir, err := os.Getwd(); err == nil { + cause.WorkingDirectory = dir + } + } + + if status.Code >= 400 && status.Code < 500 { + isError = true + return + } + + isFault = true + return +} + +// fixSegmentName removes any invalid characters from the span name. AWS X-Ray defines +// the list of valid characters here: +// https://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html +func fixSegmentName(name string) string { + if reInvalidSpanCharacters.MatchString(name) { + // only allocate for ReplaceAllString if we need to + name = reInvalidSpanCharacters.ReplaceAllString(name, "") + } + + if length := len(name); length > maxSegmentNameLength { + name = name[0:maxSegmentNameLength] + } else if length == 0 { + name = defaultSegmentName + } + + return name +} + +// fixAnnotationKey removes any invalid characters from the annotaiton key. AWS X-Ray defines +// the list of valid characters here: +// https://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html +func fixAnnotationKey(key string) string { + if reInvalidAnnotationCharacters.MatchString(key) { + // only allocate for ReplaceAllString if we need to + key = reInvalidAnnotationCharacters.ReplaceAllString(key, "_") + } + + return key +} + +func rawSegment(name string, span *trace.SpanData) segment { + var ( + traceID = convertToAmazonTraceID(span.TraceID) + startMicros = span.StartTime.UnixNano() / int64(time.Microsecond) + startTime = float64(startMicros) / 1e6 + endMicros = span.EndTime.UnixNano() / int64(time.Microsecond) + endTime = float64(endMicros) / 1e6 + filtered, http = makeHttp(span.Name, span.Code, span.Attributes) + isError, isFault, cause = makeCause(span.Status) + annotations = makeAnnotations(span.Annotations, filtered) + namespace string + ) + + if name == "" { + name = fixSegmentName(span.Name) + } + if span.HasRemoteParent { + namespace = "remote" + } + + return segment{ + ID: convertToAmazonSpanID(span.SpanID), + TraceID: traceID, + Name: name, + StartTime: startTime, + EndTime: endTime, + Namespace: namespace, + ParentID: convertToAmazonSpanID(span.ParentSpanID), + Annotations: annotations, + Http: http, + Error: isError, + Fault: isFault, + Cause: cause, + } +} + +type writer struct { + buffer *bytes.Buffer + encoder *json.Encoder +} + +func (w *writer) Reset() { + w.buffer.Reset() +} + +func (w *writer) Encode(v interface{}) error { + return w.encoder.Encode(v) +} + +func (w *writer) String() string { + return w.buffer.String() +} + +const ( + maxBufSize = 256e3 +) + +var ( + writers = &sync.Pool{ + New: func() interface{} { + var ( + buffer = bytes.NewBuffer(make([]byte, 0, 8192)) + encoder = json.NewEncoder(buffer) + ) + + return &writer{ + buffer: buffer, + encoder: encoder, + } + }, + } +) + +func borrow() *writer { + return writers.Get().(*writer) +} + +func release(w *writer) { + if w.buffer.Cap() < maxBufSize { + w.buffer.Reset() + writers.Put(w) + } +} diff --git a/exporter/awsxrayexporter/testdata/config.yaml b/exporter/awsxrayexporter/testdata/config.yaml new file mode 100644 index 000000000000..28df7dfc11ae --- /dev/null +++ b/exporter/awsxrayexporter/testdata/config.yaml @@ -0,0 +1,21 @@ +receivers: + examplereceiver: + +processors: + exampleprocessor: + +exporters: + awsxray: + awsxray/customname: + region: us-east-1 + origin: "AWS::ECS::Container" + awsxray/disabled: # will be ignored + disabled: true + +service: + pipelines: + traces: + receivers: [examplereceiver] + processors: [exampleprocessor] + exporters: [awsxray] + From 65c5a41b2783811d8b477db02640e530df2e1c80 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Wed, 13 Nov 2019 15:52:11 -0600 Subject: [PATCH 35/59] initial dev of xray data structures and converters --- exporter/awsxrayexporter/config.go | 10 +- exporter/awsxrayexporter/config_test.go | 5 +- exporter/awsxrayexporter/conn/conn.go | 271 +++++++++++++++++++ exporter/awsxrayexporter/conn/conn_test.go | 111 ++++++++ exporter/awsxrayexporter/conn/xray_client.go | 82 ++++++ exporter/awsxrayexporter/converter.go | 29 ++ exporter/awsxrayexporter/factory.go | 19 +- exporter/awsxrayexporter/go.mod | 3 + exporter/awsxrayexporter/http.go | 195 ++++++++++--- exporter/awsxrayexporter/http_test.go | 162 +++++++++++ exporter/awsxrayexporter/segment.go | 168 +++++------- 11 files changed, 891 insertions(+), 164 deletions(-) create mode 100644 exporter/awsxrayexporter/conn/conn.go create mode 100644 exporter/awsxrayexporter/conn/conn_test.go create mode 100644 exporter/awsxrayexporter/conn/xray_client.go create mode 100644 exporter/awsxrayexporter/converter.go create mode 100644 exporter/awsxrayexporter/http_test.go diff --git a/exporter/awsxrayexporter/config.go b/exporter/awsxrayexporter/config.go index 8b403a7e0060..a1a42e06450f 100644 --- a/exporter/awsxrayexporter/config.go +++ b/exporter/awsxrayexporter/config.go @@ -23,6 +23,12 @@ type Config struct { Concurrency int `mapstructure:"num_workers"` // X-Ray service endpoint to which the daemon sends segment documents. Endpoint string `mapstructure:"endpoint"` + // Number of seconds before timing out a request. + RequestTimeout int `mapstructure:"request_timeout"` + // Enable or disable TLS certificate verification. + NoVerifySSL bool `mapstructure:"no_verify_ssl"` + // Upload segments to AWS X-Ray through a proxy. + ProxyAddress string `mapstructure:"proxy_address"` // Send segments to AWS X-Ray service in a specific region. Region string `mapstructure:"region"` // Local mode to skip EC2 instance metadata check. @@ -31,10 +37,6 @@ type Config struct { ResourceARN string `mapstructure:"resource_arn"` // IAM role to upload segments to a different account. RoleARN string `mapstructure:"role_arn"` - // Enable or disable TLS certificate verification. - NoVerifySSL bool `mapstructure:"no_verify_ssl"` - // Upload segments to AWS X-Ray through a proxy. - ProxyAddress string `mapstructure:"proxy_address"` // Default AWS resource type of trace data origin // [AWS::EC2::Instance | AWS::ECS::Container | AWS::ElasticBeanstalk::Environment] Origin string `mapstructure:"origin"` diff --git a/exporter/awsxrayexporter/config_test.go b/exporter/awsxrayexporter/config_test.go index da686ff4cbfe..fe9949d2c9d7 100644 --- a/exporter/awsxrayexporter/config_test.go +++ b/exporter/awsxrayexporter/config_test.go @@ -49,12 +49,13 @@ func TestLoadConfig(t *testing.T) { ExporterSettings: configmodels.ExporterSettings{TypeVal: typeStr, NameVal: "awsxray/customname"}, Concurrency: 8, Endpoint: "", + RequestTimeout: 30, + NoVerifySSL: false, + ProxyAddress: "", Region: "us-east-1", LocalMode: false, ResourceARN: "", RoleARN: "", - NoVerifySSL: false, - ProxyAddress: "", Origin: "AWS::ECS::Container", }) } diff --git a/exporter/awsxrayexporter/conn/conn.go b/exporter/awsxrayexporter/conn/conn.go new file mode 100644 index 000000000000..64b0d14b3169 --- /dev/null +++ b/exporter/awsxrayexporter/conn/conn.go @@ -0,0 +1,271 @@ +// 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 conn + +import ( + "crypto/tls" + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/credentials/stscreds" + "github.com/aws/aws-sdk-go/aws/ec2metadata" + "github.com/aws/aws-sdk-go/aws/endpoints" + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/sts" + "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter" + "go.uber.org/zap" + "golang.org/x/net/http2" + "net/http" + "net/url" + "os" + "time" +) + +type connAttr interface { + newAWSSession(roleArn string, region string) *session.Session + getEC2Region(s *session.Session) (string, error) +} + +// Conn implements connAttr interface. +type Conn struct{} + +func (c *Conn) getEC2Region(s *session.Session) (string, error) { + return ec2metadata.New(s).Region() +} + +const ( + STSEndpointPrefix = "https://sts." + STSEndpointSuffix = ".amazonaws.com" + STSAwsCnPartitionIDSuffix = ".amazonaws.com.cn" // AWS China partition. +) + +// getNewHTTPClient returns new HTTP client instance with provided configuration. +func getNewHTTPClient(logger *zap.Logger, maxIdle int, requestTimeout int, noVerify bool, proxyAddress string) *http.Client { + logger.Debug("Using proxy address: ", + zap.String("proxyAddr", proxyAddress), + ) + tls := &tls.Config{ + InsecureSkipVerify: false, + } + + finalProxyAddress := getProxyAddress(proxyAddress) + proxyURL := getProxyURL(finalProxyAddress) + transport := &http.Transport{ + MaxIdleConnsPerHost: maxIdle, + TLSClientConfig: tls, + Proxy: http.ProxyURL(proxyURL), + } + + // is not enabled by default as we configure TLSClientConfig for supporting SSL to data plane. + // http2.ConfigureTransport will setup transport layer to use HTTP2 + http2.ConfigureTransport(transport) + http := &http.Client{ + Transport: transport, + Timeout: time.Second * time.Duration(requestTimeout), + } + return http +} + +func getProxyAddress(proxyAddress string) string { + var finalProxyAddress string + if proxyAddress != "" { + finalProxyAddress = proxyAddress + } else if proxyAddress == "" && os.Getenv("HTTPS_PROXY") != "" { + finalProxyAddress = os.Getenv("HTTPS_PROXY") + } else { + finalProxyAddress = "" + } + return finalProxyAddress +} + +func getProxyURL(finalProxyAddress string) *url.URL { + var proxyURL *url.URL + var err error + if finalProxyAddress != "" { + proxyURL, err = url.Parse(finalProxyAddress) + if err != nil { + //log.Errorf("Bad proxy URL: %v", err) + os.Exit(1) + } + } else { + proxyURL = nil + } + return proxyURL +} + +// GetAWSConfigSession returns AWS config and session instances. +func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *awsxrayexporter.Config) (*aws.Config, *session.Session) { + var s *session.Session + var err error + var awsRegion string + http := getNewHTTPClient(logger, cfg.Concurrency, cfg.RequestTimeout, cfg.NoVerifySSL, cfg.ProxyAddress) + regionEnv := os.Getenv("AWS_REGION") + if cfg.Region == "" && regionEnv != "" { + awsRegion = regionEnv + logger.Debug("Fetch region %v from environment variables", zap.String("region", awsRegion)) + } else if cfg.Region != "" { + awsRegion = cfg.Region + logger.Debug("Fetch region %v from commandline/config file", zap.String("region", awsRegion)) + } else if !cfg.NoVerifySSL { + es := getDefaultSession(logger) + awsRegion, err = cn.getEC2Region(es) + if err != nil { + logger.Error("Unable to retrieve the region from the EC2 instance %v\n", zap.Error(err)) + } else { + logger.Debug("Fetch region %v from ec2 metadata", zap.String("region", awsRegion)) + } + } + if awsRegion == "" { + //log.Error("Cannot fetch region variable from config file, environment variables and ec2 metadata.") + os.Exit(1) + } + s = cn.newAWSSession(cfg.RoleARN, awsRegion) + + config := &aws.Config{ + Region: aws.String(awsRegion), + DisableParamValidation: aws.Bool(true), + MaxRetries: aws.Int(2), + Endpoint: aws.String(cfg.Endpoint), + HTTPClient: http, + } + return config, s +} + +// ProxyServerTransport configures HTTP transport for TCP Proxy Server. +func ProxyServerTransport(config *awsxrayexporter.Config) *http.Transport { + tls := &tls.Config{ + InsecureSkipVerify: config.NoVerifySSL, + } + + proxyAddr := getProxyAddress(config.ProxyAddress) + proxyURL := getProxyURL(proxyAddr) + + // Connection timeout in seconds + idleConnTimeout := time.Duration(config.RequestTimeout) * time.Second + + transport := &http.Transport{ + MaxIdleConns: config.Concurrency, + MaxIdleConnsPerHost: config.Concurrency, + IdleConnTimeout: idleConnTimeout, + Proxy: http.ProxyURL(proxyURL), + TLSClientConfig: tls, + + // If not disabled the transport will add a gzip encoding header + // to requests with no `accept-encoding` header value. The header + // is added after we sign the request which invalidates the + // signature. + DisableCompression: true, + } + + return transport +} + +func (c *Conn) newAWSSession(logger *zap.Logger, roleArn string, region string) *session.Session { + var s *session.Session + var err error + if roleArn == "" { + s = getDefaultSession(logger) + } else { + stsCreds := getSTSCreds(logger, region, roleArn) + + s, err = session.NewSession(&aws.Config{ + Credentials: stsCreds, + }) + + if err != nil { + logger.Error("Error in creating session object : ", zap.Error(err)) + os.Exit(1) + } + } + return s +} + +// getSTSCreds gets STS credentials from regional endpoint. ErrCodeRegionDisabledException is received if the +// STS regional endpoint is disabled. In this case STS credentials are fetched from STS primary regional endpoint +// in the respective AWS partition. +func getSTSCreds(logger *zap.Logger, region string, roleArn string) *credentials.Credentials { + t := getDefaultSession(logger) + + stsCred := getSTSCredsFromRegionEndpoint(logger, t, region, roleArn) + // Make explicit call to fetch credentials. + _, err := stsCred.Get() + if err != nil { + if aerr, ok := err.(awserr.Error); ok { + switch aerr.Code() { + case sts.ErrCodeRegionDisabledException: + logger.Error("Region : %v - %v", zap.String("region", region), zap.String("error", aerr.Error())) + logger.Info("Credentials for provided RoleARN will be fetched from STS primary region endpoint instead of regional endpoint.") + stsCred = getSTSCredsFromPrimaryRegionEndpoint(logger, t, roleArn, region) + } + } + } + return stsCred +} + +// getSTSCredsFromRegionEndpoint fetches STS credentials for provided roleARN from regional endpoint. +// AWS STS recommends that you provide both the Region and endpoint when you make calls to a Regional endpoint. +// Reference: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html#id_credentials_temp_enable-regions_writing_code +func getSTSCredsFromRegionEndpoint(logger *zap.Logger, sess *session.Session, region string, roleArn string) *credentials.Credentials { + regionalEndpoint := getSTSRegionalEndpoint(region) + // if regionalEndpoint is "", the STS endpoint is Global endpoint for classic regions except ap-east-1 - (HKG) + // for other opt-in regions, region value will create STS regional endpoint. + // This will be only in the case, if provided region is not present in aws_regions.go + c := &aws.Config{Region: aws.String(region), Endpoint: ®ionalEndpoint} + st := sts.New(sess, c) + logger.Info("STS Endpoint : %v", zap.String("endpoint", st.Endpoint)) + return stscreds.NewCredentialsWithClient(st, roleArn) +} + +// getSTSCredsFromPrimaryRegionEndpoint fetches STS credentials for provided roleARN from primary region endpoint in the +// respective partition. +func getSTSCredsFromPrimaryRegionEndpoint(logger *zap.Logger, t *session.Session, roleArn string, region string) *credentials.Credentials { + partitionId := getPartition(region) + if partitionId == endpoints.AwsPartitionID { + return getSTSCredsFromRegionEndpoint(logger, t, endpoints.UsEast1RegionID, roleArn) + } else if partitionId == endpoints.AwsCnPartitionID { + return getSTSCredsFromRegionEndpoint(logger, t, endpoints.CnNorth1RegionID, roleArn) + } else if partitionId == endpoints.AwsUsGovPartitionID { + return getSTSCredsFromRegionEndpoint(logger, t, endpoints.UsGovWest1RegionID, roleArn) + } + + return nil +} + +func getSTSRegionalEndpoint(r string) string { + p := getPartition(r) + + var e string + if p == endpoints.AwsPartitionID || p == endpoints.AwsUsGovPartitionID { + e = STSEndpointPrefix + r + STSEndpointSuffix + } else if p == endpoints.AwsCnPartitionID { + e = STSEndpointPrefix + r + STSAwsCnPartitionIDSuffix + } + return e +} + +func getDefaultSession(logger *zap.Logger) *session.Session { + result, serr := session.NewSession() + if serr != nil { + logger.Error("Error in creating session object : %v\n.", zap.Error(serr)) + os.Exit(1) + } + return result +} + +// getPartition return AWS Partition for the provided region. +func getPartition(region string) string { + p, _ := endpoints.PartitionForRegion(endpoints.DefaultPartitions(), region) + return p.ID() +} diff --git a/exporter/awsxrayexporter/conn/conn_test.go b/exporter/awsxrayexporter/conn/conn_test.go new file mode 100644 index 000000000000..12e50575b92c --- /dev/null +++ b/exporter/awsxrayexporter/conn/conn_test.go @@ -0,0 +1,111 @@ +// 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 conn + +import ( + "errors" + "github.com/aws/aws-sdk-go/aws/session" + "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter" + "github.com/open-telemetry/opentelemetry-collector/config" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "go.uber.org/zap" + "os" + "path" + "strings" + "testing" +) + +var ec2Region = "us-east-1" + +type mockConn struct { + mock.Mock + sn *session.Session +} + +func (c *mockConn) getEC2Region(s *session.Session) (string, error) { + args := c.Called(nil) + errorStr := args.String(0) + var err error + if errorStr != "" { + err = errors.New(errorStr) + return "", err + } + return ec2Region, nil +} + +func (c *mockConn) newAWSSession(roleArn string, region string) *session.Session { + return c.sn +} + +// fetch region value from ec2 meta data service +func TestEC2Session(t *testing.T) { + logger := zap.NewNop() + xrayExporterCfg := loadExporterConfig(t) + m := new(mockConn) + m.On("getEC2Region", nil).Return("").Once() + var expectedSession *session.Session + expectedSession, _ = session.NewSession() + m.sn = expectedSession + cfg, s := GetAWSConfigSession(logger, m, xrayExporterCfg) + assert.Equal(t, s, expectedSession, "Expect the session object is not overridden") + assert.Equal(t, *cfg.Region, ec2Region, "Region value fetched from ec2-metadata service") +} + +// fetch region value from environment variable +func TestRegionEnv(t *testing.T) { + logger := zap.NewNop() + xrayExporterCfg := loadExporterConfig(t) + region := "us-west-2" + env := stashEnv() + defer popEnv(env) + os.Setenv("AWS_REGION", region) + + var m = &mockConn{} + var expectedSession *session.Session + expectedSession, _ = session.NewSession() + m.sn = expectedSession + cfg, s := GetAWSConfigSession(logger, m, xrayExporterCfg) + assert.Equal(t, s, expectedSession, "Expect the session object is not overridden") + assert.Equal(t, *cfg.Region, region, "Region value fetched from environment") +} + +func loadExporterConfig(t *testing.T) *awsxrayexporter.Config { + factories, err := config.ExampleComponents() + assert.Nil(t, err) + factory := &awsxrayexporter.Factory{} + factories.Exporters[factory.Type()] = factory + otelcfg, err := config.LoadConfigFile( + t, path.Join(".", "../testdata", "config.yaml"), factories, + ) + xrayExporterCfg := otelcfg.Exporters["awsxray"].(*awsxrayexporter.Config) + return xrayExporterCfg +} + +func stashEnv() []string { + env := os.Environ() + os.Clearenv() + + return env +} + +func popEnv(env []string) { + os.Clearenv() + + for _, e := range env { + p := strings.SplitN(e, "=", 2) + os.Setenv(p[0], p[1]) + } +} diff --git a/exporter/awsxrayexporter/conn/xray_client.go b/exporter/awsxrayexporter/conn/xray_client.go new file mode 100644 index 000000000000..0bb501481385 --- /dev/null +++ b/exporter/awsxrayexporter/conn/xray_client.go @@ -0,0 +1,82 @@ +// 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 conn + +import ( + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/xray" + "go.uber.org/zap" + "os" + "strconv" + "strings" + "time" +) + +// XRay defines X-Ray api call structure. +type XRay interface { + PutTraceSegments(input *xray.PutTraceSegmentsInput) (*xray.PutTraceSegmentsOutput, error) + PutTelemetryRecords(input *xray.PutTelemetryRecordsInput) (*xray.PutTelemetryRecordsOutput, error) +} + +// XRayClient represents X-Ray client. +type XRayClient struct { + xRay *xray.XRay +} + +// PutTraceSegments makes PutTraceSegments api call on X-Ray client. +func (c *XRayClient) PutTraceSegments(input *xray.PutTraceSegmentsInput) (*xray.PutTraceSegmentsOutput, error) { + return c.xRay.PutTraceSegments(input) +} + +// PutTelemetryRecords makes PutTelemetryRecords api call on X-Ray client. +func (c *XRayClient) PutTelemetryRecords(input *xray.PutTelemetryRecordsInput) (*xray.PutTelemetryRecordsOutput, error) { + return c.xRay.PutTelemetryRecords(input) +} + +// NewXRay creates a new instance of the XRay client with a aws configuration and session . +func NewXRay(logger *zap.Logger, awsConfig *aws.Config, s *session.Session) XRay { + x := xray.New(s, awsConfig) + logger.Debug("Using Endpoint: %s", zap.String("endpoint", x.Endpoint)) + + x.Handlers.Build.PushBackNamed(request.NamedHandler{ + Name: "tracing.XRayVersionUserAgentHandler", + Fn: request.MakeAddToUserAgentHandler("xray", "1.0", os.Getenv("AWS_EXECUTION_ENV")), + }) + + x.Handlers.Sign.PushFrontNamed(request.NamedHandler{ + Name: "tracing.TimestampHandler", + Fn: func(r *request.Request) { + r.HTTPRequest.Header.Set("X-Amzn-Xray-Timestamp", strconv.FormatFloat(float64(time.Now().UnixNano())/float64(time.Second), 'f', 9, 64)) + }, + }) + + return &XRayClient{ + xRay: x, + } +} + +// IsTimeoutError checks whether error is timeout error. +func IsTimeoutError(err error) bool { + awsError, ok := err.(awserr.Error) + if ok { + if strings.Contains(awsError.Error(), "net/http: request canceled") { + return true + } + } + return false +} diff --git a/exporter/awsxrayexporter/converter.go b/exporter/awsxrayexporter/converter.go new file mode 100644 index 000000000000..acf7cee0caac --- /dev/null +++ b/exporter/awsxrayexporter/converter.go @@ -0,0 +1,29 @@ +// 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 awsxrayexporter + +import ( + "github.com/aws/aws-sdk-go/service/xray" + "github.com/open-telemetry/opentelemetry-collector/consumer/consumerdata" +) + +func ConvertTraceDataToXRay(td consumerdata.TraceData) *xray.PutTraceSegmentsInput { + documents := make([]*string, len(td.Spans)) + //for i, span := range td.Spans { + // seg := segment{} + //} + input := xray.PutTraceSegmentsInput{TraceSegmentDocuments: documents} + return &input +} diff --git a/exporter/awsxrayexporter/factory.go b/exporter/awsxrayexporter/factory.go index bc229610c4e7..1c69ad264689 100644 --- a/exporter/awsxrayexporter/factory.go +++ b/exporter/awsxrayexporter/factory.go @@ -41,15 +41,16 @@ func (f *Factory) CreateDefaultConfig() configmodels.Exporter { TypeVal: typeStr, NameVal: typeStr, }, - Concurrency: 8, - Endpoint: "", - Region: "", - LocalMode: false, - ResourceARN: "", - RoleARN: "", - NoVerifySSL: false, - ProxyAddress: "", - Origin: "AWS::EC2::Instance", + Concurrency: 8, + Endpoint: "", + RequestTimeout: 30, + NoVerifySSL: false, + ProxyAddress: "", + Region: "", + LocalMode: false, + ResourceARN: "", + RoleARN: "", + Origin: "AWS::EC2::Instance", } } diff --git a/exporter/awsxrayexporter/go.mod b/exporter/awsxrayexporter/go.mod index 60dcf2fa3a0a..56c4eec5af3f 100644 --- a/exporter/awsxrayexporter/go.mod +++ b/exporter/awsxrayexporter/go.mod @@ -27,6 +27,7 @@ require ( github.com/bsm/sarama-cluster v2.1.15+incompatible // indirect github.com/cactus/go-statsd-client/statsd v0.0.0-20191030180650-a68a2246f89c // indirect github.com/casbin/casbin v1.9.1 // indirect + github.com/census-instrumentation/opencensus-proto v0.2.1 github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec // indirect github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0 // indirect @@ -63,6 +64,7 @@ require ( github.com/godbus/dbus v4.1.0+incompatible // indirect github.com/goji/param v0.0.0-20160927210335-d7f49fd7d1ed // indirect github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect + github.com/golang/protobuf v1.3.2 github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac // indirect github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82 // indirect github.com/gonum/internal v0.0.0-20181124074243-f884aa714029 // indirect @@ -157,6 +159,7 @@ require ( go.opencensus.io v0.22.1 go.uber.org/automaxprocs v1.2.0 // indirect go.uber.org/zap v1.10.0 + golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 gopkg.in/cheggaaa/pb.v1 v1.0.28 // indirect gopkg.in/gcfg.v1 v1.2.3 // indirect gopkg.in/pipe.v2 v2.0.0-20140414041502-3c2ca4d52544 // indirect diff --git a/exporter/awsxrayexporter/http.go b/exporter/awsxrayexporter/http.go index d31a5ad7cdc7..0f53b3168fcf 100644 --- a/exporter/awsxrayexporter/http.go +++ b/exporter/awsxrayexporter/http.go @@ -15,11 +15,29 @@ package awsxrayexporter import ( - "go.opencensus.io/plugin/ochttp" - "go.opencensus.io/trace" + tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" "net/http" ) +const ( + // Attributes recorded on the span for the requests. + // Only trace exporters will need them. + MethodAttribute = "http.method" + URLAttribute = "http.url" + TargetAttribute = "http.target" + HostAttribute = "http.host" + SchemeAttribute = "http.scheme" + StatusCodeAttribute = "http.status_code" + StatusTextAttribute = "http.status_text" + FlavorAttribute = "http.flavor" + ServerNameAttribute = "http.server_name" + PortAttribute = "http.port" + RouteAttribute = "http.route" + ClientIpAttribute = "http.client_ip" + UserAgentAttribute = "http.user_agent" +) + // httpRequest – Information about an http request. type httpRequest struct { // Method – The request method. For example, GET. @@ -40,15 +58,13 @@ type httpRequest struct { // XForwardedFor – (segments only) boolean indicating that the client_ip was // read from an X-Forwarded-For header and is not reliable as it could have // been forged. - XForwardedFor string `json:"x_forwarded_for,omitempty"` + XForwardedFor bool `json:"x_forwarded_for,omitempty"` // Traced – (subsegments only) boolean indicating that the downstream call // is to another traced service. If this field is set to true, X-Ray considers // the trace to be broken until the downstream service uploads a segment with // a parent_id that matches the id of the subsegment that contains this block. - // - // TODO - need to understand the impact of this field - //Traced bool `json:"traced"` + Traced bool `json:"traced,omitempty"` } // httpResponse - Information about an http response. @@ -66,82 +82,173 @@ type httpInfo struct { } func convertToStatusCode(code int32) int64 { - // https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto - // Status codes for use with Span.SetStatus. These correspond to the status - // codes used by gRPC defined here: https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto switch code { - case trace.StatusCodeOK: + case tracetranslator.OCOK: return http.StatusOK - case trace.StatusCodeCancelled: + case tracetranslator.OCCancelled: return 499 // Client Closed Request - case trace.StatusCodeUnknown: + case tracetranslator.OCUnknown: return http.StatusInternalServerError - case trace.StatusCodeInvalidArgument: + case tracetranslator.OCInvalidArgument: return http.StatusBadRequest - case trace.StatusCodeDeadlineExceeded: + case tracetranslator.OCDeadlineExceeded: return http.StatusGatewayTimeout - case trace.StatusCodeNotFound: + case tracetranslator.OCNotFound: return http.StatusNotFound - case trace.StatusCodeAlreadyExists: + case tracetranslator.OCAlreadyExists: return http.StatusConflict - case trace.StatusCodePermissionDenied: + case tracetranslator.OCPermissionDenied: return http.StatusForbidden - case trace.StatusCodeResourceExhausted: + case tracetranslator.OCResourceExhausted: return http.StatusTooManyRequests - case trace.StatusCodeFailedPrecondition: + case tracetranslator.OCFailedPrecondition: return http.StatusBadRequest - case trace.StatusCodeAborted: + case tracetranslator.OCAborted: return http.StatusConflict - case trace.StatusCodeOutOfRange: + case tracetranslator.OCOutOfRange: return http.StatusBadRequest - case trace.StatusCodeUnimplemented: + case tracetranslator.OCUnimplemented: return http.StatusNotImplemented - case trace.StatusCodeInternal: + case tracetranslator.OCInternal: return http.StatusInternalServerError - case trace.StatusCodeUnavailable: + case tracetranslator.OCUnavailable: return http.StatusServiceUnavailable - case trace.StatusCodeDataLoss: + case tracetranslator.OCDataLoss: return http.StatusInternalServerError - case trace.StatusCodeUnauthenticated: + case tracetranslator.OCUnauthenticated: return http.StatusUnauthorized default: return http.StatusInternalServerError } } -func makeHttp(spanName string, code int32, attributes map[string]interface{}) (map[string]interface{}, *httpInfo) { +func makeHttp(spanKind tracepb.Span_SpanKind, code int32, attributes map[string]*tracepb.AttributeValue) (map[string]string, *httpInfo) { var ( info httpInfo - filtered = map[string]interface{}{} + filtered = make(map[string]string) + urlParts = make(map[string]string) ) for key, value := range attributes { switch key { - case ochttp.MethodAttribute: - info.Request.Method, _ = value.(string) - - case ochttp.UserAgentAttribute: - info.Request.UserAgent, _ = value.(string) - - case ochttp.StatusCodeAttribute: - info.Response.Status, _ = value.(int64) - + case MethodAttribute: + info.Request.Method = value.String() + case UserAgentAttribute: + info.Request.UserAgent = value.String() + case ClientIpAttribute: + info.Request.ClientIP = value.String() + info.Request.XForwardedFor = true + case StatusCodeAttribute: + info.Response.Status = value.GetIntValue() + case URLAttribute: + urlParts[key] = value.String() + case SchemeAttribute: + urlParts[key] = value.String() + case HostAttribute: + urlParts[key] = value.String() + case TargetAttribute: + urlParts[key] = value.String() + case PeerHostAttribute: + urlParts[key] = value.String() + case PeerPortAttribute: + urlParts[key] = value.String() + case PeerIpv4Attribute: + urlParts[key] = value.String() + case PeerIpv6Attribute: + urlParts[key] = value.String() default: - filtered[key] = value + filtered[key] = value.String() } } - info.Request.URL = spanName + if tracepb.Span_SERVER == spanKind { + info.Request.URL = constructServerUrl(urlParts) + } else { + info.Request.URL = constructClientUrl(urlParts) + } if info.Response.Status == 0 { - // this is a fallback because the ochttp.StatusCodeAttribute isn't being set by opencensus-go - // https://github.com/census-instrumentation/opencensus-go/issues/899 info.Response.Status = convertToStatusCode(code) } - if len(filtered) == len(attributes) { - return attributes, nil + return filtered, &info +} + +func constructClientUrl(urlParts map[string]string) string { + // follows OpenTelemetry specification-defined combinations for client spans described in + // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/data-http.md + url, ok := urlParts[URLAttribute] + if ok { + // full URL available so no need to assemble + return url } - return filtered, &info + scheme, ok := urlParts[SchemeAttribute] + if !ok { + scheme = "http" + } + port := "" + host, ok := urlParts[HostAttribute] + if !ok { + host, ok = urlParts[PeerHostAttribute] + if !ok { + host, ok = urlParts[PeerIpv4Attribute] + if !ok { + host = urlParts[PeerIpv6Attribute] + } + } + port, ok = urlParts[PeerPortAttribute] + if !ok { + port = "" + } + } + url = scheme + "://" + host + if len(port) > 0 { + url += ":" + port + } + target, ok := urlParts[TargetAttribute] + if ok { + url += target + } else { + url += "/" + } + return url +} + +func constructServerUrl(urlParts map[string]string) string { + // follows OpenTelemetry specification-defined combinations for server spans described in + // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/data-http.md + url, ok := urlParts[URLAttribute] + if ok { + // full URL available so no need to assemble + return url + } + + scheme, ok := urlParts[SchemeAttribute] + if !ok { + scheme = "http" + } + port := "" + host, ok := urlParts[HostAttribute] + if !ok { + host, ok = urlParts[ServerNameAttribute] + if !ok { + host, ok = urlParts[HostNameAttribute] + } + port, ok = urlParts[PortAttribute] + if !ok { + port = "" + } + } + url = scheme + "://" + host + if len(port) > 0 { + url += ":" + port + } + target, ok := urlParts[TargetAttribute] + if ok { + url += target + } else { + url += "/" + } + return url } diff --git a/exporter/awsxrayexporter/http_test.go b/exporter/awsxrayexporter/http_test.go new file mode 100644 index 000000000000..42da6236c4b8 --- /dev/null +++ b/exporter/awsxrayexporter/http_test.go @@ -0,0 +1,162 @@ +// 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 awsxrayexporter + +import ( + "fmt" + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + "github.com/golang/protobuf/ptypes/timestamp" + "github.com/golang/protobuf/ptypes/wrappers" + "github.com/stretchr/testify/assert" + "reflect" + "testing" + "time" +) + +func TestClientSpanWithUrlAttribute(t *testing.T) { + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "GET" + attributes[URLAttribute] = "https://api.example.com/users/junit" + attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" + attributes[ClientIpAttribute] = "192.168.15.32" + attributes[StatusCodeAttribute] = 200 + span := constructClientSpan(attributes) + + filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + assert.NotNil(t, httpInfo) + assert.NotNil(t, filtered) +} + +func TestClientSpanWithSchemeHostTargetAttributes(t *testing.T) { + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "GET" + attributes[SchemeAttribute] = "https" + attributes[HostAttribute] = "api.example.com" + attributes[TargetAttribute] = "/users/junit" + attributes[StatusCodeAttribute] = 200 + attributes["user.id"] = "junit" + span := constructClientSpan(attributes) + + filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + assert.NotNil(t, httpInfo) + assert.NotNil(t, filtered) +} + +func TestClientSpanWithPeerAttributes(t *testing.T) { + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "GET" + attributes[URLAttribute] = "https://api.example.com/users/junit" + attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" + attributes[ClientIpAttribute] = "192.168.15.32" + attributes[StatusCodeAttribute] = 200 + span := constructClientSpan(attributes) + + filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + assert.NotNil(t, httpInfo) + assert.NotNil(t, filtered) +} + +func TestServerSpanWithUrlAttribute(t *testing.T) { +} + +func TestServerSpanWithSchemeHostTargetAttributes(t *testing.T) { +} + +func constructClientSpan(attributes map[string]interface{}) *tracepb.Span { + endTime := time.Now().Round(time.Second) + startTime := endTime.Add(-90 * time.Second) + spanAttributes := constructSpanAttributes(attributes) + + return &tracepb.Span{ + TraceId: []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}, + SpanId: []byte{0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8}, + ParentSpanId: []byte{0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA, 0xE9, 0xE8}, + Name: &tracepb.TruncatableString{Value: "/users/junit"}, + Kind: tracepb.Span_CLIENT, + StartTime: convertTimeToTimestamp(startTime), + EndTime: convertTimeToTimestamp(endTime), + Status: &tracepb.Status{ + Code: 0, + Message: "OK", + }, + SameProcessAsParentSpan: &wrappers.BoolValue{Value: false}, + Tracestate: &tracepb.Span_Tracestate{ + Entries: []*tracepb.Span_Tracestate_Entry{ + {Key: "foo", Value: "bar"}, + {Key: "a", Value: "b"}, + }, + }, + Attributes: &tracepb.Span_Attributes{ + AttributeMap: spanAttributes, + }, + Resource: &resourcepb.Resource{ + Type: "container", + Labels: constructResourceLabels(), + }, + } +} + +func constructSpanAttributes(attributes map[string]interface{}) map[string]*tracepb.AttributeValue { + attrs := make(map[string]*tracepb.AttributeValue) + for key, value := range attributes { + valType := reflect.TypeOf(value) + var attrVal tracepb.AttributeValue + if valType.Kind() == reflect.Int { + attrVal = tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: int64(value.(int)), + }} + } else if valType.Kind() == reflect.Int64 { + attrVal = tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: value.(int64), + }} + } else { + attrVal = tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ + StringValue: &tracepb.TruncatableString{Value: fmt.Sprintf("%v", value)}, + }} + } + attrs[key] = &attrVal + } + return attrs +} + +func constructResourceLabels() map[string]string { + labels := make(map[string]string) + labels[ServiceNameAttribute] = "signup_aggregator" + labels[ServiceVersionAttribute] = "1.1.12" + labels[ContainerNameAttribute] = "signup_aggregator" + labels[ContainerImageAttribute] = "otel/signupaggregator" + labels[ContainerTagAttribute] = "v1" + labels[K8sClusterAttribute] = "production" + labels[K8sNamespaceAttribute] = "default" + labels[K8sDeploymentAttribute] = "signup_aggregator" + labels[K8sPodAttribute] = "signup_aggregator-x82ufje83" + labels[CloudProviderAttribute] = "aws" + labels[CloudAccountAttribute] = "123456789" + labels[CloudRegionAttribute] = "us-east-1" + labels[CloudZoneAttribute] = "us-east-1c" + return labels +} + +func convertTimeToTimestamp(t time.Time) *timestamp.Timestamp { + if t.IsZero() { + return nil + } + nanoTime := t.UnixNano() + return ×tamp.Timestamp{ + Seconds: nanoTime / 1e9, + Nanos: int32(nanoTime % 1e9), + } +} diff --git a/exporter/awsxrayexporter/segment.go b/exporter/awsxrayexporter/segment.go index 12b34d971488..16750f5385f3 100644 --- a/exporter/awsxrayexporter/segment.go +++ b/exporter/awsxrayexporter/segment.go @@ -19,10 +19,10 @@ import ( "encoding/binary" "encoding/hex" "encoding/json" - "fmt" - "go.opencensus.io/trace" + tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" "math/rand" "os" + "reflect" "regexp" "sync" "time" @@ -32,6 +32,48 @@ import ( // https://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html type origin string +const ( + // Attributes recorded on the span for the requests. + // Only trace exporters will need them. + ComponentAttribute = "component" + HttpComponentType = "http" + RpcComponentType = "rpc" + DbComponentType = "db" + MsgComponentType = "messaging" + PeerAddressAttribute = "peer.address" + PeerHostAttribute = "peer.hostname" + PeerIpv4Attribute = "peer.ipv4" + PeerIpv6Attribute = "peer.ipv6" + PeerPortAttribute = "peer.port" + PeerServiceAttribute = "peer.service" + DbTypeAttribute = "db.type" + DbInstanceAttribute = "db.instance" + DbStatementAttribute = "db.statement" + DbUserAttribute = "db.user" +) + +const ( + ServiceNameAttribute = "service.name" + ServiceNamespaceAttribute = "service.namespace" + ServiceInstanceAttribute = "service.instance.id" + ServiceVersionAttribute = "service.version" + ContainerNameAttribute = "container.name" + ContainerImageAttribute = "container.image.name" + ContainerTagAttribute = "container.image.tag" + K8sClusterAttribute = "k8s.cluster.name" + K8sNamespaceAttribute = "k8s.namespace.name" + K8sPodAttribute = "k8s.pod.name" + K8sDeploymentAttribute = "k8s.deployment.name" + HostHostnameAttribute = "host.hostname" + HostIdAttribute = "host.id" + HostNameAttribute = "host.name" + HostTypeAttribute = "host.type" + CloudProviderAttribute = "cloud.provider" + CloudAccountAttribute = "cloud.account.id" + CloudRegionAttribute = "cloud.region" + CloudZoneAttribute = "cloud.zone" +) + const ( // OriginEC2 span originated from EC2 OriginEC2 origin = "AWS::EC2::Instance" @@ -53,7 +95,7 @@ const ( ) var ( - zeroSpanID = trace.SpanID{} + zeroSpanID = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} r = rand.New(rand.NewSource(time.Now().UnixNano())) // random, not secure mutex = &sync.Mutex{} ) @@ -164,29 +206,6 @@ type service struct { Version string `json:"version,omitempty"` } -// TraceHeader converts an OpenTelemetry span context to AWS X-Ray trace header. -func TraceHeader(sc trace.SpanContext) string { - header := make([]byte, 0, 64) - amazonTraceID := convertToAmazonTraceID(sc.TraceID) - amazonSpanID := convertToAmazonSpanID(sc.SpanID) - - header = append(header, prefixRoot...) - header = append(header, amazonTraceID...) - header = append(header, ";"...) - header = append(header, prefixParent...) - header = append(header, amazonSpanID...) - header = append(header, ";"...) - header = append(header, prefixSampled...) - - if sc.TraceOptions&0x1 == 1 { - header = append(header, "1"...) - } else { - header = append(header, "0"...) - } - - return string(header) -} - // convertToAmazonTraceID converts a trace ID to the Amazon format. // // A trace ID unique identifier that connects all segments and subsegments @@ -198,7 +217,7 @@ func TraceHeader(sc trace.SpanContext) string { // * For example, 10:00AM December 2nd, 2016 PST in epoch time is 1480615200 seconds, // or 58406520 in hexadecimal. // * A 96-bit identifier for the trace, globally unique, in 24 hexadecimal digits. -func convertToAmazonTraceID(traceID trace.TraceID) string { +func convertToAmazonTraceID(traceID []byte) string { const ( // maxAge of 28 days. AWS has a 30 day limit, let's be conservative rather than // hit the limit @@ -236,86 +255,25 @@ func convertToAmazonTraceID(traceID trace.TraceID) string { return string(content[0:traceIDLength]) } -// parseAmazonTraceID parses an amazon traceID string in the format 1-5759e988-bd862e3fe1be46a994272793 -func parseAmazonTraceID(t string) (trace.TraceID, error) { - if v := len(t); v != traceIDLength { - return trace.TraceID{}, fmt.Errorf("invalid amazon trace id; got length %v, want %v", v, traceIDLength) - } - - epoch, err := hex.DecodeString(t[epochOffset : epochOffset+8]) - if err != nil { - return trace.TraceID{}, fmt.Errorf("unable to decode epoch from amazon trace id, %v", err) - } - - identifier, err := hex.DecodeString(t[identifierOffset:]) - if err != nil { - return trace.TraceID{}, fmt.Errorf("unable to decode identifier from amazon trace id, %v", err) - } - - var traceID trace.TraceID - binary.BigEndian.PutUint32(traceID[0:4], binary.BigEndian.Uint32(epoch)) - for index, b := range identifier { - traceID[index+4] = b - } - - return traceID, nil -} - // convertToAmazonSpanID generates an Amazon spanID from a trace.SpanID - a 64-bit identifier // for the segment, unique among segments in the same trace, in 16 hexadecimal digits. -func convertToAmazonSpanID(v trace.SpanID) string { - if v == zeroSpanID { +func convertToAmazonSpanID(v []byte) string { + if reflect.DeepEqual(v, zeroSpanID) { return "" } return hex.EncodeToString(v[0:8]) } -// parseAmazonSpanID parses an amazon spanID -func parseAmazonSpanID(v string) (trace.SpanID, error) { - if v == "" { - return zeroSpanID, nil - } - - if len(v) != spanIDLength { - return trace.SpanID{}, fmt.Errorf("invalid amazon span id; got length %v, want %v", v, spanIDLength) - } - - data, err := hex.DecodeString(v) - if err != nil { - return trace.SpanID{}, fmt.Errorf("unable to decode epoch from amazon trace id, %v", err) - } - - var spanID trace.SpanID - copy(spanID[:], data) - - return spanID, nil -} - -// mergeAnnotations all string, bool, and numeric values from src to dest, fixing keys as needed -func mergeAnnotations(dest, src map[string]interface{}) { +func mergeAnnotations(dest map[string]interface{}, src map[string]string) { for key, value := range src { key = fixAnnotationKey(key) - switch value.(type) { - case bool: - dest[key] = value - case string: - dest[key] = value - case int, int8, int16, int32, int64: - dest[key] = value - case uint, uint8, uint16, uint32, uint64: - dest[key] = value - case float32, float64: - dest[key] = value - } + dest[key] = value } } -func makeAnnotations(annotations []trace.Annotation, attributes map[string]interface{}) map[string]interface{} { +func makeAnnotations(attributes map[string]string) map[string]interface{} { var result = map[string]interface{}{} - for _, annotation := range annotations { - mergeAnnotations(result, annotation.Attributes) - } mergeAnnotations(result, attributes) if len(result) == 0 { @@ -324,7 +282,7 @@ func makeAnnotations(annotations []trace.Annotation, attributes map[string]inter return result } -func makeCause(status trace.Status) (isError, isFault bool, cause *errCause) { +func makeCause(status *tracepb.Status, attributes map[string]string) (isError, isFault bool, cause *errCause) { if status.Code == 0 { return } @@ -390,34 +348,34 @@ func fixAnnotationKey(key string) string { return key } -func rawSegment(name string, span *trace.SpanData) segment { +func rawSegment(name string, span *tracepb.Span) segment { var ( - traceID = convertToAmazonTraceID(span.TraceID) - startMicros = span.StartTime.UnixNano() / int64(time.Microsecond) + traceID = convertToAmazonTraceID(span.TraceId) + startMicros = span.StartTime.Nanos / int32(time.Microsecond) startTime = float64(startMicros) / 1e6 - endMicros = span.EndTime.UnixNano() / int64(time.Microsecond) + endMicros = span.EndTime.Nanos / int32(time.Microsecond) endTime = float64(endMicros) / 1e6 - filtered, http = makeHttp(span.Name, span.Code, span.Attributes) - isError, isFault, cause = makeCause(span.Status) - annotations = makeAnnotations(span.Annotations, filtered) + filtered, http = makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + isError, isFault, cause = makeCause(span.Status, filtered) + annotations = makeAnnotations(span.Resource.GetLabels()) namespace string ) if name == "" { - name = fixSegmentName(span.Name) + name = fixSegmentName(span.Name.String()) } - if span.HasRemoteParent { + if span.ParentSpanId != nil { namespace = "remote" } return segment{ - ID: convertToAmazonSpanID(span.SpanID), + ID: convertToAmazonSpanID(span.SpanId), TraceID: traceID, Name: name, StartTime: startTime, EndTime: endTime, Namespace: namespace, - ParentID: convertToAmazonSpanID(span.ParentSpanID), + ParentID: convertToAmazonSpanID(span.ParentSpanId), Annotations: annotations, Http: http, Error: isError, From 30506d56aaf5ab2aa2afa571e505b5036ce61d04 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Thu, 14 Nov 2019 11:02:27 -0600 Subject: [PATCH 36/59] initial dev of xray data structures and converters --- exporter/awsxrayexporter/http.go | 44 +++-- exporter/awsxrayexporter/http_test.go | 221 +++++++++++++++++++++++++- 2 files changed, 246 insertions(+), 19 deletions(-) diff --git a/exporter/awsxrayexporter/http.go b/exporter/awsxrayexporter/http.go index 0f53b3168fcf..1a38c6f2d044 100644 --- a/exporter/awsxrayexporter/http.go +++ b/exporter/awsxrayexporter/http.go @@ -18,6 +18,7 @@ import ( tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" "net/http" + "strconv" ) const ( @@ -36,6 +37,7 @@ const ( RouteAttribute = "http.route" ClientIpAttribute = "http.client_ip" UserAgentAttribute = "http.user_agent" + ContentLenAttribute = "http.resp.content_length" ) // httpRequest – Information about an http request. @@ -132,32 +134,46 @@ func makeHttp(spanKind tracepb.Span_SpanKind, code int32, attributes map[string] for key, value := range attributes { switch key { case MethodAttribute: - info.Request.Method = value.String() + info.Request.Method = value.GetStringValue().GetValue() case UserAgentAttribute: - info.Request.UserAgent = value.String() + info.Request.UserAgent = value.GetStringValue().GetValue() case ClientIpAttribute: - info.Request.ClientIP = value.String() + info.Request.ClientIP = value.GetStringValue().GetValue() info.Request.XForwardedFor = true case StatusCodeAttribute: info.Response.Status = value.GetIntValue() case URLAttribute: - urlParts[key] = value.String() + urlParts[key] = value.GetStringValue().GetValue() case SchemeAttribute: - urlParts[key] = value.String() + urlParts[key] = value.GetStringValue().GetValue() case HostAttribute: - urlParts[key] = value.String() + urlParts[key] = value.GetStringValue().GetValue() case TargetAttribute: - urlParts[key] = value.String() + urlParts[key] = value.GetStringValue().GetValue() + case ServerNameAttribute: + urlParts[key] = value.GetStringValue().GetValue() + case HostNameAttribute: + urlParts[key] = value.GetStringValue().GetValue() + case PortAttribute: + urlParts[key] = value.GetStringValue().GetValue() + if len(urlParts[key]) == 0 { + urlParts[key] = strconv.FormatInt(value.GetIntValue(), 10) + } case PeerHostAttribute: - urlParts[key] = value.String() + urlParts[key] = value.GetStringValue().GetValue() case PeerPortAttribute: - urlParts[key] = value.String() + urlParts[key] = value.GetStringValue().GetValue() + if len(urlParts[key]) == 0 { + urlParts[key] = strconv.FormatInt(value.GetIntValue(), 10) + } case PeerIpv4Attribute: - urlParts[key] = value.String() + urlParts[key] = value.GetStringValue().GetValue() case PeerIpv6Attribute: - urlParts[key] = value.String() + urlParts[key] = value.GetStringValue().GetValue() + case ContentLenAttribute: + info.Response.ContentLength = value.GetIntValue() default: - filtered[key] = value.String() + filtered[key] = value.GetStringValue().GetValue() } } @@ -203,7 +219,7 @@ func constructClientUrl(urlParts map[string]string) string { } } url = scheme + "://" + host - if len(port) > 0 { + if len(port) > 0 && !(scheme == "http" && port == "80") && !(scheme == "https" && port == "443") { url += ":" + port } target, ok := urlParts[TargetAttribute] @@ -241,7 +257,7 @@ func constructServerUrl(urlParts map[string]string) string { } } url = scheme + "://" + host - if len(port) > 0 { + if len(port) > 0 && !(scheme == "http" && port == "80") && !(scheme == "https" && port == "443") { url += ":" + port } target, ok := urlParts[TargetAttribute] diff --git a/exporter/awsxrayexporter/http_test.go b/exporter/awsxrayexporter/http_test.go index 42da6236c4b8..7b7f0df8aca9 100644 --- a/exporter/awsxrayexporter/http_test.go +++ b/exporter/awsxrayexporter/http_test.go @@ -22,6 +22,7 @@ import ( "github.com/golang/protobuf/ptypes/wrappers" "github.com/stretchr/testify/assert" "reflect" + "strings" "testing" "time" ) @@ -30,14 +31,20 @@ func TestClientSpanWithUrlAttribute(t *testing.T) { attributes := make(map[string]interface{}) attributes[MethodAttribute] = "GET" attributes[URLAttribute] = "https://api.example.com/users/junit" - attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[ClientIpAttribute] = "192.168.15.32" attributes[StatusCodeAttribute] = 200 span := constructClientSpan(attributes) filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + assert.NotNil(t, httpInfo) assert.NotNil(t, filtered) + w := borrow() + if err := w.Encode(httpInfo); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } func TestClientSpanWithSchemeHostTargetAttributes(t *testing.T) { @@ -51,28 +58,198 @@ func TestClientSpanWithSchemeHostTargetAttributes(t *testing.T) { span := constructClientSpan(attributes) filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + assert.NotNil(t, httpInfo) assert.NotNil(t, filtered) + w := borrow() + if err := w.Encode(httpInfo); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } func TestClientSpanWithPeerAttributes(t *testing.T) { attributes := make(map[string]interface{}) attributes[MethodAttribute] = "GET" - attributes[URLAttribute] = "https://api.example.com/users/junit" - attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[ClientIpAttribute] = "192.168.15.32" + attributes[SchemeAttribute] = "http" + attributes[PeerHostAttribute] = "kb234.example.com" + attributes[PeerPortAttribute] = 8080 + attributes[PeerIpv4Attribute] = "10.8.17.36" + attributes[TargetAttribute] = "/users/junit" attributes[StatusCodeAttribute] = 200 span := constructClientSpan(attributes) + filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + + assert.NotNil(t, httpInfo) + assert.NotNil(t, filtered) + w := borrow() + if err := w.Encode(httpInfo); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, "http://kb234.example.com:8080/users/junit")) +} + +func TestClientSpanWithPeerIp4Attributes(t *testing.T) { + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "GET" + attributes[SchemeAttribute] = "http" + attributes[PeerIpv4Attribute] = "10.8.17.36" + attributes[PeerPortAttribute] = "8080" + attributes[TargetAttribute] = "/users/junit" + span := constructClientSpan(attributes) + filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) assert.NotNil(t, httpInfo) assert.NotNil(t, filtered) + w := borrow() + if err := w.Encode(httpInfo); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, "http://10.8.17.36:8080/users/junit")) +} + +func TestClientSpanWithPeerIp6Attributes(t *testing.T) { + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "GET" + attributes[SchemeAttribute] = "https" + attributes[PeerIpv6Attribute] = "2001:db8:85a3::8a2e:370:7334" + attributes[PeerPortAttribute] = "443" + attributes[TargetAttribute] = "/users/junit" + span := constructClientSpan(attributes) + + filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + assert.NotNil(t, httpInfo) + assert.NotNil(t, filtered) + w := borrow() + if err := w.Encode(httpInfo); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, "https://2001:db8:85a3::8a2e:370:7334/users/junit")) } func TestServerSpanWithUrlAttribute(t *testing.T) { + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "GET" + attributes[URLAttribute] = "https://api.example.com/users/junit" + attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" + attributes[ClientIpAttribute] = "192.168.15.32" + attributes[StatusCodeAttribute] = 200 + span := constructServerSpan(attributes) + + filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + + assert.NotNil(t, httpInfo) + assert.NotNil(t, filtered) + w := borrow() + if err := w.Encode(httpInfo); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } func TestServerSpanWithSchemeHostTargetAttributes(t *testing.T) { + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "GET" + attributes[SchemeAttribute] = "https" + attributes[HostAttribute] = "api.example.com" + attributes[TargetAttribute] = "/users/junit" + attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" + attributes[ClientIpAttribute] = "192.168.15.32" + attributes[StatusCodeAttribute] = 200 + span := constructServerSpan(attributes) + + filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + + assert.NotNil(t, httpInfo) + assert.NotNil(t, filtered) + w := borrow() + if err := w.Encode(httpInfo); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) +} + +func TestServerSpanWithSchemeServernamePortTargetAttributes(t *testing.T) { + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "GET" + attributes[SchemeAttribute] = "https" + attributes[ServerNameAttribute] = "api.example.com" + attributes[PortAttribute] = 443 + attributes[TargetAttribute] = "/users/junit" + attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" + attributes[ClientIpAttribute] = "192.168.15.32" + attributes[StatusCodeAttribute] = 200 + span := constructServerSpan(attributes) + + filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + + assert.NotNil(t, httpInfo) + assert.NotNil(t, filtered) + w := borrow() + if err := w.Encode(httpInfo); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) +} + +func TestServerSpanWithSchemeNamePortTargetAttributes(t *testing.T) { + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "GET" + attributes[SchemeAttribute] = "http" + attributes[HostNameAttribute] = "kb234.example.com" + attributes[PortAttribute] = 8080 + attributes[TargetAttribute] = "/users/junit" + attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" + attributes[ClientIpAttribute] = "192.168.15.32" + attributes[StatusCodeAttribute] = 200 + attributes[ContentLenAttribute] = 21378 + span := constructServerSpan(attributes) + + filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + + assert.NotNil(t, httpInfo) + assert.NotNil(t, filtered) + w := borrow() + if err := w.Encode(httpInfo); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, "http://kb234.example.com:8080/users/junit")) +} + +func TestHttpStatusFromSpanStatus(t *testing.T) { + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "GET" + attributes[URLAttribute] = "https://api.example.com/users/junit" + span := constructClientSpan(attributes) + + filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + + assert.NotNil(t, httpInfo) + assert.NotNil(t, filtered) + w := borrow() + if err := w.Encode(httpInfo); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, "200")) } func constructClientSpan(attributes map[string]interface{}) *tracepb.Span { @@ -109,6 +286,40 @@ func constructClientSpan(attributes map[string]interface{}) *tracepb.Span { } } +func constructServerSpan(attributes map[string]interface{}) *tracepb.Span { + endTime := time.Now().Round(time.Second) + startTime := endTime.Add(-90 * time.Second) + spanAttributes := constructSpanAttributes(attributes) + + return &tracepb.Span{ + TraceId: []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}, + SpanId: []byte{0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8}, + ParentSpanId: []byte{0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA, 0xE9, 0xE8}, + Name: &tracepb.TruncatableString{Value: "/users/junit"}, + Kind: tracepb.Span_SERVER, + StartTime: convertTimeToTimestamp(startTime), + EndTime: convertTimeToTimestamp(endTime), + Status: &tracepb.Status{ + Code: 0, + Message: "OK", + }, + SameProcessAsParentSpan: &wrappers.BoolValue{Value: false}, + Tracestate: &tracepb.Span_Tracestate{ + Entries: []*tracepb.Span_Tracestate_Entry{ + {Key: "foo", Value: "bar"}, + {Key: "a", Value: "b"}, + }, + }, + Attributes: &tracepb.Span_Attributes{ + AttributeMap: spanAttributes, + }, + Resource: &resourcepb.Resource{ + Type: "container", + Labels: constructResourceLabels(), + }, + } +} + func constructSpanAttributes(attributes map[string]interface{}) map[string]*tracepb.AttributeValue { attrs := make(map[string]*tracepb.AttributeValue) for key, value := range attributes { From 029eba8454f3790a6ef6a8443defcc0f0a8025b1 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Thu, 14 Nov 2019 15:53:29 -0600 Subject: [PATCH 37/59] initial dev of xray data structures and converters --- exporter/awsxrayexporter/cause.go | 120 ++++++++++++++++++++++++ exporter/awsxrayexporter/cause_test.go | 124 +++++++++++++++++++++++++ exporter/awsxrayexporter/error.go | 33 ------- exporter/awsxrayexporter/http.go | 57 ++++-------- exporter/awsxrayexporter/http_test.go | 60 ++++++------ exporter/awsxrayexporter/segment.go | 41 +------- 6 files changed, 294 insertions(+), 141 deletions(-) create mode 100644 exporter/awsxrayexporter/cause.go create mode 100644 exporter/awsxrayexporter/cause_test.go delete mode 100644 exporter/awsxrayexporter/error.go diff --git a/exporter/awsxrayexporter/cause.go b/exporter/awsxrayexporter/cause.go new file mode 100644 index 000000000000..6d40e85f7175 --- /dev/null +++ b/exporter/awsxrayexporter/cause.go @@ -0,0 +1,120 @@ +// 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 awsxrayexporter + +import ( + "encoding/hex" + tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + "os" + "strings" +) + +const ( + ErrorObjectAttribute = "error.object" + ErrorMessageAttribute = "error.message" + ErrorStackAttribute = "error.stack" + ErrorKindAttribute = "error.kind" +) + +// CauseData provides the shape for unmarshalling data that records exception. +type CauseData struct { + WorkingDirectory string `json:"working_directory,omitempty"` + Paths []string `json:"paths,omitempty"` + Exceptions []Exception `json:"exceptions,omitempty"` +} + +// Exception provides the shape for unmarshalling an exception. +type Exception struct { + ID string `json:"id,omitempty"` + Type string `json:"type,omitempty"` + Message string `json:"message,omitempty"` + Stack []Stack `json:"stack,omitempty"` + Remote bool `json:"remote,omitempty"` +} + +// Stack provides the shape for unmarshalling an stack. +type Stack struct { + Path string `json:"path,omitempty"` + Line int `json:"line,omitempty"` + Label string `json:"label,omitempty"` +} + +func makeCause(status *tracepb.Status, attributes map[string]string) (isError, isFault bool, cause *CauseData) { + if status.Code == 0 { + return + } + + message := status.GetMessage() + if message == "" { + message = attributes[ErrorMessageAttribute] + } + if message == "" { + message = attributes[StatusTextAttribute] + } + if message == "" { + message = attributes[ErrorObjectAttribute] + } + + if message != "" { + id := make([]byte, 8) + mutex.Lock() + r.Read(id) // rand.Read always returns nil + mutex.Unlock() + + hexID := hex.EncodeToString(id) + + cause = &CauseData{ + Exceptions: []Exception{ + { + ID: hexID, + Type: attributes[ErrorKindAttribute], + Message: message, + }, + }, + } + + stackStr := attributes[ErrorStackAttribute] + if stackStr != "" { + cause.Exceptions[0].Stack = parseStackData(stackStr) + } + + if dir, err := os.Getwd(); err == nil { + cause.WorkingDirectory = dir + } + } + + if isClientError(status.Code) { + isError = true + return + } + + isFault = true + return +} + +func parseStackData(stackStr string) []Stack { + parts := strings.Split(stackStr, "|") + stacks := make([]Stack, len(parts)) + for i, part := range parts { + stacks[i] = Stack{ + Label: part, + } + } + return stacks +} + +func isClientError(code int32) bool { + return false +} diff --git a/exporter/awsxrayexporter/cause_test.go b/exporter/awsxrayexporter/cause_test.go new file mode 100644 index 000000000000..d4ae904d8650 --- /dev/null +++ b/exporter/awsxrayexporter/cause_test.go @@ -0,0 +1,124 @@ +// 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 awsxrayexporter + +import ( + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + "github.com/stretchr/testify/assert" + "strings" + "testing" + "time" +) + +func TestCauseWithStatusMessage(t *testing.T) { + errorMsg := "this is a test" + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "POST" + attributes[URLAttribute] = "https://api.example.com/widgets" + attributes[StatusCodeAttribute] = 500 + span := constructExceptionServerSpan(attributes) + span.Status.Message = errorMsg + filtered, _ := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + + isError, isFault, cause := makeCause(span.Status, filtered) + + assert.False(t, isError) + assert.True(t, isFault) + assert.NotNil(t, cause) + w := borrow() + if err := w.Encode(cause); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, errorMsg)) +} + +func TestCauseWithHttpStatusMessage(t *testing.T) { + errorMsg := "this is a test" + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "POST" + attributes[URLAttribute] = "https://api.example.com/widgets" + attributes[StatusCodeAttribute] = 500 + attributes[StatusTextAttribute] = errorMsg + span := constructExceptionServerSpan(attributes) + filtered, _ := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + + isError, isFault, cause := makeCause(span.Status, filtered) + + assert.False(t, isError) + assert.True(t, isFault) + assert.NotNil(t, cause) + w := borrow() + if err := w.Encode(cause); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, errorMsg)) +} + +func TestCauseWithErrorMessage(t *testing.T) { + errorMsg := "this is a test" + attributes := make(map[string]interface{}) + attributes[MethodAttribute] = "POST" + attributes[URLAttribute] = "https://api.example.com/widgets" + attributes[StatusCodeAttribute] = 500 + attributes[ErrorMessageAttribute] = errorMsg + attributes[ErrorStackAttribute] = "org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749)" + span := constructExceptionServerSpan(attributes) + filtered, _ := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + + isError, isFault, cause := makeCause(span.Status, filtered) + + assert.False(t, isError) + assert.True(t, isFault) + assert.NotNil(t, cause) + w := borrow() + if err := w.Encode(cause); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + w.Reset() + assert.True(t, strings.Contains(jsonStr, errorMsg)) + assert.True(t, strings.Contains(jsonStr, "ConstructorResolver")) +} + +func constructExceptionServerSpan(attributes map[string]interface{}) *tracepb.Span { + endTime := time.Now().Round(time.Second) + startTime := endTime.Add(-90 * time.Second) + spanAttributes := constructSpanAttributes(attributes) + + return &tracepb.Span{ + TraceId: []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}, + SpanId: []byte{0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8}, + ParentSpanId: []byte{0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA, 0xE9, 0xE8}, + Name: &tracepb.TruncatableString{Value: "/widgets"}, + Kind: tracepb.Span_SERVER, + StartTime: convertTimeToTimestamp(startTime), + EndTime: convertTimeToTimestamp(endTime), + Status: &tracepb.Status{ + Code: 13, + }, + Attributes: &tracepb.Span_Attributes{ + AttributeMap: spanAttributes, + }, + Resource: &resourcepb.Resource{ + Type: "container", + Labels: constructResourceLabels(), + }, + } +} diff --git a/exporter/awsxrayexporter/error.go b/exporter/awsxrayexporter/error.go deleted file mode 100644 index 0dacc67800eb..000000000000 --- a/exporter/awsxrayexporter/error.go +++ /dev/null @@ -1,33 +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 awsxrayexporter - -type exception struct { - // ID – A 64-bit identifier for the exception, unique among segments in the same trace, - // in 16 hexadecimal digits. - ID string `json:"id"` - - // Message – The exception message. - Message string `json:"message,omitempty"` -} - -// cause - A cause can be either a 16 character exception ID or an object with the following fields: -type errCause struct { - // WorkingDirectory – The full path of the working directory when the exception occurred. - WorkingDirectory string `json:"working_directory"` - - // Exceptions - The array of exception objects. - Exceptions []exception `json:"exceptions,omitempty"` -} diff --git a/exporter/awsxrayexporter/http.go b/exporter/awsxrayexporter/http.go index 1a38c6f2d044..c4428f960636 100644 --- a/exporter/awsxrayexporter/http.go +++ b/exporter/awsxrayexporter/http.go @@ -40,47 +40,26 @@ const ( ContentLenAttribute = "http.resp.content_length" ) -// httpRequest – Information about an http request. -type httpRequest struct { - // Method – The request method. For example, GET. - Method string `json:"method,omitempty"` - - // URL – The full URL of the request, compiled from the protocol, hostname, - // and path of the request. - URL string `json:"url,omitempty"` - - // UserAgent – The user agent string from the requester's client. - UserAgent string `json:"user_agent,omitempty"` - - // ClientIP – The IP address of the requester. Can be retrieved from the IP - // packet's Source Address or, for forwarded requests, from an X-Forwarded-For - // header. - ClientIP string `json:"client_ip,omitempty"` - - // XForwardedFor – (segments only) boolean indicating that the client_ip was - // read from an X-Forwarded-For header and is not reliable as it could have - // been forged. - XForwardedFor bool `json:"x_forwarded_for,omitempty"` - - // Traced – (subsegments only) boolean indicating that the downstream call - // is to another traced service. If this field is set to true, X-Ray considers - // the trace to be broken until the downstream service uploads a segment with - // a parent_id that matches the id of the subsegment that contains this block. - Traced bool `json:"traced,omitempty"` +// HTTPData provides the shape for unmarshalling request and response data. +type HTTPData struct { + Request RequestData `json:"request,omitempty"` + Response ResponseData `json:"response,omitempty"` } -// httpResponse - Information about an http response. -type httpResponse struct { - // Status – number indicating the HTTP status of the response. - Status int64 `json:"status,omitempty"` - - // ContentLength – number indicating the length of the response body in bytes. - ContentLength int64 `json:"content_length,omitempty"` +// RequestData provides the shape for unmarshalling request data. +type RequestData struct { + Method string `json:"method,omitempty"` + URL string `json:"url,omitempty"` // http(s)://host/path + ClientIP string `json:"client_ip,omitempty"` + UserAgent string `json:"user_agent,omitempty"` + XForwardedFor bool `json:"x_forwarded_for,omitempty"` + Traced bool `json:"traced,omitempty"` } -type httpInfo struct { - Request httpRequest `json:"request"` - Response httpResponse `json:"response"` +// ResponseData provides the shape for unmarshalling response data. +type ResponseData struct { + Status int64 `json:"status,omitempty"` + ContentLength int64 `json:"content_length,omitempty"` } func convertToStatusCode(code int32) int64 { @@ -124,9 +103,9 @@ func convertToStatusCode(code int32) int64 { } } -func makeHttp(spanKind tracepb.Span_SpanKind, code int32, attributes map[string]*tracepb.AttributeValue) (map[string]string, *httpInfo) { +func makeHttp(spanKind tracepb.Span_SpanKind, code int32, attributes map[string]*tracepb.AttributeValue) (map[string]string, *HTTPData) { var ( - info httpInfo + info HTTPData filtered = make(map[string]string) urlParts = make(map[string]string) ) diff --git a/exporter/awsxrayexporter/http_test.go b/exporter/awsxrayexporter/http_test.go index 7b7f0df8aca9..60892eb47970 100644 --- a/exporter/awsxrayexporter/http_test.go +++ b/exporter/awsxrayexporter/http_test.go @@ -34,12 +34,12 @@ func TestClientSpanWithUrlAttribute(t *testing.T) { attributes[StatusCodeAttribute] = 200 span := constructClientSpan(attributes) - filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) - assert.NotNil(t, httpInfo) + assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() - if err := w.Encode(httpInfo); err != nil { + if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() @@ -57,12 +57,12 @@ func TestClientSpanWithSchemeHostTargetAttributes(t *testing.T) { attributes["user.id"] = "junit" span := constructClientSpan(attributes) - filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) - assert.NotNil(t, httpInfo) + assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() - if err := w.Encode(httpInfo); err != nil { + if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() @@ -81,12 +81,12 @@ func TestClientSpanWithPeerAttributes(t *testing.T) { attributes[StatusCodeAttribute] = 200 span := constructClientSpan(attributes) - filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) - assert.NotNil(t, httpInfo) + assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() - if err := w.Encode(httpInfo); err != nil { + if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() @@ -103,11 +103,11 @@ func TestClientSpanWithPeerIp4Attributes(t *testing.T) { attributes[TargetAttribute] = "/users/junit" span := constructClientSpan(attributes) - filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) - assert.NotNil(t, httpInfo) + filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() - if err := w.Encode(httpInfo); err != nil { + if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() @@ -124,11 +124,11 @@ func TestClientSpanWithPeerIp6Attributes(t *testing.T) { attributes[TargetAttribute] = "/users/junit" span := constructClientSpan(attributes) - filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) - assert.NotNil(t, httpInfo) + filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() - if err := w.Encode(httpInfo); err != nil { + if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() @@ -145,12 +145,12 @@ func TestServerSpanWithUrlAttribute(t *testing.T) { attributes[StatusCodeAttribute] = 200 span := constructServerSpan(attributes) - filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) - assert.NotNil(t, httpInfo) + assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() - if err := w.Encode(httpInfo); err != nil { + if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() @@ -169,12 +169,12 @@ func TestServerSpanWithSchemeHostTargetAttributes(t *testing.T) { attributes[StatusCodeAttribute] = 200 span := constructServerSpan(attributes) - filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) - assert.NotNil(t, httpInfo) + assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() - if err := w.Encode(httpInfo); err != nil { + if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() @@ -194,12 +194,12 @@ func TestServerSpanWithSchemeServernamePortTargetAttributes(t *testing.T) { attributes[StatusCodeAttribute] = 200 span := constructServerSpan(attributes) - filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) - assert.NotNil(t, httpInfo) + assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() - if err := w.Encode(httpInfo); err != nil { + if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() @@ -220,12 +220,12 @@ func TestServerSpanWithSchemeNamePortTargetAttributes(t *testing.T) { attributes[ContentLenAttribute] = 21378 span := constructServerSpan(attributes) - filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) - assert.NotNil(t, httpInfo) + assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() - if err := w.Encode(httpInfo); err != nil { + if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() @@ -239,12 +239,12 @@ func TestHttpStatusFromSpanStatus(t *testing.T) { attributes[URLAttribute] = "https://api.example.com/users/junit" span := constructClientSpan(attributes) - filtered, httpInfo := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) - assert.NotNil(t, httpInfo) + assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() - if err := w.Encode(httpInfo); err != nil { + if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() diff --git a/exporter/awsxrayexporter/segment.go b/exporter/awsxrayexporter/segment.go index 16750f5385f3..954d66e6646b 100644 --- a/exporter/awsxrayexporter/segment.go +++ b/exporter/awsxrayexporter/segment.go @@ -21,7 +21,6 @@ import ( "encoding/json" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" "math/rand" - "os" "reflect" "regexp" "sync" @@ -182,7 +181,7 @@ type segment struct { Service *service `json:"service,omitempty"` // Http - optional xray specific http settings - Http *httpInfo `json:"http,omitempty"` + Http *HTTPData `json:"http,omitempty"` // Error - boolean indicating that a client error occurred // (response status code was 4XX Client Error). @@ -193,7 +192,7 @@ type segment struct { Fault bool `json:"fault,omitempty"` // Cause - Cause *errCause `json:"cause,omitempty"` + Cause *CauseData `json:"cause,omitempty"` /* -- Used by SubSegments only ------------------------ */ @@ -282,42 +281,6 @@ func makeAnnotations(attributes map[string]string) map[string]interface{} { return result } -func makeCause(status *tracepb.Status, attributes map[string]string) (isError, isFault bool, cause *errCause) { - if status.Code == 0 { - return - } - - if status.Message != "" { - id := make([]byte, 8) - mutex.Lock() - r.Read(id) // rand.Read always returns nil - mutex.Unlock() - - hexID := hex.EncodeToString(id) - - cause = &errCause{ - Exceptions: []exception{ - { - ID: hexID, - Message: status.Message, - }, - }, - } - - if dir, err := os.Getwd(); err == nil { - cause.WorkingDirectory = dir - } - } - - if status.Code >= 400 && status.Code < 500 { - isError = true - return - } - - isFault = true - return -} - // fixSegmentName removes any invalid characters from the span name. AWS X-Ray defines // the list of valid characters here: // https://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html From 22c2ae6564b777e482ac361ae9066b24d8d40317 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Fri, 15 Nov 2019 15:42:41 -0600 Subject: [PATCH 38/59] initial dev of xray data structures and converters --- .../awsxrayexporter/{ => otel2xray}/cause.go | 2 +- .../{ => otel2xray}/cause_test.go | 8 +- .../{ => otel2xray}/converter.go | 4 +- .../awsxrayexporter/{ => otel2xray}/http.go | 16 +- .../{ => otel2xray}/http_test.go | 56 +++-- .../{ => otel2xray}/segment.go | 234 ++++++++---------- exporter/awsxrayexporter/otel2xray/service.go | 48 ++++ .../awsxrayexporter/otel2xray/service_test.go | 48 ++++ exporter/awsxrayexporter/otel2xray/sql.go | 53 ++++ .../awsxrayexporter/otel2xray/sql_test.go | 60 +++++ 10 files changed, 359 insertions(+), 170 deletions(-) rename exporter/awsxrayexporter/{ => otel2xray}/cause.go (99%) rename exporter/awsxrayexporter/{ => otel2xray}/cause_test.go (98%) rename exporter/awsxrayexporter/{ => otel2xray}/converter.go (95%) rename exporter/awsxrayexporter/{ => otel2xray}/http.go (94%) rename exporter/awsxrayexporter/{ => otel2xray}/http_test.go (90%) rename exporter/awsxrayexporter/{ => otel2xray}/segment.go (64%) create mode 100644 exporter/awsxrayexporter/otel2xray/service.go create mode 100644 exporter/awsxrayexporter/otel2xray/service_test.go create mode 100644 exporter/awsxrayexporter/otel2xray/sql.go create mode 100644 exporter/awsxrayexporter/otel2xray/sql_test.go diff --git a/exporter/awsxrayexporter/cause.go b/exporter/awsxrayexporter/otel2xray/cause.go similarity index 99% rename from exporter/awsxrayexporter/cause.go rename to exporter/awsxrayexporter/otel2xray/cause.go index 6d40e85f7175..ae528254a90c 100644 --- a/exporter/awsxrayexporter/cause.go +++ b/exporter/awsxrayexporter/otel2xray/cause.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package awsxrayexporter +package otel2xray import ( "encoding/hex" diff --git a/exporter/awsxrayexporter/cause_test.go b/exporter/awsxrayexporter/otel2xray/cause_test.go similarity index 98% rename from exporter/awsxrayexporter/cause_test.go rename to exporter/awsxrayexporter/otel2xray/cause_test.go index d4ae904d8650..8a2cf093a47a 100644 --- a/exporter/awsxrayexporter/cause_test.go +++ b/exporter/awsxrayexporter/otel2xray/cause_test.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package awsxrayexporter +package otel2xray import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" @@ -43,7 +43,7 @@ func TestCauseWithStatusMessage(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, errorMsg)) } @@ -67,7 +67,7 @@ func TestCauseWithHttpStatusMessage(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, errorMsg)) } @@ -92,7 +92,7 @@ func TestCauseWithErrorMessage(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, errorMsg)) assert.True(t, strings.Contains(jsonStr, "ConstructorResolver")) } diff --git a/exporter/awsxrayexporter/converter.go b/exporter/awsxrayexporter/otel2xray/converter.go similarity index 95% rename from exporter/awsxrayexporter/converter.go rename to exporter/awsxrayexporter/otel2xray/converter.go index acf7cee0caac..cbc265d88356 100644 --- a/exporter/awsxrayexporter/converter.go +++ b/exporter/awsxrayexporter/otel2xray/converter.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package awsxrayexporter +package otel2xray import ( "github.com/aws/aws-sdk-go/service/xray" @@ -22,7 +22,7 @@ import ( func ConvertTraceDataToXRay(td consumerdata.TraceData) *xray.PutTraceSegmentsInput { documents := make([]*string, len(td.Spans)) //for i, span := range td.Spans { - // seg := segment{} + // seg := Segment{} //} input := xray.PutTraceSegmentsInput{TraceSegmentDocuments: documents} return &input diff --git a/exporter/awsxrayexporter/http.go b/exporter/awsxrayexporter/otel2xray/http.go similarity index 94% rename from exporter/awsxrayexporter/http.go rename to exporter/awsxrayexporter/otel2xray/http.go index c4428f960636..488e12be2d2b 100644 --- a/exporter/awsxrayexporter/http.go +++ b/exporter/awsxrayexporter/otel2xray/http.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package awsxrayexporter +package otel2xray import ( tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" @@ -105,13 +105,17 @@ func convertToStatusCode(code int32) int64 { func makeHttp(spanKind tracepb.Span_SpanKind, code int32, attributes map[string]*tracepb.AttributeValue) (map[string]string, *HTTPData) { var ( - info HTTPData - filtered = make(map[string]string) - urlParts = make(map[string]string) + info HTTPData + filtered = make(map[string]string) + urlParts = make(map[string]string) + componentValue string ) for key, value := range attributes { switch key { + case ComponentAttribute: + componentValue = value.GetStringValue().GetValue() + filtered[key] = componentValue case MethodAttribute: info.Request.Method = value.GetStringValue().GetValue() case UserAgentAttribute: @@ -156,6 +160,10 @@ func makeHttp(spanKind tracepb.Span_SpanKind, code int32, attributes map[string] } } + if (componentValue != HttpComponentType && componentValue != RpcComponentType) || info.Request.Method == "" { + return filtered, nil + } + if tracepb.Span_SERVER == spanKind { info.Request.URL = constructServerUrl(urlParts) } else { diff --git a/exporter/awsxrayexporter/http_test.go b/exporter/awsxrayexporter/otel2xray/http_test.go similarity index 90% rename from exporter/awsxrayexporter/http_test.go rename to exporter/awsxrayexporter/otel2xray/http_test.go index 60892eb47970..2dcad4b1d4de 100644 --- a/exporter/awsxrayexporter/http_test.go +++ b/exporter/awsxrayexporter/otel2xray/http_test.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package awsxrayexporter +package otel2xray import ( "fmt" @@ -29,10 +29,11 @@ import ( func TestClientSpanWithUrlAttribute(t *testing.T) { attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HttpComponentType attributes[MethodAttribute] = "GET" attributes[URLAttribute] = "https://api.example.com/users/junit" attributes[StatusCodeAttribute] = 200 - span := constructClientSpan(attributes) + span := constructHttpClientSpan(attributes) filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) @@ -43,19 +44,20 @@ func TestClientSpanWithUrlAttribute(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } func TestClientSpanWithSchemeHostTargetAttributes(t *testing.T) { attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HttpComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "https" attributes[HostAttribute] = "api.example.com" attributes[TargetAttribute] = "/users/junit" attributes[StatusCodeAttribute] = 200 attributes["user.id"] = "junit" - span := constructClientSpan(attributes) + span := constructHttpClientSpan(attributes) filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) @@ -66,12 +68,13 @@ func TestClientSpanWithSchemeHostTargetAttributes(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } func TestClientSpanWithPeerAttributes(t *testing.T) { attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HttpComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "http" attributes[PeerHostAttribute] = "kb234.example.com" @@ -79,7 +82,7 @@ func TestClientSpanWithPeerAttributes(t *testing.T) { attributes[PeerIpv4Attribute] = "10.8.17.36" attributes[TargetAttribute] = "/users/junit" attributes[StatusCodeAttribute] = 200 - span := constructClientSpan(attributes) + span := constructHttpClientSpan(attributes) filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) @@ -90,18 +93,19 @@ func TestClientSpanWithPeerAttributes(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, "http://kb234.example.com:8080/users/junit")) } func TestClientSpanWithPeerIp4Attributes(t *testing.T) { attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HttpComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "http" attributes[PeerIpv4Attribute] = "10.8.17.36" attributes[PeerPortAttribute] = "8080" attributes[TargetAttribute] = "/users/junit" - span := constructClientSpan(attributes) + span := constructHttpClientSpan(attributes) filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) assert.NotNil(t, httpData) @@ -111,18 +115,19 @@ func TestClientSpanWithPeerIp4Attributes(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, "http://10.8.17.36:8080/users/junit")) } func TestClientSpanWithPeerIp6Attributes(t *testing.T) { attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HttpComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "https" attributes[PeerIpv6Attribute] = "2001:db8:85a3::8a2e:370:7334" attributes[PeerPortAttribute] = "443" attributes[TargetAttribute] = "/users/junit" - span := constructClientSpan(attributes) + span := constructHttpClientSpan(attributes) filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) assert.NotNil(t, httpData) @@ -132,18 +137,19 @@ func TestClientSpanWithPeerIp6Attributes(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, "https://2001:db8:85a3::8a2e:370:7334/users/junit")) } func TestServerSpanWithUrlAttribute(t *testing.T) { attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HttpComponentType attributes[MethodAttribute] = "GET" attributes[URLAttribute] = "https://api.example.com/users/junit" attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" attributes[ClientIpAttribute] = "192.168.15.32" attributes[StatusCodeAttribute] = 200 - span := constructServerSpan(attributes) + span := constructHttpServerSpan(attributes) filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) @@ -154,12 +160,13 @@ func TestServerSpanWithUrlAttribute(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } func TestServerSpanWithSchemeHostTargetAttributes(t *testing.T) { attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HttpComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "https" attributes[HostAttribute] = "api.example.com" @@ -167,7 +174,7 @@ func TestServerSpanWithSchemeHostTargetAttributes(t *testing.T) { attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" attributes[ClientIpAttribute] = "192.168.15.32" attributes[StatusCodeAttribute] = 200 - span := constructServerSpan(attributes) + span := constructHttpServerSpan(attributes) filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) @@ -178,12 +185,13 @@ func TestServerSpanWithSchemeHostTargetAttributes(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } func TestServerSpanWithSchemeServernamePortTargetAttributes(t *testing.T) { attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HttpComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "https" attributes[ServerNameAttribute] = "api.example.com" @@ -192,7 +200,7 @@ func TestServerSpanWithSchemeServernamePortTargetAttributes(t *testing.T) { attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" attributes[ClientIpAttribute] = "192.168.15.32" attributes[StatusCodeAttribute] = 200 - span := constructServerSpan(attributes) + span := constructHttpServerSpan(attributes) filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) @@ -203,12 +211,13 @@ func TestServerSpanWithSchemeServernamePortTargetAttributes(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } func TestServerSpanWithSchemeNamePortTargetAttributes(t *testing.T) { attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HttpComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "http" attributes[HostNameAttribute] = "kb234.example.com" @@ -218,7 +227,7 @@ func TestServerSpanWithSchemeNamePortTargetAttributes(t *testing.T) { attributes[ClientIpAttribute] = "192.168.15.32" attributes[StatusCodeAttribute] = 200 attributes[ContentLenAttribute] = 21378 - span := constructServerSpan(attributes) + span := constructHttpServerSpan(attributes) filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) @@ -229,15 +238,16 @@ func TestServerSpanWithSchemeNamePortTargetAttributes(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, "http://kb234.example.com:8080/users/junit")) } func TestHttpStatusFromSpanStatus(t *testing.T) { attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HttpComponentType attributes[MethodAttribute] = "GET" attributes[URLAttribute] = "https://api.example.com/users/junit" - span := constructClientSpan(attributes) + span := constructHttpClientSpan(attributes) filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) @@ -248,11 +258,11 @@ func TestHttpStatusFromSpanStatus(t *testing.T) { assert.Fail(t, "invalid json") } jsonStr := w.String() - w.Reset() + release(w) assert.True(t, strings.Contains(jsonStr, "200")) } -func constructClientSpan(attributes map[string]interface{}) *tracepb.Span { +func constructHttpClientSpan(attributes map[string]interface{}) *tracepb.Span { endTime := time.Now().Round(time.Second) startTime := endTime.Add(-90 * time.Second) spanAttributes := constructSpanAttributes(attributes) @@ -286,7 +296,7 @@ func constructClientSpan(attributes map[string]interface{}) *tracepb.Span { } } -func constructServerSpan(attributes map[string]interface{}) *tracepb.Span { +func constructHttpServerSpan(attributes map[string]interface{}) *tracepb.Span { endTime := time.Now().Round(time.Second) startTime := endTime.Add(-90 * time.Second) spanAttributes := constructSpanAttributes(attributes) diff --git a/exporter/awsxrayexporter/segment.go b/exporter/awsxrayexporter/otel2xray/segment.go similarity index 64% rename from exporter/awsxrayexporter/segment.go rename to exporter/awsxrayexporter/otel2xray/segment.go index 954d66e6646b..ca66742d20ef 100644 --- a/exporter/awsxrayexporter/segment.go +++ b/exporter/awsxrayexporter/otel2xray/segment.go @@ -12,14 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -package awsxrayexporter +package otel2xray import ( "bytes" "encoding/binary" "encoding/hex" "encoding/json" + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + "github.com/golang/protobuf/ptypes/timestamp" "math/rand" "reflect" "regexp" @@ -27,10 +29,6 @@ import ( "time" ) -// origin contains the support aws origin values, -// https://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html -type origin string - const ( // Attributes recorded on the span for the requests. // Only trace exporters will need them. @@ -45,10 +43,6 @@ const ( PeerIpv6Attribute = "peer.ipv6" PeerPortAttribute = "peer.port" PeerServiceAttribute = "peer.service" - DbTypeAttribute = "db.type" - DbInstanceAttribute = "db.instance" - DbStatementAttribute = "db.statement" - DbUserAttribute = "db.user" ) const ( @@ -75,22 +69,9 @@ const ( const ( // OriginEC2 span originated from EC2 - OriginEC2 origin = "AWS::EC2::Instance" - - // OriginECS span originated from Elastic Container Service (ECS) - OriginECS origin = "AWS::ECS::Container" - - // OriginEB span originated from Elastic Beanstalk (EB) - OriginEB origin = "AWS::ElasticBeanstalk::Environment" -) - -const ( - httpHeaderMaxSize = 200 - httpHeader = `X-Amzn-Trace-Id` - prefixRoot = "Root=" - prefixParent = "Parent=" - prefixSampled = "Sampled=" - separator = ";" // separator used by x-ray to split parts of X-Amzn-Trace-Id header + OriginEC2 = "AWS::EC2::Instance" + OriginECS = "AWS::ECS::Container" + OriginEB = "AWS::ElasticBeanstalk::Environment" ) var ( @@ -113,7 +94,7 @@ const ( // span name defaultSegmentName = "span" - // maxSegmentNameLength the maximum length of a segment name + // maxSegmentNameLength the maximum length of a Segment name maxSegmentNameLength = 200 ) @@ -124,85 +105,88 @@ const ( identifierOffset = 11 // offset of identifier within traceID ) -type segment struct { - // ID - A 64-bit identifier for the segment, unique among segments in the same trace, - // in 16 hexadecimal digits. - ID string `json:"id"` - - // Name - The logical name of the service that handled the request, up to 200 characters. - // For example, your application's name or domain name. Names can contain Unicode - // letters, numbers, and whitespace, and the following symbols: _, ., :, /, %, &, #, =, - // +, \, -, @ - Name string `json:"name,omitempty"` - - // StartTime - number that is the time the segment was created, in floating point seconds - // in epoch time.. For example, 1480615200.010 or 1.480615200010E9. Use as many decimal - // places as you need. Microsecond resolution is recommended when available. +type Segment struct { + // Required + TraceID string `json:"trace_id,omitempty"` + ID string `json:"id"` + Name string `json:"name"` StartTime float64 `json:"start_time"` + EndTime float64 `json:"end_time,omitempty"` + + // Optional + InProgress bool `json:"in_progress,omitempty"` + ParentID string `json:"parent_id,omitempty"` + Fault bool `json:"fault,omitempty"` + Error bool `json:"error,omitempty"` + Throttle bool `json:"throttle,omitempty"` + Cause *CauseData `json:"cause,omitempty"` + ResourceARN string `json:"resource_arn,omitempty"` + Origin string `json:"origin,omitempty"` + + Type string `json:"type,omitempty"` + Namespace string `json:"namespace,omitempty"` + User string `json:"user,omitempty"` + PrecursorIDs []string `json:"precursor_ids,omitempty"` + + HTTP *HTTPData `json:"http,omitempty"` + AWS map[string]interface{} `json:"aws,omitempty"` + + Service *ServiceData `json:"service,omitempty"` + + // SQL + SQL *SQLData `json:"sql,omitempty"` + + // Metadata + Annotations map[string]interface{} `json:"annotations,omitempty"` + Metadata map[string]map[string]interface{} `json:"metadata,omitempty"` +} - // TraceID - A unique identifier that connects all segments and subsegments originating - // from a single client request. - // * The version number, that is, 1. - // * The time of the original request, in Unix epoch time, in 8 hexadecimal digits. - // * For example, 10:00AM December 2nd, 2016 PST in epoch time is 1480615200 seconds, or 58406520 in hexadecimal. - // * A 96-bit identifier for the trace, globally unique, in 24 hexadecimal digits. - TraceID string `json:"trace_id,omitempty"` - - // EndTime - number that is the time the segment was closed. For example, 1480615200.090 - // or 1.480615200090E9. Specify either an end_time or in_progress. - EndTime float64 `json:"end_time"` - - /* ---------------------------------------------------- */ - - // Service - An object with information about your application. - //Service service `json:"service,omitempty"` - - // User - A string that identifies the user who sent the request. - //User string `json:"user,omitempty"` - - // Origin - The type of AWS resource running your application. - Origin string `json:"origin,omitempty"` - - // Namespace - aws for AWS SDK calls; remote for other downstream calls. - Namespace string `json:"namespace,omitempty"` - - // ParentID – A subsegment ID you specify if the request originated from an instrumented - // application. The X-Ray SDK adds the parent subsegment ID to the tracing header for - // downstream HTTP calls. - ParentID string `json:"parent_id,omitempty"` - - // Annotations - object with key-value pairs that you want X-Ray to index for search - Annotations map[string]interface{} `json:"annotations,omitempty"` - - // SubSegments contains the list of child segments - SubSegments []*segment `json:"subsegments,omitempty"` - - // Service - optional service definition - Service *service `json:"service,omitempty"` - - // Http - optional xray specific http settings - Http *HTTPData `json:"http,omitempty"` - - // Error - boolean indicating that a client error occurred - // (response status code was 4XX Client Error). - Error bool `json:"error,omitempty"` - - // Fault - boolean indicating that a server error occurred - // (response status code was 5XX Server Error). - Fault bool `json:"fault,omitempty"` - - // Cause - Cause *CauseData `json:"cause,omitempty"` +func MakeSegment(name string, span *tracepb.Span) Segment { + var ( + traceID = convertToAmazonTraceID(span.TraceId) + startTime = timestampToFloatSeconds(span.StartTime, span.StartTime) + endTime = timestampToFloatSeconds(span.EndTime, span.StartTime) + filtered, http = makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + isError, isFault, cause = makeCause(span.Status, filtered) + annotations = makeAnnotations(span.Resource.GetLabels()) + namespace string + ) - /* -- Used by SubSegments only ------------------------ */ + if name == "" { + name = fixSegmentName(span.Name.String()) + } + if span.ParentSpanId != nil { + namespace = "remote" + } - // Type indicates span is a subsegment; should either be subsegment or blank - Type string `json:"type,omitempty"` + return Segment{ + ID: convertToAmazonSpanID(span.SpanId), + TraceID: traceID, + Name: name, + StartTime: startTime, + EndTime: endTime, + ParentID: convertToAmazonSpanID(span.ParentSpanId), + Fault: isFault, + Error: isError, + Cause: cause, + Origin: determineAwsOrigin(span.Resource), + Namespace: namespace, + HTTP: http, + Service: makeService(span.Resource), + Annotations: annotations, + } } -type service struct { - // Version - A string that identifies the version of your application that served the request. - Version string `json:"version,omitempty"` +func determineAwsOrigin(resource *resourcepb.Resource) string { + origin := OriginEC2 + if resource == nil { + return origin + } + _, ok := resource.Labels[ContainerNameAttribute] + if ok { + origin = OriginECS + } + return origin } // convertToAmazonTraceID converts a trace ID to the Amazon format. @@ -255,7 +239,7 @@ func convertToAmazonTraceID(traceID []byte) string { } // convertToAmazonSpanID generates an Amazon spanID from a trace.SpanID - a 64-bit identifier -// for the segment, unique among segments in the same trace, in 16 hexadecimal digits. +// for the Segment, unique among segments in the same trace, in 16 hexadecimal digits. func convertToAmazonSpanID(v []byte) string { if reflect.DeepEqual(v, zeroSpanID) { return "" @@ -263,6 +247,20 @@ func convertToAmazonSpanID(v []byte) string { return hex.EncodeToString(v[0:8]) } +func timestampToFloatSeconds(ts *timestamp.Timestamp, startTs *timestamp.Timestamp) float64 { + var ( + t time.Time + ) + if ts == nil { + t = time.Now() + } else if startTs == nil { + t = time.Unix(ts.Seconds, int64(ts.Nanos)) + } else { + t = time.Unix(startTs.Seconds, int64(ts.Nanos)) + } + return float64(t.UnixNano()) / 1e9 +} + func mergeAnnotations(dest map[string]interface{}, src map[string]string) { for key, value := range src { key = fixAnnotationKey(key) @@ -311,42 +309,6 @@ func fixAnnotationKey(key string) string { return key } -func rawSegment(name string, span *tracepb.Span) segment { - var ( - traceID = convertToAmazonTraceID(span.TraceId) - startMicros = span.StartTime.Nanos / int32(time.Microsecond) - startTime = float64(startMicros) / 1e6 - endMicros = span.EndTime.Nanos / int32(time.Microsecond) - endTime = float64(endMicros) / 1e6 - filtered, http = makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) - isError, isFault, cause = makeCause(span.Status, filtered) - annotations = makeAnnotations(span.Resource.GetLabels()) - namespace string - ) - - if name == "" { - name = fixSegmentName(span.Name.String()) - } - if span.ParentSpanId != nil { - namespace = "remote" - } - - return segment{ - ID: convertToAmazonSpanID(span.SpanId), - TraceID: traceID, - Name: name, - StartTime: startTime, - EndTime: endTime, - Namespace: namespace, - ParentID: convertToAmazonSpanID(span.ParentSpanId), - Annotations: annotations, - Http: http, - Error: isError, - Fault: isFault, - Cause: cause, - } -} - type writer struct { buffer *bytes.Buffer encoder *json.Encoder diff --git a/exporter/awsxrayexporter/otel2xray/service.go b/exporter/awsxrayexporter/otel2xray/service.go new file mode 100644 index 000000000000..05bee162d31d --- /dev/null +++ b/exporter/awsxrayexporter/otel2xray/service.go @@ -0,0 +1,48 @@ +// 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 otel2xray + +import ( + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" +) + +// ServiceData provides the shape for unmarshalling service version. +type ServiceData struct { + Version string `json:"version,omitempty"` + CompilerVersion string `json:"compiler_version,omitempty"` + Compiler string `json:"compiler,omitempty"` +} + +func makeService(resource *resourcepb.Resource) *ServiceData { + var ( + ver string + service *ServiceData + ) + if resource == nil { + return service + } + for key, value := range resource.Labels { + switch key { + case ServiceVersionAttribute: + ver = value + } + } + if ver != "" { + service = &ServiceData{ + Version: ver, + } + } + return service +} diff --git a/exporter/awsxrayexporter/otel2xray/service_test.go b/exporter/awsxrayexporter/otel2xray/service_test.go new file mode 100644 index 000000000000..5142666275ee --- /dev/null +++ b/exporter/awsxrayexporter/otel2xray/service_test.go @@ -0,0 +1,48 @@ +// 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 otel2xray + +import ( + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + "github.com/stretchr/testify/assert" + "strings" + "testing" +) + +func TestServiceFromResource(t *testing.T) { + resource := &resourcepb.Resource{ + Type: "container", + Labels: constructResourceLabels(), + } + + service := makeService(resource) + + assert.NotNil(t, service) + w := borrow() + if err := w.Encode(service); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + release(w) + assert.True(t, strings.Contains(jsonStr, "1.1.12")) +} + +func TestServiceFromNullResource(t *testing.T) { + var resource *resourcepb.Resource + + service := makeService(resource) + + assert.Nil(t, service) +} diff --git a/exporter/awsxrayexporter/otel2xray/sql.go b/exporter/awsxrayexporter/otel2xray/sql.go new file mode 100644 index 000000000000..a3f1e6125a59 --- /dev/null +++ b/exporter/awsxrayexporter/otel2xray/sql.go @@ -0,0 +1,53 @@ +// 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 otel2xray + +const ( + DbTypeAttribute = "db.type" + DbInstanceAttribute = "db.instance" + DbStatementAttribute = "db.statement" + DbUserAttribute = "db.user" +) + +// SQLData provides the shape for unmarshalling sql data. +type SQLData struct { + ConnectionString string `json:"connection_string,omitempty"` + URL string `json:"url,omitempty"` // host:port/database + DatabaseType string `json:"database_type,omitempty"` + DatabaseVersion string `json:"database_version,omitempty"` + DriverVersion string `json:"driver_version,omitempty"` + User string `json:"user,omitempty"` + Preparation string `json:"preparation,omitempty"` // "statement" / "call" + SanitizedQuery string `json:"sanitized_query,omitempty"` +} + +func makeSql(attributes map[string]string) *SQLData { + var ( + sqlData SQLData + ) + componentType := attributes[ComponentAttribute] + url := attributes[PeerAddressAttribute] + if componentType == HttpComponentType || componentType == RpcComponentType || url == "" { + return nil + } + url += "/" + attributes[DbInstanceAttribute] + sqlData = SQLData{ + URL: url, + DatabaseType: attributes[DbTypeAttribute], + User: attributes[DbUserAttribute], + SanitizedQuery: attributes[DbStatementAttribute], + } + return &sqlData +} diff --git a/exporter/awsxrayexporter/otel2xray/sql_test.go b/exporter/awsxrayexporter/otel2xray/sql_test.go new file mode 100644 index 000000000000..4019a78f9f59 --- /dev/null +++ b/exporter/awsxrayexporter/otel2xray/sql_test.go @@ -0,0 +1,60 @@ +// 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 otel2xray + +import ( + "github.com/stretchr/testify/assert" + "strings" + "testing" +) + +func TestClientSpanWithStatementAttribute(t *testing.T) { + attributes := make(map[string]string) + attributes[ComponentAttribute] = DbComponentType + attributes[DbTypeAttribute] = "sql" + attributes[DbInstanceAttribute] = "customers" + attributes[DbStatementAttribute] = "SELECT * FROM user WHERE user_id = ?" + attributes[DbUserAttribute] = "readonly_user" + attributes[PeerAddressAttribute] = "mysql://db.example.com:3306" + attributes[PeerHostAttribute] = "db.example.com" + attributes[PeerPortAttribute] = "3306" + + sqlData := makeSql(attributes) + + assert.NotNil(t, sqlData) + w := borrow() + if err := w.Encode(sqlData); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + release(w) + assert.True(t, strings.Contains(jsonStr, "mysql://db.example.com:3306/customers")) +} + +func TestClientSpanWithHttpComponentAttribute(t *testing.T) { + attributes := make(map[string]string) + attributes[ComponentAttribute] = HttpComponentType + attributes[DbTypeAttribute] = "sql" + attributes[DbInstanceAttribute] = "customers" + attributes[DbStatementAttribute] = "SELECT * FROM user WHERE user_id = ?" + attributes[DbUserAttribute] = "readonly_user" + attributes[PeerAddressAttribute] = "mysql://db.example.com:3306" + attributes[PeerHostAttribute] = "db.example.com" + attributes[PeerPortAttribute] = "3306" + + sqlData := makeSql(attributes) + + assert.Nil(t, sqlData) +} From 73e2541f909b30af5b83b302c768cdc95e770949 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Sat, 16 Nov 2019 11:31:02 -0600 Subject: [PATCH 39/59] initial dev of xray data structures and converters --- .../awsxrayexporter/otel2xray/converter.go | 29 ---- .../{otel2xray => translator}/cause.go | 2 +- .../{otel2xray => translator}/cause_test.go | 4 +- .../{otel2xray => translator}/http.go | 22 ++- .../{otel2xray => translator}/http_test.go | 61 +------- .../{otel2xray => translator}/segment.go | 68 +++------ .../translator/segment_test.go | 135 ++++++++++++++++++ .../{otel2xray => translator}/service.go | 2 +- .../{otel2xray => translator}/service_test.go | 4 +- .../{otel2xray => translator}/sql.go | 2 +- .../{otel2xray => translator}/sql_test.go | 2 +- .../awsxrayexporter/translator/writer_pool.go | 69 +++++++++ 12 files changed, 250 insertions(+), 150 deletions(-) delete mode 100644 exporter/awsxrayexporter/otel2xray/converter.go rename exporter/awsxrayexporter/{otel2xray => translator}/cause.go (99%) rename exporter/awsxrayexporter/{otel2xray => translator}/cause_test.go (98%) rename exporter/awsxrayexporter/{otel2xray => translator}/http.go (94%) rename exporter/awsxrayexporter/{otel2xray => translator}/http_test.go (85%) rename exporter/awsxrayexporter/{otel2xray => translator}/segment.go (92%) create mode 100644 exporter/awsxrayexporter/translator/segment_test.go rename exporter/awsxrayexporter/{otel2xray => translator}/service.go (98%) rename exporter/awsxrayexporter/{otel2xray => translator}/service_test.go (95%) rename exporter/awsxrayexporter/{otel2xray => translator}/sql.go (98%) rename exporter/awsxrayexporter/{otel2xray => translator}/sql_test.go (99%) create mode 100644 exporter/awsxrayexporter/translator/writer_pool.go diff --git a/exporter/awsxrayexporter/otel2xray/converter.go b/exporter/awsxrayexporter/otel2xray/converter.go deleted file mode 100644 index cbc265d88356..000000000000 --- a/exporter/awsxrayexporter/otel2xray/converter.go +++ /dev/null @@ -1,29 +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 otel2xray - -import ( - "github.com/aws/aws-sdk-go/service/xray" - "github.com/open-telemetry/opentelemetry-collector/consumer/consumerdata" -) - -func ConvertTraceDataToXRay(td consumerdata.TraceData) *xray.PutTraceSegmentsInput { - documents := make([]*string, len(td.Spans)) - //for i, span := range td.Spans { - // seg := Segment{} - //} - input := xray.PutTraceSegmentsInput{TraceSegmentDocuments: documents} - return &input -} diff --git a/exporter/awsxrayexporter/otel2xray/cause.go b/exporter/awsxrayexporter/translator/cause.go similarity index 99% rename from exporter/awsxrayexporter/otel2xray/cause.go rename to exporter/awsxrayexporter/translator/cause.go index ae528254a90c..38ab01c991f2 100644 --- a/exporter/awsxrayexporter/otel2xray/cause.go +++ b/exporter/awsxrayexporter/translator/cause.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package otel2xray +package translator import ( "encoding/hex" diff --git a/exporter/awsxrayexporter/otel2xray/cause_test.go b/exporter/awsxrayexporter/translator/cause_test.go similarity index 98% rename from exporter/awsxrayexporter/otel2xray/cause_test.go rename to exporter/awsxrayexporter/translator/cause_test.go index 8a2cf093a47a..3dafde55c5cb 100644 --- a/exporter/awsxrayexporter/otel2xray/cause_test.go +++ b/exporter/awsxrayexporter/translator/cause_test.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package otel2xray +package translator import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" @@ -118,7 +118,7 @@ func constructExceptionServerSpan(attributes map[string]interface{}) *tracepb.Sp }, Resource: &resourcepb.Resource{ Type: "container", - Labels: constructResourceLabels(), + Labels: constructDefaultResourceLabels(), }, } } diff --git a/exporter/awsxrayexporter/otel2xray/http.go b/exporter/awsxrayexporter/translator/http.go similarity index 94% rename from exporter/awsxrayexporter/otel2xray/http.go rename to exporter/awsxrayexporter/translator/http.go index 488e12be2d2b..277d96ee73be 100644 --- a/exporter/awsxrayexporter/otel2xray/http.go +++ b/exporter/awsxrayexporter/translator/http.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package otel2xray +package translator import ( tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" @@ -165,9 +165,9 @@ func makeHttp(spanKind tracepb.Span_SpanKind, code int32, attributes map[string] } if tracepb.Span_SERVER == spanKind { - info.Request.URL = constructServerUrl(urlParts) + info.Request.URL = constructServerUrl(componentValue, urlParts) } else { - info.Request.URL = constructClientUrl(urlParts) + info.Request.URL = constructClientUrl(componentValue, urlParts) } if info.Response.Status == 0 { @@ -177,7 +177,7 @@ func makeHttp(spanKind tracepb.Span_SpanKind, code int32, attributes map[string] return filtered, &info } -func constructClientUrl(urlParts map[string]string) string { +func constructClientUrl(component string, urlParts map[string]string) string { // follows OpenTelemetry specification-defined combinations for client spans described in // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/data-http.md url, ok := urlParts[URLAttribute] @@ -188,7 +188,11 @@ func constructClientUrl(urlParts map[string]string) string { scheme, ok := urlParts[SchemeAttribute] if !ok { - scheme = "http" + if component == RpcComponentType { + scheme = "dns" + } else { + scheme = "http" + } } port := "" host, ok := urlParts[HostAttribute] @@ -218,7 +222,7 @@ func constructClientUrl(urlParts map[string]string) string { return url } -func constructServerUrl(urlParts map[string]string) string { +func constructServerUrl(component string, urlParts map[string]string) string { // follows OpenTelemetry specification-defined combinations for server spans described in // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/data-http.md url, ok := urlParts[URLAttribute] @@ -229,7 +233,11 @@ func constructServerUrl(urlParts map[string]string) string { scheme, ok := urlParts[SchemeAttribute] if !ok { - scheme = "http" + if component == RpcComponentType { + scheme = "dns" + } else { + scheme = "http" + } } port := "" host, ok := urlParts[HostAttribute] diff --git a/exporter/awsxrayexporter/otel2xray/http_test.go b/exporter/awsxrayexporter/translator/http_test.go similarity index 85% rename from exporter/awsxrayexporter/otel2xray/http_test.go rename to exporter/awsxrayexporter/translator/http_test.go index 2dcad4b1d4de..09b719adcb38 100644 --- a/exporter/awsxrayexporter/otel2xray/http_test.go +++ b/exporter/awsxrayexporter/translator/http_test.go @@ -12,16 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -package otel2xray +package translator import ( - "fmt" resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" - "github.com/golang/protobuf/ptypes/timestamp" "github.com/golang/protobuf/ptypes/wrappers" "github.com/stretchr/testify/assert" - "reflect" "strings" "testing" "time" @@ -291,7 +288,7 @@ func constructHttpClientSpan(attributes map[string]interface{}) *tracepb.Span { }, Resource: &resourcepb.Resource{ Type: "container", - Labels: constructResourceLabels(), + Labels: constructDefaultResourceLabels(), }, } } @@ -325,59 +322,7 @@ func constructHttpServerSpan(attributes map[string]interface{}) *tracepb.Span { }, Resource: &resourcepb.Resource{ Type: "container", - Labels: constructResourceLabels(), + Labels: constructDefaultResourceLabels(), }, } } - -func constructSpanAttributes(attributes map[string]interface{}) map[string]*tracepb.AttributeValue { - attrs := make(map[string]*tracepb.AttributeValue) - for key, value := range attributes { - valType := reflect.TypeOf(value) - var attrVal tracepb.AttributeValue - if valType.Kind() == reflect.Int { - attrVal = tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ - IntValue: int64(value.(int)), - }} - } else if valType.Kind() == reflect.Int64 { - attrVal = tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ - IntValue: value.(int64), - }} - } else { - attrVal = tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ - StringValue: &tracepb.TruncatableString{Value: fmt.Sprintf("%v", value)}, - }} - } - attrs[key] = &attrVal - } - return attrs -} - -func constructResourceLabels() map[string]string { - labels := make(map[string]string) - labels[ServiceNameAttribute] = "signup_aggregator" - labels[ServiceVersionAttribute] = "1.1.12" - labels[ContainerNameAttribute] = "signup_aggregator" - labels[ContainerImageAttribute] = "otel/signupaggregator" - labels[ContainerTagAttribute] = "v1" - labels[K8sClusterAttribute] = "production" - labels[K8sNamespaceAttribute] = "default" - labels[K8sDeploymentAttribute] = "signup_aggregator" - labels[K8sPodAttribute] = "signup_aggregator-x82ufje83" - labels[CloudProviderAttribute] = "aws" - labels[CloudAccountAttribute] = "123456789" - labels[CloudRegionAttribute] = "us-east-1" - labels[CloudZoneAttribute] = "us-east-1c" - return labels -} - -func convertTimeToTimestamp(t time.Time) *timestamp.Timestamp { - if t.IsZero() { - return nil - } - nanoTime := t.UnixNano() - return ×tamp.Timestamp{ - Seconds: nanoTime / 1e9, - Nanos: int32(nanoTime % 1e9), - } -} diff --git a/exporter/awsxrayexporter/otel2xray/segment.go b/exporter/awsxrayexporter/translator/segment.go similarity index 92% rename from exporter/awsxrayexporter/otel2xray/segment.go rename to exporter/awsxrayexporter/translator/segment.go index ca66742d20ef..5132f7935d40 100644 --- a/exporter/awsxrayexporter/otel2xray/segment.go +++ b/exporter/awsxrayexporter/translator/segment.go @@ -12,13 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -package otel2xray +package translator import ( - "bytes" "encoding/binary" "encoding/hex" - "encoding/json" resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" "github.com/golang/protobuf/ptypes/timestamp" @@ -148,6 +146,8 @@ func MakeSegment(name string, span *tracepb.Span) Segment { endTime = timestampToFloatSeconds(span.EndTime, span.StartTime) filtered, http = makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) isError, isFault, cause = makeCause(span.Status, filtered) + origin = determineAwsOrigin(span.Resource) + service = makeService(span.Resource) annotations = makeAnnotations(span.Resource.GetLabels()) namespace string ) @@ -169,10 +169,10 @@ func MakeSegment(name string, span *tracepb.Span) Segment { Fault: isFault, Error: isError, Cause: cause, - Origin: determineAwsOrigin(span.Resource), + Origin: origin, Namespace: namespace, HTTP: http, - Service: makeService(span.Resource), + Service: service, Annotations: annotations, } } @@ -241,7 +241,7 @@ func convertToAmazonTraceID(traceID []byte) string { // convertToAmazonSpanID generates an Amazon spanID from a trace.SpanID - a 64-bit identifier // for the Segment, unique among segments in the same trace, in 16 hexadecimal digits. func convertToAmazonSpanID(v []byte) string { - if reflect.DeepEqual(v, zeroSpanID) { + if v == nil || reflect.DeepEqual(v, zeroSpanID) { return "" } return hex.EncodeToString(v[0:8]) @@ -309,50 +309,22 @@ func fixAnnotationKey(key string) string { return key } -type writer struct { - buffer *bytes.Buffer - encoder *json.Encoder -} - -func (w *writer) Reset() { - w.buffer.Reset() -} - -func (w *writer) Encode(v interface{}) error { - return w.encoder.Encode(v) -} - -func (w *writer) String() string { - return w.buffer.String() -} - -const ( - maxBufSize = 256e3 -) - -var ( - writers = &sync.Pool{ - New: func() interface{} { - var ( - buffer = bytes.NewBuffer(make([]byte, 0, 8192)) - encoder = json.NewEncoder(buffer) - ) - - return &writer{ - buffer: buffer, - encoder: encoder, - } - }, +func newTraceID() []byte { + var r [16]byte + epoch := time.Now().Unix() + binary.BigEndian.PutUint32(r[0:4], uint32(epoch)) + _, err := rand.Read(r[4:]) + if err != nil { + panic(err) } -) - -func borrow() *writer { - return writers.Get().(*writer) + return r[:] } -func release(w *writer) { - if w.buffer.Cap() < maxBufSize { - w.buffer.Reset() - writers.Put(w) +func newSegmentID() []byte { + var r [8]byte + _, err := rand.Read(r[:]) + if err != nil { + panic(err) } + return r[:] } diff --git a/exporter/awsxrayexporter/translator/segment_test.go b/exporter/awsxrayexporter/translator/segment_test.go new file mode 100644 index 000000000000..01b276458bd1 --- /dev/null +++ b/exporter/awsxrayexporter/translator/segment_test.go @@ -0,0 +1,135 @@ +// 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 translator + +import ( + "fmt" + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + "github.com/golang/protobuf/ptypes/timestamp" + "github.com/stretchr/testify/assert" + "reflect" + "strings" + "testing" + "time" +) + +func TestClientSpanWithRpcComponent(t *testing.T) { + spanName := "/widgets" + attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = RpcComponentType + attributes[MethodAttribute] = "GET" + attributes[SchemeAttribute] = "ipv6" + attributes[PeerIpv6Attribute] = "2607:f8b0:4000:80c::2004" + attributes[PeerPortAttribute] = "9443" + attributes[TargetAttribute] = spanName + labels := constructDefaultResourceLabels() + span := constructClientSpan(nil, spanName, 0, "OK", attributes, labels) + + segment := MakeSegment(spanName, span) + + assert.NotNil(t, segment) + assert.Equal(t, spanName, segment.Name) + w := borrow() + if err := w.Encode(segment); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + release(w) + assert.True(t, strings.Contains(jsonStr, spanName)) +} + +func constructClientSpan(parentSpanId []byte, name string, code int32, message string, attributes map[string]interface{}, rscLabels map[string]string) *tracepb.Span { + var ( + traceId = newTraceID() + spanId = newSegmentID() + endTime = time.Now() + startTime = endTime.Add(-215 * time.Millisecond) + spanAttributes = constructSpanAttributes(attributes) + ) + + return &tracepb.Span{ + TraceId: traceId, + SpanId: spanId, + ParentSpanId: parentSpanId, + Name: &tracepb.TruncatableString{Value: name}, + Kind: tracepb.Span_CLIENT, + StartTime: convertTimeToTimestamp(startTime), + EndTime: convertTimeToTimestamp(endTime), + Status: &tracepb.Status{ + Code: code, + Message: message, + }, + Attributes: &tracepb.Span_Attributes{ + AttributeMap: spanAttributes, + }, + Resource: &resourcepb.Resource{ + Type: "container", + Labels: rscLabels, + }, + } +} + +func constructSpanAttributes(attributes map[string]interface{}) map[string]*tracepb.AttributeValue { + attrs := make(map[string]*tracepb.AttributeValue) + for key, value := range attributes { + valType := reflect.TypeOf(value) + var attrVal tracepb.AttributeValue + if valType.Kind() == reflect.Int { + attrVal = tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: int64(value.(int)), + }} + } else if valType.Kind() == reflect.Int64 { + attrVal = tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: value.(int64), + }} + } else { + attrVal = tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ + StringValue: &tracepb.TruncatableString{Value: fmt.Sprintf("%v", value)}, + }} + } + attrs[key] = &attrVal + } + return attrs +} + +func constructDefaultResourceLabels() map[string]string { + labels := make(map[string]string) + labels[ServiceNameAttribute] = "signup_aggregator" + labels[ServiceVersionAttribute] = "1.1.12" + labels[ContainerNameAttribute] = "signup_aggregator" + labels[ContainerImageAttribute] = "otel/signupaggregator" + labels[ContainerTagAttribute] = "v1" + labels[K8sClusterAttribute] = "production" + labels[K8sNamespaceAttribute] = "default" + labels[K8sDeploymentAttribute] = "signup_aggregator" + labels[K8sPodAttribute] = "signup_aggregator-x82ufje83" + labels[CloudProviderAttribute] = "aws" + labels[CloudAccountAttribute] = "123456789" + labels[CloudRegionAttribute] = "us-east-1" + labels[CloudZoneAttribute] = "us-east-1c" + return labels +} + +func convertTimeToTimestamp(t time.Time) *timestamp.Timestamp { + if t.IsZero() { + return nil + } + nanoTime := t.UnixNano() + return ×tamp.Timestamp{ + Seconds: nanoTime / 1e9, + Nanos: int32(nanoTime % 1e9), + } +} diff --git a/exporter/awsxrayexporter/otel2xray/service.go b/exporter/awsxrayexporter/translator/service.go similarity index 98% rename from exporter/awsxrayexporter/otel2xray/service.go rename to exporter/awsxrayexporter/translator/service.go index 05bee162d31d..863d5cdb50f0 100644 --- a/exporter/awsxrayexporter/otel2xray/service.go +++ b/exporter/awsxrayexporter/translator/service.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package otel2xray +package translator import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" diff --git a/exporter/awsxrayexporter/otel2xray/service_test.go b/exporter/awsxrayexporter/translator/service_test.go similarity index 95% rename from exporter/awsxrayexporter/otel2xray/service_test.go rename to exporter/awsxrayexporter/translator/service_test.go index 5142666275ee..4ec6895beada 100644 --- a/exporter/awsxrayexporter/otel2xray/service_test.go +++ b/exporter/awsxrayexporter/translator/service_test.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package otel2xray +package translator import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" @@ -24,7 +24,7 @@ import ( func TestServiceFromResource(t *testing.T) { resource := &resourcepb.Resource{ Type: "container", - Labels: constructResourceLabels(), + Labels: constructDefaultResourceLabels(), } service := makeService(resource) diff --git a/exporter/awsxrayexporter/otel2xray/sql.go b/exporter/awsxrayexporter/translator/sql.go similarity index 98% rename from exporter/awsxrayexporter/otel2xray/sql.go rename to exporter/awsxrayexporter/translator/sql.go index a3f1e6125a59..430382550a0a 100644 --- a/exporter/awsxrayexporter/otel2xray/sql.go +++ b/exporter/awsxrayexporter/translator/sql.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package otel2xray +package translator const ( DbTypeAttribute = "db.type" diff --git a/exporter/awsxrayexporter/otel2xray/sql_test.go b/exporter/awsxrayexporter/translator/sql_test.go similarity index 99% rename from exporter/awsxrayexporter/otel2xray/sql_test.go rename to exporter/awsxrayexporter/translator/sql_test.go index 4019a78f9f59..e912ce80f2e7 100644 --- a/exporter/awsxrayexporter/otel2xray/sql_test.go +++ b/exporter/awsxrayexporter/translator/sql_test.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package otel2xray +package translator import ( "github.com/stretchr/testify/assert" diff --git a/exporter/awsxrayexporter/translator/writer_pool.go b/exporter/awsxrayexporter/translator/writer_pool.go new file mode 100644 index 000000000000..d57e2c510c06 --- /dev/null +++ b/exporter/awsxrayexporter/translator/writer_pool.go @@ -0,0 +1,69 @@ +// 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 translator + +import ( + "bytes" + "encoding/json" + "sync" +) + +type writer struct { + buffer *bytes.Buffer + encoder *json.Encoder +} + +func (w *writer) Reset() { + w.buffer.Reset() +} + +func (w *writer) Encode(v interface{}) error { + return w.encoder.Encode(v) +} + +func (w *writer) String() string { + return w.buffer.String() +} + +const ( + maxBufSize = 256e3 +) + +var ( + writers = &sync.Pool{ + New: func() interface{} { + var ( + buffer = bytes.NewBuffer(make([]byte, 0, 8192)) + encoder = json.NewEncoder(buffer) + ) + + return &writer{ + buffer: buffer, + encoder: encoder, + } + }, + } +) + +func borrow() *writer { + return writers.Get().(*writer) +} + +func release(w *writer) { + if w.buffer.Cap() < maxBufSize { + w.buffer.Reset() + writers.Put(w) + } +} From b6b1198a22a5b076ec047365e70c80b8805a7295 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Mon, 18 Nov 2019 17:48:11 -0600 Subject: [PATCH 40/59] initial dev of xray data structures and converters --- exporter/awsxrayexporter/translator/aws.go | 131 ++++++++++++++++++ .../awsxrayexporter/translator/aws_test.go | 115 +++++++++++++++ exporter/awsxrayexporter/translator/cause.go | 6 +- .../awsxrayexporter/translator/cause_test.go | 6 +- exporter/awsxrayexporter/translator/http.go | 71 +++++++--- .../awsxrayexporter/translator/http_test.go | 55 ++++++-- .../awsxrayexporter/translator/segment.go | 20 ++- .../translator/segment_test.go | 7 +- exporter/awsxrayexporter/translator/sql.go | 44 ++++-- .../awsxrayexporter/translator/sql_test.go | 6 +- 10 files changed, 398 insertions(+), 63 deletions(-) create mode 100644 exporter/awsxrayexporter/translator/aws.go create mode 100644 exporter/awsxrayexporter/translator/aws_test.go diff --git a/exporter/awsxrayexporter/translator/aws.go b/exporter/awsxrayexporter/translator/aws.go new file mode 100644 index 000000000000..e09e937f814f --- /dev/null +++ b/exporter/awsxrayexporter/translator/aws.go @@ -0,0 +1,131 @@ +// 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 translator + +import ( + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + "strconv" +) + +// AWSData provides the shape for unmarshalling AWS resource data. +type AWSData struct { + AccountID string `json:"account_id,omitempty"` + BeanstalkMetadata *BeanstalkMetadata `json:"elastic_beanstalk,omitempty"` + ECSMetadata *ECSMetadata `json:"ecs,omitempty"` + EC2Metadata *EC2Metadata `json:"ec2,omitempty"` +} + +// EC2Metadata provides the shape for unmarshalling EC2 metadata. +type EC2Metadata struct { + InstanceID string `json:"instance_id"` + AvailabilityZone string `json:"availability_zone"` +} + +// ECSMetadata provides the shape for unmarshalling ECS metadata. +type ECSMetadata struct { + ContainerName string `json:"container"` +} + +// BeanstalkMetadata provides the shape for unmarshalling Elastic Beanstalk environment metadata. +type BeanstalkMetadata struct { + Environment string `json:"environment_name"` + VersionLabel string `json:"version_label"` + DeploymentID int64 `json:"deployment_id"` +} + +func makeAws(resource *resourcepb.Resource) *AWSData { + var ( + cloud string + account string + zone string + hostId string + container string + namespace string + deployId string + ver string + origin string + ec2 *EC2Metadata + ecs *ECSMetadata + ebs *BeanstalkMetadata + awsData *AWSData + ) + if resource == nil { + return awsData + } + for key, value := range resource.Labels { + switch key { + case CloudProviderAttribute: + cloud = value + case CloudAccountAttribute: + account = value + case CloudZoneAttribute: + zone = value + case HostIdAttribute: + hostId = value + case ContainerNameAttribute: + if container == "" { + container = value + } + case K8sPodAttribute: + container = value + case ServiceNamespaceAttribute: + namespace = value + case ServiceInstanceAttribute: + deployId = value + case ServiceVersionAttribute: + ver = value + } + } + if cloud != "aws" && cloud != "" { + return awsData // not AWS so return nil + } + // progress from least specific to most specific origin so most specific ends up as origin + // as per X-Ray docs + if hostId != "" { + origin = OriginEC2 + ec2 = &EC2Metadata{ + InstanceID: hostId, + AvailabilityZone: zone, + } + } + if container != "" { + origin = OriginECS + ecs = &ECSMetadata{ + ContainerName: container, + } + } + if deployId != "" { + origin = OriginEB + deployNum, err := strconv.ParseInt(deployId, 10, 64) + if err != nil { + deployNum = 0 + } + ebs = &BeanstalkMetadata{ + Environment: namespace, + VersionLabel: ver, + DeploymentID: deployNum, + } + } + if origin == "" { + return awsData + } + awsData = &AWSData{ + AccountID: account, + BeanstalkMetadata: ebs, + ECSMetadata: ecs, + EC2Metadata: ec2, + } + return awsData +} diff --git a/exporter/awsxrayexporter/translator/aws_test.go b/exporter/awsxrayexporter/translator/aws_test.go new file mode 100644 index 000000000000..4391300bc22c --- /dev/null +++ b/exporter/awsxrayexporter/translator/aws_test.go @@ -0,0 +1,115 @@ +// 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 translator + +import ( + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + "github.com/stretchr/testify/assert" + "strings" + "testing" +) + +func TestAwsFromEc2Resource(t *testing.T) { + instanceId := "i-00f7c0bcb26da2a99" + labels := make(map[string]string) + labels[CloudProviderAttribute] = "aws" + labels[CloudAccountAttribute] = "123456789" + labels[CloudZoneAttribute] = "us-east-1c" + labels[HostIdAttribute] = instanceId + labels[HostTypeAttribute] = "m5.xlarge" + resource := &resourcepb.Resource{ + Type: "vm", + Labels: labels, + } + + awsData := makeAws(resource) + + assert.NotNil(t, awsData) + assert.NotNil(t, awsData.EC2Metadata) + assert.Nil(t, awsData.ECSMetadata) + assert.Nil(t, awsData.BeanstalkMetadata) + w := borrow() + if err := w.Encode(awsData); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + release(w) + assert.True(t, strings.Contains(jsonStr, instanceId)) +} + +func TestAwsFromEcsResource(t *testing.T) { + instanceId := "i-00f7c0bcb26da2a99" + containerId := "signup_aggregator-x82ufje83" + labels := make(map[string]string) + labels[CloudProviderAttribute] = "aws" + labels[CloudAccountAttribute] = "123456789" + labels[CloudZoneAttribute] = "us-east-1c" + labels[ContainerNameAttribute] = "signup_aggregator" + labels[ContainerImageAttribute] = "otel/signupaggregator" + labels[ContainerTagAttribute] = "v1" + labels[K8sClusterAttribute] = "production" + labels[K8sNamespaceAttribute] = "default" + labels[K8sDeploymentAttribute] = "signup_aggregator" + labels[K8sPodAttribute] = containerId + labels[HostIdAttribute] = instanceId + labels[HostTypeAttribute] = "m5.xlarge" + resource := &resourcepb.Resource{ + Type: "container", + Labels: labels, + } + + awsData := makeAws(resource) + + assert.NotNil(t, awsData) + assert.NotNil(t, awsData.EC2Metadata) + assert.NotNil(t, awsData.ECSMetadata) + assert.Nil(t, awsData.BeanstalkMetadata) + w := borrow() + if err := w.Encode(awsData); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + release(w) + assert.True(t, strings.Contains(jsonStr, containerId)) +} + +func TestAwsFromBeanstalkResource(t *testing.T) { + deployId := "232" + labels := make(map[string]string) + labels[CloudProviderAttribute] = "aws" + labels[CloudAccountAttribute] = "123456789" + labels[CloudZoneAttribute] = "us-east-1c" + labels[ServiceVersionAttribute] = "2.1.4" + labels[ServiceNamespaceAttribute] = "production" + labels[ServiceInstanceAttribute] = deployId + resource := &resourcepb.Resource{ + Type: "vm", + Labels: labels, + } + + awsData := makeAws(resource) + + assert.NotNil(t, awsData) + assert.Nil(t, awsData.EC2Metadata) + assert.Nil(t, awsData.ECSMetadata) + assert.NotNil(t, awsData.BeanstalkMetadata) + w := borrow() + if err := w.Encode(awsData); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + release(w) + assert.True(t, strings.Contains(jsonStr, deployId)) +} diff --git a/exporter/awsxrayexporter/translator/cause.go b/exporter/awsxrayexporter/translator/cause.go index 38ab01c991f2..3cefcc092320 100644 --- a/exporter/awsxrayexporter/translator/cause.go +++ b/exporter/awsxrayexporter/translator/cause.go @@ -68,11 +68,7 @@ func makeCause(status *tracepb.Status, attributes map[string]string) (isError, i } if message != "" { - id := make([]byte, 8) - mutex.Lock() - r.Read(id) // rand.Read always returns nil - mutex.Unlock() - + id := newSegmentID() hexID := hex.EncodeToString(id) cause = &CauseData{ diff --git a/exporter/awsxrayexporter/translator/cause_test.go b/exporter/awsxrayexporter/translator/cause_test.go index 3dafde55c5cb..60eb22bab169 100644 --- a/exporter/awsxrayexporter/translator/cause_test.go +++ b/exporter/awsxrayexporter/translator/cause_test.go @@ -31,7 +31,7 @@ func TestCauseWithStatusMessage(t *testing.T) { attributes[StatusCodeAttribute] = 500 span := constructExceptionServerSpan(attributes) span.Status.Message = errorMsg - filtered, _ := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, _ := makeHttp(span) isError, isFault, cause := makeCause(span.Status, filtered) @@ -55,7 +55,7 @@ func TestCauseWithHttpStatusMessage(t *testing.T) { attributes[StatusCodeAttribute] = 500 attributes[StatusTextAttribute] = errorMsg span := constructExceptionServerSpan(attributes) - filtered, _ := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, _ := makeHttp(span) isError, isFault, cause := makeCause(span.Status, filtered) @@ -80,7 +80,7 @@ func TestCauseWithErrorMessage(t *testing.T) { attributes[ErrorMessageAttribute] = errorMsg attributes[ErrorStackAttribute] = "org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749)" span := constructExceptionServerSpan(attributes) - filtered, _ := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, _ := makeHttp(span) isError, isFault, cause := makeCause(span.Status, filtered) diff --git a/exporter/awsxrayexporter/translator/http.go b/exporter/awsxrayexporter/translator/http.go index 277d96ee73be..928e8417585b 100644 --- a/exporter/awsxrayexporter/translator/http.go +++ b/exporter/awsxrayexporter/translator/http.go @@ -24,20 +24,23 @@ import ( const ( // Attributes recorded on the span for the requests. // Only trace exporters will need them. - MethodAttribute = "http.method" - URLAttribute = "http.url" - TargetAttribute = "http.target" - HostAttribute = "http.host" - SchemeAttribute = "http.scheme" - StatusCodeAttribute = "http.status_code" - StatusTextAttribute = "http.status_text" - FlavorAttribute = "http.flavor" - ServerNameAttribute = "http.server_name" - PortAttribute = "http.port" - RouteAttribute = "http.route" - ClientIpAttribute = "http.client_ip" - UserAgentAttribute = "http.user_agent" - ContentLenAttribute = "http.resp.content_length" + MethodAttribute = "http.method" + URLAttribute = "http.url" + TargetAttribute = "http.target" + HostAttribute = "http.host" + SchemeAttribute = "http.scheme" + StatusCodeAttribute = "http.status_code" + StatusTextAttribute = "http.status_text" + FlavorAttribute = "http.flavor" + ServerNameAttribute = "http.server_name" + PortAttribute = "http.port" + RouteAttribute = "http.route" + ClientIpAttribute = "http.client_ip" + UserAgentAttribute = "http.user_agent" + MessageTypeAttribute = "message.type" + MessageIdAttribute = "message.id" + MessageCompressedSizeAttribute = "message.compressed_size" + MessageUncompressedSizeAttribute = "message.uncompressed_size" ) // HTTPData provides the shape for unmarshalling request and response data. @@ -103,7 +106,7 @@ func convertToStatusCode(code int32) int64 { } } -func makeHttp(spanKind tracepb.Span_SpanKind, code int32, attributes map[string]*tracepb.AttributeValue) (map[string]string, *HTTPData) { +func makeHttp(span *tracepb.Span) (map[string]string, *HTTPData) { var ( info HTTPData filtered = make(map[string]string) @@ -111,7 +114,7 @@ func makeHttp(spanKind tracepb.Span_SpanKind, code int32, attributes map[string] componentValue string ) - for key, value := range attributes { + for key, value := range span.Attributes.AttributeMap { switch key { case ComponentAttribute: componentValue = value.GetStringValue().GetValue() @@ -153,30 +156,52 @@ func makeHttp(spanKind tracepb.Span_SpanKind, code int32, attributes map[string] urlParts[key] = value.GetStringValue().GetValue() case PeerIpv6Attribute: urlParts[key] = value.GetStringValue().GetValue() - case ContentLenAttribute: - info.Response.ContentLength = value.GetIntValue() default: filtered[key] = value.GetStringValue().GetValue() } } - if (componentValue != HttpComponentType && componentValue != RpcComponentType) || info.Request.Method == "" { + if (componentValue != HttpComponentType && componentValue != GrpcComponentType) || info.Request.Method == "" { return filtered, nil } - if tracepb.Span_SERVER == spanKind { + if tracepb.Span_SERVER == span.Kind { info.Request.URL = constructServerUrl(componentValue, urlParts) } else { info.Request.URL = constructClientUrl(componentValue, urlParts) } if info.Response.Status == 0 { - info.Response.Status = convertToStatusCode(code) + info.Response.Status = convertToStatusCode(span.Status.Code) } + info.Response.ContentLength = extractResponseSizeFromEvents(span) + return filtered, &info } +func extractResponseSizeFromEvents(span *tracepb.Span) int64 { + var size int64 + if span.TimeEvents != nil { + for _, te := range span.TimeEvents.TimeEvent { + anno := te.GetAnnotation() + if anno != nil { + attrMap := anno.Attributes.AttributeMap + typeVal := attrMap[MessageTypeAttribute] + if typeVal != nil { + if typeVal.GetStringValue().GetValue() == "RECEIVED" { + sizeVal := attrMap[MessageUncompressedSizeAttribute] + if sizeVal != nil { + size = sizeVal.GetIntValue() + } + } + } + } + } + } + return size +} + func constructClientUrl(component string, urlParts map[string]string) string { // follows OpenTelemetry specification-defined combinations for client spans described in // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/data-http.md @@ -188,7 +213,7 @@ func constructClientUrl(component string, urlParts map[string]string) string { scheme, ok := urlParts[SchemeAttribute] if !ok { - if component == RpcComponentType { + if component == GrpcComponentType { scheme = "dns" } else { scheme = "http" @@ -233,7 +258,7 @@ func constructServerUrl(component string, urlParts map[string]string) string { scheme, ok := urlParts[SchemeAttribute] if !ok { - if component == RpcComponentType { + if component == GrpcComponentType { scheme = "dns" } else { scheme = "http" diff --git a/exporter/awsxrayexporter/translator/http_test.go b/exporter/awsxrayexporter/translator/http_test.go index 09b719adcb38..b89d80865142 100644 --- a/exporter/awsxrayexporter/translator/http_test.go +++ b/exporter/awsxrayexporter/translator/http_test.go @@ -17,6 +17,7 @@ package translator import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + "github.com/golang/protobuf/ptypes/timestamp" "github.com/golang/protobuf/ptypes/wrappers" "github.com/stretchr/testify/assert" "strings" @@ -32,7 +33,7 @@ func TestClientSpanWithUrlAttribute(t *testing.T) { attributes[StatusCodeAttribute] = 200 span := constructHttpClientSpan(attributes) - filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -56,7 +57,7 @@ func TestClientSpanWithSchemeHostTargetAttributes(t *testing.T) { attributes["user.id"] = "junit" span := constructHttpClientSpan(attributes) - filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -81,7 +82,7 @@ func TestClientSpanWithPeerAttributes(t *testing.T) { attributes[StatusCodeAttribute] = 200 span := constructHttpClientSpan(attributes) - filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -104,7 +105,7 @@ func TestClientSpanWithPeerIp4Attributes(t *testing.T) { attributes[TargetAttribute] = "/users/junit" span := constructHttpClientSpan(attributes) - filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() @@ -126,7 +127,7 @@ func TestClientSpanWithPeerIp6Attributes(t *testing.T) { attributes[TargetAttribute] = "/users/junit" span := constructHttpClientSpan(attributes) - filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() @@ -148,7 +149,7 @@ func TestServerSpanWithUrlAttribute(t *testing.T) { attributes[StatusCodeAttribute] = 200 span := constructHttpServerSpan(attributes) - filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -173,7 +174,7 @@ func TestServerSpanWithSchemeHostTargetAttributes(t *testing.T) { attributes[StatusCodeAttribute] = 200 span := constructHttpServerSpan(attributes) - filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -199,7 +200,7 @@ func TestServerSpanWithSchemeServernamePortTargetAttributes(t *testing.T) { attributes[StatusCodeAttribute] = 200 span := constructHttpServerSpan(attributes) - filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -223,10 +224,11 @@ func TestServerSpanWithSchemeNamePortTargetAttributes(t *testing.T) { attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" attributes[ClientIpAttribute] = "192.168.15.32" attributes[StatusCodeAttribute] = 200 - attributes[ContentLenAttribute] = 21378 span := constructHttpServerSpan(attributes) + timeEvents := constructTimedEventsWithReceivedMessageEvent(span.EndTime) + span.TimeEvents = &timeEvents - filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -246,7 +248,7 @@ func TestHttpStatusFromSpanStatus(t *testing.T) { attributes[URLAttribute] = "https://api.example.com/users/junit" span := constructHttpClientSpan(attributes) - filtered, httpData := makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) + filtered, httpData := makeHttp(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -326,3 +328,34 @@ func constructHttpServerSpan(attributes map[string]interface{}) *tracepb.Span { }, } } + +func constructTimedEventsWithReceivedMessageEvent(tm *timestamp.Timestamp) tracepb.Span_TimeEvents { + eventAttrMap := make(map[string]*tracepb.AttributeValue) + eventAttrMap[MessageTypeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ + StringValue: &tracepb.TruncatableString{Value: "RECEIVED"}, + }} + eventAttrMap[MessageUncompressedSizeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: 12452, + }} + eventAttrbutes := tracepb.Span_Attributes{ + AttributeMap: eventAttrMap, + DroppedAttributesCount: 0, + } + annotation := tracepb.Span_TimeEvent_Annotation{ + Attributes: &eventAttrbutes, + } + event := tracepb.Span_TimeEvent{ + Time: tm, + Value: &tracepb.Span_TimeEvent_Annotation_{ + Annotation: &annotation, + }, + } + events := make([]*tracepb.Span_TimeEvent, 1, 1) + events[0] = &event + timeEvents := tracepb.Span_TimeEvents{ + TimeEvent: events, + DroppedAnnotationsCount: 0, + DroppedMessageEventsCount: 0, + } + return timeEvents +} diff --git a/exporter/awsxrayexporter/translator/segment.go b/exporter/awsxrayexporter/translator/segment.go index 5132f7935d40..73123898a9d8 100644 --- a/exporter/awsxrayexporter/translator/segment.go +++ b/exporter/awsxrayexporter/translator/segment.go @@ -20,6 +20,7 @@ import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" "github.com/golang/protobuf/ptypes/timestamp" + tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" "math/rand" "reflect" "regexp" @@ -32,7 +33,7 @@ const ( // Only trace exporters will need them. ComponentAttribute = "component" HttpComponentType = "http" - RpcComponentType = "rpc" + GrpcComponentType = "grpc" DbComponentType = "db" MsgComponentType = "messaging" PeerAddressAttribute = "peer.address" @@ -126,8 +127,8 @@ type Segment struct { User string `json:"user,omitempty"` PrecursorIDs []string `json:"precursor_ids,omitempty"` - HTTP *HTTPData `json:"http,omitempty"` - AWS map[string]interface{} `json:"aws,omitempty"` + HTTP *HTTPData `json:"http,omitempty"` + AWS *AWSData `json:"aws,omitempty"` Service *ServiceData `json:"service,omitempty"` @@ -144,11 +145,14 @@ func MakeSegment(name string, span *tracepb.Span) Segment { traceID = convertToAmazonTraceID(span.TraceId) startTime = timestampToFloatSeconds(span.StartTime, span.StartTime) endTime = timestampToFloatSeconds(span.EndTime, span.StartTime) - filtered, http = makeHttp(span.Kind, span.Status.Code, span.Attributes.AttributeMap) - isError, isFault, cause = makeCause(span.Status, filtered) + httpfiltered, http = makeHttp(span) + isError, isFault, cause = makeCause(span.Status, httpfiltered) + isThrottled = span.Status.Code == tracetranslator.OCResourceExhausted origin = determineAwsOrigin(span.Resource) + aws = makeAws(span.Resource) service = makeService(span.Resource) - annotations = makeAnnotations(span.Resource.GetLabels()) + sqlfiltered, sql = makeSql(httpfiltered) + annotations = makeAnnotations(sqlfiltered) namespace string ) @@ -168,12 +172,16 @@ func MakeSegment(name string, span *tracepb.Span) Segment { ParentID: convertToAmazonSpanID(span.ParentSpanId), Fault: isFault, Error: isError, + Throttle: isThrottled, Cause: cause, Origin: origin, Namespace: namespace, HTTP: http, + AWS: aws, Service: service, + SQL: sql, Annotations: annotations, + Metadata: nil, } } diff --git a/exporter/awsxrayexporter/translator/segment_test.go b/exporter/awsxrayexporter/translator/segment_test.go index 01b276458bd1..8a9a2450e1f4 100644 --- a/exporter/awsxrayexporter/translator/segment_test.go +++ b/exporter/awsxrayexporter/translator/segment_test.go @@ -27,9 +27,9 @@ import ( ) func TestClientSpanWithRpcComponent(t *testing.T) { - spanName := "/widgets" + spanName := "platformapi.widgets.searchWidgets" attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = RpcComponentType + attributes[ComponentAttribute] = GrpcComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "ipv6" attributes[PeerIpv6Attribute] = "2607:f8b0:4000:80c::2004" @@ -51,7 +51,8 @@ func TestClientSpanWithRpcComponent(t *testing.T) { assert.True(t, strings.Contains(jsonStr, spanName)) } -func constructClientSpan(parentSpanId []byte, name string, code int32, message string, attributes map[string]interface{}, rscLabels map[string]string) *tracepb.Span { +func constructClientSpan(parentSpanId []byte, name string, code int32, message string, + attributes map[string]interface{}, rscLabels map[string]string) *tracepb.Span { var ( traceId = newTraceID() spanId = newSegmentID() diff --git a/exporter/awsxrayexporter/translator/sql.go b/exporter/awsxrayexporter/translator/sql.go index 430382550a0a..7e27df76a1ed 100644 --- a/exporter/awsxrayexporter/translator/sql.go +++ b/exporter/awsxrayexporter/translator/sql.go @@ -33,21 +33,45 @@ type SQLData struct { SanitizedQuery string `json:"sanitized_query,omitempty"` } -func makeSql(attributes map[string]string) *SQLData { +func makeSql(attributes map[string]string) (map[string]string, *SQLData) { var ( - sqlData SQLData + filtered = make(map[string]string) + sqlData SQLData + dbUrl string + dbType string + dbInstance string + dbStatement string + dbUser string ) componentType := attributes[ComponentAttribute] - url := attributes[PeerAddressAttribute] - if componentType == HttpComponentType || componentType == RpcComponentType || url == "" { - return nil + if componentType == HttpComponentType || componentType == GrpcComponentType { + return attributes, nil } - url += "/" + attributes[DbInstanceAttribute] + for key, value := range attributes { + switch key { + case PeerAddressAttribute: + dbUrl = value + case DbTypeAttribute: + dbType = value + case DbInstanceAttribute: + dbInstance = value + case DbStatementAttribute: + dbStatement = value + case DbUserAttribute: + dbUser = value + default: + filtered[key] = value + } + } + if dbUrl == "" { + dbUrl = "localhost" + } + url := dbUrl + "/" + dbInstance sqlData = SQLData{ URL: url, - DatabaseType: attributes[DbTypeAttribute], - User: attributes[DbUserAttribute], - SanitizedQuery: attributes[DbStatementAttribute], + DatabaseType: dbType, + User: dbUser, + SanitizedQuery: dbStatement, } - return &sqlData + return filtered, &sqlData } diff --git a/exporter/awsxrayexporter/translator/sql_test.go b/exporter/awsxrayexporter/translator/sql_test.go index e912ce80f2e7..f772324fb070 100644 --- a/exporter/awsxrayexporter/translator/sql_test.go +++ b/exporter/awsxrayexporter/translator/sql_test.go @@ -31,8 +31,9 @@ func TestClientSpanWithStatementAttribute(t *testing.T) { attributes[PeerHostAttribute] = "db.example.com" attributes[PeerPortAttribute] = "3306" - sqlData := makeSql(attributes) + filtered, sqlData := makeSql(attributes) + assert.NotNil(t, filtered) assert.NotNil(t, sqlData) w := borrow() if err := w.Encode(sqlData); err != nil { @@ -54,7 +55,8 @@ func TestClientSpanWithHttpComponentAttribute(t *testing.T) { attributes[PeerHostAttribute] = "db.example.com" attributes[PeerPortAttribute] = "3306" - sqlData := makeSql(attributes) + filtered, sqlData := makeSql(attributes) + assert.NotNil(t, filtered) assert.Nil(t, sqlData) } From 42435c8d0da432c22db6faef8b0d7ece9b6d62da Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Tue, 19 Nov 2019 15:20:04 -0600 Subject: [PATCH 41/59] initial dev of xray data structures and converters --- exporter/awsxrayexporter/README.md | 41 ++++ exporter/awsxrayexporter/translator/aws.go | 82 +++++-- .../awsxrayexporter/translator/aws_test.go | 100 ++++++++- exporter/awsxrayexporter/translator/cause.go | 74 +++---- .../awsxrayexporter/translator/cause_test.go | 11 +- exporter/awsxrayexporter/translator/http.go | 4 +- .../awsxrayexporter/translator/http_test.go | 32 --- .../awsxrayexporter/translator/segment.go | 59 +++-- .../translator/segment_test.go | 206 +++++++++++++++++- 9 files changed, 485 insertions(+), 124 deletions(-) create mode 100644 exporter/awsxrayexporter/README.md diff --git a/exporter/awsxrayexporter/README.md b/exporter/awsxrayexporter/README.md new file mode 100644 index 000000000000..3fee707dcf90 --- /dev/null +++ b/exporter/awsxrayexporter/README.md @@ -0,0 +1,41 @@ +# AWS X-Ray Tracing Exporter for OpenTelemetry Collector + +This exporter converts OpenTelemetry spans to +[AWS X-Ray Segment Documents](https://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html) +and then sends them directly to X-Ray using the +[PutTraceSegements](https://docs.aws.amazon.com/xray/latest/api/API_PutTraceSegments.html) API. + +## Data Conversion + +Trace IDs and Span IDs are expected to be originally generated by either AWS API Gateway or AWS ALB and +propagated by them using the `X-Amzn-Trace-Id` HTTP header. However, other generation sources are +supported by replacing Trace IDs where necessary. For consistency, you may want to consider using the +X-Ray approach if generating Trace IDs within the application. + +> AWS X-Ray IDs are the same size as W3C Trace Context IDs but differ in that the first 32 bits of a Trace ID +> is the Unix epoch time when the trace was started. Since X-Ray only allows submission of Trace IDs from the +> past 30 days, received Trace IDs are checked. If outside the allowed range, a replacement is generated using +> the current time. + +The `http` object is populated when the `component` attribute value is `grpc` as well as `http`. Other +synchronous call types should also result in the `http` object being populated. + +## AWS Specific Attributes + +The following AWS-specific Span attributes are supported in addition to the standard names and values +defined in the OpenTelemetry Semantic Conventions. + +| Attribute name | Notes and examples | Required? | +| :--------------- | :--------------------------------------------------------------------- | --------- | +| `aws.operation` | The name of the API action invoked against an AWS service or resource. | No | +| `aws.account_id` | The AWS account number if accessing resource in different account. | No | +| `aws.region` | The AWS region if accessing resource in different region from app. | No | +| `aws.request_id` | AWS-generated unique identifier for the request. | No | +| `aws.queue_url` | For operations on an Amazon SQS queue, the queue's URL. | No | +| `aws.table_name` | For operations on a DynamoDB table, the name of the table. | No | + +Any of these values supplied are used to populate the `aws` object in addition to any relevant data supplied +by the Span Resource object. X-Ray uses this data to generate inferred segments for the remote APIs. + +## Exporter Configuration + diff --git a/exporter/awsxrayexporter/translator/aws.go b/exporter/awsxrayexporter/translator/aws.go index e09e937f814f..39d026247ca8 100644 --- a/exporter/awsxrayexporter/translator/aws.go +++ b/exporter/awsxrayexporter/translator/aws.go @@ -19,12 +19,26 @@ import ( "strconv" ) +const ( + AwsOperationAttribute = "aws.operation" + AwsAccountAttribute = "aws.account_id" + AwsRegionAttribute = "aws.region" + AwsRequestIdAttribute = "aws.request_id" + AwsQueueUrlAttribute = "aws.queue_url" + AwsTableNameAttribute = "aws.table_name" +) + // AWSData provides the shape for unmarshalling AWS resource data. type AWSData struct { AccountID string `json:"account_id,omitempty"` BeanstalkMetadata *BeanstalkMetadata `json:"elastic_beanstalk,omitempty"` ECSMetadata *ECSMetadata `json:"ecs,omitempty"` EC2Metadata *EC2Metadata `json:"ec2,omitempty"` + Operation string `json:"operation,omitempty"` + RemoteRegion string `json:"region,omitempty"` + RequestID string `json:"request_id,omitempty"` + QueueURL string `json:"queue_url,omitempty"` + TableName string `json:"table_name,omitempty"` } // EC2Metadata provides the shape for unmarshalling EC2 metadata. @@ -45,25 +59,32 @@ type BeanstalkMetadata struct { DeploymentID int64 `json:"deployment_id"` } -func makeAws(resource *resourcepb.Resource) *AWSData { +func makeAws(attributes map[string]string, resource *resourcepb.Resource) (map[string]string, *AWSData) { var ( - cloud string - account string - zone string - hostId string - container string - namespace string - deployId string - ver string - origin string - ec2 *EC2Metadata - ecs *ECSMetadata - ebs *BeanstalkMetadata - awsData *AWSData + cloud string + account string + zone string + hostId string + container string + namespace string + deployId string + ver string + origin string + operation string + remoteRegion string + requestId string + queueUrl string + tableName string + ec2 *EC2Metadata + ecs *ECSMetadata + ebs *BeanstalkMetadata + awsData *AWSData + filtered map[string]string ) if resource == nil { - return awsData + return attributes, awsData } + filtered = make(map[string]string) for key, value := range resource.Labels { switch key { case CloudProviderAttribute: @@ -88,8 +109,28 @@ func makeAws(resource *resourcepb.Resource) *AWSData { ver = value } } + for key, value := range attributes { + switch key { + case AwsOperationAttribute: + operation = value + case AwsAccountAttribute: + if value != "" { + account = value + } + case AwsRegionAttribute: + remoteRegion = value + case AwsRequestIdAttribute: + requestId = value + case AwsQueueUrlAttribute: + queueUrl = value + case AwsTableNameAttribute: + tableName = value + default: + filtered[key] = value + } + } if cloud != "aws" && cloud != "" { - return awsData // not AWS so return nil + return filtered, awsData // not AWS so return nil } // progress from least specific to most specific origin so most specific ends up as origin // as per X-Ray docs @@ -119,13 +160,18 @@ func makeAws(resource *resourcepb.Resource) *AWSData { } } if origin == "" { - return awsData + return filtered, awsData } awsData = &AWSData{ AccountID: account, BeanstalkMetadata: ebs, ECSMetadata: ecs, EC2Metadata: ec2, + Operation: operation, + RemoteRegion: remoteRegion, + RequestID: requestId, + QueueURL: queueUrl, + TableName: tableName, } - return awsData + return filtered, awsData } diff --git a/exporter/awsxrayexporter/translator/aws_test.go b/exporter/awsxrayexporter/translator/aws_test.go index 4391300bc22c..88df715dac40 100644 --- a/exporter/awsxrayexporter/translator/aws_test.go +++ b/exporter/awsxrayexporter/translator/aws_test.go @@ -33,9 +33,11 @@ func TestAwsFromEc2Resource(t *testing.T) { Type: "vm", Labels: labels, } + attributes := make(map[string]string) - awsData := makeAws(resource) + filtered, awsData := makeAws(attributes, resource) + assert.NotNil(t, filtered) assert.NotNil(t, awsData) assert.NotNil(t, awsData.EC2Metadata) assert.Nil(t, awsData.ECSMetadata) @@ -69,9 +71,11 @@ func TestAwsFromEcsResource(t *testing.T) { Type: "container", Labels: labels, } + attributes := make(map[string]string) - awsData := makeAws(resource) + filtered, awsData := makeAws(attributes, resource) + assert.NotNil(t, filtered) assert.NotNil(t, awsData) assert.NotNil(t, awsData.EC2Metadata) assert.NotNil(t, awsData.ECSMetadata) @@ -98,9 +102,11 @@ func TestAwsFromBeanstalkResource(t *testing.T) { Type: "vm", Labels: labels, } + attributes := make(map[string]string) - awsData := makeAws(resource) + filtered, awsData := makeAws(attributes, resource) + assert.NotNil(t, filtered) assert.NotNil(t, awsData) assert.Nil(t, awsData.EC2Metadata) assert.Nil(t, awsData.ECSMetadata) @@ -113,3 +119,91 @@ func TestAwsFromBeanstalkResource(t *testing.T) { release(w) assert.True(t, strings.Contains(jsonStr, deployId)) } + +func TestAwsWithAwsSqsResources(t *testing.T) { + instanceId := "i-00f7c0bcb26da2a99" + containerId := "signup_aggregator-x82ufje83" + labels := make(map[string]string) + labels[CloudProviderAttribute] = "aws" + labels[CloudAccountAttribute] = "123456789" + labels[CloudZoneAttribute] = "us-east-1c" + labels[ContainerNameAttribute] = "signup_aggregator" + labels[ContainerImageAttribute] = "otel/signupaggregator" + labels[ContainerTagAttribute] = "v1" + labels[K8sClusterAttribute] = "production" + labels[K8sNamespaceAttribute] = "default" + labels[K8sDeploymentAttribute] = "signup_aggregator" + labels[K8sPodAttribute] = containerId + labels[HostIdAttribute] = instanceId + labels[HostTypeAttribute] = "m5.xlarge" + resource := &resourcepb.Resource{ + Type: "container", + Labels: labels, + } + queueUrl := "https://sqs.use1.amazonaws.com/Meltdown-Alerts" + attributes := make(map[string]string) + attributes[AwsOperationAttribute] = "SendMessage" + attributes[AwsAccountAttribute] = "987654321" + attributes[AwsRegionAttribute] = "us-east-2" + attributes[AwsQueueUrlAttribute] = queueUrl + attributes["employee.id"] = "XB477" + + filtered, awsData := makeAws(attributes, resource) + + assert.NotNil(t, filtered) + assert.NotNil(t, awsData) + assert.NotNil(t, awsData.EC2Metadata) + assert.NotNil(t, awsData.ECSMetadata) + assert.Nil(t, awsData.BeanstalkMetadata) + w := borrow() + if err := w.Encode(awsData); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + release(w) + assert.True(t, strings.Contains(jsonStr, containerId)) + assert.True(t, strings.Contains(jsonStr, queueUrl)) +} + +func TestAwsWithAwsDynamoDbResources(t *testing.T) { + instanceId := "i-00f7c0bcb26da2a99" + containerId := "signup_aggregator-x82ufje83" + labels := make(map[string]string) + labels[CloudProviderAttribute] = "aws" + labels[CloudAccountAttribute] = "123456789" + labels[CloudZoneAttribute] = "us-east-1c" + labels[ContainerNameAttribute] = "signup_aggregator" + labels[ContainerImageAttribute] = "otel/signupaggregator" + labels[ContainerTagAttribute] = "v1" + labels[K8sClusterAttribute] = "production" + labels[K8sNamespaceAttribute] = "default" + labels[K8sDeploymentAttribute] = "signup_aggregator" + labels[K8sPodAttribute] = containerId + labels[HostIdAttribute] = instanceId + labels[HostTypeAttribute] = "m5.xlarge" + resource := &resourcepb.Resource{ + Type: "container", + Labels: labels, + } + tableName := "WIDGET_TYPES" + attributes := make(map[string]string) + attributes[AwsOperationAttribute] = "PutItem" + attributes[AwsRequestIdAttribute] = "75107C82-EC8A-4F75-883F-4440B491B0AB" + attributes[AwsTableNameAttribute] = tableName + + filtered, awsData := makeAws(attributes, resource) + + assert.NotNil(t, filtered) + assert.NotNil(t, awsData) + assert.NotNil(t, awsData.EC2Metadata) + assert.NotNil(t, awsData.ECSMetadata) + assert.Nil(t, awsData.BeanstalkMetadata) + w := borrow() + if err := w.Encode(awsData); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + release(w) + assert.True(t, strings.Contains(jsonStr, containerId)) + assert.True(t, strings.Contains(jsonStr, tableName)) +} diff --git a/exporter/awsxrayexporter/translator/cause.go b/exporter/awsxrayexporter/translator/cause.go index 3cefcc092320..7abc73b79b60 100644 --- a/exporter/awsxrayexporter/translator/cause.go +++ b/exporter/awsxrayexporter/translator/cause.go @@ -17,14 +17,11 @@ package translator import ( "encoding/hex" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" - "os" - "strings" ) const ( ErrorObjectAttribute = "error.object" ErrorMessageAttribute = "error.message" - ErrorStackAttribute = "error.stack" ErrorKindAttribute = "error.kind" ) @@ -51,20 +48,38 @@ type Stack struct { Label string `json:"label,omitempty"` } -func makeCause(status *tracepb.Status, attributes map[string]string) (isError, isFault bool, cause *CauseData) { +func makeCause(status *tracepb.Status, attributes map[string]string) (bool, bool, map[string]string, *CauseData) { if status.Code == 0 { - return + return false, false, attributes, nil } - - message := status.GetMessage() - if message == "" { - message = attributes[ErrorMessageAttribute] - } - if message == "" { - message = attributes[StatusTextAttribute] + var ( + filtered = make(map[string]string) + cause *CauseData + message = status.GetMessage() + errorKind string + errorObject string + ) + + for key, value := range attributes { + switch key { + case ErrorKindAttribute: + errorKind = value + case ErrorMessageAttribute: + if message == "" { + message = value + } + case StatusTextAttribute: + if message == "" { + message = value + } + case ErrorObjectAttribute: + errorObject = value + default: + filtered[key] = value + } } if message == "" { - message = attributes[ErrorObjectAttribute] + message = errorObject } if message != "" { @@ -75,42 +90,21 @@ func makeCause(status *tracepb.Status, attributes map[string]string) (isError, i Exceptions: []Exception{ { ID: hexID, - Type: attributes[ErrorKindAttribute], + Type: errorKind, Message: message, }, }, } - - stackStr := attributes[ErrorStackAttribute] - if stackStr != "" { - cause.Exceptions[0].Stack = parseStackData(stackStr) - } - - if dir, err := os.Getwd(); err == nil { - cause.WorkingDirectory = dir - } } if isClientError(status.Code) { - isError = true - return - } - - isFault = true - return -} - -func parseStackData(stackStr string) []Stack { - parts := strings.Split(stackStr, "|") - stacks := make([]Stack, len(parts)) - for i, part := range parts { - stacks[i] = Stack{ - Label: part, - } + return true, false, filtered, cause + } else { + return false, true, filtered, cause } - return stacks } func isClientError(code int32) bool { - return false + httpStatus := convertToHttpStatusCode(code) + return httpStatus >= 400 && httpStatus < 500 } diff --git a/exporter/awsxrayexporter/translator/cause_test.go b/exporter/awsxrayexporter/translator/cause_test.go index 60eb22bab169..4cf8d3e37191 100644 --- a/exporter/awsxrayexporter/translator/cause_test.go +++ b/exporter/awsxrayexporter/translator/cause_test.go @@ -33,10 +33,11 @@ func TestCauseWithStatusMessage(t *testing.T) { span.Status.Message = errorMsg filtered, _ := makeHttp(span) - isError, isFault, cause := makeCause(span.Status, filtered) + isError, isFault, filtered, cause := makeCause(span.Status, filtered) assert.False(t, isError) assert.True(t, isFault) + assert.NotNil(t, filtered) assert.NotNil(t, cause) w := borrow() if err := w.Encode(cause); err != nil { @@ -57,10 +58,11 @@ func TestCauseWithHttpStatusMessage(t *testing.T) { span := constructExceptionServerSpan(attributes) filtered, _ := makeHttp(span) - isError, isFault, cause := makeCause(span.Status, filtered) + isError, isFault, filtered, cause := makeCause(span.Status, filtered) assert.False(t, isError) assert.True(t, isFault) + assert.NotNil(t, filtered) assert.NotNil(t, cause) w := borrow() if err := w.Encode(cause); err != nil { @@ -78,14 +80,14 @@ func TestCauseWithErrorMessage(t *testing.T) { attributes[URLAttribute] = "https://api.example.com/widgets" attributes[StatusCodeAttribute] = 500 attributes[ErrorMessageAttribute] = errorMsg - attributes[ErrorStackAttribute] = "org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749)" span := constructExceptionServerSpan(attributes) filtered, _ := makeHttp(span) - isError, isFault, cause := makeCause(span.Status, filtered) + isError, isFault, filtered, cause := makeCause(span.Status, filtered) assert.False(t, isError) assert.True(t, isFault) + assert.NotNil(t, filtered) assert.NotNil(t, cause) w := borrow() if err := w.Encode(cause); err != nil { @@ -94,7 +96,6 @@ func TestCauseWithErrorMessage(t *testing.T) { jsonStr := w.String() release(w) assert.True(t, strings.Contains(jsonStr, errorMsg)) - assert.True(t, strings.Contains(jsonStr, "ConstructorResolver")) } func constructExceptionServerSpan(attributes map[string]interface{}) *tracepb.Span { diff --git a/exporter/awsxrayexporter/translator/http.go b/exporter/awsxrayexporter/translator/http.go index 928e8417585b..40d32ae11d69 100644 --- a/exporter/awsxrayexporter/translator/http.go +++ b/exporter/awsxrayexporter/translator/http.go @@ -65,7 +65,7 @@ type ResponseData struct { ContentLength int64 `json:"content_length,omitempty"` } -func convertToStatusCode(code int32) int64 { +func convertToHttpStatusCode(code int32) int64 { switch code { case tracetranslator.OCOK: return http.StatusOK @@ -172,7 +172,7 @@ func makeHttp(span *tracepb.Span) (map[string]string, *HTTPData) { } if info.Response.Status == 0 { - info.Response.Status = convertToStatusCode(span.Status.Code) + info.Response.Status = convertToHttpStatusCode(span.Status.Code) } info.Response.ContentLength = extractResponseSizeFromEvents(span) diff --git a/exporter/awsxrayexporter/translator/http_test.go b/exporter/awsxrayexporter/translator/http_test.go index b89d80865142..35f9a1f967a4 100644 --- a/exporter/awsxrayexporter/translator/http_test.go +++ b/exporter/awsxrayexporter/translator/http_test.go @@ -17,7 +17,6 @@ package translator import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" - "github.com/golang/protobuf/ptypes/timestamp" "github.com/golang/protobuf/ptypes/wrappers" "github.com/stretchr/testify/assert" "strings" @@ -328,34 +327,3 @@ func constructHttpServerSpan(attributes map[string]interface{}) *tracepb.Span { }, } } - -func constructTimedEventsWithReceivedMessageEvent(tm *timestamp.Timestamp) tracepb.Span_TimeEvents { - eventAttrMap := make(map[string]*tracepb.AttributeValue) - eventAttrMap[MessageTypeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ - StringValue: &tracepb.TruncatableString{Value: "RECEIVED"}, - }} - eventAttrMap[MessageUncompressedSizeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ - IntValue: 12452, - }} - eventAttrbutes := tracepb.Span_Attributes{ - AttributeMap: eventAttrMap, - DroppedAttributesCount: 0, - } - annotation := tracepb.Span_TimeEvent_Annotation{ - Attributes: &eventAttrbutes, - } - event := tracepb.Span_TimeEvent{ - Time: tm, - Value: &tracepb.Span_TimeEvent_Annotation_{ - Annotation: &annotation, - }, - } - events := make([]*tracepb.Span_TimeEvent, 1, 1) - events[0] = &event - timeEvents := tracepb.Span_TimeEvents{ - TimeEvent: events, - DroppedAnnotationsCount: 0, - DroppedMessageEventsCount: 0, - } - return timeEvents -} diff --git a/exporter/awsxrayexporter/translator/segment.go b/exporter/awsxrayexporter/translator/segment.go index 73123898a9d8..21c119321120 100644 --- a/exporter/awsxrayexporter/translator/segment.go +++ b/exporter/awsxrayexporter/translator/segment.go @@ -89,18 +89,14 @@ var ( ) const ( - // defaultSpanName will be used if there are no valid xray characters in the - // span name + // defaultSpanName will be used if there are no valid xray characters in the span name defaultSegmentName = "span" - // maxSegmentNameLength the maximum length of a Segment name maxSegmentNameLength = 200 ) const ( traceIDLength = 35 // fixed length of aws trace id - spanIDLength = 16 // fixed length of aws span id - epochOffset = 2 // offset of epoch secs identifierOffset = 11 // offset of identifier within traceID ) @@ -140,20 +136,31 @@ type Segment struct { Metadata map[string]map[string]interface{} `json:"metadata,omitempty"` } -func MakeSegment(name string, span *tracepb.Span) Segment { +func MakeSegmentDocumentString(name string, span *tracepb.Span, userAttribute string) (string, error) { + segment := MakeSegment(name, span, userAttribute) + w := borrow() + if err := w.Encode(segment); err != nil { + return "", err + } + jsonStr := w.String() + release(w) + return jsonStr, nil +} + +func MakeSegment(name string, span *tracepb.Span, userAttribute string) Segment { var ( - traceID = convertToAmazonTraceID(span.TraceId) - startTime = timestampToFloatSeconds(span.StartTime, span.StartTime) - endTime = timestampToFloatSeconds(span.EndTime, span.StartTime) - httpfiltered, http = makeHttp(span) - isError, isFault, cause = makeCause(span.Status, httpfiltered) - isThrottled = span.Status.Code == tracetranslator.OCResourceExhausted - origin = determineAwsOrigin(span.Resource) - aws = makeAws(span.Resource) - service = makeService(span.Resource) - sqlfiltered, sql = makeSql(httpfiltered) - annotations = makeAnnotations(sqlfiltered) - namespace string + traceID = convertToAmazonTraceID(span.TraceId) + startTime = timestampToFloatSeconds(span.StartTime, span.StartTime) + endTime = timestampToFloatSeconds(span.EndTime, span.StartTime) + httpfiltered, http = makeHttp(span) + isError, isFault, causefiltered, cause = makeCause(span.Status, httpfiltered) + isThrottled = span.Status.Code == tracetranslator.OCResourceExhausted + origin = determineAwsOrigin(span.Resource) + awsfiltered, aws = makeAws(causefiltered, span.Resource) + service = makeService(span.Resource) + sqlfiltered, sql = makeSql(awsfiltered) + user, annotations = makeAnnotations(sqlfiltered, userAttribute) + namespace string ) if name == "" { @@ -176,6 +183,7 @@ func MakeSegment(name string, span *tracepb.Span) Segment { Cause: cause, Origin: origin, Namespace: namespace, + User: user, HTTP: http, AWS: aws, Service: service, @@ -276,15 +284,22 @@ func mergeAnnotations(dest map[string]interface{}, src map[string]string) { } } -func makeAnnotations(attributes map[string]string) map[string]interface{} { - var result = map[string]interface{}{} +func makeAnnotations(attributes map[string]string, userAttribute string) (string, map[string]interface{}) { + var ( + result = map[string]interface{}{} + user = attributes[userAttribute] + ) + if user != "" { + delete(attributes, userAttribute) + } + delete(attributes, ComponentAttribute) mergeAnnotations(result, attributes) if len(result) == 0 { - return nil + return user, nil } - return result + return user, result } // fixSegmentName removes any invalid characters from the span name. AWS X-Ray defines diff --git a/exporter/awsxrayexporter/translator/segment_test.go b/exporter/awsxrayexporter/translator/segment_test.go index 8a9a2450e1f4..4f1069d4e964 100644 --- a/exporter/awsxrayexporter/translator/segment_test.go +++ b/exporter/awsxrayexporter/translator/segment_test.go @@ -19,6 +19,7 @@ import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" "github.com/golang/protobuf/ptypes/timestamp" + tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" "github.com/stretchr/testify/assert" "reflect" "strings" @@ -26,7 +27,7 @@ import ( "time" ) -func TestClientSpanWithRpcComponent(t *testing.T) { +func TestClientSpanWithGrpcComponent(t *testing.T) { spanName := "platformapi.widgets.searchWidgets" attributes := make(map[string]interface{}) attributes[ComponentAttribute] = GrpcComponentType @@ -37,11 +38,69 @@ func TestClientSpanWithRpcComponent(t *testing.T) { attributes[TargetAttribute] = spanName labels := constructDefaultResourceLabels() span := constructClientSpan(nil, spanName, 0, "OK", attributes, labels) + timeEvents := constructTimedEventsWithSentMessageEvent(span.StartTime) + span.TimeEvents = &timeEvents - segment := MakeSegment(spanName, span) + jsonStr, err := MakeSegmentDocumentString(spanName, span, "user.id") + + assert.NotNil(t, jsonStr) + assert.Nil(t, err) + assert.True(t, strings.Contains(jsonStr, spanName)) +} + +func TestClientSpanWithAwsSdkClient(t *testing.T) { + spanName := "AmazonDynamoDB.getItem" + parentSpanId := newSegmentID() + userAttribute := "originating.user" + user := "testing" + attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HttpComponentType + attributes[MethodAttribute] = "POST" + attributes[SchemeAttribute] = "https" + attributes[HostAttribute] = "dynamodb.us-east-1.amazonaws.com" + attributes[TargetAttribute] = "/" + attributes[UserAgentAttribute] = "aws-sdk-java/1.11.613 Windows_10/10.0 OpenJDK_64-Bit_server_VM/11.0.4+11-LTS" + attributes[AwsOperationAttribute] = "GetItem" + attributes[AwsRequestIdAttribute] = "18BO1FEPJSSAOGNJEDPTPCMIU7VV4KQNSO5AEMVJF66Q9ASUAAJG" + attributes[AwsTableNameAttribute] = "otel-dev-Testing" + attributes[userAttribute] = user + labels := constructDefaultResourceLabels() + span := constructClientSpan(parentSpanId, spanName, 0, "OK", attributes, labels) + + jsonStr, err := MakeSegmentDocumentString(spanName, span, userAttribute) + + assert.NotNil(t, jsonStr) + assert.Nil(t, err) + assert.True(t, strings.Contains(jsonStr, spanName)) + assert.True(t, strings.Contains(jsonStr, user)) + assert.False(t, strings.Contains(jsonStr, ComponentAttribute)) +} + +func TestServerSpanWithInternalServerError(t *testing.T) { + spanName := "/api/locations" + parentSpanId := newSegmentID() + userAttribute := "originating.user" + user := "testing" + errorMessage := "java.lang.NullPointerException" + attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HttpComponentType + attributes[MethodAttribute] = "POST" + attributes[URLAttribute] = "https://api.example.org/api/locations" + attributes[TargetAttribute] = "/api/locations" + attributes[StatusCodeAttribute] = 500 + attributes[userAttribute] = user + attributes[ErrorKindAttribute] = "java.lang.NullPointerException" + labels := constructDefaultResourceLabels() + span := constructServerSpan(parentSpanId, spanName, tracetranslator.OCInternal, errorMessage, attributes, labels) + timeEvents := constructTimedEventsWithSentMessageEvent(span.StartTime) + span.TimeEvents = &timeEvents + + segment := MakeSegment(spanName, span, "originating.user") assert.NotNil(t, segment) + assert.NotNil(t, segment.Cause) assert.Equal(t, spanName, segment.Name) + assert.True(t, segment.Fault) w := borrow() if err := w.Encode(segment); err != nil { assert.Fail(t, "invalid json") @@ -49,6 +108,46 @@ func TestClientSpanWithRpcComponent(t *testing.T) { jsonStr := w.String() release(w) assert.True(t, strings.Contains(jsonStr, spanName)) + assert.True(t, strings.Contains(jsonStr, errorMessage)) + assert.False(t, strings.Contains(jsonStr, userAttribute)) +} + +func TestClientSpanWithDbComponent(t *testing.T) { + spanName := "call update_user_preference( ?, ?, ? )" + enterpriseAppId := "25F2E73B-4769-4C79-9DF3-7EBE85D571EA" + attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = DbComponentType + attributes[DbTypeAttribute] = "sql" + attributes[DbInstanceAttribute] = "customers" + attributes[DbStatementAttribute] = spanName + attributes[DbUserAttribute] = "userprefsvc" + attributes[PeerAddressAttribute] = "mysql://db.dev.example.com:3306" + attributes[PeerHostAttribute] = "db.dev.example.com" + attributes[PeerPortAttribute] = "3306" + attributes["enterprise.app.id"] = enterpriseAppId + labels := constructDefaultResourceLabels() + span := constructClientSpan(nil, spanName, 0, "OK", attributes, labels) + + segment := MakeSegment(spanName, span, "originating.user") + + assert.NotNil(t, segment) + assert.NotNil(t, segment.SQL) + assert.NotNil(t, segment.Service) + assert.NotNil(t, segment.AWS) + assert.NotNil(t, segment.Annotations) + assert.Nil(t, segment.Cause) + assert.Nil(t, segment.HTTP) + assert.Equal(t, spanName, segment.Name) + assert.False(t, segment.Fault) + assert.False(t, segment.Error) + w := borrow() + if err := w.Encode(segment); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + release(w) + assert.True(t, strings.Contains(jsonStr, spanName)) + assert.True(t, strings.Contains(jsonStr, enterpriseAppId)) } func constructClientSpan(parentSpanId []byte, name string, code int32, message string, @@ -83,6 +182,38 @@ func constructClientSpan(parentSpanId []byte, name string, code int32, message s } } +func constructServerSpan(parentSpanId []byte, name string, code int32, message string, + attributes map[string]interface{}, rscLabels map[string]string) *tracepb.Span { + var ( + traceId = newTraceID() + spanId = newSegmentID() + endTime = time.Now() + startTime = endTime.Add(-215 * time.Millisecond) + spanAttributes = constructSpanAttributes(attributes) + ) + + return &tracepb.Span{ + TraceId: traceId, + SpanId: spanId, + ParentSpanId: parentSpanId, + Name: &tracepb.TruncatableString{Value: name}, + Kind: tracepb.Span_SERVER, + StartTime: convertTimeToTimestamp(startTime), + EndTime: convertTimeToTimestamp(endTime), + Status: &tracepb.Status{ + Code: code, + Message: message, + }, + Attributes: &tracepb.Span_Attributes{ + AttributeMap: spanAttributes, + }, + Resource: &resourcepb.Resource{ + Type: "container", + Labels: rscLabels, + }, + } +} + func constructSpanAttributes(attributes map[string]interface{}) map[string]*tracepb.AttributeValue { attrs := make(map[string]*tracepb.AttributeValue) for key, value := range attributes { @@ -134,3 +265,74 @@ func convertTimeToTimestamp(t time.Time) *timestamp.Timestamp { Nanos: int32(nanoTime % 1e9), } } + +func constructTimedEventsWithReceivedMessageEvent(tm *timestamp.Timestamp) tracepb.Span_TimeEvents { + eventAttrMap := make(map[string]*tracepb.AttributeValue) + eventAttrMap[MessageTypeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ + StringValue: &tracepb.TruncatableString{Value: "RECEIVED"}, + }} + eventAttrMap[MessageIdAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: 1, + }} + eventAttrMap[MessageCompressedSizeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: 6478, + }} + eventAttrMap[MessageUncompressedSizeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: 12452, + }} + eventAttrbutes := tracepb.Span_Attributes{ + AttributeMap: eventAttrMap, + DroppedAttributesCount: 0, + } + annotation := tracepb.Span_TimeEvent_Annotation{ + Attributes: &eventAttrbutes, + } + event := tracepb.Span_TimeEvent{ + Time: tm, + Value: &tracepb.Span_TimeEvent_Annotation_{ + Annotation: &annotation, + }, + } + events := make([]*tracepb.Span_TimeEvent, 1, 1) + events[0] = &event + timeEvents := tracepb.Span_TimeEvents{ + TimeEvent: events, + DroppedAnnotationsCount: 0, + DroppedMessageEventsCount: 0, + } + return timeEvents +} + +func constructTimedEventsWithSentMessageEvent(tm *timestamp.Timestamp) tracepb.Span_TimeEvents { + eventAttrMap := make(map[string]*tracepb.AttributeValue) + eventAttrMap[MessageTypeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ + StringValue: &tracepb.TruncatableString{Value: "SENT"}, + }} + eventAttrMap[MessageIdAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: 1, + }} + eventAttrMap[MessageUncompressedSizeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: 7480, + }} + eventAttrbutes := tracepb.Span_Attributes{ + AttributeMap: eventAttrMap, + DroppedAttributesCount: 0, + } + annotation := tracepb.Span_TimeEvent_Annotation{ + Attributes: &eventAttrbutes, + } + event := tracepb.Span_TimeEvent{ + Time: tm, + Value: &tracepb.Span_TimeEvent_Annotation_{ + Annotation: &annotation, + }, + } + events := make([]*tracepb.Span_TimeEvent, 1, 1) + events[0] = &event + timeEvents := tracepb.Span_TimeEvents{ + TimeEvent: events, + DroppedAnnotationsCount: 0, + DroppedMessageEventsCount: 0, + } + return timeEvents +} From b6c606b13b08af36ab7e6744addf78c82f473f16 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Wed, 20 Nov 2019 10:32:25 -0600 Subject: [PATCH 42/59] initial dev of export handler --- exporter/awsxrayexporter/awsxray.go | 29 ++- exporter/awsxrayexporter/awsxray_test.go | 188 ++++++++++++++++++ exporter/awsxrayexporter/config.go | 5 +- exporter/awsxrayexporter/config_test.go | 8 +- exporter/awsxrayexporter/factory.go | 5 +- exporter/awsxrayexporter/factory_test.go | 38 ++++ exporter/awsxrayexporter/testdata/config.yaml | 6 +- exporter/awsxrayexporter/translator/cause.go | 2 +- .../awsxrayexporter/translator/cause_test.go | 6 +- .../awsxrayexporter/translator/http_test.go | 12 +- .../awsxrayexporter/translator/segment.go | 9 +- .../translator/segment_test.go | 73 ++++++- 12 files changed, 348 insertions(+), 33 deletions(-) create mode 100644 exporter/awsxrayexporter/awsxray_test.go diff --git a/exporter/awsxrayexporter/awsxray.go b/exporter/awsxrayexporter/awsxray.go index a740ef095b49..4b5d98aecf47 100644 --- a/exporter/awsxrayexporter/awsxray.go +++ b/exporter/awsxrayexporter/awsxray.go @@ -16,6 +16,8 @@ package awsxrayexporter import ( "context" + "github.com/aws/aws-sdk-go/service/xray" + "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter/translator" "github.com/open-telemetry/opentelemetry-collector/config/configmodels" "github.com/open-telemetry/opentelemetry-collector/consumer/consumerdata" "github.com/open-telemetry/opentelemetry-collector/exporter" @@ -28,15 +30,38 @@ import ( func NewTraceExporter(config configmodels.Exporter, logger *zap.Logger) (exporter.TraceExporter, error) { typeLog := zap.String("type", config.Type()) nameLog := zap.String("name", config.Name()) + userAttribute := config.(*Config).UserAttribute return exporterhelper.NewTraceExporter( config, func(ctx context.Context, td consumerdata.TraceData) (int, error) { logger.Info("TraceExporter", typeLog, nameLog, zap.Int("#spans", len(td.Spans))) - // TODO: Add ability to record the received data - return 0, nil + droppedSpans, input := assembleRequest(userAttribute, td, logger) + logger.Info("request: " + input.String()) + return droppedSpans, nil }, exporterhelper.WithTracing(true), exporterhelper.WithMetrics(false), exporterhelper.WithShutdown(logger.Sync), ) } + +func assembleRequest(userAttribute string, td consumerdata.TraceData, + logger *zap.Logger) (int, *xray.PutTraceSegmentsInput) { + documents := make([]*string, len(td.Spans)) + droppedSpans := int(0) + for i, span := range td.Spans { + if span == nil || span.Name == nil { + droppedSpans++ + continue + } + spanName := span.Name.Value + jsonStr, err := translator.MakeSegmentDocumentString(spanName, span, userAttribute) + if err != nil { + droppedSpans++ + logger.Warn("Unable to convert span", zap.Error(err)) + } + logger.Debug(jsonStr) + documents[i] = &jsonStr + } + return droppedSpans, &xray.PutTraceSegmentsInput{TraceSegmentDocuments: documents} +} diff --git a/exporter/awsxrayexporter/awsxray_test.go b/exporter/awsxrayexporter/awsxray_test.go new file mode 100644 index 000000000000..d3b74b4a8586 --- /dev/null +++ b/exporter/awsxrayexporter/awsxray_test.go @@ -0,0 +1,188 @@ +// 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 awsxrayexporter + +import ( + "context" + "fmt" + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + "github.com/golang/protobuf/ptypes/timestamp" + "github.com/golang/protobuf/ptypes/wrappers" + "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter/translator" + "github.com/open-telemetry/opentelemetry-collector/consumer/consumerdata" + "github.com/open-telemetry/opentelemetry-collector/exporter" + "github.com/stretchr/testify/assert" + "go.uber.org/zap" + "reflect" + "testing" + "time" +) + +func TestTraceExport(t *testing.T) { + traceExporter := initializeTraceExporter() + ctx := context.Background() + td := constructSpanData() + err := traceExporter.ConsumeTraceData(ctx, td) + assert.Nil(t, err) +} + +func initializeTraceExporter() exporter.TraceExporter { + logger := zap.NewNop() + factory := Factory{} + traceExporter, err := factory.CreateTraceExporter(logger, factory.CreateDefaultConfig()) + if err != nil { + panic(err) + } + return traceExporter +} + +func constructSpanData() consumerdata.TraceData { + resource := constructResource() + spans := make([]*tracepb.Span, 2) + spans[0] = constructHttpClientSpan() + spans[0].Resource = resource + spans[1] = constructHttpServerSpan() + spans[1].Resource = resource + return consumerdata.TraceData{ + Node: nil, + Resource: resource, + Spans: spans, + SourceFormat: "oc", + } +} + +func constructResource() *resourcepb.Resource { + labels := make(map[string]string) + labels[translator.ServiceNameAttribute] = "signup_aggregator" + labels[translator.ServiceVersionAttribute] = "1.1.12" + labels[translator.ContainerNameAttribute] = "signup_aggregator" + labels[translator.ContainerImageAttribute] = "otel/signupaggregator" + labels[translator.ContainerTagAttribute] = "v1" + labels[translator.CloudProviderAttribute] = "aws" + labels[translator.CloudAccountAttribute] = "999999998" + labels[translator.CloudRegionAttribute] = "us-west-2" + labels[translator.CloudZoneAttribute] = "us-west-1b" + return &resourcepb.Resource{ + Type: "container", + Labels: labels, + } +} + +func constructHttpClientSpan() *tracepb.Span { + attributes := make(map[string]interface{}) + attributes[translator.ComponentAttribute] = translator.HttpComponentType + attributes[translator.MethodAttribute] = "GET" + attributes[translator.URLAttribute] = "https://api.example.com/users/junit" + attributes[translator.StatusCodeAttribute] = 200 + endTime := time.Now().Round(time.Second) + startTime := endTime.Add(-90 * time.Second) + spanAttributes := constructSpanAttributes(attributes) + + return &tracepb.Span{ + TraceId: translator.NewTraceID(), + SpanId: translator.NewSegmentID(), + ParentSpanId: translator.NewSegmentID(), + Name: &tracepb.TruncatableString{Value: "/users/junit"}, + Kind: tracepb.Span_CLIENT, + StartTime: convertTimeToTimestamp(startTime), + EndTime: convertTimeToTimestamp(endTime), + Status: &tracepb.Status{ + Code: 0, + Message: "OK", + }, + SameProcessAsParentSpan: &wrappers.BoolValue{Value: false}, + Tracestate: &tracepb.Span_Tracestate{ + Entries: []*tracepb.Span_Tracestate_Entry{ + {Key: "foo", Value: "bar"}, + {Key: "a", Value: "b"}, + }, + }, + Attributes: &tracepb.Span_Attributes{ + AttributeMap: spanAttributes, + }, + } +} + +func constructHttpServerSpan() *tracepb.Span { + attributes := make(map[string]interface{}) + attributes[translator.ComponentAttribute] = translator.HttpComponentType + attributes[translator.MethodAttribute] = "GET" + attributes[translator.URLAttribute] = "https://api.example.com/users/junit" + attributes[translator.UserAgentAttribute] = "PostmanRuntime/7.16.3" + attributes[translator.ClientIpAttribute] = "192.168.15.32" + attributes[translator.StatusCodeAttribute] = 200 + endTime := time.Now().Round(time.Second) + startTime := endTime.Add(-90 * time.Second) + spanAttributes := constructSpanAttributes(attributes) + + return &tracepb.Span{ + TraceId: translator.NewTraceID(), + SpanId: translator.NewSegmentID(), + ParentSpanId: translator.NewSegmentID(), + Name: &tracepb.TruncatableString{Value: "/users/junit"}, + Kind: tracepb.Span_SERVER, + StartTime: convertTimeToTimestamp(startTime), + EndTime: convertTimeToTimestamp(endTime), + Status: &tracepb.Status{ + Code: 0, + Message: "OK", + }, + SameProcessAsParentSpan: &wrappers.BoolValue{Value: false}, + Tracestate: &tracepb.Span_Tracestate{ + Entries: []*tracepb.Span_Tracestate_Entry{ + {Key: "foo", Value: "bar"}, + {Key: "a", Value: "b"}, + }, + }, + Attributes: &tracepb.Span_Attributes{ + AttributeMap: spanAttributes, + }, + } +} + +func convertTimeToTimestamp(t time.Time) *timestamp.Timestamp { + if t.IsZero() { + return nil + } + nanoTime := t.UnixNano() + return ×tamp.Timestamp{ + Seconds: nanoTime / 1e9, + Nanos: int32(nanoTime % 1e9), + } +} + +func constructSpanAttributes(attributes map[string]interface{}) map[string]*tracepb.AttributeValue { + attrs := make(map[string]*tracepb.AttributeValue) + for key, value := range attributes { + valType := reflect.TypeOf(value) + var attrVal tracepb.AttributeValue + if valType.Kind() == reflect.Int { + attrVal = tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: int64(value.(int)), + }} + } else if valType.Kind() == reflect.Int64 { + attrVal = tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: value.(int64), + }} + } else { + attrVal = tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ + StringValue: &tracepb.TruncatableString{Value: fmt.Sprintf("%v", value)}, + }} + } + attrs[key] = &attrVal + } + return attrs +} diff --git a/exporter/awsxrayexporter/config.go b/exporter/awsxrayexporter/config.go index a1a42e06450f..a9c6e2cf80f2 100644 --- a/exporter/awsxrayexporter/config.go +++ b/exporter/awsxrayexporter/config.go @@ -37,7 +37,6 @@ type Config struct { ResourceARN string `mapstructure:"resource_arn"` // IAM role to upload segments to a different account. RoleARN string `mapstructure:"role_arn"` - // Default AWS resource type of trace data origin - // [AWS::EC2::Instance | AWS::ECS::Container | AWS::ElasticBeanstalk::Environment] - Origin string `mapstructure:"origin"` + // Span attribute name which holds the originating user's login + UserAttribute string `mapstructure:"user_attribute"` } diff --git a/exporter/awsxrayexporter/config_test.go b/exporter/awsxrayexporter/config_test.go index fe9949d2c9d7..e03c7b2f50af 100644 --- a/exporter/awsxrayexporter/config_test.go +++ b/exporter/awsxrayexporter/config_test.go @@ -52,10 +52,10 @@ func TestLoadConfig(t *testing.T) { RequestTimeout: 30, NoVerifySSL: false, ProxyAddress: "", - Region: "us-east-1", + Region: "eu-west-1", LocalMode: false, - ResourceARN: "", - RoleARN: "", - Origin: "AWS::ECS::Container", + ResourceARN: "arn:aws:ec2:us-east1:123456789:instance/i-293hiuhe0u", + RoleARN: "arn:aws:iam::123456789:role/monitoring-EKS-NodeInstanceRole", + UserAttribute: "user.id", }) } diff --git a/exporter/awsxrayexporter/factory.go b/exporter/awsxrayexporter/factory.go index 1c69ad264689..2fec4d3db0f1 100644 --- a/exporter/awsxrayexporter/factory.go +++ b/exporter/awsxrayexporter/factory.go @@ -50,7 +50,7 @@ func (f *Factory) CreateDefaultConfig() configmodels.Exporter { LocalMode: false, ResourceARN: "", RoleARN: "", - Origin: "AWS::EC2::Instance", + UserAttribute: "", } } @@ -60,6 +60,7 @@ func (f *Factory) CreateTraceExporter(logger *zap.Logger, cfg configmodels.Expor return NewTraceExporter(eCfg, logger) } -func (f *Factory) CreateMetricsExporter(logger *zap.Logger, cfg configmodels.Exporter) (exporter.MetricsExporter, error) { +func (f *Factory) CreateMetricsExporter(logger *zap.Logger, + cfg configmodels.Exporter) (exporter.MetricsExporter, error) { return nil, nil } diff --git a/exporter/awsxrayexporter/factory_test.go b/exporter/awsxrayexporter/factory_test.go index 99a30ef25149..3f8e1eb87243 100644 --- a/exporter/awsxrayexporter/factory_test.go +++ b/exporter/awsxrayexporter/factory_test.go @@ -15,8 +15,12 @@ package awsxrayexporter import ( + "github.com/open-telemetry/opentelemetry-collector/config" "github.com/open-telemetry/opentelemetry-collector/config/configcheck" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.uber.org/zap" + "path" "testing" ) @@ -26,3 +30,37 @@ func TestCreateDefaultConfig(t *testing.T) { assert.NotNil(t, cfg, "failed to create default config") assert.NoError(t, configcheck.ValidateConfig(cfg)) } + +func TestCreateTraceExporter(t *testing.T) { + logger := zap.NewNop() + + factories, err := config.ExampleComponents() + require.NoError(t, err) + factory := Factory{} + factories.Exporters[typeStr] = &factory + cfg, err := config.LoadConfigFile( + t, path.Join(".", "testdata", "config.yaml"), factories, + ) + require.NoError(t, err) + + exporter, err := factory.CreateTraceExporter(logger, cfg.Exporters["awsxray/customname"]) + assert.Nil(t, err) + assert.NotNil(t, exporter) +} + +func TestCreateMetricsExporter(t *testing.T) { + logger := zap.NewNop() + + factories, err := config.ExampleComponents() + require.NoError(t, err) + factory := Factory{} + factories.Exporters[typeStr] = &factory + cfg, err := config.LoadConfigFile( + t, path.Join(".", "testdata", "config.yaml"), factories, + ) + require.NoError(t, err) + + exporter, err := factory.CreateMetricsExporter(logger, cfg.Exporters["awsxray/customname"]) + assert.Nil(t, err) + assert.Nil(t, exporter) +} diff --git a/exporter/awsxrayexporter/testdata/config.yaml b/exporter/awsxrayexporter/testdata/config.yaml index 28df7dfc11ae..fb52abc20175 100644 --- a/exporter/awsxrayexporter/testdata/config.yaml +++ b/exporter/awsxrayexporter/testdata/config.yaml @@ -7,8 +7,10 @@ processors: exporters: awsxray: awsxray/customname: - region: us-east-1 - origin: "AWS::ECS::Container" + region: eu-west-1 + resource_arn: "arn:aws:ec2:us-east1:123456789:instance/i-293hiuhe0u" + role_arn: "arn:aws:iam::123456789:role/monitoring-EKS-NodeInstanceRole" + user_attribute: "user.id" awsxray/disabled: # will be ignored disabled: true diff --git a/exporter/awsxrayexporter/translator/cause.go b/exporter/awsxrayexporter/translator/cause.go index 7abc73b79b60..fb84a57eb57c 100644 --- a/exporter/awsxrayexporter/translator/cause.go +++ b/exporter/awsxrayexporter/translator/cause.go @@ -83,7 +83,7 @@ func makeCause(status *tracepb.Status, attributes map[string]string) (bool, bool } if message != "" { - id := newSegmentID() + id := NewSegmentID() hexID := hex.EncodeToString(id) cause = &CauseData{ diff --git a/exporter/awsxrayexporter/translator/cause_test.go b/exporter/awsxrayexporter/translator/cause_test.go index 4cf8d3e37191..1849150100de 100644 --- a/exporter/awsxrayexporter/translator/cause_test.go +++ b/exporter/awsxrayexporter/translator/cause_test.go @@ -104,9 +104,9 @@ func constructExceptionServerSpan(attributes map[string]interface{}) *tracepb.Sp spanAttributes := constructSpanAttributes(attributes) return &tracepb.Span{ - TraceId: []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}, - SpanId: []byte{0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8}, - ParentSpanId: []byte{0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA, 0xE9, 0xE8}, + TraceId: NewTraceID(), + SpanId: NewSegmentID(), + ParentSpanId: NewSegmentID(), Name: &tracepb.TruncatableString{Value: "/widgets"}, Kind: tracepb.Span_SERVER, StartTime: convertTimeToTimestamp(startTime), diff --git a/exporter/awsxrayexporter/translator/http_test.go b/exporter/awsxrayexporter/translator/http_test.go index 35f9a1f967a4..dd415489668e 100644 --- a/exporter/awsxrayexporter/translator/http_test.go +++ b/exporter/awsxrayexporter/translator/http_test.go @@ -266,9 +266,9 @@ func constructHttpClientSpan(attributes map[string]interface{}) *tracepb.Span { spanAttributes := constructSpanAttributes(attributes) return &tracepb.Span{ - TraceId: []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}, - SpanId: []byte{0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8}, - ParentSpanId: []byte{0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA, 0xE9, 0xE8}, + TraceId: NewTraceID(), + SpanId: NewSegmentID(), + ParentSpanId: NewSegmentID(), Name: &tracepb.TruncatableString{Value: "/users/junit"}, Kind: tracepb.Span_CLIENT, StartTime: convertTimeToTimestamp(startTime), @@ -300,9 +300,9 @@ func constructHttpServerSpan(attributes map[string]interface{}) *tracepb.Span { spanAttributes := constructSpanAttributes(attributes) return &tracepb.Span{ - TraceId: []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}, - SpanId: []byte{0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8}, - ParentSpanId: []byte{0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA, 0xE9, 0xE8}, + TraceId: NewTraceID(), + SpanId: NewSegmentID(), + ParentSpanId: NewSegmentID(), Name: &tracepb.TruncatableString{Value: "/users/junit"}, Kind: tracepb.Span_SERVER, StartTime: convertTimeToTimestamp(startTime), diff --git a/exporter/awsxrayexporter/translator/segment.go b/exporter/awsxrayexporter/translator/segment.go index 21c119321120..72f1754912bf 100644 --- a/exporter/awsxrayexporter/translator/segment.go +++ b/exporter/awsxrayexporter/translator/segment.go @@ -287,10 +287,11 @@ func mergeAnnotations(dest map[string]interface{}, src map[string]string) { func makeAnnotations(attributes map[string]string, userAttribute string) (string, map[string]interface{}) { var ( result = map[string]interface{}{} - user = attributes[userAttribute] + user string ) - if user != "" { + if userAttribute != "" { + user = attributes[userAttribute] delete(attributes, userAttribute) } delete(attributes, ComponentAttribute) @@ -332,7 +333,7 @@ func fixAnnotationKey(key string) string { return key } -func newTraceID() []byte { +func NewTraceID() []byte { var r [16]byte epoch := time.Now().Unix() binary.BigEndian.PutUint32(r[0:4], uint32(epoch)) @@ -343,7 +344,7 @@ func newTraceID() []byte { return r[:] } -func newSegmentID() []byte { +func NewSegmentID() []byte { var r [8]byte _, err := rand.Read(r[:]) if err != nil { diff --git a/exporter/awsxrayexporter/translator/segment_test.go b/exporter/awsxrayexporter/translator/segment_test.go index 4f1069d4e964..819c072d8647 100644 --- a/exporter/awsxrayexporter/translator/segment_test.go +++ b/exporter/awsxrayexporter/translator/segment_test.go @@ -50,7 +50,7 @@ func TestClientSpanWithGrpcComponent(t *testing.T) { func TestClientSpanWithAwsSdkClient(t *testing.T) { spanName := "AmazonDynamoDB.getItem" - parentSpanId := newSegmentID() + parentSpanId := NewSegmentID() userAttribute := "originating.user" user := "testing" attributes := make(map[string]interface{}) @@ -78,7 +78,7 @@ func TestClientSpanWithAwsSdkClient(t *testing.T) { func TestServerSpanWithInternalServerError(t *testing.T) { spanName := "/api/locations" - parentSpanId := newSegmentID() + parentSpanId := NewSegmentID() userAttribute := "originating.user" user := "testing" errorMessage := "java.lang.NullPointerException" @@ -150,11 +150,72 @@ func TestClientSpanWithDbComponent(t *testing.T) { assert.True(t, strings.Contains(jsonStr, enterpriseAppId)) } +func TestClientSpanWithBlankUserAttribute(t *testing.T) { + spanName := "call update_user_preference( ?, ?, ? )" + enterpriseAppId := "25F2E73B-4769-4C79-9DF3-7EBE85D571EA" + attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = DbComponentType + attributes[DbTypeAttribute] = "sql" + attributes[DbInstanceAttribute] = "customers" + attributes[DbStatementAttribute] = spanName + attributes[DbUserAttribute] = "userprefsvc" + attributes[PeerAddressAttribute] = "mysql://db.dev.example.com:3306" + attributes[PeerHostAttribute] = "db.dev.example.com" + attributes[PeerPortAttribute] = "3306" + attributes["enterprise.app.id"] = enterpriseAppId + labels := constructDefaultResourceLabels() + span := constructClientSpan(nil, spanName, 0, "OK", attributes, labels) + + segment := MakeSegment(spanName, span, "") + + assert.NotNil(t, segment) + assert.NotNil(t, segment.SQL) + assert.NotNil(t, segment.Service) + assert.NotNil(t, segment.AWS) + assert.NotNil(t, segment.Annotations) + assert.Nil(t, segment.Cause) + assert.Nil(t, segment.HTTP) + assert.Equal(t, spanName, segment.Name) + assert.False(t, segment.Fault) + assert.False(t, segment.Error) + w := borrow() + if err := w.Encode(segment); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + release(w) + assert.True(t, strings.Contains(jsonStr, spanName)) + assert.True(t, strings.Contains(jsonStr, enterpriseAppId)) +} + +func TestSpanWithInvalidTraceId(t *testing.T) { + spanName := "platformapi.widgets.searchWidgets" + attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = GrpcComponentType + attributes[MethodAttribute] = "GET" + attributes[SchemeAttribute] = "ipv6" + attributes[PeerIpv6Attribute] = "2607:f8b0:4000:80c::2004" + attributes[PeerPortAttribute] = "9443" + attributes[TargetAttribute] = spanName + labels := constructDefaultResourceLabels() + span := constructClientSpan(nil, spanName, 0, "OK", attributes, labels) + timeEvents := constructTimedEventsWithSentMessageEvent(span.StartTime) + span.TimeEvents = &timeEvents + span.TraceId[0] = 0x11 + + jsonStr, err := MakeSegmentDocumentString(spanName, span, "user.id") + + assert.NotNil(t, jsonStr) + assert.Nil(t, err) + assert.True(t, strings.Contains(jsonStr, spanName)) + assert.False(t, strings.Contains(jsonStr, "1-11")) +} + func constructClientSpan(parentSpanId []byte, name string, code int32, message string, attributes map[string]interface{}, rscLabels map[string]string) *tracepb.Span { var ( - traceId = newTraceID() - spanId = newSegmentID() + traceId = NewTraceID() + spanId = NewSegmentID() endTime = time.Now() startTime = endTime.Add(-215 * time.Millisecond) spanAttributes = constructSpanAttributes(attributes) @@ -185,8 +246,8 @@ func constructClientSpan(parentSpanId []byte, name string, code int32, message s func constructServerSpan(parentSpanId []byte, name string, code int32, message string, attributes map[string]interface{}, rscLabels map[string]string) *tracepb.Span { var ( - traceId = newTraceID() - spanId = newSegmentID() + traceId = NewTraceID() + spanId = NewSegmentID() endTime = time.Now() startTime = endTime.Add(-215 * time.Millisecond) spanAttributes = constructSpanAttributes(attributes) From 4f0086a6b89bba33e9774433340e6e98b3e8ba31 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Wed, 20 Nov 2019 11:58:37 -0600 Subject: [PATCH 43/59] fix formatting and lint errors --- exporter/awsxrayexporter/Makefile | 2 +- exporter/awsxrayexporter/awsxray.go | 1 + exporter/awsxrayexporter/awsxray_test.go | 21 ++--- exporter/awsxrayexporter/conn/conn.go | 18 +++-- exporter/awsxrayexporter/conn/conn_test.go | 9 ++- exporter/awsxrayexporter/conn/xray_client.go | 9 ++- exporter/awsxrayexporter/factory.go | 1 + exporter/awsxrayexporter/factory_test.go | 5 +- exporter/awsxrayexporter/translator/aws.go | 42 +++++----- .../awsxrayexporter/translator/aws_test.go | 55 ++++++------- exporter/awsxrayexporter/translator/cause.go | 7 +- .../awsxrayexporter/translator/cause_test.go | 13 +-- exporter/awsxrayexporter/translator/http.go | 30 +++---- .../awsxrayexporter/translator/http_test.go | 79 ++++++++++--------- .../awsxrayexporter/translator/segment.go | 78 ++++++++++-------- .../translator/segment_test.go | 63 +++++++-------- .../translator/service_test.go | 5 +- exporter/awsxrayexporter/translator/sql.go | 15 ++-- .../awsxrayexporter/translator/sql_test.go | 9 ++- 19 files changed, 245 insertions(+), 217 deletions(-) diff --git a/exporter/awsxrayexporter/Makefile b/exporter/awsxrayexporter/Makefile index c1496226e590..ded7a36092dc 100644 --- a/exporter/awsxrayexporter/Makefile +++ b/exporter/awsxrayexporter/Makefile @@ -1 +1 @@ -include ../../Makefile.Common \ No newline at end of file +include ../../Makefile.Common diff --git a/exporter/awsxrayexporter/awsxray.go b/exporter/awsxrayexporter/awsxray.go index 4b5d98aecf47..89f6c5dfd541 100644 --- a/exporter/awsxrayexporter/awsxray.go +++ b/exporter/awsxrayexporter/awsxray.go @@ -16,6 +16,7 @@ package awsxrayexporter import ( "context" + "github.com/aws/aws-sdk-go/service/xray" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter/translator" "github.com/open-telemetry/opentelemetry-collector/config/configmodels" diff --git a/exporter/awsxrayexporter/awsxray_test.go b/exporter/awsxrayexporter/awsxray_test.go index d3b74b4a8586..de5d9bb0f67f 100644 --- a/exporter/awsxrayexporter/awsxray_test.go +++ b/exporter/awsxrayexporter/awsxray_test.go @@ -17,6 +17,10 @@ package awsxrayexporter import ( "context" "fmt" + "reflect" + "testing" + "time" + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" "github.com/golang/protobuf/ptypes/timestamp" @@ -26,9 +30,6 @@ import ( "github.com/open-telemetry/opentelemetry-collector/exporter" "github.com/stretchr/testify/assert" "go.uber.org/zap" - "reflect" - "testing" - "time" ) func TestTraceExport(t *testing.T) { @@ -52,9 +53,9 @@ func initializeTraceExporter() exporter.TraceExporter { func constructSpanData() consumerdata.TraceData { resource := constructResource() spans := make([]*tracepb.Span, 2) - spans[0] = constructHttpClientSpan() + spans[0] = constructHTTPClientSpan() spans[0].Resource = resource - spans[1] = constructHttpServerSpan() + spans[1] = constructHTTPServerSpan() spans[1].Resource = resource return consumerdata.TraceData{ Node: nil, @@ -81,9 +82,9 @@ func constructResource() *resourcepb.Resource { } } -func constructHttpClientSpan() *tracepb.Span { +func constructHTTPClientSpan() *tracepb.Span { attributes := make(map[string]interface{}) - attributes[translator.ComponentAttribute] = translator.HttpComponentType + attributes[translator.ComponentAttribute] = translator.HTTPComponentType attributes[translator.MethodAttribute] = "GET" attributes[translator.URLAttribute] = "https://api.example.com/users/junit" attributes[translator.StatusCodeAttribute] = 200 @@ -116,13 +117,13 @@ func constructHttpClientSpan() *tracepb.Span { } } -func constructHttpServerSpan() *tracepb.Span { +func constructHTTPServerSpan() *tracepb.Span { attributes := make(map[string]interface{}) - attributes[translator.ComponentAttribute] = translator.HttpComponentType + attributes[translator.ComponentAttribute] = translator.HTTPComponentType attributes[translator.MethodAttribute] = "GET" attributes[translator.URLAttribute] = "https://api.example.com/users/junit" attributes[translator.UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[translator.ClientIpAttribute] = "192.168.15.32" + attributes[translator.ClientIPAttribute] = "192.168.15.32" attributes[translator.StatusCodeAttribute] = 200 endTime := time.Now().Round(time.Second) startTime := endTime.Add(-90 * time.Second) diff --git a/exporter/awsxrayexporter/conn/conn.go b/exporter/awsxrayexporter/conn/conn.go index 64b0d14b3169..175738a39aa3 100644 --- a/exporter/awsxrayexporter/conn/conn.go +++ b/exporter/awsxrayexporter/conn/conn.go @@ -16,6 +16,11 @@ package conn import ( "crypto/tls" + "net/http" + "net/url" + "os" + "time" + "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/credentials" @@ -27,10 +32,6 @@ import ( "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter" "go.uber.org/zap" "golang.org/x/net/http2" - "net/http" - "net/url" - "os" - "time" ) type connAttr interface { @@ -45,6 +46,7 @@ func (c *Conn) getEC2Region(s *session.Session) (string, error) { return ec2metadata.New(s).Region() } +// AWS STS endpoint constants const ( STSEndpointPrefix = "https://sts." STSEndpointSuffix = ".amazonaws.com" @@ -231,12 +233,12 @@ func getSTSCredsFromRegionEndpoint(logger *zap.Logger, sess *session.Session, re // getSTSCredsFromPrimaryRegionEndpoint fetches STS credentials for provided roleARN from primary region endpoint in the // respective partition. func getSTSCredsFromPrimaryRegionEndpoint(logger *zap.Logger, t *session.Session, roleArn string, region string) *credentials.Credentials { - partitionId := getPartition(region) - if partitionId == endpoints.AwsPartitionID { + partitionID := getPartition(region) + if partitionID == endpoints.AwsPartitionID { return getSTSCredsFromRegionEndpoint(logger, t, endpoints.UsEast1RegionID, roleArn) - } else if partitionId == endpoints.AwsCnPartitionID { + } else if partitionID == endpoints.AwsCnPartitionID { return getSTSCredsFromRegionEndpoint(logger, t, endpoints.CnNorth1RegionID, roleArn) - } else if partitionId == endpoints.AwsUsGovPartitionID { + } else if partitionID == endpoints.AwsUsGovPartitionID { return getSTSCredsFromRegionEndpoint(logger, t, endpoints.UsGovWest1RegionID, roleArn) } diff --git a/exporter/awsxrayexporter/conn/conn_test.go b/exporter/awsxrayexporter/conn/conn_test.go index 12e50575b92c..c9fcdb477182 100644 --- a/exporter/awsxrayexporter/conn/conn_test.go +++ b/exporter/awsxrayexporter/conn/conn_test.go @@ -16,16 +16,17 @@ package conn import ( "errors" + "os" + "path" + "strings" + "testing" + "github.com/aws/aws-sdk-go/aws/session" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter" "github.com/open-telemetry/opentelemetry-collector/config" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "go.uber.org/zap" - "os" - "path" - "strings" - "testing" ) var ec2Region = "us-east-1" diff --git a/exporter/awsxrayexporter/conn/xray_client.go b/exporter/awsxrayexporter/conn/xray_client.go index 0bb501481385..c79d7a2cd075 100644 --- a/exporter/awsxrayexporter/conn/xray_client.go +++ b/exporter/awsxrayexporter/conn/xray_client.go @@ -15,16 +15,17 @@ package conn import ( + "os" + "strconv" + "strings" + "time" + "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/request" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/xray" "go.uber.org/zap" - "os" - "strconv" - "strings" - "time" ) // XRay defines X-Ray api call structure. diff --git a/exporter/awsxrayexporter/factory.go b/exporter/awsxrayexporter/factory.go index 2fec4d3db0f1..7e00086fd41c 100644 --- a/exporter/awsxrayexporter/factory.go +++ b/exporter/awsxrayexporter/factory.go @@ -60,6 +60,7 @@ func (f *Factory) CreateTraceExporter(logger *zap.Logger, cfg configmodels.Expor return NewTraceExporter(eCfg, logger) } +// CreateMetricsExporter always returns nil. func (f *Factory) CreateMetricsExporter(logger *zap.Logger, cfg configmodels.Exporter) (exporter.MetricsExporter, error) { return nil, nil diff --git a/exporter/awsxrayexporter/factory_test.go b/exporter/awsxrayexporter/factory_test.go index 3f8e1eb87243..0ee945cff364 100644 --- a/exporter/awsxrayexporter/factory_test.go +++ b/exporter/awsxrayexporter/factory_test.go @@ -15,13 +15,14 @@ package awsxrayexporter import ( + "path" + "testing" + "github.com/open-telemetry/opentelemetry-collector/config" "github.com/open-telemetry/opentelemetry-collector/config/configcheck" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.uber.org/zap" - "path" - "testing" ) func TestCreateDefaultConfig(t *testing.T) { diff --git a/exporter/awsxrayexporter/translator/aws.go b/exporter/awsxrayexporter/translator/aws.go index 39d026247ca8..f24ff7ad8375 100644 --- a/exporter/awsxrayexporter/translator/aws.go +++ b/exporter/awsxrayexporter/translator/aws.go @@ -15,16 +15,18 @@ package translator import ( - resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" "strconv" + + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" ) +// AWS-specific OpenTelemetry attribute names const ( AwsOperationAttribute = "aws.operation" AwsAccountAttribute = "aws.account_id" AwsRegionAttribute = "aws.region" - AwsRequestIdAttribute = "aws.request_id" - AwsQueueUrlAttribute = "aws.queue_url" + AwsRequestIDAttribute = "aws.request_id" + AwsQueueURLAttribute = "aws.queue_url" AwsTableNameAttribute = "aws.table_name" ) @@ -64,16 +66,16 @@ func makeAws(attributes map[string]string, resource *resourcepb.Resource) (map[s cloud string account string zone string - hostId string + hostID string container string namespace string - deployId string + deployID string ver string origin string operation string remoteRegion string - requestId string - queueUrl string + requestID string + queueURL string tableName string ec2 *EC2Metadata ecs *ECSMetadata @@ -93,8 +95,8 @@ func makeAws(attributes map[string]string, resource *resourcepb.Resource) (map[s account = value case CloudZoneAttribute: zone = value - case HostIdAttribute: - hostId = value + case HostIDAttribute: + hostID = value case ContainerNameAttribute: if container == "" { container = value @@ -104,7 +106,7 @@ func makeAws(attributes map[string]string, resource *resourcepb.Resource) (map[s case ServiceNamespaceAttribute: namespace = value case ServiceInstanceAttribute: - deployId = value + deployID = value case ServiceVersionAttribute: ver = value } @@ -119,10 +121,10 @@ func makeAws(attributes map[string]string, resource *resourcepb.Resource) (map[s } case AwsRegionAttribute: remoteRegion = value - case AwsRequestIdAttribute: - requestId = value - case AwsQueueUrlAttribute: - queueUrl = value + case AwsRequestIDAttribute: + requestID = value + case AwsQueueURLAttribute: + queueURL = value case AwsTableNameAttribute: tableName = value default: @@ -134,10 +136,10 @@ func makeAws(attributes map[string]string, resource *resourcepb.Resource) (map[s } // progress from least specific to most specific origin so most specific ends up as origin // as per X-Ray docs - if hostId != "" { + if hostID != "" { origin = OriginEC2 ec2 = &EC2Metadata{ - InstanceID: hostId, + InstanceID: hostID, AvailabilityZone: zone, } } @@ -147,9 +149,9 @@ func makeAws(attributes map[string]string, resource *resourcepb.Resource) (map[s ContainerName: container, } } - if deployId != "" { + if deployID != "" { origin = OriginEB - deployNum, err := strconv.ParseInt(deployId, 10, 64) + deployNum, err := strconv.ParseInt(deployID, 10, 64) if err != nil { deployNum = 0 } @@ -169,8 +171,8 @@ func makeAws(attributes map[string]string, resource *resourcepb.Resource) (map[s EC2Metadata: ec2, Operation: operation, RemoteRegion: remoteRegion, - RequestID: requestId, - QueueURL: queueUrl, + RequestID: requestID, + QueueURL: queueURL, TableName: tableName, } return filtered, awsData diff --git a/exporter/awsxrayexporter/translator/aws_test.go b/exporter/awsxrayexporter/translator/aws_test.go index 88df715dac40..00b5070d97a3 100644 --- a/exporter/awsxrayexporter/translator/aws_test.go +++ b/exporter/awsxrayexporter/translator/aws_test.go @@ -15,19 +15,20 @@ package translator import ( - resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" - "github.com/stretchr/testify/assert" "strings" "testing" + + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + "github.com/stretchr/testify/assert" ) func TestAwsFromEc2Resource(t *testing.T) { - instanceId := "i-00f7c0bcb26da2a99" + instanceID := "i-00f7c0bcb26da2a99" labels := make(map[string]string) labels[CloudProviderAttribute] = "aws" labels[CloudAccountAttribute] = "123456789" labels[CloudZoneAttribute] = "us-east-1c" - labels[HostIdAttribute] = instanceId + labels[HostIDAttribute] = instanceID labels[HostTypeAttribute] = "m5.xlarge" resource := &resourcepb.Resource{ Type: "vm", @@ -48,12 +49,12 @@ func TestAwsFromEc2Resource(t *testing.T) { } jsonStr := w.String() release(w) - assert.True(t, strings.Contains(jsonStr, instanceId)) + assert.True(t, strings.Contains(jsonStr, instanceID)) } func TestAwsFromEcsResource(t *testing.T) { - instanceId := "i-00f7c0bcb26da2a99" - containerId := "signup_aggregator-x82ufje83" + instanceID := "i-00f7c0bcb26da2a99" + containerID := "signup_aggregator-x82ufje83" labels := make(map[string]string) labels[CloudProviderAttribute] = "aws" labels[CloudAccountAttribute] = "123456789" @@ -64,8 +65,8 @@ func TestAwsFromEcsResource(t *testing.T) { labels[K8sClusterAttribute] = "production" labels[K8sNamespaceAttribute] = "default" labels[K8sDeploymentAttribute] = "signup_aggregator" - labels[K8sPodAttribute] = containerId - labels[HostIdAttribute] = instanceId + labels[K8sPodAttribute] = containerID + labels[HostIDAttribute] = instanceID labels[HostTypeAttribute] = "m5.xlarge" resource := &resourcepb.Resource{ Type: "container", @@ -86,18 +87,18 @@ func TestAwsFromEcsResource(t *testing.T) { } jsonStr := w.String() release(w) - assert.True(t, strings.Contains(jsonStr, containerId)) + assert.True(t, strings.Contains(jsonStr, containerID)) } func TestAwsFromBeanstalkResource(t *testing.T) { - deployId := "232" + deployID := "232" labels := make(map[string]string) labels[CloudProviderAttribute] = "aws" labels[CloudAccountAttribute] = "123456789" labels[CloudZoneAttribute] = "us-east-1c" labels[ServiceVersionAttribute] = "2.1.4" labels[ServiceNamespaceAttribute] = "production" - labels[ServiceInstanceAttribute] = deployId + labels[ServiceInstanceAttribute] = deployID resource := &resourcepb.Resource{ Type: "vm", Labels: labels, @@ -117,12 +118,12 @@ func TestAwsFromBeanstalkResource(t *testing.T) { } jsonStr := w.String() release(w) - assert.True(t, strings.Contains(jsonStr, deployId)) + assert.True(t, strings.Contains(jsonStr, deployID)) } func TestAwsWithAwsSqsResources(t *testing.T) { - instanceId := "i-00f7c0bcb26da2a99" - containerId := "signup_aggregator-x82ufje83" + instanceID := "i-00f7c0bcb26da2a99" + containerID := "signup_aggregator-x82ufje83" labels := make(map[string]string) labels[CloudProviderAttribute] = "aws" labels[CloudAccountAttribute] = "123456789" @@ -133,19 +134,19 @@ func TestAwsWithAwsSqsResources(t *testing.T) { labels[K8sClusterAttribute] = "production" labels[K8sNamespaceAttribute] = "default" labels[K8sDeploymentAttribute] = "signup_aggregator" - labels[K8sPodAttribute] = containerId - labels[HostIdAttribute] = instanceId + labels[K8sPodAttribute] = containerID + labels[HostIDAttribute] = instanceID labels[HostTypeAttribute] = "m5.xlarge" resource := &resourcepb.Resource{ Type: "container", Labels: labels, } - queueUrl := "https://sqs.use1.amazonaws.com/Meltdown-Alerts" + queueURL := "https://sqs.use1.amazonaws.com/Meltdown-Alerts" attributes := make(map[string]string) attributes[AwsOperationAttribute] = "SendMessage" attributes[AwsAccountAttribute] = "987654321" attributes[AwsRegionAttribute] = "us-east-2" - attributes[AwsQueueUrlAttribute] = queueUrl + attributes[AwsQueueURLAttribute] = queueURL attributes["employee.id"] = "XB477" filtered, awsData := makeAws(attributes, resource) @@ -161,13 +162,13 @@ func TestAwsWithAwsSqsResources(t *testing.T) { } jsonStr := w.String() release(w) - assert.True(t, strings.Contains(jsonStr, containerId)) - assert.True(t, strings.Contains(jsonStr, queueUrl)) + assert.True(t, strings.Contains(jsonStr, containerID)) + assert.True(t, strings.Contains(jsonStr, queueURL)) } func TestAwsWithAwsDynamoDbResources(t *testing.T) { - instanceId := "i-00f7c0bcb26da2a99" - containerId := "signup_aggregator-x82ufje83" + instanceID := "i-00f7c0bcb26da2a99" + containerID := "signup_aggregator-x82ufje83" labels := make(map[string]string) labels[CloudProviderAttribute] = "aws" labels[CloudAccountAttribute] = "123456789" @@ -178,8 +179,8 @@ func TestAwsWithAwsDynamoDbResources(t *testing.T) { labels[K8sClusterAttribute] = "production" labels[K8sNamespaceAttribute] = "default" labels[K8sDeploymentAttribute] = "signup_aggregator" - labels[K8sPodAttribute] = containerId - labels[HostIdAttribute] = instanceId + labels[K8sPodAttribute] = containerID + labels[HostIDAttribute] = instanceID labels[HostTypeAttribute] = "m5.xlarge" resource := &resourcepb.Resource{ Type: "container", @@ -188,7 +189,7 @@ func TestAwsWithAwsDynamoDbResources(t *testing.T) { tableName := "WIDGET_TYPES" attributes := make(map[string]string) attributes[AwsOperationAttribute] = "PutItem" - attributes[AwsRequestIdAttribute] = "75107C82-EC8A-4F75-883F-4440B491B0AB" + attributes[AwsRequestIDAttribute] = "75107C82-EC8A-4F75-883F-4440B491B0AB" attributes[AwsTableNameAttribute] = tableName filtered, awsData := makeAws(attributes, resource) @@ -204,6 +205,6 @@ func TestAwsWithAwsDynamoDbResources(t *testing.T) { } jsonStr := w.String() release(w) - assert.True(t, strings.Contains(jsonStr, containerId)) + assert.True(t, strings.Contains(jsonStr, containerID)) assert.True(t, strings.Contains(jsonStr, tableName)) } diff --git a/exporter/awsxrayexporter/translator/cause.go b/exporter/awsxrayexporter/translator/cause.go index fb84a57eb57c..f580b9af0e42 100644 --- a/exporter/awsxrayexporter/translator/cause.go +++ b/exporter/awsxrayexporter/translator/cause.go @@ -16,9 +16,11 @@ package translator import ( "encoding/hex" + tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" ) +// OpenTelemetry Semantic Convention attribute names for error/fault/exception related attributes const ( ErrorObjectAttribute = "error.object" ErrorMessageAttribute = "error.message" @@ -99,12 +101,11 @@ func makeCause(status *tracepb.Status, attributes map[string]string) (bool, bool if isClientError(status.Code) { return true, false, filtered, cause - } else { - return false, true, filtered, cause } + return false, true, filtered, cause } func isClientError(code int32) bool { - httpStatus := convertToHttpStatusCode(code) + httpStatus := convertToHTTPStatusCode(code) return httpStatus >= 400 && httpStatus < 500 } diff --git a/exporter/awsxrayexporter/translator/cause_test.go b/exporter/awsxrayexporter/translator/cause_test.go index 1849150100de..6e410447912a 100644 --- a/exporter/awsxrayexporter/translator/cause_test.go +++ b/exporter/awsxrayexporter/translator/cause_test.go @@ -15,12 +15,13 @@ package translator import ( - resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" - tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" - "github.com/stretchr/testify/assert" "strings" "testing" "time" + + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + "github.com/stretchr/testify/assert" ) func TestCauseWithStatusMessage(t *testing.T) { @@ -31,7 +32,7 @@ func TestCauseWithStatusMessage(t *testing.T) { attributes[StatusCodeAttribute] = 500 span := constructExceptionServerSpan(attributes) span.Status.Message = errorMsg - filtered, _ := makeHttp(span) + filtered, _ := makeHTTP(span) isError, isFault, filtered, cause := makeCause(span.Status, filtered) @@ -56,7 +57,7 @@ func TestCauseWithHttpStatusMessage(t *testing.T) { attributes[StatusCodeAttribute] = 500 attributes[StatusTextAttribute] = errorMsg span := constructExceptionServerSpan(attributes) - filtered, _ := makeHttp(span) + filtered, _ := makeHTTP(span) isError, isFault, filtered, cause := makeCause(span.Status, filtered) @@ -81,7 +82,7 @@ func TestCauseWithErrorMessage(t *testing.T) { attributes[StatusCodeAttribute] = 500 attributes[ErrorMessageAttribute] = errorMsg span := constructExceptionServerSpan(attributes) - filtered, _ := makeHttp(span) + filtered, _ := makeHTTP(span) isError, isFault, filtered, cause := makeCause(span.Status, filtered) diff --git a/exporter/awsxrayexporter/translator/http.go b/exporter/awsxrayexporter/translator/http.go index 40d32ae11d69..b33ef4f4fd0a 100644 --- a/exporter/awsxrayexporter/translator/http.go +++ b/exporter/awsxrayexporter/translator/http.go @@ -15,15 +15,15 @@ package translator import ( - tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" - tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" "net/http" "strconv" + + tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" ) +// OpenTelemetry Semantic Convention attribute names for HTTP and gRPC related attributes const ( - // Attributes recorded on the span for the requests. - // Only trace exporters will need them. MethodAttribute = "http.method" URLAttribute = "http.url" TargetAttribute = "http.target" @@ -35,10 +35,10 @@ const ( ServerNameAttribute = "http.server_name" PortAttribute = "http.port" RouteAttribute = "http.route" - ClientIpAttribute = "http.client_ip" + ClientIPAttribute = "http.client_ip" UserAgentAttribute = "http.user_agent" MessageTypeAttribute = "message.type" - MessageIdAttribute = "message.id" + MessageIDAttribute = "message.id" MessageCompressedSizeAttribute = "message.compressed_size" MessageUncompressedSizeAttribute = "message.uncompressed_size" ) @@ -65,7 +65,7 @@ type ResponseData struct { ContentLength int64 `json:"content_length,omitempty"` } -func convertToHttpStatusCode(code int32) int64 { +func convertToHTTPStatusCode(code int32) int64 { switch code { case tracetranslator.OCOK: return http.StatusOK @@ -106,7 +106,7 @@ func convertToHttpStatusCode(code int32) int64 { } } -func makeHttp(span *tracepb.Span) (map[string]string, *HTTPData) { +func makeHTTP(span *tracepb.Span) (map[string]string, *HTTPData) { var ( info HTTPData filtered = make(map[string]string) @@ -123,7 +123,7 @@ func makeHttp(span *tracepb.Span) (map[string]string, *HTTPData) { info.Request.Method = value.GetStringValue().GetValue() case UserAgentAttribute: info.Request.UserAgent = value.GetStringValue().GetValue() - case ClientIpAttribute: + case ClientIPAttribute: info.Request.ClientIP = value.GetStringValue().GetValue() info.Request.XForwardedFor = true case StatusCodeAttribute: @@ -161,18 +161,18 @@ func makeHttp(span *tracepb.Span) (map[string]string, *HTTPData) { } } - if (componentValue != HttpComponentType && componentValue != GrpcComponentType) || info.Request.Method == "" { + if (componentValue != HTTPComponentType && componentValue != GrpcComponentType) || info.Request.Method == "" { return filtered, nil } if tracepb.Span_SERVER == span.Kind { - info.Request.URL = constructServerUrl(componentValue, urlParts) + info.Request.URL = constructServerURL(componentValue, urlParts) } else { - info.Request.URL = constructClientUrl(componentValue, urlParts) + info.Request.URL = constructClientURL(componentValue, urlParts) } if info.Response.Status == 0 { - info.Response.Status = convertToHttpStatusCode(span.Status.Code) + info.Response.Status = convertToHTTPStatusCode(span.Status.Code) } info.Response.ContentLength = extractResponseSizeFromEvents(span) @@ -202,7 +202,7 @@ func extractResponseSizeFromEvents(span *tracepb.Span) int64 { return size } -func constructClientUrl(component string, urlParts map[string]string) string { +func constructClientURL(component string, urlParts map[string]string) string { // follows OpenTelemetry specification-defined combinations for client spans described in // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/data-http.md url, ok := urlParts[URLAttribute] @@ -247,7 +247,7 @@ func constructClientUrl(component string, urlParts map[string]string) string { return url } -func constructServerUrl(component string, urlParts map[string]string) string { +func constructServerURL(component string, urlParts map[string]string) string { // follows OpenTelemetry specification-defined combinations for server spans described in // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/data-http.md url, ok := urlParts[URLAttribute] diff --git a/exporter/awsxrayexporter/translator/http_test.go b/exporter/awsxrayexporter/translator/http_test.go index dd415489668e..5f4dfb32190b 100644 --- a/exporter/awsxrayexporter/translator/http_test.go +++ b/exporter/awsxrayexporter/translator/http_test.go @@ -15,24 +15,25 @@ package translator import ( + "strings" + "testing" + "time" + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" "github.com/golang/protobuf/ptypes/wrappers" "github.com/stretchr/testify/assert" - "strings" - "testing" - "time" ) func TestClientSpanWithUrlAttribute(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "GET" attributes[URLAttribute] = "https://api.example.com/users/junit" attributes[StatusCodeAttribute] = 200 - span := constructHttpClientSpan(attributes) + span := constructHTTPClientSpan(attributes) - filtered, httpData := makeHttp(span) + filtered, httpData := makeHTTP(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -47,16 +48,16 @@ func TestClientSpanWithUrlAttribute(t *testing.T) { func TestClientSpanWithSchemeHostTargetAttributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "https" attributes[HostAttribute] = "api.example.com" attributes[TargetAttribute] = "/users/junit" attributes[StatusCodeAttribute] = 200 attributes["user.id"] = "junit" - span := constructHttpClientSpan(attributes) + span := constructHTTPClientSpan(attributes) - filtered, httpData := makeHttp(span) + filtered, httpData := makeHTTP(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -71,7 +72,7 @@ func TestClientSpanWithSchemeHostTargetAttributes(t *testing.T) { func TestClientSpanWithPeerAttributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "http" attributes[PeerHostAttribute] = "kb234.example.com" @@ -79,9 +80,9 @@ func TestClientSpanWithPeerAttributes(t *testing.T) { attributes[PeerIpv4Attribute] = "10.8.17.36" attributes[TargetAttribute] = "/users/junit" attributes[StatusCodeAttribute] = 200 - span := constructHttpClientSpan(attributes) + span := constructHTTPClientSpan(attributes) - filtered, httpData := makeHttp(span) + filtered, httpData := makeHTTP(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -96,15 +97,15 @@ func TestClientSpanWithPeerAttributes(t *testing.T) { func TestClientSpanWithPeerIp4Attributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "http" attributes[PeerIpv4Attribute] = "10.8.17.36" attributes[PeerPortAttribute] = "8080" attributes[TargetAttribute] = "/users/junit" - span := constructHttpClientSpan(attributes) + span := constructHTTPClientSpan(attributes) - filtered, httpData := makeHttp(span) + filtered, httpData := makeHTTP(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() @@ -118,15 +119,15 @@ func TestClientSpanWithPeerIp4Attributes(t *testing.T) { func TestClientSpanWithPeerIp6Attributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "https" attributes[PeerIpv6Attribute] = "2001:db8:85a3::8a2e:370:7334" attributes[PeerPortAttribute] = "443" attributes[TargetAttribute] = "/users/junit" - span := constructHttpClientSpan(attributes) + span := constructHTTPClientSpan(attributes) - filtered, httpData := makeHttp(span) + filtered, httpData := makeHTTP(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) w := borrow() @@ -140,15 +141,15 @@ func TestClientSpanWithPeerIp6Attributes(t *testing.T) { func TestServerSpanWithUrlAttribute(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "GET" attributes[URLAttribute] = "https://api.example.com/users/junit" attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[ClientIpAttribute] = "192.168.15.32" + attributes[ClientIPAttribute] = "192.168.15.32" attributes[StatusCodeAttribute] = 200 - span := constructHttpServerSpan(attributes) + span := constructHTTPServerSpan(attributes) - filtered, httpData := makeHttp(span) + filtered, httpData := makeHTTP(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -163,17 +164,17 @@ func TestServerSpanWithUrlAttribute(t *testing.T) { func TestServerSpanWithSchemeHostTargetAttributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "https" attributes[HostAttribute] = "api.example.com" attributes[TargetAttribute] = "/users/junit" attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[ClientIpAttribute] = "192.168.15.32" + attributes[ClientIPAttribute] = "192.168.15.32" attributes[StatusCodeAttribute] = 200 - span := constructHttpServerSpan(attributes) + span := constructHTTPServerSpan(attributes) - filtered, httpData := makeHttp(span) + filtered, httpData := makeHTTP(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -188,18 +189,18 @@ func TestServerSpanWithSchemeHostTargetAttributes(t *testing.T) { func TestServerSpanWithSchemeServernamePortTargetAttributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "https" attributes[ServerNameAttribute] = "api.example.com" attributes[PortAttribute] = 443 attributes[TargetAttribute] = "/users/junit" attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[ClientIpAttribute] = "192.168.15.32" + attributes[ClientIPAttribute] = "192.168.15.32" attributes[StatusCodeAttribute] = 200 - span := constructHttpServerSpan(attributes) + span := constructHTTPServerSpan(attributes) - filtered, httpData := makeHttp(span) + filtered, httpData := makeHTTP(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -214,20 +215,20 @@ func TestServerSpanWithSchemeServernamePortTargetAttributes(t *testing.T) { func TestServerSpanWithSchemeNamePortTargetAttributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "GET" attributes[SchemeAttribute] = "http" attributes[HostNameAttribute] = "kb234.example.com" attributes[PortAttribute] = 8080 attributes[TargetAttribute] = "/users/junit" attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[ClientIpAttribute] = "192.168.15.32" + attributes[ClientIPAttribute] = "192.168.15.32" attributes[StatusCodeAttribute] = 200 - span := constructHttpServerSpan(attributes) + span := constructHTTPServerSpan(attributes) timeEvents := constructTimedEventsWithReceivedMessageEvent(span.EndTime) span.TimeEvents = &timeEvents - filtered, httpData := makeHttp(span) + filtered, httpData := makeHTTP(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -242,12 +243,12 @@ func TestServerSpanWithSchemeNamePortTargetAttributes(t *testing.T) { func TestHttpStatusFromSpanStatus(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "GET" attributes[URLAttribute] = "https://api.example.com/users/junit" - span := constructHttpClientSpan(attributes) + span := constructHTTPClientSpan(attributes) - filtered, httpData := makeHttp(span) + filtered, httpData := makeHTTP(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) @@ -260,7 +261,7 @@ func TestHttpStatusFromSpanStatus(t *testing.T) { assert.True(t, strings.Contains(jsonStr, "200")) } -func constructHttpClientSpan(attributes map[string]interface{}) *tracepb.Span { +func constructHTTPClientSpan(attributes map[string]interface{}) *tracepb.Span { endTime := time.Now().Round(time.Second) startTime := endTime.Add(-90 * time.Second) spanAttributes := constructSpanAttributes(attributes) @@ -294,7 +295,7 @@ func constructHttpClientSpan(attributes map[string]interface{}) *tracepb.Span { } } -func constructHttpServerSpan(attributes map[string]interface{}) *tracepb.Span { +func constructHTTPServerSpan(attributes map[string]interface{}) *tracepb.Span { endTime := time.Now().Round(time.Second) startTime := endTime.Add(-90 * time.Second) spanAttributes := constructSpanAttributes(attributes) diff --git a/exporter/awsxrayexporter/translator/segment.go b/exporter/awsxrayexporter/translator/segment.go index 72f1754912bf..1f605d9ade42 100644 --- a/exporter/awsxrayexporter/translator/segment.go +++ b/exporter/awsxrayexporter/translator/segment.go @@ -17,25 +17,21 @@ package translator import ( "encoding/binary" "encoding/hex" - resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" - tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" - "github.com/golang/protobuf/ptypes/timestamp" - tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" "math/rand" "reflect" "regexp" "sync" "time" + + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + "github.com/golang/protobuf/ptypes/timestamp" + tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" ) +// OpenTelemetry Semantic Convention values for general Span attribute names. const ( - // Attributes recorded on the span for the requests. - // Only trace exporters will need them. ComponentAttribute = "component" - HttpComponentType = "http" - GrpcComponentType = "grpc" - DbComponentType = "db" - MsgComponentType = "messaging" PeerAddressAttribute = "peer.address" PeerHostAttribute = "peer.hostname" PeerIpv4Attribute = "peer.ipv4" @@ -44,6 +40,15 @@ const ( PeerServiceAttribute = "peer.service" ) +// OpenTelemetry Semantic Convention values for component attribute values. +const ( + HTTPComponentType = "http" + GrpcComponentType = "grpc" + DbComponentType = "db" + MsgComponentType = "messaging" +) + +// OpenTelemetry Semantic Convention values for Resource attribute names. const ( ServiceNameAttribute = "service.name" ServiceNamespaceAttribute = "service.namespace" @@ -57,7 +62,7 @@ const ( K8sPodAttribute = "k8s.pod.name" K8sDeploymentAttribute = "k8s.deployment.name" HostHostnameAttribute = "host.hostname" - HostIdAttribute = "host.id" + HostIDAttribute = "host.id" HostNameAttribute = "host.name" HostTypeAttribute = "host.type" CloudProviderAttribute = "cloud.provider" @@ -66,8 +71,8 @@ const ( CloudZoneAttribute = "cloud.zone" ) +// AWS X-Ray acceptable values for origin field. const ( - // OriginEC2 span originated from EC2 OriginEC2 = "AWS::EC2::Instance" OriginECS = "AWS::ECS::Container" OriginEB = "AWS::ElasticBeanstalk::Environment" @@ -100,6 +105,7 @@ const ( identifierOffset = 11 // offset of identifier within traceID ) +// Segment provides the shape for unmarshalling segment data. type Segment struct { // Required TraceID string `json:"trace_id,omitempty"` @@ -136,6 +142,7 @@ type Segment struct { Metadata map[string]map[string]interface{} `json:"metadata,omitempty"` } +// MakeSegmentDocumentString converts an Otel Span to an X-Ray Segment and then serialzies to JSON func MakeSegmentDocumentString(name string, span *tracepb.Span, userAttribute string) (string, error) { segment := MakeSegment(name, span, userAttribute) w := borrow() @@ -147,18 +154,19 @@ func MakeSegmentDocumentString(name string, span *tracepb.Span, userAttribute st return jsonStr, nil } +// MakeSegment converts an Otel Span to an X-Ray Segment func MakeSegment(name string, span *tracepb.Span, userAttribute string) Segment { var ( traceID = convertToAmazonTraceID(span.TraceId) startTime = timestampToFloatSeconds(span.StartTime, span.StartTime) endTime = timestampToFloatSeconds(span.EndTime, span.StartTime) - httpfiltered, http = makeHttp(span) + httpfiltered, http = makeHTTP(span) isError, isFault, causefiltered, cause = makeCause(span.Status, httpfiltered) isThrottled = span.Status.Code == tracetranslator.OCResourceExhausted origin = determineAwsOrigin(span.Resource) awsfiltered, aws = makeAws(causefiltered, span.Resource) service = makeService(span.Resource) - sqlfiltered, sql = makeSql(awsfiltered) + sqlfiltered, sql = makeSQL(awsfiltered) user, annotations = makeAnnotations(sqlfiltered, userAttribute) namespace string ) @@ -193,6 +201,28 @@ func MakeSegment(name string, span *tracepb.Span, userAttribute string) Segment } } +// NewTraceID generates a new valid X-Ray TraceID +func NewTraceID() []byte { + var r [16]byte + epoch := time.Now().Unix() + binary.BigEndian.PutUint32(r[0:4], uint32(epoch)) + _, err := rand.Read(r[4:]) + if err != nil { + panic(err) + } + return r[:] +} + +// NewSegmentID generates a new valid X-Ray SegmentID +func NewSegmentID() []byte { + var r [8]byte + _, err := rand.Read(r[:]) + if err != nil { + panic(err) + } + return r[:] +} + func determineAwsOrigin(resource *resourcepb.Resource) string { origin := OriginEC2 if resource == nil { @@ -332,23 +362,3 @@ func fixAnnotationKey(key string) string { return key } - -func NewTraceID() []byte { - var r [16]byte - epoch := time.Now().Unix() - binary.BigEndian.PutUint32(r[0:4], uint32(epoch)) - _, err := rand.Read(r[4:]) - if err != nil { - panic(err) - } - return r[:] -} - -func NewSegmentID() []byte { - var r [8]byte - _, err := rand.Read(r[:]) - if err != nil { - panic(err) - } - return r[:] -} diff --git a/exporter/awsxrayexporter/translator/segment_test.go b/exporter/awsxrayexporter/translator/segment_test.go index 819c072d8647..33f41df774dd 100644 --- a/exporter/awsxrayexporter/translator/segment_test.go +++ b/exporter/awsxrayexporter/translator/segment_test.go @@ -16,15 +16,16 @@ package translator import ( "fmt" + "reflect" + "strings" + "testing" + "time" + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" "github.com/golang/protobuf/ptypes/timestamp" tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" "github.com/stretchr/testify/assert" - "reflect" - "strings" - "testing" - "time" ) func TestClientSpanWithGrpcComponent(t *testing.T) { @@ -50,22 +51,22 @@ func TestClientSpanWithGrpcComponent(t *testing.T) { func TestClientSpanWithAwsSdkClient(t *testing.T) { spanName := "AmazonDynamoDB.getItem" - parentSpanId := NewSegmentID() + parentSpanID := NewSegmentID() userAttribute := "originating.user" user := "testing" attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "POST" attributes[SchemeAttribute] = "https" attributes[HostAttribute] = "dynamodb.us-east-1.amazonaws.com" attributes[TargetAttribute] = "/" attributes[UserAgentAttribute] = "aws-sdk-java/1.11.613 Windows_10/10.0 OpenJDK_64-Bit_server_VM/11.0.4+11-LTS" attributes[AwsOperationAttribute] = "GetItem" - attributes[AwsRequestIdAttribute] = "18BO1FEPJSSAOGNJEDPTPCMIU7VV4KQNSO5AEMVJF66Q9ASUAAJG" + attributes[AwsRequestIDAttribute] = "18BO1FEPJSSAOGNJEDPTPCMIU7VV4KQNSO5AEMVJF66Q9ASUAAJG" attributes[AwsTableNameAttribute] = "otel-dev-Testing" attributes[userAttribute] = user labels := constructDefaultResourceLabels() - span := constructClientSpan(parentSpanId, spanName, 0, "OK", attributes, labels) + span := constructClientSpan(parentSpanID, spanName, 0, "OK", attributes, labels) jsonStr, err := MakeSegmentDocumentString(spanName, span, userAttribute) @@ -78,12 +79,12 @@ func TestClientSpanWithAwsSdkClient(t *testing.T) { func TestServerSpanWithInternalServerError(t *testing.T) { spanName := "/api/locations" - parentSpanId := NewSegmentID() + parentSpanID := NewSegmentID() userAttribute := "originating.user" user := "testing" errorMessage := "java.lang.NullPointerException" attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "POST" attributes[URLAttribute] = "https://api.example.org/api/locations" attributes[TargetAttribute] = "/api/locations" @@ -91,7 +92,7 @@ func TestServerSpanWithInternalServerError(t *testing.T) { attributes[userAttribute] = user attributes[ErrorKindAttribute] = "java.lang.NullPointerException" labels := constructDefaultResourceLabels() - span := constructServerSpan(parentSpanId, spanName, tracetranslator.OCInternal, errorMessage, attributes, labels) + span := constructServerSpan(parentSpanID, spanName, tracetranslator.OCInternal, errorMessage, attributes, labels) timeEvents := constructTimedEventsWithSentMessageEvent(span.StartTime) span.TimeEvents = &timeEvents @@ -114,7 +115,7 @@ func TestServerSpanWithInternalServerError(t *testing.T) { func TestClientSpanWithDbComponent(t *testing.T) { spanName := "call update_user_preference( ?, ?, ? )" - enterpriseAppId := "25F2E73B-4769-4C79-9DF3-7EBE85D571EA" + enterpriseAppID := "25F2E73B-4769-4C79-9DF3-7EBE85D571EA" attributes := make(map[string]interface{}) attributes[ComponentAttribute] = DbComponentType attributes[DbTypeAttribute] = "sql" @@ -124,7 +125,7 @@ func TestClientSpanWithDbComponent(t *testing.T) { attributes[PeerAddressAttribute] = "mysql://db.dev.example.com:3306" attributes[PeerHostAttribute] = "db.dev.example.com" attributes[PeerPortAttribute] = "3306" - attributes["enterprise.app.id"] = enterpriseAppId + attributes["enterprise.app.id"] = enterpriseAppID labels := constructDefaultResourceLabels() span := constructClientSpan(nil, spanName, 0, "OK", attributes, labels) @@ -147,12 +148,12 @@ func TestClientSpanWithDbComponent(t *testing.T) { jsonStr := w.String() release(w) assert.True(t, strings.Contains(jsonStr, spanName)) - assert.True(t, strings.Contains(jsonStr, enterpriseAppId)) + assert.True(t, strings.Contains(jsonStr, enterpriseAppID)) } func TestClientSpanWithBlankUserAttribute(t *testing.T) { spanName := "call update_user_preference( ?, ?, ? )" - enterpriseAppId := "25F2E73B-4769-4C79-9DF3-7EBE85D571EA" + enterpriseAppID := "25F2E73B-4769-4C79-9DF3-7EBE85D571EA" attributes := make(map[string]interface{}) attributes[ComponentAttribute] = DbComponentType attributes[DbTypeAttribute] = "sql" @@ -162,7 +163,7 @@ func TestClientSpanWithBlankUserAttribute(t *testing.T) { attributes[PeerAddressAttribute] = "mysql://db.dev.example.com:3306" attributes[PeerHostAttribute] = "db.dev.example.com" attributes[PeerPortAttribute] = "3306" - attributes["enterprise.app.id"] = enterpriseAppId + attributes["enterprise.app.id"] = enterpriseAppID labels := constructDefaultResourceLabels() span := constructClientSpan(nil, spanName, 0, "OK", attributes, labels) @@ -185,7 +186,7 @@ func TestClientSpanWithBlankUserAttribute(t *testing.T) { jsonStr := w.String() release(w) assert.True(t, strings.Contains(jsonStr, spanName)) - assert.True(t, strings.Contains(jsonStr, enterpriseAppId)) + assert.True(t, strings.Contains(jsonStr, enterpriseAppID)) } func TestSpanWithInvalidTraceId(t *testing.T) { @@ -211,20 +212,20 @@ func TestSpanWithInvalidTraceId(t *testing.T) { assert.False(t, strings.Contains(jsonStr, "1-11")) } -func constructClientSpan(parentSpanId []byte, name string, code int32, message string, +func constructClientSpan(parentSpanID []byte, name string, code int32, message string, attributes map[string]interface{}, rscLabels map[string]string) *tracepb.Span { var ( - traceId = NewTraceID() - spanId = NewSegmentID() + traceID = NewTraceID() + spanID = NewSegmentID() endTime = time.Now() startTime = endTime.Add(-215 * time.Millisecond) spanAttributes = constructSpanAttributes(attributes) ) return &tracepb.Span{ - TraceId: traceId, - SpanId: spanId, - ParentSpanId: parentSpanId, + TraceId: traceID, + SpanId: spanID, + ParentSpanId: parentSpanID, Name: &tracepb.TruncatableString{Value: name}, Kind: tracepb.Span_CLIENT, StartTime: convertTimeToTimestamp(startTime), @@ -243,20 +244,20 @@ func constructClientSpan(parentSpanId []byte, name string, code int32, message s } } -func constructServerSpan(parentSpanId []byte, name string, code int32, message string, +func constructServerSpan(parentSpanID []byte, name string, code int32, message string, attributes map[string]interface{}, rscLabels map[string]string) *tracepb.Span { var ( - traceId = NewTraceID() - spanId = NewSegmentID() + traceID = NewTraceID() + spanID = NewSegmentID() endTime = time.Now() startTime = endTime.Add(-215 * time.Millisecond) spanAttributes = constructSpanAttributes(attributes) ) return &tracepb.Span{ - TraceId: traceId, - SpanId: spanId, - ParentSpanId: parentSpanId, + TraceId: traceID, + SpanId: spanID, + ParentSpanId: parentSpanID, Name: &tracepb.TruncatableString{Value: name}, Kind: tracepb.Span_SERVER, StartTime: convertTimeToTimestamp(startTime), @@ -332,7 +333,7 @@ func constructTimedEventsWithReceivedMessageEvent(tm *timestamp.Timestamp) trace eventAttrMap[MessageTypeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ StringValue: &tracepb.TruncatableString{Value: "RECEIVED"}, }} - eventAttrMap[MessageIdAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + eventAttrMap[MessageIDAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ IntValue: 1, }} eventAttrMap[MessageCompressedSizeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ @@ -369,7 +370,7 @@ func constructTimedEventsWithSentMessageEvent(tm *timestamp.Timestamp) tracepb.S eventAttrMap[MessageTypeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ StringValue: &tracepb.TruncatableString{Value: "SENT"}, }} - eventAttrMap[MessageIdAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + eventAttrMap[MessageIDAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ IntValue: 1, }} eventAttrMap[MessageUncompressedSizeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ diff --git a/exporter/awsxrayexporter/translator/service_test.go b/exporter/awsxrayexporter/translator/service_test.go index 4ec6895beada..0a6fb6f87462 100644 --- a/exporter/awsxrayexporter/translator/service_test.go +++ b/exporter/awsxrayexporter/translator/service_test.go @@ -15,10 +15,11 @@ package translator import ( - resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" - "github.com/stretchr/testify/assert" "strings" "testing" + + resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + "github.com/stretchr/testify/assert" ) func TestServiceFromResource(t *testing.T) { diff --git a/exporter/awsxrayexporter/translator/sql.go b/exporter/awsxrayexporter/translator/sql.go index 7e27df76a1ed..1b20757c8cd0 100644 --- a/exporter/awsxrayexporter/translator/sql.go +++ b/exporter/awsxrayexporter/translator/sql.go @@ -14,6 +14,7 @@ package translator +// OpenTelemetry Semantic Convention attribute names for database related attributes const ( DbTypeAttribute = "db.type" DbInstanceAttribute = "db.instance" @@ -33,24 +34,24 @@ type SQLData struct { SanitizedQuery string `json:"sanitized_query,omitempty"` } -func makeSql(attributes map[string]string) (map[string]string, *SQLData) { +func makeSQL(attributes map[string]string) (map[string]string, *SQLData) { var ( filtered = make(map[string]string) sqlData SQLData - dbUrl string + dbURL string dbType string dbInstance string dbStatement string dbUser string ) componentType := attributes[ComponentAttribute] - if componentType == HttpComponentType || componentType == GrpcComponentType { + if componentType == HTTPComponentType || componentType == GrpcComponentType { return attributes, nil } for key, value := range attributes { switch key { case PeerAddressAttribute: - dbUrl = value + dbURL = value case DbTypeAttribute: dbType = value case DbInstanceAttribute: @@ -63,10 +64,10 @@ func makeSql(attributes map[string]string) (map[string]string, *SQLData) { filtered[key] = value } } - if dbUrl == "" { - dbUrl = "localhost" + if dbURL == "" { + dbURL = "localhost" } - url := dbUrl + "/" + dbInstance + url := dbURL + "/" + dbInstance sqlData = SQLData{ URL: url, DatabaseType: dbType, diff --git a/exporter/awsxrayexporter/translator/sql_test.go b/exporter/awsxrayexporter/translator/sql_test.go index f772324fb070..234ef9a27782 100644 --- a/exporter/awsxrayexporter/translator/sql_test.go +++ b/exporter/awsxrayexporter/translator/sql_test.go @@ -15,9 +15,10 @@ package translator import ( - "github.com/stretchr/testify/assert" "strings" "testing" + + "github.com/stretchr/testify/assert" ) func TestClientSpanWithStatementAttribute(t *testing.T) { @@ -31,7 +32,7 @@ func TestClientSpanWithStatementAttribute(t *testing.T) { attributes[PeerHostAttribute] = "db.example.com" attributes[PeerPortAttribute] = "3306" - filtered, sqlData := makeSql(attributes) + filtered, sqlData := makeSQL(attributes) assert.NotNil(t, filtered) assert.NotNil(t, sqlData) @@ -46,7 +47,7 @@ func TestClientSpanWithStatementAttribute(t *testing.T) { func TestClientSpanWithHttpComponentAttribute(t *testing.T) { attributes := make(map[string]string) - attributes[ComponentAttribute] = HttpComponentType + attributes[ComponentAttribute] = HTTPComponentType attributes[DbTypeAttribute] = "sql" attributes[DbInstanceAttribute] = "customers" attributes[DbStatementAttribute] = "SELECT * FROM user WHERE user_id = ?" @@ -55,7 +56,7 @@ func TestClientSpanWithHttpComponentAttribute(t *testing.T) { attributes[PeerHostAttribute] = "db.example.com" attributes[PeerPortAttribute] = "3306" - filtered, sqlData := makeSql(attributes) + filtered, sqlData := makeSQL(attributes) assert.NotNil(t, filtered) assert.Nil(t, sqlData) From 3fb89a0a3eeb4bd609cd8d4f75882a8d5849dcb6 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Wed, 20 Nov 2019 15:46:05 -0600 Subject: [PATCH 44/59] initial dev of export handler --- exporter/awsxrayexporter/README.md | 23 +++++++++++++++++ exporter/awsxrayexporter/awsxray.go | 13 +++++++--- exporter/awsxrayexporter/awsxray_test.go | 7 +++++- exporter/awsxrayexporter/config.go | 8 +++--- exporter/awsxrayexporter/{conn => }/conn.go | 25 +++++++++++-------- .../awsxrayexporter/{conn => }/conn_test.go | 13 +++++----- exporter/awsxrayexporter/factory.go | 5 ++-- exporter/awsxrayexporter/factory_test.go | 2 +- .../awsxrayexporter/{conn => }/xray_client.go | 6 +++-- 9 files changed, 71 insertions(+), 31 deletions(-) rename exporter/awsxrayexporter/{conn => }/conn.go (92%) rename exporter/awsxrayexporter/{conn => }/conn_test.go (86%) rename exporter/awsxrayexporter/{conn => }/xray_client.go (90%) diff --git a/exporter/awsxrayexporter/README.md b/exporter/awsxrayexporter/README.md index 3fee707dcf90..fb545fc52137 100644 --- a/exporter/awsxrayexporter/README.md +++ b/exporter/awsxrayexporter/README.md @@ -39,3 +39,26 @@ by the Span Resource object. X-Ray uses this data to generate inferred segments ## Exporter Configuration +The following exporter configuration parameters are supported. + +| Name | Description | Default | +| :---------------- | :--------------------------------------------------------------------- | ------- | +| `num_workers` | Maximum number of concurrent calls to AWS X-Ray to upload documents. | 8 | +| `endpoint` | Optionally override the default X-Ray service endpoint. | | +| `request_timeout` | Number of seconds before timing out a request. | 30 | +| `no_verify_ssl` | Enable or disable TLS certificate verification. | false | +| `proxy_address` | Upload segments to AWS X-Ray through a proxy. | | +| `region` | Send segments to AWS X-Ray service in a specific region. | | +| `local_mode` | Local mode to skip EC2 instance metadata check. | false | +| `resource_arn` | Amazon Resource Name (ARN) of the AWS resource running the collector. | | +| `role_arn` | IAM role to upload segments to a different account. | | +| `user_attribute` | Span attribute name which holds the originating user's login. | | + + +## AWS Credential Configuration + +This exporter follows default credential resolution for the +[aws-sdk-go](https://docs.aws.amazon.com/sdk-for-go/api/index.html). + +Follow the [guidelines](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html) for the +credential configuration. diff --git a/exporter/awsxrayexporter/awsxray.go b/exporter/awsxrayexporter/awsxray.go index 89f6c5dfd541..624f6a80f0a7 100644 --- a/exporter/awsxrayexporter/awsxray.go +++ b/exporter/awsxrayexporter/awsxray.go @@ -28,17 +28,24 @@ import ( // NewTraceExporter creates an exporter.TraceExporter that just drops the // received data and logs debugging messages. -func NewTraceExporter(config configmodels.Exporter, logger *zap.Logger) (exporter.TraceExporter, error) { +func NewTraceExporter(config configmodels.Exporter, logger *zap.Logger, cn connAttr) (exporter.TraceExporter, error) { typeLog := zap.String("type", config.Type()) nameLog := zap.String("name", config.Name()) userAttribute := config.(*Config).UserAttribute + awsConfig, session := GetAWSConfigSession(logger, cn, config.(*Config)) + xrayClient := NewXRay(logger, awsConfig, session) return exporterhelper.NewTraceExporter( config, func(ctx context.Context, td consumerdata.TraceData) (int, error) { logger.Info("TraceExporter", typeLog, nameLog, zap.Int("#spans", len(td.Spans))) droppedSpans, input := assembleRequest(userAttribute, td, logger) - logger.Info("request: " + input.String()) - return droppedSpans, nil + logger.Debug("request: " + input.String()) + output, err := xrayClient.PutTraceSegments(input) + logger.Debug("response: " + output.String()) + if output != nil && output.UnprocessedTraceSegments != nil { + droppedSpans += len(output.UnprocessedTraceSegments) + } + return droppedSpans, err }, exporterhelper.WithTracing(true), exporterhelper.WithMetrics(false), diff --git a/exporter/awsxrayexporter/awsxray_test.go b/exporter/awsxrayexporter/awsxray_test.go index de5d9bb0f67f..9851c39df753 100644 --- a/exporter/awsxrayexporter/awsxray_test.go +++ b/exporter/awsxrayexporter/awsxray_test.go @@ -43,7 +43,12 @@ func TestTraceExport(t *testing.T) { func initializeTraceExporter() exporter.TraceExporter { logger := zap.NewNop() factory := Factory{} - traceExporter, err := factory.CreateTraceExporter(logger, factory.CreateDefaultConfig()) + config := factory.CreateDefaultConfig() + config.(*Config).Region = "us-east-1" + config.(*Config).LocalMode = true + mconn := new(mockConn) + mconn.sn = getDefaultSession(logger) + traceExporter, err := NewTraceExporter(config, logger, mconn) if err != nil { panic(err) } diff --git a/exporter/awsxrayexporter/config.go b/exporter/awsxrayexporter/config.go index a9c6e2cf80f2..9373acf0263f 100644 --- a/exporter/awsxrayexporter/config.go +++ b/exporter/awsxrayexporter/config.go @@ -19,9 +19,9 @@ import "github.com/open-telemetry/opentelemetry-collector/config/configmodels" // Config defines configuration for AWS X-Ray exporter. type Config struct { configmodels.ExporterSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct. - // Maximum number of concurrent calls to AWS X-Ray to upload segment documents. + // Maximum number of concurrent calls to AWS X-Ray to upload documents. Concurrency int `mapstructure:"num_workers"` - // X-Ray service endpoint to which the daemon sends segment documents. + // X-Ray service endpoint to which the collector sends segment documents. Endpoint string `mapstructure:"endpoint"` // Number of seconds before timing out a request. RequestTimeout int `mapstructure:"request_timeout"` @@ -33,10 +33,10 @@ type Config struct { Region string `mapstructure:"region"` // Local mode to skip EC2 instance metadata check. LocalMode bool `mapstructure:"local_mode"` - // Amazon Resource Name (ARN) of the AWS resource running the daemon. + // Amazon Resource Name (ARN) of the AWS resource running the collector. ResourceARN string `mapstructure:"resource_arn"` // IAM role to upload segments to a different account. RoleARN string `mapstructure:"role_arn"` - // Span attribute name which holds the originating user's login + // Span attribute name which holds the originating user's login. UserAttribute string `mapstructure:"user_attribute"` } diff --git a/exporter/awsxrayexporter/conn/conn.go b/exporter/awsxrayexporter/conn.go similarity index 92% rename from exporter/awsxrayexporter/conn/conn.go rename to exporter/awsxrayexporter/conn.go index 175738a39aa3..db027d0c84d2 100644 --- a/exporter/awsxrayexporter/conn/conn.go +++ b/exporter/awsxrayexporter/conn.go @@ -1,4 +1,5 @@ // Copyright 2019, OpenTelemetry Authors +// Portions of this file Copyright 2018-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,7 +13,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package conn +package awsxrayexporter import ( "crypto/tls" @@ -29,13 +30,12 @@ import ( "github.com/aws/aws-sdk-go/aws/endpoints" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/sts" - "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter" "go.uber.org/zap" "golang.org/x/net/http2" ) type connAttr interface { - newAWSSession(roleArn string, region string) *session.Session + newAWSSession(logger *zap.Logger, roleArn string, region string) *session.Session getEC2Region(s *session.Session) (string, error) } @@ -54,7 +54,8 @@ const ( ) // getNewHTTPClient returns new HTTP client instance with provided configuration. -func getNewHTTPClient(logger *zap.Logger, maxIdle int, requestTimeout int, noVerify bool, proxyAddress string) *http.Client { +func getNewHTTPClient(logger *zap.Logger, maxIdle int, requestTimeout int, noVerify bool, + proxyAddress string) *http.Client { logger.Debug("Using proxy address: ", zap.String("proxyAddr", proxyAddress), ) @@ -108,7 +109,7 @@ func getProxyURL(finalProxyAddress string) *url.URL { } // GetAWSConfigSession returns AWS config and session instances. -func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *awsxrayexporter.Config) (*aws.Config, *session.Session) { +func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *Config) (*aws.Config, *session.Session) { var s *session.Session var err error var awsRegion string @@ -133,7 +134,7 @@ func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *awsxrayexporter.C //log.Error("Cannot fetch region variable from config file, environment variables and ec2 metadata.") os.Exit(1) } - s = cn.newAWSSession(cfg.RoleARN, awsRegion) + s = cn.newAWSSession(logger, cfg.RoleARN, awsRegion) config := &aws.Config{ Region: aws.String(awsRegion), @@ -146,7 +147,7 @@ func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *awsxrayexporter.C } // ProxyServerTransport configures HTTP transport for TCP Proxy Server. -func ProxyServerTransport(config *awsxrayexporter.Config) *http.Transport { +func ProxyServerTransport(config *Config) *http.Transport { tls := &tls.Config{ InsecureSkipVerify: config.NoVerifySSL, } @@ -219,7 +220,8 @@ func getSTSCreds(logger *zap.Logger, region string, roleArn string) *credentials // getSTSCredsFromRegionEndpoint fetches STS credentials for provided roleARN from regional endpoint. // AWS STS recommends that you provide both the Region and endpoint when you make calls to a Regional endpoint. // Reference: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html#id_credentials_temp_enable-regions_writing_code -func getSTSCredsFromRegionEndpoint(logger *zap.Logger, sess *session.Session, region string, roleArn string) *credentials.Credentials { +func getSTSCredsFromRegionEndpoint(logger *zap.Logger, sess *session.Session, region string, + roleArn string) *credentials.Credentials { regionalEndpoint := getSTSRegionalEndpoint(region) // if regionalEndpoint is "", the STS endpoint is Global endpoint for classic regions except ap-east-1 - (HKG) // for other opt-in regions, region value will create STS regional endpoint. @@ -230,9 +232,10 @@ func getSTSCredsFromRegionEndpoint(logger *zap.Logger, sess *session.Session, re return stscreds.NewCredentialsWithClient(st, roleArn) } -// getSTSCredsFromPrimaryRegionEndpoint fetches STS credentials for provided roleARN from primary region endpoint in the -// respective partition. -func getSTSCredsFromPrimaryRegionEndpoint(logger *zap.Logger, t *session.Session, roleArn string, region string) *credentials.Credentials { +// getSTSCredsFromPrimaryRegionEndpoint fetches STS credentials for provided roleARN from primary region endpoint in +// the respective partition. +func getSTSCredsFromPrimaryRegionEndpoint(logger *zap.Logger, t *session.Session, roleArn string, + region string) *credentials.Credentials { partitionID := getPartition(region) if partitionID == endpoints.AwsPartitionID { return getSTSCredsFromRegionEndpoint(logger, t, endpoints.UsEast1RegionID, roleArn) diff --git a/exporter/awsxrayexporter/conn/conn_test.go b/exporter/awsxrayexporter/conn_test.go similarity index 86% rename from exporter/awsxrayexporter/conn/conn_test.go rename to exporter/awsxrayexporter/conn_test.go index c9fcdb477182..c5823711420b 100644 --- a/exporter/awsxrayexporter/conn/conn_test.go +++ b/exporter/awsxrayexporter/conn_test.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package conn +package awsxrayexporter import ( "errors" @@ -22,7 +22,6 @@ import ( "testing" "github.com/aws/aws-sdk-go/aws/session" - "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter" "github.com/open-telemetry/opentelemetry-collector/config" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" @@ -47,7 +46,7 @@ func (c *mockConn) getEC2Region(s *session.Session) (string, error) { return ec2Region, nil } -func (c *mockConn) newAWSSession(roleArn string, region string) *session.Session { +func (c *mockConn) newAWSSession(logger *zap.Logger, roleArn string, region string) *session.Session { return c.sn } @@ -83,15 +82,15 @@ func TestRegionEnv(t *testing.T) { assert.Equal(t, *cfg.Region, region, "Region value fetched from environment") } -func loadExporterConfig(t *testing.T) *awsxrayexporter.Config { +func loadExporterConfig(t *testing.T) *Config { factories, err := config.ExampleComponents() assert.Nil(t, err) - factory := &awsxrayexporter.Factory{} + factory := &Factory{} factories.Exporters[factory.Type()] = factory otelcfg, err := config.LoadConfigFile( - t, path.Join(".", "../testdata", "config.yaml"), factories, + t, path.Join(".", "testdata", "config.yaml"), factories, ) - xrayExporterCfg := otelcfg.Exporters["awsxray"].(*awsxrayexporter.Config) + xrayExporterCfg := otelcfg.Exporters["awsxray"].(*Config) return xrayExporterCfg } diff --git a/exporter/awsxrayexporter/factory.go b/exporter/awsxrayexporter/factory.go index 7e00086fd41c..149a87a3f50d 100644 --- a/exporter/awsxrayexporter/factory.go +++ b/exporter/awsxrayexporter/factory.go @@ -15,6 +15,7 @@ package awsxrayexporter import ( + "github.com/open-telemetry/opentelemetry-collector/config/configerror" "github.com/open-telemetry/opentelemetry-collector/config/configmodels" "github.com/open-telemetry/opentelemetry-collector/exporter" "go.uber.org/zap" @@ -57,11 +58,11 @@ func (f *Factory) CreateDefaultConfig() configmodels.Exporter { // CreateTraceExporter creates a trace exporter based on this config. func (f *Factory) CreateTraceExporter(logger *zap.Logger, cfg configmodels.Exporter) (exporter.TraceExporter, error) { eCfg := cfg.(*Config) - return NewTraceExporter(eCfg, logger) + return NewTraceExporter(eCfg, logger, &Conn{}) } // CreateMetricsExporter always returns nil. func (f *Factory) CreateMetricsExporter(logger *zap.Logger, cfg configmodels.Exporter) (exporter.MetricsExporter, error) { - return nil, nil + return nil, configerror.ErrDataTypeIsNotSupported } diff --git a/exporter/awsxrayexporter/factory_test.go b/exporter/awsxrayexporter/factory_test.go index 0ee945cff364..f6cf4a88b0d9 100644 --- a/exporter/awsxrayexporter/factory_test.go +++ b/exporter/awsxrayexporter/factory_test.go @@ -62,6 +62,6 @@ func TestCreateMetricsExporter(t *testing.T) { require.NoError(t, err) exporter, err := factory.CreateMetricsExporter(logger, cfg.Exporters["awsxray/customname"]) - assert.Nil(t, err) + assert.NotNil(t, err) assert.Nil(t, exporter) } diff --git a/exporter/awsxrayexporter/conn/xray_client.go b/exporter/awsxrayexporter/xray_client.go similarity index 90% rename from exporter/awsxrayexporter/conn/xray_client.go rename to exporter/awsxrayexporter/xray_client.go index c79d7a2cd075..3f4c8eb3728c 100644 --- a/exporter/awsxrayexporter/conn/xray_client.go +++ b/exporter/awsxrayexporter/xray_client.go @@ -1,4 +1,5 @@ // Copyright 2019, OpenTelemetry Authors +// Portions of this file Copyright 2018-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,7 +13,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package conn +package awsxrayexporter import ( "os" @@ -62,7 +63,8 @@ func NewXRay(logger *zap.Logger, awsConfig *aws.Config, s *session.Session) XRay x.Handlers.Sign.PushFrontNamed(request.NamedHandler{ Name: "tracing.TimestampHandler", Fn: func(r *request.Request) { - r.HTTPRequest.Header.Set("X-Amzn-Xray-Timestamp", strconv.FormatFloat(float64(time.Now().UnixNano())/float64(time.Second), 'f', 9, 64)) + r.HTTPRequest.Header.Set("X-Amzn-Xray-Timestamp", + strconv.FormatFloat(float64(time.Now().UnixNano())/float64(time.Second), 'f', 9, 64)) }, }) From 56623ed227af05b5cd702d9dc32ec82894d7d1ae Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Wed, 20 Nov 2019 16:14:39 -0600 Subject: [PATCH 45/59] added to component list --- exporter/awsxrayexporter/awsxray.go | 3 ++- exporter/awsxrayexporter/awsxray_test.go | 3 ++- exporter/sapmexporter/go.mod | 1 - go.mod | 1 - testbed/go.mod | 1 - 5 files changed, 4 insertions(+), 5 deletions(-) diff --git a/exporter/awsxrayexporter/awsxray.go b/exporter/awsxrayexporter/awsxray.go index 624f6a80f0a7..685deb873109 100644 --- a/exporter/awsxrayexporter/awsxray.go +++ b/exporter/awsxrayexporter/awsxray.go @@ -18,12 +18,13 @@ import ( "context" "github.com/aws/aws-sdk-go/service/xray" - "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter/translator" "github.com/open-telemetry/opentelemetry-collector/config/configmodels" "github.com/open-telemetry/opentelemetry-collector/consumer/consumerdata" "github.com/open-telemetry/opentelemetry-collector/exporter" "github.com/open-telemetry/opentelemetry-collector/exporter/exporterhelper" "go.uber.org/zap" + + "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter/translator" ) // NewTraceExporter creates an exporter.TraceExporter that just drops the diff --git a/exporter/awsxrayexporter/awsxray_test.go b/exporter/awsxrayexporter/awsxray_test.go index 9851c39df753..c2a6057b29bc 100644 --- a/exporter/awsxrayexporter/awsxray_test.go +++ b/exporter/awsxrayexporter/awsxray_test.go @@ -25,11 +25,12 @@ import ( tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" "github.com/golang/protobuf/ptypes/timestamp" "github.com/golang/protobuf/ptypes/wrappers" - "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter/translator" "github.com/open-telemetry/opentelemetry-collector/consumer/consumerdata" "github.com/open-telemetry/opentelemetry-collector/exporter" "github.com/stretchr/testify/assert" "go.uber.org/zap" + + "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter/translator" ) func TestTraceExport(t *testing.T) { diff --git a/exporter/sapmexporter/go.mod b/exporter/sapmexporter/go.mod index c88a783bc7c0..40407b84fff2 100644 --- a/exporter/sapmexporter/go.mod +++ b/exporter/sapmexporter/go.mod @@ -4,7 +4,6 @@ go 1.12 require ( github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191119152140-567e1046cefa - github.com/pierrec/lz4 v2.0.5+incompatible // indirect github.com/signalfx/sapm-proto v0.1.0 github.com/stretchr/testify v1.4.0 go.uber.org/atomic v1.5.1 // indirect diff --git a/go.mod b/go.mod index a650fed11fed..87e14ef0a88c 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,6 @@ require ( github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinscribereceiver v0.0.0-20191126142441-b2a048090ad6 github.com/open-telemetry/opentelemetry-collector-contrib/testbed v0.0.0-20191213033854-af8a37b00e74 // indirect github.com/pavius/impi v0.0.0-20180302134524-c1cbdcb8df2b - github.com/pierrec/lz4 v2.0.5+incompatible // indirect golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f golang.org/x/tools v0.0.0-20191205225056-3393d29bb9fe honnef.co/go/tools v0.0.1-2019.2.3 diff --git a/testbed/go.mod b/testbed/go.mod index bdb13dfd7437..c6749427fe29 100644 --- a/testbed/go.mod +++ b/testbed/go.mod @@ -7,6 +7,5 @@ require ( github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.0.0-20191213162202-55b8658da81a github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.0.0-20191213162202-55b8658da81a github.com/open-telemetry/opentelemetry-collector/testbed v0.0.0-20191213162008-563eac85a88c - github.com/pierrec/lz4 v2.0.5+incompatible // indirect go.uber.org/zap v1.13.0 ) From 42a3d06269748d43f148a375dd78c6feb3af2d77 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Thu, 21 Nov 2019 14:15:32 -0600 Subject: [PATCH 46/59] fix issues raised during code review --- exporter/awsxrayexporter/awsxray.go | 7 +- exporter/awsxrayexporter/awsxray_test.go | 2 +- exporter/awsxrayexporter/conn.go | 100 +++++++++++------- exporter/awsxrayexporter/conn_test.go | 10 +- exporter/awsxrayexporter/translator/aws.go | 36 +++---- .../awsxrayexporter/translator/aws_test.go | 34 +++--- exporter/awsxrayexporter/translator/cause.go | 14 ++- .../awsxrayexporter/translator/cause_test.go | 12 +-- .../awsxrayexporter/translator/http_test.go | 40 +++---- .../awsxrayexporter/translator/segment.go | 8 +- .../translator/segment_test.go | 22 ++-- .../translator/service_test.go | 4 +- .../awsxrayexporter/translator/sql_test.go | 4 +- .../awsxrayexporter/translator/writer_pool.go | 49 +++++---- .../translator/writer_pool_test.go | 80 ++++++++++++++ 15 files changed, 273 insertions(+), 149 deletions(-) create mode 100644 exporter/awsxrayexporter/translator/writer_pool_test.go diff --git a/exporter/awsxrayexporter/awsxray.go b/exporter/awsxrayexporter/awsxray.go index 685deb873109..ef528d1afb86 100644 --- a/exporter/awsxrayexporter/awsxray.go +++ b/exporter/awsxrayexporter/awsxray.go @@ -33,12 +33,15 @@ func NewTraceExporter(config configmodels.Exporter, logger *zap.Logger, cn connA typeLog := zap.String("type", config.Type()) nameLog := zap.String("name", config.Name()) userAttribute := config.(*Config).UserAttribute - awsConfig, session := GetAWSConfigSession(logger, cn, config.(*Config)) + awsConfig, session, err := GetAWSConfigSession(logger, cn, config.(*Config)) + if err != nil { + return nil, err + } xrayClient := NewXRay(logger, awsConfig, session) return exporterhelper.NewTraceExporter( config, func(ctx context.Context, td consumerdata.TraceData) (int, error) { - logger.Info("TraceExporter", typeLog, nameLog, zap.Int("#spans", len(td.Spans))) + logger.Debug("TraceExporter", typeLog, nameLog, zap.Int("#spans", len(td.Spans))) droppedSpans, input := assembleRequest(userAttribute, td, logger) logger.Debug("request: " + input.String()) output, err := xrayClient.PutTraceSegments(input) diff --git a/exporter/awsxrayexporter/awsxray_test.go b/exporter/awsxrayexporter/awsxray_test.go index c2a6057b29bc..3c8f44e55c01 100644 --- a/exporter/awsxrayexporter/awsxray_test.go +++ b/exporter/awsxrayexporter/awsxray_test.go @@ -48,7 +48,7 @@ func initializeTraceExporter() exporter.TraceExporter { config.(*Config).Region = "us-east-1" config.(*Config).LocalMode = true mconn := new(mockConn) - mconn.sn = getDefaultSession(logger) + mconn.sn, _ = getDefaultSession(logger) traceExporter, err := NewTraceExporter(config, logger, mconn) if err != nil { panic(err) diff --git a/exporter/awsxrayexporter/conn.go b/exporter/awsxrayexporter/conn.go index db027d0c84d2..c31dabe673fa 100644 --- a/exporter/awsxrayexporter/conn.go +++ b/exporter/awsxrayexporter/conn.go @@ -35,7 +35,7 @@ import ( ) type connAttr interface { - newAWSSession(logger *zap.Logger, roleArn string, region string) *session.Session + newAWSSession(logger *zap.Logger, roleArn string, region string) (*session.Session, error) getEC2Region(s *session.Session) (string, error) } @@ -53,9 +53,9 @@ const ( STSAwsCnPartitionIDSuffix = ".amazonaws.com.cn" // AWS China partition. ) -// getNewHTTPClient returns new HTTP client instance with provided configuration. -func getNewHTTPClient(logger *zap.Logger, maxIdle int, requestTimeout int, noVerify bool, - proxyAddress string) *http.Client { +// newHTTPClient returns new HTTP client instance with provided configuration. +func newHTTPClient(logger *zap.Logger, maxIdle int, requestTimeout int, noVerify bool, + proxyAddress string) (*http.Client, error) { logger.Debug("Using proxy address: ", zap.String("proxyAddr", proxyAddress), ) @@ -64,7 +64,11 @@ func getNewHTTPClient(logger *zap.Logger, maxIdle int, requestTimeout int, noVer } finalProxyAddress := getProxyAddress(proxyAddress) - proxyURL := getProxyURL(finalProxyAddress) + proxyURL, err := getProxyURL(finalProxyAddress) + if err != nil { + logger.Error("unable to obtain proxy URL", zap.Error(err)) + return nil, err + } transport := &http.Transport{ MaxIdleConnsPerHost: maxIdle, TLSClientConfig: tls, @@ -78,7 +82,7 @@ func getNewHTTPClient(logger *zap.Logger, maxIdle int, requestTimeout int, noVer Transport: transport, Timeout: time.Second * time.Duration(requestTimeout), } - return http + return http, err } func getProxyAddress(proxyAddress string) string { @@ -93,27 +97,28 @@ func getProxyAddress(proxyAddress string) string { return finalProxyAddress } -func getProxyURL(finalProxyAddress string) *url.URL { +func getProxyURL(finalProxyAddress string) (*url.URL, error) { var proxyURL *url.URL var err error if finalProxyAddress != "" { proxyURL, err = url.Parse(finalProxyAddress) - if err != nil { - //log.Errorf("Bad proxy URL: %v", err) - os.Exit(1) - } } else { proxyURL = nil + err = nil } - return proxyURL + return proxyURL, err } // GetAWSConfigSession returns AWS config and session instances. -func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *Config) (*aws.Config, *session.Session) { +func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *Config) (*aws.Config, *session.Session, error) { var s *session.Session var err error var awsRegion string - http := getNewHTTPClient(logger, cfg.Concurrency, cfg.RequestTimeout, cfg.NoVerifySSL, cfg.ProxyAddress) + http, err := newHTTPClient(logger, cfg.Concurrency, cfg.RequestTimeout, cfg.NoVerifySSL, cfg.ProxyAddress) + if err != nil { + logger.Error("unable to obtain proxy URL", zap.Error(err)) + return nil, nil, err + } regionEnv := os.Getenv("AWS_REGION") if cfg.Region == "" && regionEnv != "" { awsRegion = regionEnv @@ -122,19 +127,27 @@ func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *Config) (*aws.Con awsRegion = cfg.Region logger.Debug("Fetch region %v from commandline/config file", zap.String("region", awsRegion)) } else if !cfg.NoVerifySSL { - es := getDefaultSession(logger) - awsRegion, err = cn.getEC2Region(es) + es, err := getDefaultSession(logger) if err != nil { - logger.Error("Unable to retrieve the region from the EC2 instance %v\n", zap.Error(err)) + logger.Error("Unable to retrieve default session %v\n", zap.Error(err)) } else { - logger.Debug("Fetch region %v from ec2 metadata", zap.String("region", awsRegion)) + awsRegion, err = cn.getEC2Region(es) + if err != nil { + logger.Error("Unable to retrieve the region from the EC2 instance %v\n", zap.Error(err)) + } else { + logger.Debug("Fetch region %v from ec2 metadata", zap.String("region", awsRegion)) + } } } if awsRegion == "" { - //log.Error("Cannot fetch region variable from config file, environment variables and ec2 metadata.") - os.Exit(1) + msg := "Cannot fetch region variable from config file, environment variables and ec2 metadata." + logger.Error(msg) + return nil, nil, awserr.New("NoAwsRegion", msg, nil) + } + s, err = cn.newAWSSession(logger, cfg.RoleARN, awsRegion) + if err != nil { + return nil, nil, err } - s = cn.newAWSSession(logger, cfg.RoleARN, awsRegion) config := &aws.Config{ Region: aws.String(awsRegion), @@ -143,17 +156,21 @@ func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *Config) (*aws.Con Endpoint: aws.String(cfg.Endpoint), HTTPClient: http, } - return config, s + return config, s, nil } // ProxyServerTransport configures HTTP transport for TCP Proxy Server. -func ProxyServerTransport(config *Config) *http.Transport { +func ProxyServerTransport(logger *zap.Logger, config *Config) (*http.Transport, error) { tls := &tls.Config{ InsecureSkipVerify: config.NoVerifySSL, } proxyAddr := getProxyAddress(config.ProxyAddress) - proxyURL := getProxyURL(proxyAddr) + proxyURL, err := getProxyURL(proxyAddr) + if err != nil { + logger.Error("unable to obtain proxy URL", zap.Error(err)) + return nil, err + } // Connection timeout in seconds idleConnTimeout := time.Duration(config.RequestTimeout) * time.Second @@ -172,16 +189,19 @@ func ProxyServerTransport(config *Config) *http.Transport { DisableCompression: true, } - return transport + return transport, nil } -func (c *Conn) newAWSSession(logger *zap.Logger, roleArn string, region string) *session.Session { +func (c *Conn) newAWSSession(logger *zap.Logger, roleArn string, region string) (*session.Session, error) { var s *session.Session var err error if roleArn == "" { - s = getDefaultSession(logger) + s, err = getDefaultSession(logger) + if err != nil { + return s, err + } } else { - stsCreds := getSTSCreds(logger, region, roleArn) + stsCreds, err := getSTSCreds(logger, region, roleArn) s, err = session.NewSession(&aws.Config{ Credentials: stsCreds, @@ -189,32 +209,35 @@ func (c *Conn) newAWSSession(logger *zap.Logger, roleArn string, region string) if err != nil { logger.Error("Error in creating session object : ", zap.Error(err)) - os.Exit(1) + return s, err } } - return s + return s, nil } // getSTSCreds gets STS credentials from regional endpoint. ErrCodeRegionDisabledException is received if the // STS regional endpoint is disabled. In this case STS credentials are fetched from STS primary regional endpoint // in the respective AWS partition. -func getSTSCreds(logger *zap.Logger, region string, roleArn string) *credentials.Credentials { - t := getDefaultSession(logger) +func getSTSCreds(logger *zap.Logger, region string, roleArn string) (*credentials.Credentials, error) { + t, err := getDefaultSession(logger) + if err != nil { + return nil, err + } stsCred := getSTSCredsFromRegionEndpoint(logger, t, region, roleArn) // Make explicit call to fetch credentials. - _, err := stsCred.Get() + _, err = stsCred.Get() if err != nil { if aerr, ok := err.(awserr.Error); ok { + err = nil switch aerr.Code() { case sts.ErrCodeRegionDisabledException: logger.Error("Region : %v - %v", zap.String("region", region), zap.String("error", aerr.Error())) - logger.Info("Credentials for provided RoleARN will be fetched from STS primary region endpoint instead of regional endpoint.") stsCred = getSTSCredsFromPrimaryRegionEndpoint(logger, t, roleArn, region) } } } - return stsCred + return stsCred, err } // getSTSCredsFromRegionEndpoint fetches STS credentials for provided roleARN from regional endpoint. @@ -236,6 +259,7 @@ func getSTSCredsFromRegionEndpoint(logger *zap.Logger, sess *session.Session, re // the respective partition. func getSTSCredsFromPrimaryRegionEndpoint(logger *zap.Logger, t *session.Session, roleArn string, region string) *credentials.Credentials { + logger.Info("Credentials for provided RoleARN being fetched from STS primary region endpoint.") partitionID := getPartition(region) if partitionID == endpoints.AwsPartitionID { return getSTSCredsFromRegionEndpoint(logger, t, endpoints.UsEast1RegionID, roleArn) @@ -260,13 +284,13 @@ func getSTSRegionalEndpoint(r string) string { return e } -func getDefaultSession(logger *zap.Logger) *session.Session { +func getDefaultSession(logger *zap.Logger) (*session.Session, error) { result, serr := session.NewSession() if serr != nil { logger.Error("Error in creating session object : %v\n.", zap.Error(serr)) - os.Exit(1) + return result, serr } - return result + return result, nil } // getPartition return AWS Partition for the provided region. diff --git a/exporter/awsxrayexporter/conn_test.go b/exporter/awsxrayexporter/conn_test.go index c5823711420b..0c19bf3f5923 100644 --- a/exporter/awsxrayexporter/conn_test.go +++ b/exporter/awsxrayexporter/conn_test.go @@ -46,8 +46,8 @@ func (c *mockConn) getEC2Region(s *session.Session) (string, error) { return ec2Region, nil } -func (c *mockConn) newAWSSession(logger *zap.Logger, roleArn string, region string) *session.Session { - return c.sn +func (c *mockConn) newAWSSession(logger *zap.Logger, roleArn string, region string) (*session.Session, error) { + return c.sn, nil } // fetch region value from ec2 meta data service @@ -59,9 +59,10 @@ func TestEC2Session(t *testing.T) { var expectedSession *session.Session expectedSession, _ = session.NewSession() m.sn = expectedSession - cfg, s := GetAWSConfigSession(logger, m, xrayExporterCfg) + cfg, s, err := GetAWSConfigSession(logger, m, xrayExporterCfg) assert.Equal(t, s, expectedSession, "Expect the session object is not overridden") assert.Equal(t, *cfg.Region, ec2Region, "Region value fetched from ec2-metadata service") + assert.Nil(t, err) } // fetch region value from environment variable @@ -77,9 +78,10 @@ func TestRegionEnv(t *testing.T) { var expectedSession *session.Session expectedSession, _ = session.NewSession() m.sn = expectedSession - cfg, s := GetAWSConfigSession(logger, m, xrayExporterCfg) + cfg, s, err := GetAWSConfigSession(logger, m, xrayExporterCfg) assert.Equal(t, s, expectedSession, "Expect the session object is not overridden") assert.Equal(t, *cfg.Region, region, "Region value fetched from environment") + assert.Nil(t, err) } func loadExporterConfig(t *testing.T) *Config { diff --git a/exporter/awsxrayexporter/translator/aws.go b/exporter/awsxrayexporter/translator/aws.go index f24ff7ad8375..4712c9def403 100644 --- a/exporter/awsxrayexporter/translator/aws.go +++ b/exporter/awsxrayexporter/translator/aws.go @@ -22,12 +22,12 @@ import ( // AWS-specific OpenTelemetry attribute names const ( - AwsOperationAttribute = "aws.operation" - AwsAccountAttribute = "aws.account_id" - AwsRegionAttribute = "aws.region" - AwsRequestIDAttribute = "aws.request_id" - AwsQueueURLAttribute = "aws.queue_url" - AwsTableNameAttribute = "aws.table_name" + AWSOperationAttribute = "aws.operation" + AWSAccountAttribute = "aws.account_id" + AWSRegionAttribute = "aws.region" + AWSRequestIDAttribute = "aws.request_id" + AWSQueueURLAttribute = "aws.queue_url" + AWSTableNameAttribute = "aws.table_name" ) // AWSData provides the shape for unmarshalling AWS resource data. @@ -80,13 +80,11 @@ func makeAws(attributes map[string]string, resource *resourcepb.Resource) (map[s ec2 *EC2Metadata ecs *ECSMetadata ebs *BeanstalkMetadata - awsData *AWSData - filtered map[string]string ) if resource == nil { - return attributes, awsData + return attributes, nil } - filtered = make(map[string]string) + filtered := make(map[string]string) for key, value := range resource.Labels { switch key { case CloudProviderAttribute: @@ -113,26 +111,26 @@ func makeAws(attributes map[string]string, resource *resourcepb.Resource) (map[s } for key, value := range attributes { switch key { - case AwsOperationAttribute: + case AWSOperationAttribute: operation = value - case AwsAccountAttribute: + case AWSAccountAttribute: if value != "" { account = value } - case AwsRegionAttribute: + case AWSRegionAttribute: remoteRegion = value - case AwsRequestIDAttribute: + case AWSRequestIDAttribute: requestID = value - case AwsQueueURLAttribute: + case AWSQueueURLAttribute: queueURL = value - case AwsTableNameAttribute: + case AWSTableNameAttribute: tableName = value default: filtered[key] = value } } if cloud != "aws" && cloud != "" { - return filtered, awsData // not AWS so return nil + return filtered, nil // not AWS so return nil } // progress from least specific to most specific origin so most specific ends up as origin // as per X-Ray docs @@ -162,9 +160,9 @@ func makeAws(attributes map[string]string, resource *resourcepb.Resource) (map[s } } if origin == "" { - return filtered, awsData + return filtered, nil } - awsData = &AWSData{ + awsData := &AWSData{ AccountID: account, BeanstalkMetadata: ebs, ECSMetadata: ecs, diff --git a/exporter/awsxrayexporter/translator/aws_test.go b/exporter/awsxrayexporter/translator/aws_test.go index 00b5070d97a3..fe09a055001b 100644 --- a/exporter/awsxrayexporter/translator/aws_test.go +++ b/exporter/awsxrayexporter/translator/aws_test.go @@ -43,12 +43,12 @@ func TestAwsFromEc2Resource(t *testing.T) { assert.NotNil(t, awsData.EC2Metadata) assert.Nil(t, awsData.ECSMetadata) assert.Nil(t, awsData.BeanstalkMetadata) - w := borrow() + w := testWriters.borrow() if err := w.Encode(awsData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, instanceID)) } @@ -81,12 +81,12 @@ func TestAwsFromEcsResource(t *testing.T) { assert.NotNil(t, awsData.EC2Metadata) assert.NotNil(t, awsData.ECSMetadata) assert.Nil(t, awsData.BeanstalkMetadata) - w := borrow() + w := testWriters.borrow() if err := w.Encode(awsData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, containerID)) } @@ -112,12 +112,12 @@ func TestAwsFromBeanstalkResource(t *testing.T) { assert.Nil(t, awsData.EC2Metadata) assert.Nil(t, awsData.ECSMetadata) assert.NotNil(t, awsData.BeanstalkMetadata) - w := borrow() + w := testWriters.borrow() if err := w.Encode(awsData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, deployID)) } @@ -143,10 +143,10 @@ func TestAwsWithAwsSqsResources(t *testing.T) { } queueURL := "https://sqs.use1.amazonaws.com/Meltdown-Alerts" attributes := make(map[string]string) - attributes[AwsOperationAttribute] = "SendMessage" - attributes[AwsAccountAttribute] = "987654321" - attributes[AwsRegionAttribute] = "us-east-2" - attributes[AwsQueueURLAttribute] = queueURL + attributes[AWSOperationAttribute] = "SendMessage" + attributes[AWSAccountAttribute] = "987654321" + attributes[AWSRegionAttribute] = "us-east-2" + attributes[AWSQueueURLAttribute] = queueURL attributes["employee.id"] = "XB477" filtered, awsData := makeAws(attributes, resource) @@ -156,12 +156,12 @@ func TestAwsWithAwsSqsResources(t *testing.T) { assert.NotNil(t, awsData.EC2Metadata) assert.NotNil(t, awsData.ECSMetadata) assert.Nil(t, awsData.BeanstalkMetadata) - w := borrow() + w := testWriters.borrow() if err := w.Encode(awsData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, containerID)) assert.True(t, strings.Contains(jsonStr, queueURL)) } @@ -188,9 +188,9 @@ func TestAwsWithAwsDynamoDbResources(t *testing.T) { } tableName := "WIDGET_TYPES" attributes := make(map[string]string) - attributes[AwsOperationAttribute] = "PutItem" - attributes[AwsRequestIDAttribute] = "75107C82-EC8A-4F75-883F-4440B491B0AB" - attributes[AwsTableNameAttribute] = tableName + attributes[AWSOperationAttribute] = "PutItem" + attributes[AWSRequestIDAttribute] = "75107C82-EC8A-4F75-883F-4440B491B0AB" + attributes[AWSTableNameAttribute] = tableName filtered, awsData := makeAws(attributes, resource) @@ -199,12 +199,12 @@ func TestAwsWithAwsDynamoDbResources(t *testing.T) { assert.NotNil(t, awsData.EC2Metadata) assert.NotNil(t, awsData.ECSMetadata) assert.Nil(t, awsData.BeanstalkMetadata) - w := borrow() + w := testWriters.borrow() if err := w.Encode(awsData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, containerID)) assert.True(t, strings.Contains(jsonStr, tableName)) } diff --git a/exporter/awsxrayexporter/translator/cause.go b/exporter/awsxrayexporter/translator/cause.go index f580b9af0e42..579bcd967f2c 100644 --- a/exporter/awsxrayexporter/translator/cause.go +++ b/exporter/awsxrayexporter/translator/cause.go @@ -50,18 +50,18 @@ type Stack struct { Label string `json:"label,omitempty"` } -func makeCause(status *tracepb.Status, attributes map[string]string) (bool, bool, map[string]string, *CauseData) { +func makeCause(status *tracepb.Status, attributes map[string]string) (isError, isFault bool, + filtered map[string]string, cause *CauseData) { if status.Code == 0 { return false, false, attributes, nil } var ( - filtered = make(map[string]string) - cause *CauseData message = status.GetMessage() errorKind string errorObject string ) + filtered = make(map[string]string) for key, value := range attributes { switch key { case ErrorKindAttribute: @@ -100,9 +100,13 @@ func makeCause(status *tracepb.Status, attributes map[string]string) (bool, bool } if isClientError(status.Code) { - return true, false, filtered, cause + isError = true + isFault = false + } else { + isError = false + isFault = true } - return false, true, filtered, cause + return isError, isFault, filtered, cause } func isClientError(code int32) bool { diff --git a/exporter/awsxrayexporter/translator/cause_test.go b/exporter/awsxrayexporter/translator/cause_test.go index 6e410447912a..7ce99a85091a 100644 --- a/exporter/awsxrayexporter/translator/cause_test.go +++ b/exporter/awsxrayexporter/translator/cause_test.go @@ -40,12 +40,12 @@ func TestCauseWithStatusMessage(t *testing.T) { assert.True(t, isFault) assert.NotNil(t, filtered) assert.NotNil(t, cause) - w := borrow() + w := testWriters.borrow() if err := w.Encode(cause); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, errorMsg)) } @@ -65,12 +65,12 @@ func TestCauseWithHttpStatusMessage(t *testing.T) { assert.True(t, isFault) assert.NotNil(t, filtered) assert.NotNil(t, cause) - w := borrow() + w := testWriters.borrow() if err := w.Encode(cause); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, errorMsg)) } @@ -90,12 +90,12 @@ func TestCauseWithErrorMessage(t *testing.T) { assert.True(t, isFault) assert.NotNil(t, filtered) assert.NotNil(t, cause) - w := borrow() + w := testWriters.borrow() if err := w.Encode(cause); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, errorMsg)) } diff --git a/exporter/awsxrayexporter/translator/http_test.go b/exporter/awsxrayexporter/translator/http_test.go index 5f4dfb32190b..96cc52c05170 100644 --- a/exporter/awsxrayexporter/translator/http_test.go +++ b/exporter/awsxrayexporter/translator/http_test.go @@ -37,12 +37,12 @@ func TestClientSpanWithUrlAttribute(t *testing.T) { assert.NotNil(t, httpData) assert.NotNil(t, filtered) - w := borrow() + w := testWriters.borrow() if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } @@ -61,12 +61,12 @@ func TestClientSpanWithSchemeHostTargetAttributes(t *testing.T) { assert.NotNil(t, httpData) assert.NotNil(t, filtered) - w := borrow() + w := testWriters.borrow() if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } @@ -86,12 +86,12 @@ func TestClientSpanWithPeerAttributes(t *testing.T) { assert.NotNil(t, httpData) assert.NotNil(t, filtered) - w := borrow() + w := testWriters.borrow() if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, "http://kb234.example.com:8080/users/junit")) } @@ -108,12 +108,12 @@ func TestClientSpanWithPeerIp4Attributes(t *testing.T) { filtered, httpData := makeHTTP(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) - w := borrow() + w := testWriters.borrow() if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, "http://10.8.17.36:8080/users/junit")) } @@ -130,12 +130,12 @@ func TestClientSpanWithPeerIp6Attributes(t *testing.T) { filtered, httpData := makeHTTP(span) assert.NotNil(t, httpData) assert.NotNil(t, filtered) - w := borrow() + w := testWriters.borrow() if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, "https://2001:db8:85a3::8a2e:370:7334/users/junit")) } @@ -153,12 +153,12 @@ func TestServerSpanWithUrlAttribute(t *testing.T) { assert.NotNil(t, httpData) assert.NotNil(t, filtered) - w := borrow() + w := testWriters.borrow() if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } @@ -178,12 +178,12 @@ func TestServerSpanWithSchemeHostTargetAttributes(t *testing.T) { assert.NotNil(t, httpData) assert.NotNil(t, filtered) - w := borrow() + w := testWriters.borrow() if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } @@ -204,12 +204,12 @@ func TestServerSpanWithSchemeServernamePortTargetAttributes(t *testing.T) { assert.NotNil(t, httpData) assert.NotNil(t, filtered) - w := borrow() + w := testWriters.borrow() if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, "https://api.example.com/users/junit")) } @@ -232,12 +232,12 @@ func TestServerSpanWithSchemeNamePortTargetAttributes(t *testing.T) { assert.NotNil(t, httpData) assert.NotNil(t, filtered) - w := borrow() + w := testWriters.borrow() if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, "http://kb234.example.com:8080/users/junit")) } @@ -252,12 +252,12 @@ func TestHttpStatusFromSpanStatus(t *testing.T) { assert.NotNil(t, httpData) assert.NotNil(t, filtered) - w := borrow() + w := testWriters.borrow() if err := w.Encode(httpData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, "200")) } diff --git a/exporter/awsxrayexporter/translator/segment.go b/exporter/awsxrayexporter/translator/segment.go index 1f605d9ade42..2eda27aa5fff 100644 --- a/exporter/awsxrayexporter/translator/segment.go +++ b/exporter/awsxrayexporter/translator/segment.go @@ -142,15 +142,19 @@ type Segment struct { Metadata map[string]map[string]interface{} `json:"metadata,omitempty"` } +var ( + writers = newWriterPool(2048) +) + // MakeSegmentDocumentString converts an Otel Span to an X-Ray Segment and then serialzies to JSON func MakeSegmentDocumentString(name string, span *tracepb.Span, userAttribute string) (string, error) { segment := MakeSegment(name, span, userAttribute) - w := borrow() + w := writers.borrow() if err := w.Encode(segment); err != nil { return "", err } jsonStr := w.String() - release(w) + writers.release(w) return jsonStr, nil } diff --git a/exporter/awsxrayexporter/translator/segment_test.go b/exporter/awsxrayexporter/translator/segment_test.go index 33f41df774dd..4f7d6bb747fb 100644 --- a/exporter/awsxrayexporter/translator/segment_test.go +++ b/exporter/awsxrayexporter/translator/segment_test.go @@ -28,6 +28,10 @@ import ( "github.com/stretchr/testify/assert" ) +var ( + testWriters = newWriterPool(2048) +) + func TestClientSpanWithGrpcComponent(t *testing.T) { spanName := "platformapi.widgets.searchWidgets" attributes := make(map[string]interface{}) @@ -61,9 +65,9 @@ func TestClientSpanWithAwsSdkClient(t *testing.T) { attributes[HostAttribute] = "dynamodb.us-east-1.amazonaws.com" attributes[TargetAttribute] = "/" attributes[UserAgentAttribute] = "aws-sdk-java/1.11.613 Windows_10/10.0 OpenJDK_64-Bit_server_VM/11.0.4+11-LTS" - attributes[AwsOperationAttribute] = "GetItem" - attributes[AwsRequestIDAttribute] = "18BO1FEPJSSAOGNJEDPTPCMIU7VV4KQNSO5AEMVJF66Q9ASUAAJG" - attributes[AwsTableNameAttribute] = "otel-dev-Testing" + attributes[AWSOperationAttribute] = "GetItem" + attributes[AWSRequestIDAttribute] = "18BO1FEPJSSAOGNJEDPTPCMIU7VV4KQNSO5AEMVJF66Q9ASUAAJG" + attributes[AWSTableNameAttribute] = "otel-dev-Testing" attributes[userAttribute] = user labels := constructDefaultResourceLabels() span := constructClientSpan(parentSpanID, spanName, 0, "OK", attributes, labels) @@ -102,12 +106,12 @@ func TestServerSpanWithInternalServerError(t *testing.T) { assert.NotNil(t, segment.Cause) assert.Equal(t, spanName, segment.Name) assert.True(t, segment.Fault) - w := borrow() + w := testWriters.borrow() if err := w.Encode(segment); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, spanName)) assert.True(t, strings.Contains(jsonStr, errorMessage)) assert.False(t, strings.Contains(jsonStr, userAttribute)) @@ -141,12 +145,12 @@ func TestClientSpanWithDbComponent(t *testing.T) { assert.Equal(t, spanName, segment.Name) assert.False(t, segment.Fault) assert.False(t, segment.Error) - w := borrow() + w := testWriters.borrow() if err := w.Encode(segment); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, spanName)) assert.True(t, strings.Contains(jsonStr, enterpriseAppID)) } @@ -179,12 +183,12 @@ func TestClientSpanWithBlankUserAttribute(t *testing.T) { assert.Equal(t, spanName, segment.Name) assert.False(t, segment.Fault) assert.False(t, segment.Error) - w := borrow() + w := testWriters.borrow() if err := w.Encode(segment); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, spanName)) assert.True(t, strings.Contains(jsonStr, enterpriseAppID)) } diff --git a/exporter/awsxrayexporter/translator/service_test.go b/exporter/awsxrayexporter/translator/service_test.go index 0a6fb6f87462..316cb16aa9ce 100644 --- a/exporter/awsxrayexporter/translator/service_test.go +++ b/exporter/awsxrayexporter/translator/service_test.go @@ -31,12 +31,12 @@ func TestServiceFromResource(t *testing.T) { service := makeService(resource) assert.NotNil(t, service) - w := borrow() + w := testWriters.borrow() if err := w.Encode(service); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, "1.1.12")) } diff --git a/exporter/awsxrayexporter/translator/sql_test.go b/exporter/awsxrayexporter/translator/sql_test.go index 234ef9a27782..04d2117011a0 100644 --- a/exporter/awsxrayexporter/translator/sql_test.go +++ b/exporter/awsxrayexporter/translator/sql_test.go @@ -36,12 +36,12 @@ func TestClientSpanWithStatementAttribute(t *testing.T) { assert.NotNil(t, filtered) assert.NotNil(t, sqlData) - w := borrow() + w := testWriters.borrow() if err := w.Encode(sqlData); err != nil { assert.Fail(t, "invalid json") } jsonStr := w.String() - release(w) + testWriters.release(w) assert.True(t, strings.Contains(jsonStr, "mysql://db.example.com:3306/customers")) } diff --git a/exporter/awsxrayexporter/translator/writer_pool.go b/exporter/awsxrayexporter/translator/writer_pool.go index d57e2c510c06..811b69db4b50 100644 --- a/exporter/awsxrayexporter/translator/writer_pool.go +++ b/exporter/awsxrayexporter/translator/writer_pool.go @@ -20,32 +20,24 @@ import ( "sync" ) +const ( + maxBufSize = 65536 +) + type writer struct { buffer *bytes.Buffer encoder *json.Encoder } -func (w *writer) Reset() { - w.buffer.Reset() +type writerPool struct { + pool *sync.Pool } -func (w *writer) Encode(v interface{}) error { - return w.encoder.Encode(v) -} - -func (w *writer) String() string { - return w.buffer.String() -} - -const ( - maxBufSize = 256e3 -) - -var ( - writers = &sync.Pool{ +func newWriterPool(size int) *writerPool { + pool := &sync.Pool{ New: func() interface{} { var ( - buffer = bytes.NewBuffer(make([]byte, 0, 8192)) + buffer = bytes.NewBuffer(make([]byte, 0, size)) encoder = json.NewEncoder(buffer) ) @@ -55,15 +47,28 @@ var ( } }, } -) + return &writerPool{pool: pool} +} + +func (w *writer) Reset() { + w.buffer.Reset() +} + +func (w *writer) Encode(v interface{}) error { + return w.encoder.Encode(v) +} + +func (w *writer) String() string { + return w.buffer.String() +} -func borrow() *writer { - return writers.Get().(*writer) +func (writerPool *writerPool) borrow() *writer { + return writerPool.pool.Get().(*writer) } -func release(w *writer) { +func (writerPool *writerPool) release(w *writer) { if w.buffer.Cap() < maxBufSize { w.buffer.Reset() - writers.Put(w) + writerPool.pool.Put(w) } } diff --git a/exporter/awsxrayexporter/translator/writer_pool_test.go b/exporter/awsxrayexporter/translator/writer_pool_test.go new file mode 100644 index 000000000000..83d4384eb1d4 --- /dev/null +++ b/exporter/awsxrayexporter/translator/writer_pool_test.go @@ -0,0 +1,80 @@ +// 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 translator + +import ( + "bytes" + "encoding/json" + "testing" + + tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + "github.com/stretchr/testify/assert" + "go.uber.org/zap" +) + +func TestWriterPoolBasic(t *testing.T) { + size := 1024 + wp := newWriterPool(size) + span := constructWriterPoolSpan() + w := wp.borrow() + assert.NotNil(t, w) + assert.NotNil(t, w.buffer) + assert.NotNil(t, w.encoder) + assert.Equal(t, size, w.buffer.Cap()) + assert.Equal(t, 0, w.buffer.Len()) + if err := w.Encode(span); err != nil { + assert.Fail(t, "invalid json") + } + jsonStr := w.String() + assert.Equal(t, len(jsonStr), w.buffer.Len()) + wp.release(w) +} + +func BenchmarkWithoutPool(b *testing.B) { + logger := zap.NewNop() + for i := 0; i < b.N; i++ { + b.StopTimer() + span := constructWriterPoolSpan() + b.StartTimer() + buffer := bytes.NewBuffer(make([]byte, 0, 2048)) + encoder := json.NewEncoder(buffer) + encoder.Encode(span) + logger.Info(buffer.String()) + } +} + +func BenchmarkWithPool(b *testing.B) { + logger := zap.NewNop() + wp := newWriterPool(2048) + for i := 0; i < b.N; i++ { + b.StopTimer() + span := constructWriterPoolSpan() + b.StartTimer() + w := wp.borrow() + w.Encode(span) + logger.Info(w.String()) + } +} + +func constructWriterPoolSpan() *tracepb.Span { + attributes := make(map[string]interface{}) + attributes[ComponentAttribute] = HTTPComponentType + attributes[MethodAttribute] = "GET" + attributes[URLAttribute] = "https://api.example.com/users/junit" + attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" + attributes[ClientIPAttribute] = "192.168.15.32" + attributes[StatusCodeAttribute] = 200 + return constructHTTPServerSpan(attributes) +} From 34442e6e3c78f41825773ea577d244a3a34b794a Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Thu, 21 Nov 2019 14:32:10 -0600 Subject: [PATCH 47/59] switch user attribute name to constant --- exporter/awsxrayexporter/README.md | 5 +- exporter/awsxrayexporter/awsxray.go | 8 +-- exporter/awsxrayexporter/config.go | 2 - exporter/awsxrayexporter/config_test.go | 1 - exporter/awsxrayexporter/factory.go | 1 - exporter/awsxrayexporter/testdata/config.yaml | 1 - .../awsxrayexporter/translator/segment.go | 17 +++--- .../translator/segment_test.go | 57 +++---------------- 8 files changed, 21 insertions(+), 71 deletions(-) diff --git a/exporter/awsxrayexporter/README.md b/exporter/awsxrayexporter/README.md index fb545fc52137..821a2f447150 100644 --- a/exporter/awsxrayexporter/README.md +++ b/exporter/awsxrayexporter/README.md @@ -39,7 +39,8 @@ by the Span Resource object. X-Ray uses this data to generate inferred segments ## Exporter Configuration -The following exporter configuration parameters are supported. +The following exporter configuration parameters are supported. They mirror and have the same affect as the +comparable AWS X-Ray Daemon configuration values. | Name | Description | Default | | :---------------- | :--------------------------------------------------------------------- | ------- | @@ -52,8 +53,6 @@ The following exporter configuration parameters are supported. | `local_mode` | Local mode to skip EC2 instance metadata check. | false | | `resource_arn` | Amazon Resource Name (ARN) of the AWS resource running the collector. | | | `role_arn` | IAM role to upload segments to a different account. | | -| `user_attribute` | Span attribute name which holds the originating user's login. | | - ## AWS Credential Configuration diff --git a/exporter/awsxrayexporter/awsxray.go b/exporter/awsxrayexporter/awsxray.go index ef528d1afb86..ffada0a1eb0e 100644 --- a/exporter/awsxrayexporter/awsxray.go +++ b/exporter/awsxrayexporter/awsxray.go @@ -32,7 +32,6 @@ import ( func NewTraceExporter(config configmodels.Exporter, logger *zap.Logger, cn connAttr) (exporter.TraceExporter, error) { typeLog := zap.String("type", config.Type()) nameLog := zap.String("name", config.Name()) - userAttribute := config.(*Config).UserAttribute awsConfig, session, err := GetAWSConfigSession(logger, cn, config.(*Config)) if err != nil { return nil, err @@ -42,7 +41,7 @@ func NewTraceExporter(config configmodels.Exporter, logger *zap.Logger, cn connA config, func(ctx context.Context, td consumerdata.TraceData) (int, error) { logger.Debug("TraceExporter", typeLog, nameLog, zap.Int("#spans", len(td.Spans))) - droppedSpans, input := assembleRequest(userAttribute, td, logger) + droppedSpans, input := assembleRequest(td, logger) logger.Debug("request: " + input.String()) output, err := xrayClient.PutTraceSegments(input) logger.Debug("response: " + output.String()) @@ -57,8 +56,7 @@ func NewTraceExporter(config configmodels.Exporter, logger *zap.Logger, cn connA ) } -func assembleRequest(userAttribute string, td consumerdata.TraceData, - logger *zap.Logger) (int, *xray.PutTraceSegmentsInput) { +func assembleRequest(td consumerdata.TraceData, logger *zap.Logger) (int, *xray.PutTraceSegmentsInput) { documents := make([]*string, len(td.Spans)) droppedSpans := int(0) for i, span := range td.Spans { @@ -67,7 +65,7 @@ func assembleRequest(userAttribute string, td consumerdata.TraceData, continue } spanName := span.Name.Value - jsonStr, err := translator.MakeSegmentDocumentString(spanName, span, userAttribute) + jsonStr, err := translator.MakeSegmentDocumentString(spanName, span) if err != nil { droppedSpans++ logger.Warn("Unable to convert span", zap.Error(err)) diff --git a/exporter/awsxrayexporter/config.go b/exporter/awsxrayexporter/config.go index 9373acf0263f..47f59924a987 100644 --- a/exporter/awsxrayexporter/config.go +++ b/exporter/awsxrayexporter/config.go @@ -37,6 +37,4 @@ type Config struct { ResourceARN string `mapstructure:"resource_arn"` // IAM role to upload segments to a different account. RoleARN string `mapstructure:"role_arn"` - // Span attribute name which holds the originating user's login. - UserAttribute string `mapstructure:"user_attribute"` } diff --git a/exporter/awsxrayexporter/config_test.go b/exporter/awsxrayexporter/config_test.go index e03c7b2f50af..f7809fee1826 100644 --- a/exporter/awsxrayexporter/config_test.go +++ b/exporter/awsxrayexporter/config_test.go @@ -56,6 +56,5 @@ func TestLoadConfig(t *testing.T) { LocalMode: false, ResourceARN: "arn:aws:ec2:us-east1:123456789:instance/i-293hiuhe0u", RoleARN: "arn:aws:iam::123456789:role/monitoring-EKS-NodeInstanceRole", - UserAttribute: "user.id", }) } diff --git a/exporter/awsxrayexporter/factory.go b/exporter/awsxrayexporter/factory.go index 149a87a3f50d..710157c16b95 100644 --- a/exporter/awsxrayexporter/factory.go +++ b/exporter/awsxrayexporter/factory.go @@ -51,7 +51,6 @@ func (f *Factory) CreateDefaultConfig() configmodels.Exporter { LocalMode: false, ResourceARN: "", RoleARN: "", - UserAttribute: "", } } diff --git a/exporter/awsxrayexporter/testdata/config.yaml b/exporter/awsxrayexporter/testdata/config.yaml index fb52abc20175..f820c387ddc0 100644 --- a/exporter/awsxrayexporter/testdata/config.yaml +++ b/exporter/awsxrayexporter/testdata/config.yaml @@ -10,7 +10,6 @@ exporters: region: eu-west-1 resource_arn: "arn:aws:ec2:us-east1:123456789:instance/i-293hiuhe0u" role_arn: "arn:aws:iam::123456789:role/monitoring-EKS-NodeInstanceRole" - user_attribute: "user.id" awsxray/disabled: # will be ignored disabled: true diff --git a/exporter/awsxrayexporter/translator/segment.go b/exporter/awsxrayexporter/translator/segment.go index 2eda27aa5fff..758baa48c3b4 100644 --- a/exporter/awsxrayexporter/translator/segment.go +++ b/exporter/awsxrayexporter/translator/segment.go @@ -38,6 +38,7 @@ const ( PeerIpv6Attribute = "peer.ipv6" PeerPortAttribute = "peer.port" PeerServiceAttribute = "peer.service" + IAMUserAttribute = "iam.user" ) // OpenTelemetry Semantic Convention values for component attribute values. @@ -147,8 +148,8 @@ var ( ) // MakeSegmentDocumentString converts an Otel Span to an X-Ray Segment and then serialzies to JSON -func MakeSegmentDocumentString(name string, span *tracepb.Span, userAttribute string) (string, error) { - segment := MakeSegment(name, span, userAttribute) +func MakeSegmentDocumentString(name string, span *tracepb.Span) (string, error) { + segment := MakeSegment(name, span) w := writers.borrow() if err := w.Encode(segment); err != nil { return "", err @@ -159,7 +160,7 @@ func MakeSegmentDocumentString(name string, span *tracepb.Span, userAttribute st } // MakeSegment converts an Otel Span to an X-Ray Segment -func MakeSegment(name string, span *tracepb.Span, userAttribute string) Segment { +func MakeSegment(name string, span *tracepb.Span) Segment { var ( traceID = convertToAmazonTraceID(span.TraceId) startTime = timestampToFloatSeconds(span.StartTime, span.StartTime) @@ -171,7 +172,7 @@ func MakeSegment(name string, span *tracepb.Span, userAttribute string) Segment awsfiltered, aws = makeAws(causefiltered, span.Resource) service = makeService(span.Resource) sqlfiltered, sql = makeSQL(awsfiltered) - user, annotations = makeAnnotations(sqlfiltered, userAttribute) + user, annotations = makeAnnotations(sqlfiltered) namespace string ) @@ -318,16 +319,14 @@ func mergeAnnotations(dest map[string]interface{}, src map[string]string) { } } -func makeAnnotations(attributes map[string]string, userAttribute string) (string, map[string]interface{}) { +func makeAnnotations(attributes map[string]string) (string, map[string]interface{}) { var ( result = map[string]interface{}{} user string ) - if userAttribute != "" { - user = attributes[userAttribute] - delete(attributes, userAttribute) - } + user = attributes[IAMUserAttribute] + delete(attributes, IAMUserAttribute) delete(attributes, ComponentAttribute) mergeAnnotations(result, attributes) diff --git a/exporter/awsxrayexporter/translator/segment_test.go b/exporter/awsxrayexporter/translator/segment_test.go index 4f7d6bb747fb..c52125bf937f 100644 --- a/exporter/awsxrayexporter/translator/segment_test.go +++ b/exporter/awsxrayexporter/translator/segment_test.go @@ -46,7 +46,7 @@ func TestClientSpanWithGrpcComponent(t *testing.T) { timeEvents := constructTimedEventsWithSentMessageEvent(span.StartTime) span.TimeEvents = &timeEvents - jsonStr, err := MakeSegmentDocumentString(spanName, span, "user.id") + jsonStr, err := MakeSegmentDocumentString(spanName, span) assert.NotNil(t, jsonStr) assert.Nil(t, err) @@ -56,8 +56,7 @@ func TestClientSpanWithGrpcComponent(t *testing.T) { func TestClientSpanWithAwsSdkClient(t *testing.T) { spanName := "AmazonDynamoDB.getItem" parentSpanID := NewSegmentID() - userAttribute := "originating.user" - user := "testing" + user := "testingT" attributes := make(map[string]interface{}) attributes[ComponentAttribute] = HTTPComponentType attributes[MethodAttribute] = "POST" @@ -68,11 +67,11 @@ func TestClientSpanWithAwsSdkClient(t *testing.T) { attributes[AWSOperationAttribute] = "GetItem" attributes[AWSRequestIDAttribute] = "18BO1FEPJSSAOGNJEDPTPCMIU7VV4KQNSO5AEMVJF66Q9ASUAAJG" attributes[AWSTableNameAttribute] = "otel-dev-Testing" - attributes[userAttribute] = user + attributes[IAMUserAttribute] = user labels := constructDefaultResourceLabels() span := constructClientSpan(parentSpanID, spanName, 0, "OK", attributes, labels) - jsonStr, err := MakeSegmentDocumentString(spanName, span, userAttribute) + jsonStr, err := MakeSegmentDocumentString(spanName, span) assert.NotNil(t, jsonStr) assert.Nil(t, err) @@ -84,7 +83,6 @@ func TestClientSpanWithAwsSdkClient(t *testing.T) { func TestServerSpanWithInternalServerError(t *testing.T) { spanName := "/api/locations" parentSpanID := NewSegmentID() - userAttribute := "originating.user" user := "testing" errorMessage := "java.lang.NullPointerException" attributes := make(map[string]interface{}) @@ -93,14 +91,14 @@ func TestServerSpanWithInternalServerError(t *testing.T) { attributes[URLAttribute] = "https://api.example.org/api/locations" attributes[TargetAttribute] = "/api/locations" attributes[StatusCodeAttribute] = 500 - attributes[userAttribute] = user + attributes[IAMUserAttribute] = user attributes[ErrorKindAttribute] = "java.lang.NullPointerException" labels := constructDefaultResourceLabels() span := constructServerSpan(parentSpanID, spanName, tracetranslator.OCInternal, errorMessage, attributes, labels) timeEvents := constructTimedEventsWithSentMessageEvent(span.StartTime) span.TimeEvents = &timeEvents - segment := MakeSegment(spanName, span, "originating.user") + segment := MakeSegment(spanName, span) assert.NotNil(t, segment) assert.NotNil(t, segment.Cause) @@ -114,7 +112,6 @@ func TestServerSpanWithInternalServerError(t *testing.T) { testWriters.release(w) assert.True(t, strings.Contains(jsonStr, spanName)) assert.True(t, strings.Contains(jsonStr, errorMessage)) - assert.False(t, strings.Contains(jsonStr, userAttribute)) } func TestClientSpanWithDbComponent(t *testing.T) { @@ -133,45 +130,7 @@ func TestClientSpanWithDbComponent(t *testing.T) { labels := constructDefaultResourceLabels() span := constructClientSpan(nil, spanName, 0, "OK", attributes, labels) - segment := MakeSegment(spanName, span, "originating.user") - - assert.NotNil(t, segment) - assert.NotNil(t, segment.SQL) - assert.NotNil(t, segment.Service) - assert.NotNil(t, segment.AWS) - assert.NotNil(t, segment.Annotations) - assert.Nil(t, segment.Cause) - assert.Nil(t, segment.HTTP) - assert.Equal(t, spanName, segment.Name) - assert.False(t, segment.Fault) - assert.False(t, segment.Error) - w := testWriters.borrow() - if err := w.Encode(segment); err != nil { - assert.Fail(t, "invalid json") - } - jsonStr := w.String() - testWriters.release(w) - assert.True(t, strings.Contains(jsonStr, spanName)) - assert.True(t, strings.Contains(jsonStr, enterpriseAppID)) -} - -func TestClientSpanWithBlankUserAttribute(t *testing.T) { - spanName := "call update_user_preference( ?, ?, ? )" - enterpriseAppID := "25F2E73B-4769-4C79-9DF3-7EBE85D571EA" - attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = DbComponentType - attributes[DbTypeAttribute] = "sql" - attributes[DbInstanceAttribute] = "customers" - attributes[DbStatementAttribute] = spanName - attributes[DbUserAttribute] = "userprefsvc" - attributes[PeerAddressAttribute] = "mysql://db.dev.example.com:3306" - attributes[PeerHostAttribute] = "db.dev.example.com" - attributes[PeerPortAttribute] = "3306" - attributes["enterprise.app.id"] = enterpriseAppID - labels := constructDefaultResourceLabels() - span := constructClientSpan(nil, spanName, 0, "OK", attributes, labels) - - segment := MakeSegment(spanName, span, "") + segment := MakeSegment(spanName, span) assert.NotNil(t, segment) assert.NotNil(t, segment.SQL) @@ -208,7 +167,7 @@ func TestSpanWithInvalidTraceId(t *testing.T) { span.TimeEvents = &timeEvents span.TraceId[0] = 0x11 - jsonStr, err := MakeSegmentDocumentString(spanName, span, "user.id") + jsonStr, err := MakeSegmentDocumentString(spanName, span) assert.NotNil(t, jsonStr) assert.Nil(t, err) From 2b6a5135b4e591e3e83f4803fc075cad32a6c700 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Tue, 26 Nov 2019 08:02:42 -0600 Subject: [PATCH 48/59] fixed additional code review issues --- exporter/awsxrayexporter/config.go | 4 +++- exporter/awsxrayexporter/config_test.go | 21 +++++++++++---------- exporter/awsxrayexporter/conn.go | 6 +++--- exporter/awsxrayexporter/factory.go | 19 ++++++++++--------- 4 files changed, 27 insertions(+), 23 deletions(-) diff --git a/exporter/awsxrayexporter/config.go b/exporter/awsxrayexporter/config.go index 47f59924a987..657544ca8b37 100644 --- a/exporter/awsxrayexporter/config.go +++ b/exporter/awsxrayexporter/config.go @@ -24,7 +24,9 @@ type Config struct { // X-Ray service endpoint to which the collector sends segment documents. Endpoint string `mapstructure:"endpoint"` // Number of seconds before timing out a request. - RequestTimeout int `mapstructure:"request_timeout"` + RequestTimeoutSeconds int `mapstructure:"request_timeout_seconds"` + // Maximum number of retries before abandoning an attempt to post data. + MaxRetries int `mapstructure:"max_retries"` // Enable or disable TLS certificate verification. NoVerifySSL bool `mapstructure:"no_verify_ssl"` // Upload segments to AWS X-Ray through a proxy. diff --git a/exporter/awsxrayexporter/config_test.go b/exporter/awsxrayexporter/config_test.go index f7809fee1826..6acb6be996a5 100644 --- a/exporter/awsxrayexporter/config_test.go +++ b/exporter/awsxrayexporter/config_test.go @@ -46,15 +46,16 @@ func TestLoadConfig(t *testing.T) { r1 := cfg.Exporters["awsxray/customname"].(*Config) assert.Equal(t, r1, &Config{ - ExporterSettings: configmodels.ExporterSettings{TypeVal: typeStr, NameVal: "awsxray/customname"}, - Concurrency: 8, - Endpoint: "", - RequestTimeout: 30, - NoVerifySSL: false, - ProxyAddress: "", - Region: "eu-west-1", - LocalMode: false, - ResourceARN: "arn:aws:ec2:us-east1:123456789:instance/i-293hiuhe0u", - RoleARN: "arn:aws:iam::123456789:role/monitoring-EKS-NodeInstanceRole", + ExporterSettings: configmodels.ExporterSettings{TypeVal: typeStr, NameVal: "awsxray/customname"}, + Concurrency: 8, + Endpoint: "", + RequestTimeoutSeconds: 30, + MaxRetries: 2, + NoVerifySSL: false, + ProxyAddress: "", + Region: "eu-west-1", + LocalMode: false, + ResourceARN: "arn:aws:ec2:us-east1:123456789:instance/i-293hiuhe0u", + RoleARN: "arn:aws:iam::123456789:role/monitoring-EKS-NodeInstanceRole", }) } diff --git a/exporter/awsxrayexporter/conn.go b/exporter/awsxrayexporter/conn.go index c31dabe673fa..1f3cf1c49caf 100644 --- a/exporter/awsxrayexporter/conn.go +++ b/exporter/awsxrayexporter/conn.go @@ -114,7 +114,7 @@ func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *Config) (*aws.Con var s *session.Session var err error var awsRegion string - http, err := newHTTPClient(logger, cfg.Concurrency, cfg.RequestTimeout, cfg.NoVerifySSL, cfg.ProxyAddress) + http, err := newHTTPClient(logger, cfg.Concurrency, cfg.RequestTimeoutSeconds, cfg.NoVerifySSL, cfg.ProxyAddress) if err != nil { logger.Error("unable to obtain proxy URL", zap.Error(err)) return nil, nil, err @@ -152,7 +152,7 @@ func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *Config) (*aws.Con config := &aws.Config{ Region: aws.String(awsRegion), DisableParamValidation: aws.Bool(true), - MaxRetries: aws.Int(2), + MaxRetries: aws.Int(cfg.MaxRetries), Endpoint: aws.String(cfg.Endpoint), HTTPClient: http, } @@ -173,7 +173,7 @@ func ProxyServerTransport(logger *zap.Logger, config *Config) (*http.Transport, } // Connection timeout in seconds - idleConnTimeout := time.Duration(config.RequestTimeout) * time.Second + idleConnTimeout := time.Duration(config.RequestTimeoutSeconds) * time.Second transport := &http.Transport{ MaxIdleConns: config.Concurrency, diff --git a/exporter/awsxrayexporter/factory.go b/exporter/awsxrayexporter/factory.go index 710157c16b95..b17ee3b869a5 100644 --- a/exporter/awsxrayexporter/factory.go +++ b/exporter/awsxrayexporter/factory.go @@ -42,15 +42,16 @@ func (f *Factory) CreateDefaultConfig() configmodels.Exporter { TypeVal: typeStr, NameVal: typeStr, }, - Concurrency: 8, - Endpoint: "", - RequestTimeout: 30, - NoVerifySSL: false, - ProxyAddress: "", - Region: "", - LocalMode: false, - ResourceARN: "", - RoleARN: "", + Concurrency: 8, + Endpoint: "", + RequestTimeoutSeconds: 30, + MaxRetries: 2, + NoVerifySSL: false, + ProxyAddress: "", + Region: "", + LocalMode: false, + ResourceARN: "", + RoleARN: "", } } From 30566de39656e952db388059e896cb00b481fa7f Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Wed, 27 Nov 2019 13:14:23 -0600 Subject: [PATCH 49/59] fixed additional code review issues --- exporter/awsxrayexporter/README.md | 1 + exporter/awsxrayexporter/config.go | 2 +- exporter/awsxrayexporter/config_test.go | 2 +- exporter/awsxrayexporter/conn.go | 22 +++++++++++----------- exporter/awsxrayexporter/factory.go | 2 +- 5 files changed, 15 insertions(+), 14 deletions(-) diff --git a/exporter/awsxrayexporter/README.md b/exporter/awsxrayexporter/README.md index 821a2f447150..e291f62addf8 100644 --- a/exporter/awsxrayexporter/README.md +++ b/exporter/awsxrayexporter/README.md @@ -47,6 +47,7 @@ comparable AWS X-Ray Daemon configuration values. | `num_workers` | Maximum number of concurrent calls to AWS X-Ray to upload documents. | 8 | | `endpoint` | Optionally override the default X-Ray service endpoint. | | | `request_timeout` | Number of seconds before timing out a request. | 30 | +| `max_retries` | Maximun number of attempts to post a batch before failing. | 2 | | `no_verify_ssl` | Enable or disable TLS certificate verification. | false | | `proxy_address` | Upload segments to AWS X-Ray through a proxy. | | | `region` | Send segments to AWS X-Ray service in a specific region. | | diff --git a/exporter/awsxrayexporter/config.go b/exporter/awsxrayexporter/config.go index 657544ca8b37..e7839bfb622e 100644 --- a/exporter/awsxrayexporter/config.go +++ b/exporter/awsxrayexporter/config.go @@ -20,7 +20,7 @@ import "github.com/open-telemetry/opentelemetry-collector/config/configmodels" type Config struct { configmodels.ExporterSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct. // Maximum number of concurrent calls to AWS X-Ray to upload documents. - Concurrency int `mapstructure:"num_workers"` + NumberOfWorkers int `mapstructure:"num_workers"` // X-Ray service endpoint to which the collector sends segment documents. Endpoint string `mapstructure:"endpoint"` // Number of seconds before timing out a request. diff --git a/exporter/awsxrayexporter/config_test.go b/exporter/awsxrayexporter/config_test.go index 6acb6be996a5..47fcc32b78c3 100644 --- a/exporter/awsxrayexporter/config_test.go +++ b/exporter/awsxrayexporter/config_test.go @@ -47,7 +47,7 @@ func TestLoadConfig(t *testing.T) { assert.Equal(t, r1, &Config{ ExporterSettings: configmodels.ExporterSettings{TypeVal: typeStr, NameVal: "awsxray/customname"}, - Concurrency: 8, + NumberOfWorkers: 8, Endpoint: "", RequestTimeoutSeconds: 30, MaxRetries: 2, diff --git a/exporter/awsxrayexporter/conn.go b/exporter/awsxrayexporter/conn.go index 1f3cf1c49caf..1b46c36d4c54 100644 --- a/exporter/awsxrayexporter/conn.go +++ b/exporter/awsxrayexporter/conn.go @@ -114,7 +114,7 @@ func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *Config) (*aws.Con var s *session.Session var err error var awsRegion string - http, err := newHTTPClient(logger, cfg.Concurrency, cfg.RequestTimeoutSeconds, cfg.NoVerifySSL, cfg.ProxyAddress) + http, err := newHTTPClient(logger, cfg.NumberOfWorkers, cfg.RequestTimeoutSeconds, cfg.NoVerifySSL, cfg.ProxyAddress) if err != nil { logger.Error("unable to obtain proxy URL", zap.Error(err)) return nil, nil, err @@ -122,20 +122,20 @@ func GetAWSConfigSession(logger *zap.Logger, cn connAttr, cfg *Config) (*aws.Con regionEnv := os.Getenv("AWS_REGION") if cfg.Region == "" && regionEnv != "" { awsRegion = regionEnv - logger.Debug("Fetch region %v from environment variables", zap.String("region", awsRegion)) + logger.Debug("Fetch region from environment variables", zap.String("region", awsRegion)) } else if cfg.Region != "" { awsRegion = cfg.Region - logger.Debug("Fetch region %v from commandline/config file", zap.String("region", awsRegion)) + logger.Debug("Fetch region from commandline/config file", zap.String("region", awsRegion)) } else if !cfg.NoVerifySSL { es, err := getDefaultSession(logger) if err != nil { - logger.Error("Unable to retrieve default session %v\n", zap.Error(err)) + logger.Error("Unable to retrieve default session", zap.Error(err)) } else { awsRegion, err = cn.getEC2Region(es) if err != nil { - logger.Error("Unable to retrieve the region from the EC2 instance %v\n", zap.Error(err)) + logger.Error("Unable to retrieve the region from the EC2 instance", zap.Error(err)) } else { - logger.Debug("Fetch region %v from ec2 metadata", zap.String("region", awsRegion)) + logger.Debug("Fetch region from ec2 metadata", zap.String("region", awsRegion)) } } } @@ -176,8 +176,8 @@ func ProxyServerTransport(logger *zap.Logger, config *Config) (*http.Transport, idleConnTimeout := time.Duration(config.RequestTimeoutSeconds) * time.Second transport := &http.Transport{ - MaxIdleConns: config.Concurrency, - MaxIdleConnsPerHost: config.Concurrency, + MaxIdleConns: config.NumberOfWorkers, + MaxIdleConnsPerHost: config.NumberOfWorkers, IdleConnTimeout: idleConnTimeout, Proxy: http.ProxyURL(proxyURL), TLSClientConfig: tls, @@ -232,7 +232,7 @@ func getSTSCreds(logger *zap.Logger, region string, roleArn string) (*credential err = nil switch aerr.Code() { case sts.ErrCodeRegionDisabledException: - logger.Error("Region : %v - %v", zap.String("region", region), zap.String("error", aerr.Error())) + logger.Error("Region ", zap.String("region", region), zap.String("error", aerr.Error())) stsCred = getSTSCredsFromPrimaryRegionEndpoint(logger, t, roleArn, region) } } @@ -251,7 +251,7 @@ func getSTSCredsFromRegionEndpoint(logger *zap.Logger, sess *session.Session, re // This will be only in the case, if provided region is not present in aws_regions.go c := &aws.Config{Region: aws.String(region), Endpoint: ®ionalEndpoint} st := sts.New(sess, c) - logger.Info("STS Endpoint : %v", zap.String("endpoint", st.Endpoint)) + logger.Info("STS Endpoint ", zap.String("endpoint", st.Endpoint)) return stscreds.NewCredentialsWithClient(st, roleArn) } @@ -287,7 +287,7 @@ func getSTSRegionalEndpoint(r string) string { func getDefaultSession(logger *zap.Logger) (*session.Session, error) { result, serr := session.NewSession() if serr != nil { - logger.Error("Error in creating session object : %v\n.", zap.Error(serr)) + logger.Error("Error in creating session object ", zap.Error(serr)) return result, serr } return result, nil diff --git a/exporter/awsxrayexporter/factory.go b/exporter/awsxrayexporter/factory.go index b17ee3b869a5..af3e4b8cc164 100644 --- a/exporter/awsxrayexporter/factory.go +++ b/exporter/awsxrayexporter/factory.go @@ -42,7 +42,7 @@ func (f *Factory) CreateDefaultConfig() configmodels.Exporter { TypeVal: typeStr, NameVal: typeStr, }, - Concurrency: 8, + NumberOfWorkers: 8, Endpoint: "", RequestTimeoutSeconds: 30, MaxRetries: 2, From 142de99f467f60711183c95f834fe7c7c4f9f4b8 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Wed, 27 Nov 2019 13:18:22 -0600 Subject: [PATCH 50/59] temporarily change package name --- exporter/awsxrayexporter/go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exporter/awsxrayexporter/go.mod b/exporter/awsxrayexporter/go.mod index 56c4eec5af3f..ace6b94d4514 100644 --- a/exporter/awsxrayexporter/go.mod +++ b/exporter/awsxrayexporter/go.mod @@ -1,4 +1,4 @@ -module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter +module github.com/kbrockhoff/opentelemetry-collector-contrib/exporter/awsxrayexporter go 1.12 From 101ea0e3cb7f0477036451ec588ca302fa32e7be Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Wed, 27 Nov 2019 13:23:05 -0600 Subject: [PATCH 51/59] temporarily change package name --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 87e14ef0a88c..63bbae543b16 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/open-telemetry/opentelemetry-collector-contrib +module github.com/kbrockhoff/opentelemetry-collector-contrib go 1.12 From 5989f2b0c4334caa4302d303c5fc118bc1057248 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Wed, 27 Nov 2019 13:25:34 -0600 Subject: [PATCH 52/59] revert temporarily change package name --- exporter/awsxrayexporter/go.mod | 2 +- go.mod | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/exporter/awsxrayexporter/go.mod b/exporter/awsxrayexporter/go.mod index ace6b94d4514..56c4eec5af3f 100644 --- a/exporter/awsxrayexporter/go.mod +++ b/exporter/awsxrayexporter/go.mod @@ -1,4 +1,4 @@ -module github.com/kbrockhoff/opentelemetry-collector-contrib/exporter/awsxrayexporter +module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter go 1.12 diff --git a/go.mod b/go.mod index 63bbae543b16..87e14ef0a88c 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/kbrockhoff/opentelemetry-collector-contrib +module github.com/open-telemetry/opentelemetry-collector-contrib go 1.12 From 935e60cb990c1ab8b1632bd0f68bc0bf45182cc9 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Wed, 27 Nov 2019 14:00:11 -0600 Subject: [PATCH 53/59] fixed additional code review issues --- exporter/awsxrayexporter/config_test.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/exporter/awsxrayexporter/config_test.go b/exporter/awsxrayexporter/config_test.go index 47fcc32b78c3..3f0dfebccee2 100644 --- a/exporter/awsxrayexporter/config_test.go +++ b/exporter/awsxrayexporter/config_test.go @@ -18,11 +18,10 @@ import ( "path" "testing" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "github.com/open-telemetry/opentelemetry-collector/config" "github.com/open-telemetry/opentelemetry-collector/config/configmodels" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestLoadConfig(t *testing.T) { From 6f86a3382193cc0ff90ab11a6324b0a47306c0b1 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Wed, 4 Dec 2019 12:02:55 -0600 Subject: [PATCH 54/59] switched to constants defined in collector --- exporter/awsxrayexporter/awsxray_test.go | 37 +++-- exporter/awsxrayexporter/go.mod | 8 +- exporter/awsxrayexporter/go.sum | 78 ++++++++++ exporter/awsxrayexporter/translator/aws.go | 19 ++- .../awsxrayexporter/translator/aws_test.go | 94 ++++++------- exporter/awsxrayexporter/translator/cause.go | 3 +- .../awsxrayexporter/translator/cause_test.go | 21 +-- exporter/awsxrayexporter/translator/http.go | 95 +++++-------- .../awsxrayexporter/translator/http_test.go | 131 +++++++++-------- .../awsxrayexporter/translator/segment.go | 50 +------ .../translator/segment_test.go | 133 +++++++++--------- .../awsxrayexporter/translator/service.go | 3 +- .../translator/service_test.go | 2 +- exporter/awsxrayexporter/translator/sql.go | 23 ++- .../awsxrayexporter/translator/sql_test.go | 35 ++--- .../translator/writer_pool_test.go | 12 +- 16 files changed, 375 insertions(+), 369 deletions(-) diff --git a/exporter/awsxrayexporter/awsxray_test.go b/exporter/awsxrayexporter/awsxray_test.go index 3c8f44e55c01..d165f58cd6ee 100644 --- a/exporter/awsxrayexporter/awsxray_test.go +++ b/exporter/awsxrayexporter/awsxray_test.go @@ -27,6 +27,7 @@ import ( "github.com/golang/protobuf/ptypes/wrappers" "github.com/open-telemetry/opentelemetry-collector/consumer/consumerdata" "github.com/open-telemetry/opentelemetry-collector/exporter" + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" "github.com/stretchr/testify/assert" "go.uber.org/zap" @@ -73,15 +74,14 @@ func constructSpanData() consumerdata.TraceData { func constructResource() *resourcepb.Resource { labels := make(map[string]string) - labels[translator.ServiceNameAttribute] = "signup_aggregator" - labels[translator.ServiceVersionAttribute] = "1.1.12" - labels[translator.ContainerNameAttribute] = "signup_aggregator" - labels[translator.ContainerImageAttribute] = "otel/signupaggregator" - labels[translator.ContainerTagAttribute] = "v1" - labels[translator.CloudProviderAttribute] = "aws" - labels[translator.CloudAccountAttribute] = "999999998" - labels[translator.CloudRegionAttribute] = "us-west-2" - labels[translator.CloudZoneAttribute] = "us-west-1b" + labels[semconventions.AttributeServiceName] = "signup_aggregator" + labels[semconventions.AttributeContainerName] = "signup_aggregator" + labels[semconventions.AttributeContainerImage] = "otel/signupaggregator" + labels[semconventions.AttributeContainerTag] = "v1" + labels[semconventions.AttributeCloudProvider] = "aws" + labels[semconventions.AttributeCloudAccount] = "999999998" + labels[semconventions.AttributeCloudRegion] = "us-west-2" + labels[semconventions.AttributeCloudZone] = "us-west-1b" return &resourcepb.Resource{ Type: "container", Labels: labels, @@ -90,10 +90,10 @@ func constructResource() *resourcepb.Resource { func constructHTTPClientSpan() *tracepb.Span { attributes := make(map[string]interface{}) - attributes[translator.ComponentAttribute] = translator.HTTPComponentType - attributes[translator.MethodAttribute] = "GET" - attributes[translator.URLAttribute] = "https://api.example.com/users/junit" - attributes[translator.StatusCodeAttribute] = 200 + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPURL] = "https://api.example.com/users/junit" + attributes[semconventions.AttributeHTTPStatusCode] = 200 endTime := time.Now().Round(time.Second) startTime := endTime.Add(-90 * time.Second) spanAttributes := constructSpanAttributes(attributes) @@ -125,12 +125,11 @@ func constructHTTPClientSpan() *tracepb.Span { func constructHTTPServerSpan() *tracepb.Span { attributes := make(map[string]interface{}) - attributes[translator.ComponentAttribute] = translator.HTTPComponentType - attributes[translator.MethodAttribute] = "GET" - attributes[translator.URLAttribute] = "https://api.example.com/users/junit" - attributes[translator.UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[translator.ClientIPAttribute] = "192.168.15.32" - attributes[translator.StatusCodeAttribute] = 200 + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPURL] = "https://api.example.com/users/junit" + attributes[semconventions.AttributeHTTPClientIP] = "192.168.15.32" + attributes[semconventions.AttributeHTTPStatusCode] = 200 endTime := time.Now().Round(time.Second) startTime := endTime.Add(-90 * time.Second) spanAttributes := constructSpanAttributes(attributes) diff --git a/exporter/awsxrayexporter/go.mod b/exporter/awsxrayexporter/go.mod index 56c4eec5af3f..bfc7c7b8718c 100644 --- a/exporter/awsxrayexporter/go.mod +++ b/exporter/awsxrayexporter/go.mod @@ -59,7 +59,6 @@ require ( github.com/go-chi/chi v4.0.2+incompatible // indirect github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab // indirect github.com/gobuffalo/buffalo v0.15.0 // indirect - github.com/gobwas/glob v0.2.3 // indirect github.com/gocql/gocql v0.0.0-20191102131523-9faa4c08d962 // indirect github.com/godbus/dbus v4.1.0+incompatible // indirect github.com/goji/param v0.0.0-20160927210335-d7f49fd7d1ed // indirect @@ -105,14 +104,13 @@ require ( github.com/mjibson/appstats v0.0.0-20151004071057-0542d5f0e87e // indirect github.com/montanaflynn/stats v0.5.0 // indirect github.com/nats-io/nats.go v1.9.1 // indirect - github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d // indirect github.com/oklog/oklog v0.3.2 // indirect github.com/olekukonko/tablewriter v0.0.1 // indirect github.com/olivere/elastic v6.2.26+incompatible // indirect github.com/olivere/env v1.1.0 // indirect github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 // indirect // TODO: pin a released version - github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb0c1d1e + github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191203213105-fe3782c76de2 github.com/opentracing/basictracer-go v1.0.0 // indirect github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.4 // indirect github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c // indirect @@ -138,7 +136,6 @@ require ( github.com/shurcooL/resume v0.0.0-20190824223711-dc47c8f77a80 // indirect github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9 // indirect github.com/sony/gobreaker v0.4.1 // indirect - github.com/sourcegraph/go-diff v0.5.1 // indirect github.com/stathat/go v1.0.0 // indirect github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a // indirect github.com/stretchr/testify v1.4.0 @@ -156,10 +153,9 @@ require ( github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c // indirect github.com/xdg/stringprep v1.0.0 // indirect go.etcd.io/etcd v3.3.17+incompatible // indirect - go.opencensus.io v0.22.1 go.uber.org/automaxprocs v1.2.0 // indirect go.uber.org/zap v1.10.0 - golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 + golang.org/x/net v0.0.0-20190923162816-aa69164e4478 gopkg.in/cheggaaa/pb.v1 v1.0.28 // indirect gopkg.in/gcfg.v1 v1.2.3 // indirect gopkg.in/pipe.v2 v2.0.0-20140414041502-3c2ca4d52544 // indirect diff --git a/exporter/awsxrayexporter/go.sum b/exporter/awsxrayexporter/go.sum index c1d923b9f90e..07b4d70621b2 100644 --- a/exporter/awsxrayexporter/go.sum +++ b/exporter/awsxrayexporter/go.sum @@ -61,6 +61,7 @@ github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb0 github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OneOfOne/xxhash v1.2.5 h1:zl/OfRA6nftbBK9qTohYBJ5xvw6C/oNKizR7cZGl3cI= github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= +github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= @@ -72,6 +73,7 @@ github.com/Shopify/sarama v1.19.0 h1:9oksLxC6uxVPHPVYUmq6xhr1BOF/hHobWH2UzO67z1s github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/aclements/go-gg v0.0.0-20170323211221-abd1f791f5ee h1:KJgh99JlYRhfgHtb7XyhAZSJMdfkjVmo3PP7XO1/HO8= @@ -159,6 +161,7 @@ github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b h1:AP/Y7sqYicnjGDf github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b/go.mod h1:ac9efd0D1fsDb3EJvhqgXRbFx7bs2wqZ10HQPeU8U/Q= github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/bombsimon/wsl v1.2.5/go.mod h1:43lEF/i0kpXbLCeDXL9LMT8c92HyBywXb0AsgMHYngM= github.com/boombuler/barcode v1.0.0 h1:s1TvRnXwL2xJRaccrdcBQMZxq6X7DvsMogtmJeHDdrc= github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625 h1:ckJgFhFWywOx+YLEMIJsTb+NV6NexWICk5+AMSuz3ss= @@ -342,9 +345,11 @@ github.com/glycerine/go-unsnap-stream v0.0.0-20190901134440-81cf024a9e0a h1:FQqo github.com/glycerine/go-unsnap-stream v0.0.0-20190901134440-81cf024a9e0a/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= github.com/go-chi/chi v4.0.2+incompatible h1:maB6vn6FqCxrpz4FqWdh4+lwpyZIQS7YEAUcHlgXVRs= github.com/go-chi/chi v4.0.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= +github.com/go-critic/go-critic v0.3.5-0.20190904082202-d79a9f0c64db/go.mod h1:+sE8vrLDS2M0pZkBk0wy6+nLdKexVDrl/jBqQOTDThA= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= @@ -352,6 +357,7 @@ github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab h1:xveKWz2iaueeTaUgdetzel+U7exyigDYBryyVfV/rZk= github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= +github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.17.2/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= @@ -415,6 +421,19 @@ github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZp github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= +github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= +github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astfmt v0.0.0-20180903215011-8f8ee99c3086/go.mod h1:mP93XdblcopXwlyN4X4uodxXQhldPGZbcEJIimQHrkg= +github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= +github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU= +github.com/go-toolsmith/astp v0.0.0-20180903215135-0af7e3c24f30/go.mod h1:SV2ur98SGypH1UjcPpCatrV5hPazG6+IfNHbkDXBRrk= +github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= +github.com/go-toolsmith/pkgload v0.0.0-20181119091011-e9e65178eee8/go.mod h1:WoMrjiy4zvdS+Bg6z9jZH82QXwkcgCBX6nOfnmdaHks= +github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc= +github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= +github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= github.com/gobuffalo/attrs v0.0.0-20190219185331-f338c9388485/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= github.com/gobuffalo/attrs v0.1.0 h1:LY6/rbhPD/hfa+AfviaMXBmZBGb0fGHF12yg7f3dPQA= @@ -886,6 +905,7 @@ github.com/gocql/gocql v0.0.0-20191102131523-9faa4c08d962 h1:+YAUiFOQF5pIjD9FYvk github.com/gocql/gocql v0.0.0-20191102131523-9faa4c08d962/go.mod h1:DL0ekTmBSTdlNF25Orwt/JMzqIq3EJ4MVa/J/uK64OY= github.com/godbus/dbus v4.1.0+incompatible h1:WqqLRTsQic3apZUK9qC5sGNfXthmPXzUZ7nQPrNITa4= github.com/godbus/dbus v4.1.0+incompatible/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= +github.com/gofrs/flock v0.0.0-20190320160742-5135e617513b/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gofrs/uuid v3.1.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= @@ -926,6 +946,21 @@ github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8l github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0= +github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= +github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3/go.mod h1:JXrF4TWy4tXYn62/9x8Wm/K/dm06p8tCKwFRDPZG/1o= +github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU= +github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= +github.com/golangci/golangci-lint v1.21.0/go.mod h1:phxpHK52q7SE+5KpPnti4oZTdFCEsn/tKN+nFvCKXfk= +github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc/go.mod h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU= +github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= +github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI= +github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0= github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac h1:Q0Jsdxl5jbxouNs1TQYt0gxesYMU4VXRbsTlgDloZ50= @@ -1011,6 +1046,7 @@ github.com/gorilla/sessions v1.2.0 h1:S7P+1Hm5V/AT9cjEcUD5uDaQSX0OE577aCXgoaKpYb github.com/gorilla/sessions v1.2.0/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= github.com/graph-gophers/graphql-go v0.0.0-20191031232829-adde0d0f76a3 h1:HwRCZlPXN00r58jaIPE11HXn7EvhheQrE+Cxw0vkrH0= github.com/graph-gophers/graphql-go v0.0.0-20191031232829-adde0d0f76a3/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7 h1:6TSoaYExHper8PYsJu23GWVNOyYRCSnIFyxKgLSZ54w= @@ -1225,8 +1261,12 @@ github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kisielk/sqlstruct v0.0.0-20150923205031-648daed35d49 h1:o/c0aWEP/m6n61xlYW2QP4t9424qlJOsxugn5Zds2Rg= github.com/kisielk/sqlstruct v0.0.0-20150923205031-648daed35d49/go.mod h1:yyMNCyc/Ib3bDTKd379tNMpB/7/H5TjM2Y9QJ5THLbE= +github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.9.1 h1:TWy0o9J9c6LK9C8t7Msh6IAJNXbsU/nvKLTQUU5HdaY= github.com/klauspost/compress v1.9.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/pgzip v1.2.1 h1:oIPZROsWuPHpOdMVWLuJZXwgjhrW8r1yEX8UqMyeNHM= github.com/klauspost/pgzip v1.2.1/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v0.0.0-20180402223658-b729f2633dfe/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -1258,6 +1298,7 @@ github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-b github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.17.1 h1:PgitbgUDool2AcHopDNTlvwq7BQeZssTGs4EVwcGhr8= github.com/lightstep/lightstep-tracer-go v0.17.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/lyft/protoc-gen-star v0.4.11 h1:zW6fJQBtCtVeSiO/Kbpzv32GO0J/Z8egSLeohES202w= github.com/lyft/protoc-gen-star v0.4.11/go.mod h1:mE8fbna26u7aEA2QCVvvfBU/ZrPgocG1206xAFPcs94= github.com/lyft/protoc-gen-validate v0.0.13 h1:KNt/RhmQTOLr7Aj8PsJ7mTronaFyx80mRTT9qF261dA= @@ -1332,6 +1373,7 @@ github.com/marstr/randname v0.0.0-20181206212954-d5b0f288ab8c h1:JE+MDz5rhFN5EC9 github.com/marstr/randname v0.0.0-20181206212954-d5b0f288ab8c/go.mod h1:Xc224oUXd7/sKMjWKl17cfkYOKQ1S+HSOW7YHEGXauI= github.com/martini-contrib/render v0.0.0-20150707142108-ec18f8345a11 h1:YFh+sjyJTMQSYjKwM4dFKhJPJC/wfo98tPUc17HdoYw= github.com/martini-contrib/render v0.0.0-20150707142108-ec18f8345a11/go.mod h1:Ah2dBMoxZEqk118as2T4u4fjfXarE0pPnMJaArZQZsI= +github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= @@ -1358,6 +1400,7 @@ github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4f github.com/mattn/go-zglob v0.0.0-20171230104132-4959821b4817/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= github.com/mattn/go-zglob v0.0.0-20180803001819-2ea3427bfa53 h1:tGfIHhDghvEnneeRhODvGYOt305TPwingKt6p90F4MU= github.com/mattn/go-zglob v0.0.0-20180803001819-2ea3427bfa53/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= +github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= @@ -1371,6 +1414,7 @@ github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceT github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= 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 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= @@ -1400,6 +1444,7 @@ github.com/monoculum/formam v0.0.0-20190830100315-7ff9597b1407 h1:ZU5O9BawmEx9Mu github.com/monoculum/formam v0.0.0-20190830100315-7ff9597b1407/go.mod h1:JKa2av1XVkGjhxdLS59nDoXa2JpmIHpnURWNbzCtXtc= github.com/montanaflynn/stats v0.5.0 h1:2EkzeTSqBB4V4bJwWrt5gIIrZmpJBcoIRGS2kWLgzmk= github.com/montanaflynn/stats v0.5.0/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/mozilla/tls-observatory v0.0.0-20190404164649-a3c1b6cfecfd/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d h1:7PxY7LVfSZm7PEeBTyK1rj1gABdCO2mbri6GKO1cMDs= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -1456,8 +1501,11 @@ github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +github.com/open-telemetry/opentelemetry-collector v0.2.0 h1:38/NrGdEEXufWqYFkW/6yeW3koRvb1QbE/2owKSNQvI= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb0c1d1e h1:poxNKN8teT8QjLK6LwKN52cNQEPqHIOEsmPJv5ssZUU= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb0c1d1e/go.mod h1:zZf9V+57o0Fd3ik5HzaHamVsWhudJTOwnKw9kJvWoDo= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191203213105-fe3782c76de2 h1:lrdCxCJpccXFU3jCWB869fy5yRiSRRa4VTVJgLFpUOw= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191203213105-fe3782c76de2/go.mod h1:pL3jClof5EzaEU97itKyjLg4b8PFUwG87dM51Bnobhc= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 h1:lM6RxxfUMrYL/f8bWEUqdXrANWtrL7Nndbm9iFN0DlU= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9 h1:QsgXACQhd9QJhEmRumbsMQQvBtmdS0mafoVEBplWXEg= @@ -1482,6 +1530,7 @@ github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0Mw github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/paulbellamy/ratecounter v0.2.0 h1:2L/RhJq+HA8gBQImDXtLPrDXK5qAj6ozWVK/zFXVJGs= github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= +github.com/pavius/impi v0.0.0-20180302134524-c1cbdcb8df2b/go.mod h1:x/hU0bfdWIhuOT1SKwiJg++yvkk6EuOtJk8WtDZqgr8= github.com/pborman/getopt v0.0.0-20190409184431-ee0cd42419d3 h1:YtFkrqsMEj7YqpIhRteVxJxCeC3jJBieuLr0d4C4rSA= github.com/pborman/getopt v0.0.0-20190409184431-ee0cd42419d3/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= @@ -1558,6 +1607,7 @@ github.com/prometheus/prometheus v1.8.2-0.20190924101040-52e0504f83ea h1:DkijwrD github.com/prometheus/prometheus v1.8.2-0.20190924101040-52e0504f83ea/go.mod h1:elNqjVbwD3sCZJqKzyN7uEuwGcCpeJvv67D6BrHsDbw= github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a h1:9ZKAASQSHhDYGoxY8uLVpewe1GDZ2vu2Tr/vTdVAkFQ= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237 h1:HQagqIiBmr8YXawX/le3+O26N+vPPC1PtjaF3mwnook= @@ -1606,12 +1656,15 @@ github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/securego/gosec v0.0.0-20191002120514-e680875ea14d/go.mod h1:w5+eXa0mYznDkHaMCXA4XYffjlH+cy1oyKbfzJXa2Do= github.com/segmentio/kafka-go v0.1.0 h1:IXCHG+sXPNiIR5pC/vTEItZduPKu4cnpr85YgxpxlW0= github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/serenize/snaker v0.0.0-20171204205717-a683aaf2d516 h1:ofR1ZdrNSkiWcMsRrubK9tb2/SlZVWttAfqUjJi6QYc= github.com/serenize/snaker v0.0.0-20171204205717-a683aaf2d516/go.mod h1:Yow6lPLSAXx2ifx470yD/nUe22Dv5vBvxK/UK9UUTVs= github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc= +github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= github.com/shopspring/decimal v0.0.0-20191009025716-f1972eb1d1f5 h1:Gojs/hac/DoYEM7WEICT45+hNWczIeuL5D21e5/HPAw= github.com/shopspring/decimal v0.0.0-20191009025716-f1972eb1d1f5/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= @@ -1762,6 +1815,7 @@ github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07 h1:UyzmZLoiDWMRywV4DUY github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= github.com/tinylib/msgp v1.1.0 h1:9fQd+ICuRIu/ue4vxJZu6/LzxN0HwMds2nq/0cFvxHU= github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2 h1:eGaGNxrtoZf/mBURsnNQKDR7u50Klgcf2eFDQEnc8Bc= @@ -1791,6 +1845,8 @@ github.com/ugorji/go v1.1.4 h1:j4s+tAvLfL3bZyefP2SEWmhBzmuIlH/eqNuPdFPgngw= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8 h1:3SVOIvH7Ae1KRYyQWRjXWJEA9sS/c/pjvH++55Gr648= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ultraware/funlen v0.0.2/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= github.com/unknwon/cae v1.0.0 h1:i39lOFaBXZxhGjQOy/RNbi8uzettCs6OQxpR0xXohGU= github.com/unknwon/cae v1.0.0/go.mod h1:QaSeRctcea9fK6piJpAMCCPKxzJ01+xFcr2k1m3WRPU= github.com/unrolled/secure v0.0.0-20180918153822-f340ee86eb8b/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= @@ -1802,6 +1858,11 @@ github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/negroni v1.0.0 h1:kIimOitoypq34K7TG7DUaJ9kq/N4Ofuwi1sjz0KipXc= github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= +github.com/uudashr/gocognit v0.0.0-20190926065955-1655d0de0517/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.2.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s= +github.com/valyala/quicktemplate v1.2.0/go.mod h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOVRUAfrukLPuGJ4= +github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/xanzy/ssh-agent v0.2.0 h1:Adglfbi5p9Z0BmK2oKU9nTG+zKfniSfnaMYB+ULd+Ro= github.com/xanzy/ssh-agent v0.2.0/go.mod h1:0NyE30eGUDliuLEHJgYte/zncp2zdTStcOnWhgSqHD8= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c h1:u40Z8hqBAAQyv+vATcGgV0YCnDjqSL7/q/JyPhhJSPk= @@ -1879,6 +1940,7 @@ golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 h1:HuIa8hRrWRSrqYzx1qI49N golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522 h1:OeRHuibLsmZkFj773W4LcfAGsSxJgfPONhr8cmO+eLA= @@ -1903,6 +1965,7 @@ golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20180816102801-aaf60122140d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180921000356-2f5d2388922f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180926154720-4dfa2610cdf3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1938,6 +2001,8 @@ golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 h1:Ao/3l156eZf2AW5wK8a7/smto golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 h1:fHDIZ2oxGnUZRN6WgWFCbYBjH9uqVPRCUVUDhs0wnbA= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478 h1:l5EDrHhldLYb3ZRHDUhXF7Om7MvYXnkV9/iQNo1lX6g= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -2011,6 +2076,7 @@ golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be h1:QAcqgptGM8IQBC9K/RC4o+O9YmqEm0diQn9QmZw/0mU= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2048,6 +2114,7 @@ golang.org/x/tools v0.0.0-20181109152631-138c20b93253/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20181109202920-92d8274bd7b8/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181111003725-6d71ab8aade0/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181114190951-94339b83286c/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181117154741-2ddaf7f79a09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181119130350-139d099f6620/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181120060634-fc4f04983f62/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181122213734-04b5d21e00f1/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -2062,6 +2129,7 @@ golang.org/x/tools v0.0.0-20181212172921-837e80568c09/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20181213190329-bbccd8cae4a9/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190102213336-ca9055ed7d04/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190104182027-498d95493402/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190111214448-fc1d57b08d7b/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-20190118193359-16909d206f00/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -2075,10 +2143,12 @@ golang.org/x/tools v0.0.0-20190219185102-9394956cfdc5/go.mod h1:E6PF97AdD6v0s+fP golang.org/x/tools v0.0.0-20190221204921-83362c3779f5/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= 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-20190311215038-5c2858a9cfe5/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-20190315044204-8b67d361bba2/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190318200714-bb1270c20edf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190404132500-923d25813098/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190407030857-0fdf0c73855b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -2087,6 +2157,7 @@ golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190521203540-521d6ed310dd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190603152906-08e0b306e832/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190603231351-8aaa1484dc10/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= @@ -2097,6 +2168,7 @@ golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190624180213-70d37148ca0c/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-20190719005602-e377ae9d6386/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= golang.org/x/tools v0.0.0-20190809145639-6d4652c779c4/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190813034749-528a2984e271/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -2105,7 +2177,10 @@ golang.org/x/tools v0.0.0-20190905035308-adb45749da8e/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20190906203814-12febf440ab1 h1:w4Q0TX3lC1NfGcWkzt5wG4ee4E5fUAPqh5myV0efeHI= golang.org/x/tools v0.0.0-20190906203814-12febf440ab1/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190930201159-7c411dea38b0/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191004055002-72853e10c5a3/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191015150414-f936694f27bf/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191030062658-86caa796c7ab h1:tpc/nJ4vD66vAk/2KN0sw/DvQIz2sKmCpWvyKtPmfMQ= golang.org/x/tools v0.0.0-20191030062658-86caa796c7ab/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -2259,6 +2334,9 @@ k8s.io/kube-openapi v0.0.0-20190722073852-5e22f3d471e6/go.mod h1:RZvgC8MSN6DjiMV k8s.io/utils v0.0.0-20190221042446-c2654d5206da/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3oVhZz7sSzSiPnVZayjIX0= k8s.io/utils v0.0.0-20190809000727-6c36bc71fc4a h1:uy5HAgt4Ha5rEMbhZA+aM1j2cq5LmR6LQ71EYC2sVH4= k8s.io/utils v0.0.0-20190809000727-6c36bc71fc4a/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= +mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f/go.mod h1:4G1h5nDURzA3bwVMZIVpwbkw+04kSxk3rAtzlimaUJw= rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e h1:4Z09Hglb792X0kfOBBJUPFEyvVfQWrYT/l8h5EKA6JQ= diff --git a/exporter/awsxrayexporter/translator/aws.go b/exporter/awsxrayexporter/translator/aws.go index 4712c9def403..cf5f3cdeb0e6 100644 --- a/exporter/awsxrayexporter/translator/aws.go +++ b/exporter/awsxrayexporter/translator/aws.go @@ -18,6 +18,7 @@ import ( "strconv" resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" ) // AWS-specific OpenTelemetry attribute names @@ -87,26 +88,24 @@ func makeAws(attributes map[string]string, resource *resourcepb.Resource) (map[s filtered := make(map[string]string) for key, value := range resource.Labels { switch key { - case CloudProviderAttribute: + case semconventions.AttributeCloudProvider: cloud = value - case CloudAccountAttribute: + case semconventions.AttributeCloudAccount: account = value - case CloudZoneAttribute: + case semconventions.AttributeCloudZone: zone = value - case HostIDAttribute: + case semconventions.AttributeHostID: hostID = value - case ContainerNameAttribute: + case semconventions.AttributeContainerName: if container == "" { container = value } - case K8sPodAttribute: + case semconventions.AttributeK8sPod: container = value - case ServiceNamespaceAttribute: + case semconventions.AttributeServiceNamespace: namespace = value - case ServiceInstanceAttribute: + case semconventions.AttributeServiceInstance: deployID = value - case ServiceVersionAttribute: - ver = value } } for key, value := range attributes { diff --git a/exporter/awsxrayexporter/translator/aws_test.go b/exporter/awsxrayexporter/translator/aws_test.go index fe09a055001b..c6b8d67b164a 100644 --- a/exporter/awsxrayexporter/translator/aws_test.go +++ b/exporter/awsxrayexporter/translator/aws_test.go @@ -19,17 +19,18 @@ import ( "testing" resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" "github.com/stretchr/testify/assert" ) func TestAwsFromEc2Resource(t *testing.T) { instanceID := "i-00f7c0bcb26da2a99" labels := make(map[string]string) - labels[CloudProviderAttribute] = "aws" - labels[CloudAccountAttribute] = "123456789" - labels[CloudZoneAttribute] = "us-east-1c" - labels[HostIDAttribute] = instanceID - labels[HostTypeAttribute] = "m5.xlarge" + labels[semconventions.AttributeCloudProvider] = "aws" + labels[semconventions.AttributeCloudAccount] = "123456789" + labels[semconventions.AttributeCloudZone] = "us-east-1c" + labels[semconventions.AttributeHostID] = instanceID + labels[semconventions.AttributeHostType] = "m5.xlarge" resource := &resourcepb.Resource{ Type: "vm", Labels: labels, @@ -56,18 +57,18 @@ func TestAwsFromEcsResource(t *testing.T) { instanceID := "i-00f7c0bcb26da2a99" containerID := "signup_aggregator-x82ufje83" labels := make(map[string]string) - labels[CloudProviderAttribute] = "aws" - labels[CloudAccountAttribute] = "123456789" - labels[CloudZoneAttribute] = "us-east-1c" - labels[ContainerNameAttribute] = "signup_aggregator" - labels[ContainerImageAttribute] = "otel/signupaggregator" - labels[ContainerTagAttribute] = "v1" - labels[K8sClusterAttribute] = "production" - labels[K8sNamespaceAttribute] = "default" - labels[K8sDeploymentAttribute] = "signup_aggregator" - labels[K8sPodAttribute] = containerID - labels[HostIDAttribute] = instanceID - labels[HostTypeAttribute] = "m5.xlarge" + labels[semconventions.AttributeCloudProvider] = "aws" + labels[semconventions.AttributeCloudAccount] = "123456789" + labels[semconventions.AttributeCloudZone] = "us-east-1c" + labels[semconventions.AttributeContainerName] = "signup_aggregator" + labels[semconventions.AttributeContainerImage] = "otel/signupaggregator" + labels[semconventions.AttributeContainerTag] = "v1" + labels[semconventions.AttributeK8sCluster] = "production" + labels[semconventions.AttributeK8sNamespace] = "default" + labels[semconventions.AttributeK8sDeployment] = "signup_aggregator" + labels[semconventions.AttributeK8sPod] = containerID + labels[semconventions.AttributeHostID] = instanceID + labels[semconventions.AttributeHostType] = "m5.xlarge" resource := &resourcepb.Resource{ Type: "container", Labels: labels, @@ -93,12 +94,11 @@ func TestAwsFromEcsResource(t *testing.T) { func TestAwsFromBeanstalkResource(t *testing.T) { deployID := "232" labels := make(map[string]string) - labels[CloudProviderAttribute] = "aws" - labels[CloudAccountAttribute] = "123456789" - labels[CloudZoneAttribute] = "us-east-1c" - labels[ServiceVersionAttribute] = "2.1.4" - labels[ServiceNamespaceAttribute] = "production" - labels[ServiceInstanceAttribute] = deployID + labels[semconventions.AttributeCloudProvider] = "aws" + labels[semconventions.AttributeCloudAccount] = "123456789" + labels[semconventions.AttributeCloudZone] = "us-east-1c" + labels[semconventions.AttributeServiceNamespace] = "production" + labels[semconventions.AttributeServiceInstance] = deployID resource := &resourcepb.Resource{ Type: "vm", Labels: labels, @@ -125,18 +125,18 @@ func TestAwsWithAwsSqsResources(t *testing.T) { instanceID := "i-00f7c0bcb26da2a99" containerID := "signup_aggregator-x82ufje83" labels := make(map[string]string) - labels[CloudProviderAttribute] = "aws" - labels[CloudAccountAttribute] = "123456789" - labels[CloudZoneAttribute] = "us-east-1c" - labels[ContainerNameAttribute] = "signup_aggregator" - labels[ContainerImageAttribute] = "otel/signupaggregator" - labels[ContainerTagAttribute] = "v1" - labels[K8sClusterAttribute] = "production" - labels[K8sNamespaceAttribute] = "default" - labels[K8sDeploymentAttribute] = "signup_aggregator" - labels[K8sPodAttribute] = containerID - labels[HostIDAttribute] = instanceID - labels[HostTypeAttribute] = "m5.xlarge" + labels[semconventions.AttributeCloudProvider] = "aws" + labels[semconventions.AttributeCloudAccount] = "123456789" + labels[semconventions.AttributeCloudZone] = "us-east-1c" + labels[semconventions.AttributeContainerName] = "signup_aggregator" + labels[semconventions.AttributeContainerImage] = "otel/signupaggregator" + labels[semconventions.AttributeContainerTag] = "v1" + labels[semconventions.AttributeK8sCluster] = "production" + labels[semconventions.AttributeK8sNamespace] = "default" + labels[semconventions.AttributeK8sDeployment] = "signup_aggregator" + labels[semconventions.AttributeK8sPod] = containerID + labels[semconventions.AttributeHostID] = instanceID + labels[semconventions.AttributeHostType] = "m5.xlarge" resource := &resourcepb.Resource{ Type: "container", Labels: labels, @@ -170,18 +170,18 @@ func TestAwsWithAwsDynamoDbResources(t *testing.T) { instanceID := "i-00f7c0bcb26da2a99" containerID := "signup_aggregator-x82ufje83" labels := make(map[string]string) - labels[CloudProviderAttribute] = "aws" - labels[CloudAccountAttribute] = "123456789" - labels[CloudZoneAttribute] = "us-east-1c" - labels[ContainerNameAttribute] = "signup_aggregator" - labels[ContainerImageAttribute] = "otel/signupaggregator" - labels[ContainerTagAttribute] = "v1" - labels[K8sClusterAttribute] = "production" - labels[K8sNamespaceAttribute] = "default" - labels[K8sDeploymentAttribute] = "signup_aggregator" - labels[K8sPodAttribute] = containerID - labels[HostIDAttribute] = instanceID - labels[HostTypeAttribute] = "m5.xlarge" + labels[semconventions.AttributeCloudProvider] = "aws" + labels[semconventions.AttributeCloudAccount] = "123456789" + labels[semconventions.AttributeCloudZone] = "us-east-1c" + labels[semconventions.AttributeContainerName] = "signup_aggregator" + labels[semconventions.AttributeContainerImage] = "otel/signupaggregator" + labels[semconventions.AttributeContainerTag] = "v1" + labels[semconventions.AttributeK8sCluster] = "production" + labels[semconventions.AttributeK8sNamespace] = "default" + labels[semconventions.AttributeK8sDeployment] = "signup_aggregator" + labels[semconventions.AttributeK8sPod] = containerID + labels[semconventions.AttributeHostID] = instanceID + labels[semconventions.AttributeHostType] = "m5.xlarge" resource := &resourcepb.Resource{ Type: "container", Labels: labels, diff --git a/exporter/awsxrayexporter/translator/cause.go b/exporter/awsxrayexporter/translator/cause.go index 579bcd967f2c..f345158ef2da 100644 --- a/exporter/awsxrayexporter/translator/cause.go +++ b/exporter/awsxrayexporter/translator/cause.go @@ -18,6 +18,7 @@ import ( "encoding/hex" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" ) // OpenTelemetry Semantic Convention attribute names for error/fault/exception related attributes @@ -70,7 +71,7 @@ func makeCause(status *tracepb.Status, attributes map[string]string) (isError, i if message == "" { message = value } - case StatusTextAttribute: + case semconventions.AttributeHTTPStatusText: if message == "" { message = value } diff --git a/exporter/awsxrayexporter/translator/cause_test.go b/exporter/awsxrayexporter/translator/cause_test.go index 7ce99a85091a..6170abc19d9d 100644 --- a/exporter/awsxrayexporter/translator/cause_test.go +++ b/exporter/awsxrayexporter/translator/cause_test.go @@ -21,15 +21,16 @@ import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" "github.com/stretchr/testify/assert" ) func TestCauseWithStatusMessage(t *testing.T) { errorMsg := "this is a test" attributes := make(map[string]interface{}) - attributes[MethodAttribute] = "POST" - attributes[URLAttribute] = "https://api.example.com/widgets" - attributes[StatusCodeAttribute] = 500 + attributes[semconventions.AttributeHTTPMethod] = "POST" + attributes[semconventions.AttributeHTTPURL] = "https://api.example.com/widgets" + attributes[semconventions.AttributeHTTPStatusCode] = 500 span := constructExceptionServerSpan(attributes) span.Status.Message = errorMsg filtered, _ := makeHTTP(span) @@ -52,10 +53,10 @@ func TestCauseWithStatusMessage(t *testing.T) { func TestCauseWithHttpStatusMessage(t *testing.T) { errorMsg := "this is a test" attributes := make(map[string]interface{}) - attributes[MethodAttribute] = "POST" - attributes[URLAttribute] = "https://api.example.com/widgets" - attributes[StatusCodeAttribute] = 500 - attributes[StatusTextAttribute] = errorMsg + attributes[semconventions.AttributeHTTPMethod] = "POST" + attributes[semconventions.AttributeHTTPURL] = "https://api.example.com/widgets" + attributes[semconventions.AttributeHTTPStatusCode] = 500 + attributes[semconventions.AttributeHTTPStatusText] = errorMsg span := constructExceptionServerSpan(attributes) filtered, _ := makeHTTP(span) @@ -77,9 +78,9 @@ func TestCauseWithHttpStatusMessage(t *testing.T) { func TestCauseWithErrorMessage(t *testing.T) { errorMsg := "this is a test" attributes := make(map[string]interface{}) - attributes[MethodAttribute] = "POST" - attributes[URLAttribute] = "https://api.example.com/widgets" - attributes[StatusCodeAttribute] = 500 + attributes[semconventions.AttributeHTTPMethod] = "POST" + attributes[semconventions.AttributeHTTPURL] = "https://api.example.com/widgets" + attributes[semconventions.AttributeHTTPStatusCode] = 500 attributes[ErrorMessageAttribute] = errorMsg span := constructExceptionServerSpan(attributes) filtered, _ := makeHTTP(span) diff --git a/exporter/awsxrayexporter/translator/http.go b/exporter/awsxrayexporter/translator/http.go index b33ef4f4fd0a..1165f5a2d0e9 100644 --- a/exporter/awsxrayexporter/translator/http.go +++ b/exporter/awsxrayexporter/translator/http.go @@ -19,30 +19,10 @@ import ( "strconv" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" ) -// OpenTelemetry Semantic Convention attribute names for HTTP and gRPC related attributes -const ( - MethodAttribute = "http.method" - URLAttribute = "http.url" - TargetAttribute = "http.target" - HostAttribute = "http.host" - SchemeAttribute = "http.scheme" - StatusCodeAttribute = "http.status_code" - StatusTextAttribute = "http.status_text" - FlavorAttribute = "http.flavor" - ServerNameAttribute = "http.server_name" - PortAttribute = "http.port" - RouteAttribute = "http.route" - ClientIPAttribute = "http.client_ip" - UserAgentAttribute = "http.user_agent" - MessageTypeAttribute = "message.type" - MessageIDAttribute = "message.id" - MessageCompressedSizeAttribute = "message.compressed_size" - MessageUncompressedSizeAttribute = "message.uncompressed_size" -) - // HTTPData provides the shape for unmarshalling request and response data. type HTTPData struct { Request RequestData `json:"request,omitempty"` @@ -116,52 +96,51 @@ func makeHTTP(span *tracepb.Span) (map[string]string, *HTTPData) { for key, value := range span.Attributes.AttributeMap { switch key { - case ComponentAttribute: + case semconventions.AttributeComponent: componentValue = value.GetStringValue().GetValue() filtered[key] = componentValue - case MethodAttribute: + case semconventions.AttributeHTTPMethod: info.Request.Method = value.GetStringValue().GetValue() - case UserAgentAttribute: - info.Request.UserAgent = value.GetStringValue().GetValue() - case ClientIPAttribute: + case semconventions.AttributeHTTPClientIP: info.Request.ClientIP = value.GetStringValue().GetValue() info.Request.XForwardedFor = true - case StatusCodeAttribute: + case semconventions.AttributeHTTPStatusCode: info.Response.Status = value.GetIntValue() - case URLAttribute: + case semconventions.AttributeHTTPURL: urlParts[key] = value.GetStringValue().GetValue() - case SchemeAttribute: + case semconventions.AttributeHTTPScheme: urlParts[key] = value.GetStringValue().GetValue() - case HostAttribute: + case semconventions.AttributeHTTPHost: urlParts[key] = value.GetStringValue().GetValue() - case TargetAttribute: + case semconventions.AttributeHTTPTarget: urlParts[key] = value.GetStringValue().GetValue() - case ServerNameAttribute: + case semconventions.AttributeHTTPServerName: urlParts[key] = value.GetStringValue().GetValue() - case HostNameAttribute: + case semconventions.AttributeHostName: urlParts[key] = value.GetStringValue().GetValue() - case PortAttribute: + case semconventions.AttributeHTTPHostPort: urlParts[key] = value.GetStringValue().GetValue() if len(urlParts[key]) == 0 { urlParts[key] = strconv.FormatInt(value.GetIntValue(), 10) } - case PeerHostAttribute: + case semconventions.AttributePeerHost: urlParts[key] = value.GetStringValue().GetValue() - case PeerPortAttribute: + case semconventions.AttributePeerPort: urlParts[key] = value.GetStringValue().GetValue() if len(urlParts[key]) == 0 { urlParts[key] = strconv.FormatInt(value.GetIntValue(), 10) } - case PeerIpv4Attribute: + case semconventions.AttributePeerIpv4: urlParts[key] = value.GetStringValue().GetValue() - case PeerIpv6Attribute: + case semconventions.AttributePeerIpv6: urlParts[key] = value.GetStringValue().GetValue() default: filtered[key] = value.GetStringValue().GetValue() } } - if (componentValue != HTTPComponentType && componentValue != GrpcComponentType) || info.Request.Method == "" { + if (componentValue != semconventions.ComponentTypeHTTP && componentValue != semconventions.ComponentTypeGRPC) || + info.Request.Method == "" { return filtered, nil } @@ -187,10 +166,10 @@ func extractResponseSizeFromEvents(span *tracepb.Span) int64 { anno := te.GetAnnotation() if anno != nil { attrMap := anno.Attributes.AttributeMap - typeVal := attrMap[MessageTypeAttribute] + typeVal := attrMap[semconventions.AttributeMessageType] if typeVal != nil { if typeVal.GetStringValue().GetValue() == "RECEIVED" { - sizeVal := attrMap[MessageUncompressedSizeAttribute] + sizeVal := attrMap[semconventions.AttributeMessageUncompressedSize] if sizeVal != nil { size = sizeVal.GetIntValue() } @@ -205,31 +184,31 @@ func extractResponseSizeFromEvents(span *tracepb.Span) int64 { func constructClientURL(component string, urlParts map[string]string) string { // follows OpenTelemetry specification-defined combinations for client spans described in // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/data-http.md - url, ok := urlParts[URLAttribute] + url, ok := urlParts[semconventions.AttributeHTTPURL] if ok { // full URL available so no need to assemble return url } - scheme, ok := urlParts[SchemeAttribute] + scheme, ok := urlParts[semconventions.AttributeHTTPScheme] if !ok { - if component == GrpcComponentType { + if component == semconventions.ComponentTypeGRPC { scheme = "dns" } else { scheme = "http" } } port := "" - host, ok := urlParts[HostAttribute] + host, ok := urlParts[semconventions.AttributeHTTPHost] if !ok { - host, ok = urlParts[PeerHostAttribute] + host, ok = urlParts[semconventions.AttributePeerHost] if !ok { - host, ok = urlParts[PeerIpv4Attribute] + host, ok = urlParts[semconventions.AttributePeerIpv4] if !ok { - host = urlParts[PeerIpv6Attribute] + host = urlParts[semconventions.AttributePeerIpv6] } } - port, ok = urlParts[PeerPortAttribute] + port, ok = urlParts[semconventions.AttributePeerPort] if !ok { port = "" } @@ -238,7 +217,7 @@ func constructClientURL(component string, urlParts map[string]string) string { if len(port) > 0 && !(scheme == "http" && port == "80") && !(scheme == "https" && port == "443") { url += ":" + port } - target, ok := urlParts[TargetAttribute] + target, ok := urlParts[semconventions.AttributeHTTPTarget] if ok { url += target } else { @@ -250,28 +229,28 @@ func constructClientURL(component string, urlParts map[string]string) string { func constructServerURL(component string, urlParts map[string]string) string { // follows OpenTelemetry specification-defined combinations for server spans described in // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/data-http.md - url, ok := urlParts[URLAttribute] + url, ok := urlParts[semconventions.AttributeHTTPURL] if ok { // full URL available so no need to assemble return url } - scheme, ok := urlParts[SchemeAttribute] + scheme, ok := urlParts[semconventions.AttributeHTTPScheme] if !ok { - if component == GrpcComponentType { + if component == semconventions.ComponentTypeGRPC { scheme = "dns" } else { scheme = "http" } } port := "" - host, ok := urlParts[HostAttribute] + host, ok := urlParts[semconventions.AttributeHTTPHost] if !ok { - host, ok = urlParts[ServerNameAttribute] + host, ok = urlParts[semconventions.AttributeHTTPServerName] if !ok { - host, ok = urlParts[HostNameAttribute] + host, ok = urlParts[semconventions.AttributeHostName] } - port, ok = urlParts[PortAttribute] + port, ok = urlParts[semconventions.AttributeHTTPHostPort] if !ok { port = "" } @@ -280,7 +259,7 @@ func constructServerURL(component string, urlParts map[string]string) string { if len(port) > 0 && !(scheme == "http" && port == "80") && !(scheme == "https" && port == "443") { url += ":" + port } - target, ok := urlParts[TargetAttribute] + target, ok := urlParts[semconventions.AttributeHTTPTarget] if ok { url += target } else { diff --git a/exporter/awsxrayexporter/translator/http_test.go b/exporter/awsxrayexporter/translator/http_test.go index 96cc52c05170..96ac2b86d6f9 100644 --- a/exporter/awsxrayexporter/translator/http_test.go +++ b/exporter/awsxrayexporter/translator/http_test.go @@ -22,15 +22,16 @@ import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" "github.com/golang/protobuf/ptypes/wrappers" + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" "github.com/stretchr/testify/assert" ) -func TestClientSpanWithUrlAttribute(t *testing.T) { +func TestClientSpanWithURLAttribute(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "GET" - attributes[URLAttribute] = "https://api.example.com/users/junit" - attributes[StatusCodeAttribute] = 200 + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPURL] = "https://api.example.com/users/junit" + attributes[semconventions.AttributeHTTPStatusCode] = 200 span := constructHTTPClientSpan(attributes) filtered, httpData := makeHTTP(span) @@ -48,12 +49,12 @@ func TestClientSpanWithUrlAttribute(t *testing.T) { func TestClientSpanWithSchemeHostTargetAttributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "GET" - attributes[SchemeAttribute] = "https" - attributes[HostAttribute] = "api.example.com" - attributes[TargetAttribute] = "/users/junit" - attributes[StatusCodeAttribute] = 200 + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPScheme] = "https" + attributes[semconventions.AttributeHTTPHost] = "api.example.com" + attributes[semconventions.AttributeHTTPTarget] = "/users/junit" + attributes[semconventions.AttributeHTTPStatusCode] = 200 attributes["user.id"] = "junit" span := constructHTTPClientSpan(attributes) @@ -72,14 +73,14 @@ func TestClientSpanWithSchemeHostTargetAttributes(t *testing.T) { func TestClientSpanWithPeerAttributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "GET" - attributes[SchemeAttribute] = "http" - attributes[PeerHostAttribute] = "kb234.example.com" - attributes[PeerPortAttribute] = 8080 - attributes[PeerIpv4Attribute] = "10.8.17.36" - attributes[TargetAttribute] = "/users/junit" - attributes[StatusCodeAttribute] = 200 + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPScheme] = "http" + attributes[semconventions.AttributePeerHost] = "kb234.example.com" + attributes[semconventions.AttributePeerPort] = 8080 + attributes[semconventions.AttributePeerIpv4] = "10.8.17.36" + attributes[semconventions.AttributeHTTPTarget] = "/users/junit" + attributes[semconventions.AttributeHTTPStatusCode] = 200 span := constructHTTPClientSpan(attributes) filtered, httpData := makeHTTP(span) @@ -97,12 +98,12 @@ func TestClientSpanWithPeerAttributes(t *testing.T) { func TestClientSpanWithPeerIp4Attributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "GET" - attributes[SchemeAttribute] = "http" - attributes[PeerIpv4Attribute] = "10.8.17.36" - attributes[PeerPortAttribute] = "8080" - attributes[TargetAttribute] = "/users/junit" + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPScheme] = "http" + attributes[semconventions.AttributePeerIpv4] = "10.8.17.36" + attributes[semconventions.AttributePeerPort] = "8080" + attributes[semconventions.AttributeHTTPTarget] = "/users/junit" span := constructHTTPClientSpan(attributes) filtered, httpData := makeHTTP(span) @@ -119,12 +120,12 @@ func TestClientSpanWithPeerIp4Attributes(t *testing.T) { func TestClientSpanWithPeerIp6Attributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "GET" - attributes[SchemeAttribute] = "https" - attributes[PeerIpv6Attribute] = "2001:db8:85a3::8a2e:370:7334" - attributes[PeerPortAttribute] = "443" - attributes[TargetAttribute] = "/users/junit" + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPScheme] = "https" + attributes[semconventions.AttributePeerIpv6] = "2001:db8:85a3::8a2e:370:7334" + attributes[semconventions.AttributePeerPort] = "443" + attributes[semconventions.AttributeHTTPTarget] = "/users/junit" span := constructHTTPClientSpan(attributes) filtered, httpData := makeHTTP(span) @@ -139,14 +140,13 @@ func TestClientSpanWithPeerIp6Attributes(t *testing.T) { assert.True(t, strings.Contains(jsonStr, "https://2001:db8:85a3::8a2e:370:7334/users/junit")) } -func TestServerSpanWithUrlAttribute(t *testing.T) { +func TestServerSpanWithURLAttribute(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "GET" - attributes[URLAttribute] = "https://api.example.com/users/junit" - attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[ClientIPAttribute] = "192.168.15.32" - attributes[StatusCodeAttribute] = 200 + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPURL] = "https://api.example.com/users/junit" + attributes[semconventions.AttributeHTTPClientIP] = "192.168.15.32" + attributes[semconventions.AttributeHTTPStatusCode] = 200 span := constructHTTPServerSpan(attributes) filtered, httpData := makeHTTP(span) @@ -164,14 +164,13 @@ func TestServerSpanWithUrlAttribute(t *testing.T) { func TestServerSpanWithSchemeHostTargetAttributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "GET" - attributes[SchemeAttribute] = "https" - attributes[HostAttribute] = "api.example.com" - attributes[TargetAttribute] = "/users/junit" - attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[ClientIPAttribute] = "192.168.15.32" - attributes[StatusCodeAttribute] = 200 + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPScheme] = "https" + attributes[semconventions.AttributeHTTPHost] = "api.example.com" + attributes[semconventions.AttributeHTTPTarget] = "/users/junit" + attributes[semconventions.AttributeHTTPClientIP] = "192.168.15.32" + attributes[semconventions.AttributeHTTPStatusCode] = 200 span := constructHTTPServerSpan(attributes) filtered, httpData := makeHTTP(span) @@ -189,15 +188,14 @@ func TestServerSpanWithSchemeHostTargetAttributes(t *testing.T) { func TestServerSpanWithSchemeServernamePortTargetAttributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "GET" - attributes[SchemeAttribute] = "https" - attributes[ServerNameAttribute] = "api.example.com" - attributes[PortAttribute] = 443 - attributes[TargetAttribute] = "/users/junit" - attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[ClientIPAttribute] = "192.168.15.32" - attributes[StatusCodeAttribute] = 200 + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPScheme] = "https" + attributes[semconventions.AttributeHTTPServerName] = "api.example.com" + attributes[semconventions.AttributeHTTPHostPort] = 443 + attributes[semconventions.AttributeHTTPTarget] = "/users/junit" + attributes[semconventions.AttributeHTTPClientIP] = "192.168.15.32" + attributes[semconventions.AttributeHTTPStatusCode] = 200 span := constructHTTPServerSpan(attributes) filtered, httpData := makeHTTP(span) @@ -215,15 +213,14 @@ func TestServerSpanWithSchemeServernamePortTargetAttributes(t *testing.T) { func TestServerSpanWithSchemeNamePortTargetAttributes(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "GET" - attributes[SchemeAttribute] = "http" - attributes[HostNameAttribute] = "kb234.example.com" - attributes[PortAttribute] = 8080 - attributes[TargetAttribute] = "/users/junit" - attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[ClientIPAttribute] = "192.168.15.32" - attributes[StatusCodeAttribute] = 200 + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPScheme] = "http" + attributes[semconventions.AttributeHostName] = "kb234.example.com" + attributes[semconventions.AttributeHTTPHostPort] = 8080 + attributes[semconventions.AttributeHTTPTarget] = "/users/junit" + attributes[semconventions.AttributeHTTPClientIP] = "192.168.15.32" + attributes[semconventions.AttributeHTTPStatusCode] = 200 span := constructHTTPServerSpan(attributes) timeEvents := constructTimedEventsWithReceivedMessageEvent(span.EndTime) span.TimeEvents = &timeEvents @@ -243,9 +240,9 @@ func TestServerSpanWithSchemeNamePortTargetAttributes(t *testing.T) { func TestHttpStatusFromSpanStatus(t *testing.T) { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "GET" - attributes[URLAttribute] = "https://api.example.com/users/junit" + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPURL] = "https://api.example.com/users/junit" span := constructHTTPClientSpan(attributes) filtered, httpData := makeHTTP(span) diff --git a/exporter/awsxrayexporter/translator/segment.go b/exporter/awsxrayexporter/translator/segment.go index 758baa48c3b4..6ad9066370b9 100644 --- a/exporter/awsxrayexporter/translator/segment.go +++ b/exporter/awsxrayexporter/translator/segment.go @@ -26,52 +26,10 @@ import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" "github.com/golang/protobuf/ptypes/timestamp" + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" ) -// OpenTelemetry Semantic Convention values for general Span attribute names. -const ( - ComponentAttribute = "component" - PeerAddressAttribute = "peer.address" - PeerHostAttribute = "peer.hostname" - PeerIpv4Attribute = "peer.ipv4" - PeerIpv6Attribute = "peer.ipv6" - PeerPortAttribute = "peer.port" - PeerServiceAttribute = "peer.service" - IAMUserAttribute = "iam.user" -) - -// OpenTelemetry Semantic Convention values for component attribute values. -const ( - HTTPComponentType = "http" - GrpcComponentType = "grpc" - DbComponentType = "db" - MsgComponentType = "messaging" -) - -// OpenTelemetry Semantic Convention values for Resource attribute names. -const ( - ServiceNameAttribute = "service.name" - ServiceNamespaceAttribute = "service.namespace" - ServiceInstanceAttribute = "service.instance.id" - ServiceVersionAttribute = "service.version" - ContainerNameAttribute = "container.name" - ContainerImageAttribute = "container.image.name" - ContainerTagAttribute = "container.image.tag" - K8sClusterAttribute = "k8s.cluster.name" - K8sNamespaceAttribute = "k8s.namespace.name" - K8sPodAttribute = "k8s.pod.name" - K8sDeploymentAttribute = "k8s.deployment.name" - HostHostnameAttribute = "host.hostname" - HostIDAttribute = "host.id" - HostNameAttribute = "host.name" - HostTypeAttribute = "host.type" - CloudProviderAttribute = "cloud.provider" - CloudAccountAttribute = "cloud.account.id" - CloudRegionAttribute = "cloud.region" - CloudZoneAttribute = "cloud.zone" -) - // AWS X-Ray acceptable values for origin field. const ( OriginEC2 = "AWS::EC2::Instance" @@ -233,7 +191,7 @@ func determineAwsOrigin(resource *resourcepb.Resource) string { if resource == nil { return origin } - _, ok := resource.Labels[ContainerNameAttribute] + _, ok := resource.Labels[semconventions.AttributeContainerName] if ok { origin = OriginECS } @@ -325,9 +283,7 @@ func makeAnnotations(attributes map[string]string) (string, map[string]interface user string ) - user = attributes[IAMUserAttribute] - delete(attributes, IAMUserAttribute) - delete(attributes, ComponentAttribute) + delete(attributes, semconventions.AttributeComponent) mergeAnnotations(result, attributes) if len(result) == 0 { diff --git a/exporter/awsxrayexporter/translator/segment_test.go b/exporter/awsxrayexporter/translator/segment_test.go index c52125bf937f..c6f72ff96084 100644 --- a/exporter/awsxrayexporter/translator/segment_test.go +++ b/exporter/awsxrayexporter/translator/segment_test.go @@ -24,6 +24,7 @@ import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" "github.com/golang/protobuf/ptypes/timestamp" + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" "github.com/stretchr/testify/assert" ) @@ -35,12 +36,12 @@ var ( func TestClientSpanWithGrpcComponent(t *testing.T) { spanName := "platformapi.widgets.searchWidgets" attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = GrpcComponentType - attributes[MethodAttribute] = "GET" - attributes[SchemeAttribute] = "ipv6" - attributes[PeerIpv6Attribute] = "2607:f8b0:4000:80c::2004" - attributes[PeerPortAttribute] = "9443" - attributes[TargetAttribute] = spanName + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeGRPC + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPScheme] = "ipv6" + attributes[semconventions.AttributePeerIpv6] = "2607:f8b0:4000:80c::2004" + attributes[semconventions.AttributePeerPort] = "9443" + attributes[semconventions.AttributeHTTPTarget] = spanName labels := constructDefaultResourceLabels() span := constructClientSpan(nil, spanName, 0, "OK", attributes, labels) timeEvents := constructTimedEventsWithSentMessageEvent(span.StartTime) @@ -58,16 +59,14 @@ func TestClientSpanWithAwsSdkClient(t *testing.T) { parentSpanID := NewSegmentID() user := "testingT" attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "POST" - attributes[SchemeAttribute] = "https" - attributes[HostAttribute] = "dynamodb.us-east-1.amazonaws.com" - attributes[TargetAttribute] = "/" - attributes[UserAgentAttribute] = "aws-sdk-java/1.11.613 Windows_10/10.0 OpenJDK_64-Bit_server_VM/11.0.4+11-LTS" + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "POST" + attributes[semconventions.AttributeHTTPScheme] = "https" + attributes[semconventions.AttributeHTTPHost] = "dynamodb.us-east-1.amazonaws.com" + attributes[semconventions.AttributeHTTPTarget] = "/" attributes[AWSOperationAttribute] = "GetItem" attributes[AWSRequestIDAttribute] = "18BO1FEPJSSAOGNJEDPTPCMIU7VV4KQNSO5AEMVJF66Q9ASUAAJG" attributes[AWSTableNameAttribute] = "otel-dev-Testing" - attributes[IAMUserAttribute] = user labels := constructDefaultResourceLabels() span := constructClientSpan(parentSpanID, spanName, 0, "OK", attributes, labels) @@ -76,22 +75,20 @@ func TestClientSpanWithAwsSdkClient(t *testing.T) { assert.NotNil(t, jsonStr) assert.Nil(t, err) assert.True(t, strings.Contains(jsonStr, spanName)) - assert.True(t, strings.Contains(jsonStr, user)) - assert.False(t, strings.Contains(jsonStr, ComponentAttribute)) + assert.False(t, strings.Contains(jsonStr, user)) + assert.False(t, strings.Contains(jsonStr, semconventions.AttributeComponent)) } func TestServerSpanWithInternalServerError(t *testing.T) { spanName := "/api/locations" parentSpanID := NewSegmentID() - user := "testing" errorMessage := "java.lang.NullPointerException" attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "POST" - attributes[URLAttribute] = "https://api.example.org/api/locations" - attributes[TargetAttribute] = "/api/locations" - attributes[StatusCodeAttribute] = 500 - attributes[IAMUserAttribute] = user + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "POST" + attributes[semconventions.AttributeHTTPURL] = "https://api.example.org/api/locations" + attributes[semconventions.AttributeHTTPTarget] = "/api/locations" + attributes[semconventions.AttributeHTTPStatusCode] = 500 attributes[ErrorKindAttribute] = "java.lang.NullPointerException" labels := constructDefaultResourceLabels() span := constructServerSpan(parentSpanID, spanName, tracetranslator.OCInternal, errorMessage, attributes, labels) @@ -118,14 +115,14 @@ func TestClientSpanWithDbComponent(t *testing.T) { spanName := "call update_user_preference( ?, ?, ? )" enterpriseAppID := "25F2E73B-4769-4C79-9DF3-7EBE85D571EA" attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = DbComponentType - attributes[DbTypeAttribute] = "sql" - attributes[DbInstanceAttribute] = "customers" - attributes[DbStatementAttribute] = spanName - attributes[DbUserAttribute] = "userprefsvc" - attributes[PeerAddressAttribute] = "mysql://db.dev.example.com:3306" - attributes[PeerHostAttribute] = "db.dev.example.com" - attributes[PeerPortAttribute] = "3306" + attributes[semconventions.AttributeComponent] = "db" + attributes[semconventions.AttributeDBType] = "sql" + attributes[semconventions.AttributeDBInstance] = "customers" + attributes[semconventions.AttributeDBStatement] = spanName + attributes[semconventions.AttributeDBUser] = "userprefsvc" + attributes[semconventions.AttributePeerAddress] = "mysql://db.dev.example.com:3306" + attributes[semconventions.AttributePeerHost] = "db.dev.example.com" + attributes[semconventions.AttributePeerPort] = "3306" attributes["enterprise.app.id"] = enterpriseAppID labels := constructDefaultResourceLabels() span := constructClientSpan(nil, spanName, 0, "OK", attributes, labels) @@ -155,12 +152,12 @@ func TestClientSpanWithDbComponent(t *testing.T) { func TestSpanWithInvalidTraceId(t *testing.T) { spanName := "platformapi.widgets.searchWidgets" attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = GrpcComponentType - attributes[MethodAttribute] = "GET" - attributes[SchemeAttribute] = "ipv6" - attributes[PeerIpv6Attribute] = "2607:f8b0:4000:80c::2004" - attributes[PeerPortAttribute] = "9443" - attributes[TargetAttribute] = spanName + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeGRPC + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPScheme] = "ipv6" + attributes[semconventions.AttributePeerIpv6] = "2607:f8b0:4000:80c::2004" + attributes[semconventions.AttributePeerPort] = "9443" + attributes[semconventions.AttributeHTTPTarget] = spanName labels := constructDefaultResourceLabels() span := constructClientSpan(nil, spanName, 0, "OK", attributes, labels) timeEvents := constructTimedEventsWithSentMessageEvent(span.StartTime) @@ -264,19 +261,18 @@ func constructSpanAttributes(attributes map[string]interface{}) map[string]*trac func constructDefaultResourceLabels() map[string]string { labels := make(map[string]string) - labels[ServiceNameAttribute] = "signup_aggregator" - labels[ServiceVersionAttribute] = "1.1.12" - labels[ContainerNameAttribute] = "signup_aggregator" - labels[ContainerImageAttribute] = "otel/signupaggregator" - labels[ContainerTagAttribute] = "v1" - labels[K8sClusterAttribute] = "production" - labels[K8sNamespaceAttribute] = "default" - labels[K8sDeploymentAttribute] = "signup_aggregator" - labels[K8sPodAttribute] = "signup_aggregator-x82ufje83" - labels[CloudProviderAttribute] = "aws" - labels[CloudAccountAttribute] = "123456789" - labels[CloudRegionAttribute] = "us-east-1" - labels[CloudZoneAttribute] = "us-east-1c" + labels[semconventions.AttributeServiceName] = "signup_aggregator" + labels[semconventions.AttributeContainerName] = "signup_aggregator" + labels[semconventions.AttributeContainerImage] = "otel/signupaggregator" + labels[semconventions.AttributeContainerTag] = "v1" + labels[semconventions.AttributeK8sCluster] = "production" + labels[semconventions.AttributeK8sNamespace] = "default" + labels[semconventions.AttributeK8sDeployment] = "signup_aggregator" + labels[semconventions.AttributeK8sPod] = "signup_aggregator-x82ufje83" + labels[semconventions.AttributeCloudProvider] = "aws" + labels[semconventions.AttributeCloudAccount] = "123456789" + labels[semconventions.AttributeCloudRegion] = "us-east-1" + labels[semconventions.AttributeCloudZone] = "us-east-1c" return labels } @@ -293,18 +289,21 @@ func convertTimeToTimestamp(t time.Time) *timestamp.Timestamp { func constructTimedEventsWithReceivedMessageEvent(tm *timestamp.Timestamp) tracepb.Span_TimeEvents { eventAttrMap := make(map[string]*tracepb.AttributeValue) - eventAttrMap[MessageTypeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ - StringValue: &tracepb.TruncatableString{Value: "RECEIVED"}, - }} - eventAttrMap[MessageIDAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + eventAttrMap[semconventions.AttributeMessageType] = + &tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ + StringValue: &tracepb.TruncatableString{Value: "RECEIVED"}, + }} + eventAttrMap[semconventions.AttributeMessageID] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ IntValue: 1, }} - eventAttrMap[MessageCompressedSizeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ - IntValue: 6478, - }} - eventAttrMap[MessageUncompressedSizeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ - IntValue: 12452, - }} + eventAttrMap[semconventions.AttributeMessageCompressedSize] = + &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: 6478, + }} + eventAttrMap[semconventions.AttributeMessageUncompressedSize] = + &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: 12452, + }} eventAttrbutes := tracepb.Span_Attributes{ AttributeMap: eventAttrMap, DroppedAttributesCount: 0, @@ -330,15 +329,17 @@ func constructTimedEventsWithReceivedMessageEvent(tm *timestamp.Timestamp) trace func constructTimedEventsWithSentMessageEvent(tm *timestamp.Timestamp) tracepb.Span_TimeEvents { eventAttrMap := make(map[string]*tracepb.AttributeValue) - eventAttrMap[MessageTypeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ - StringValue: &tracepb.TruncatableString{Value: "SENT"}, - }} - eventAttrMap[MessageIDAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + eventAttrMap[semconventions.AttributeMessageType] = + &tracepb.AttributeValue{Value: &tracepb.AttributeValue_StringValue{ + StringValue: &tracepb.TruncatableString{Value: "SENT"}, + }} + eventAttrMap[semconventions.AttributeMessageID] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ IntValue: 1, }} - eventAttrMap[MessageUncompressedSizeAttribute] = &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ - IntValue: 7480, - }} + eventAttrMap[semconventions.AttributeMessageUncompressedSize] = + &tracepb.AttributeValue{Value: &tracepb.AttributeValue_IntValue{ + IntValue: 7480, + }} eventAttrbutes := tracepb.Span_Attributes{ AttributeMap: eventAttrMap, DroppedAttributesCount: 0, diff --git a/exporter/awsxrayexporter/translator/service.go b/exporter/awsxrayexporter/translator/service.go index 863d5cdb50f0..8a566fbf5f92 100644 --- a/exporter/awsxrayexporter/translator/service.go +++ b/exporter/awsxrayexporter/translator/service.go @@ -16,6 +16,7 @@ package translator import ( resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" ) // ServiceData provides the shape for unmarshalling service version. @@ -35,7 +36,7 @@ func makeService(resource *resourcepb.Resource) *ServiceData { } for key, value := range resource.Labels { switch key { - case ServiceVersionAttribute: + case semconventions.AttributeContainerTag: ver = value } } diff --git a/exporter/awsxrayexporter/translator/service_test.go b/exporter/awsxrayexporter/translator/service_test.go index 316cb16aa9ce..8b0073abdf7c 100644 --- a/exporter/awsxrayexporter/translator/service_test.go +++ b/exporter/awsxrayexporter/translator/service_test.go @@ -37,7 +37,7 @@ func TestServiceFromResource(t *testing.T) { } jsonStr := w.String() testWriters.release(w) - assert.True(t, strings.Contains(jsonStr, "1.1.12")) + assert.True(t, strings.Contains(jsonStr, "v1")) } func TestServiceFromNullResource(t *testing.T) { diff --git a/exporter/awsxrayexporter/translator/sql.go b/exporter/awsxrayexporter/translator/sql.go index 1b20757c8cd0..185d0824ee27 100644 --- a/exporter/awsxrayexporter/translator/sql.go +++ b/exporter/awsxrayexporter/translator/sql.go @@ -14,12 +14,8 @@ package translator -// OpenTelemetry Semantic Convention attribute names for database related attributes -const ( - DbTypeAttribute = "db.type" - DbInstanceAttribute = "db.instance" - DbStatementAttribute = "db.statement" - DbUserAttribute = "db.user" +import ( + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" ) // SQLData provides the shape for unmarshalling sql data. @@ -44,21 +40,22 @@ func makeSQL(attributes map[string]string) (map[string]string, *SQLData) { dbStatement string dbUser string ) - componentType := attributes[ComponentAttribute] - if componentType == HTTPComponentType || componentType == GrpcComponentType { + componentType := attributes[semconventions.AttributeComponent] + if componentType == semconventions.ComponentTypeHTTP || + componentType == semconventions.ComponentTypeGRPC { return attributes, nil } for key, value := range attributes { switch key { - case PeerAddressAttribute: + case semconventions.AttributePeerAddress: dbURL = value - case DbTypeAttribute: + case semconventions.AttributeDBType: dbType = value - case DbInstanceAttribute: + case semconventions.AttributeDBInstance: dbInstance = value - case DbStatementAttribute: + case semconventions.AttributeDBStatement: dbStatement = value - case DbUserAttribute: + case semconventions.AttributeDBUser: dbUser = value default: filtered[key] = value diff --git a/exporter/awsxrayexporter/translator/sql_test.go b/exporter/awsxrayexporter/translator/sql_test.go index 04d2117011a0..1efd14503a1b 100644 --- a/exporter/awsxrayexporter/translator/sql_test.go +++ b/exporter/awsxrayexporter/translator/sql_test.go @@ -18,19 +18,20 @@ import ( "strings" "testing" + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" "github.com/stretchr/testify/assert" ) func TestClientSpanWithStatementAttribute(t *testing.T) { attributes := make(map[string]string) - attributes[ComponentAttribute] = DbComponentType - attributes[DbTypeAttribute] = "sql" - attributes[DbInstanceAttribute] = "customers" - attributes[DbStatementAttribute] = "SELECT * FROM user WHERE user_id = ?" - attributes[DbUserAttribute] = "readonly_user" - attributes[PeerAddressAttribute] = "mysql://db.example.com:3306" - attributes[PeerHostAttribute] = "db.example.com" - attributes[PeerPortAttribute] = "3306" + attributes[semconventions.AttributeComponent] = "db" + attributes[semconventions.AttributeDBType] = "sql" + attributes[semconventions.AttributeDBInstance] = "customers" + attributes[semconventions.AttributeDBStatement] = "SELECT * FROM user WHERE user_id = ?" + attributes[semconventions.AttributeDBUser] = "readonly_user" + attributes[semconventions.AttributePeerAddress] = "mysql://db.example.com:3306" + attributes[semconventions.AttributePeerHost] = "db.example.com" + attributes[semconventions.AttributePeerPort] = "3306" filtered, sqlData := makeSQL(attributes) @@ -45,16 +46,16 @@ func TestClientSpanWithStatementAttribute(t *testing.T) { assert.True(t, strings.Contains(jsonStr, "mysql://db.example.com:3306/customers")) } -func TestClientSpanWithHttpComponentAttribute(t *testing.T) { +func TestClientSpanWithHttpComponent(t *testing.T) { attributes := make(map[string]string) - attributes[ComponentAttribute] = HTTPComponentType - attributes[DbTypeAttribute] = "sql" - attributes[DbInstanceAttribute] = "customers" - attributes[DbStatementAttribute] = "SELECT * FROM user WHERE user_id = ?" - attributes[DbUserAttribute] = "readonly_user" - attributes[PeerAddressAttribute] = "mysql://db.example.com:3306" - attributes[PeerHostAttribute] = "db.example.com" - attributes[PeerPortAttribute] = "3306" + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeDBType] = "sql" + attributes[semconventions.AttributeDBInstance] = "customers" + attributes[semconventions.AttributeDBStatement] = "SELECT * FROM user WHERE user_id = ?" + attributes[semconventions.AttributeDBUser] = "readonly_user" + attributes[semconventions.AttributePeerAddress] = "mysql://db.example.com:3306" + attributes[semconventions.AttributePeerHost] = "db.example.com" + attributes[semconventions.AttributePeerPort] = "3306" filtered, sqlData := makeSQL(attributes) diff --git a/exporter/awsxrayexporter/translator/writer_pool_test.go b/exporter/awsxrayexporter/translator/writer_pool_test.go index 83d4384eb1d4..82448def1c9a 100644 --- a/exporter/awsxrayexporter/translator/writer_pool_test.go +++ b/exporter/awsxrayexporter/translator/writer_pool_test.go @@ -20,6 +20,7 @@ import ( "testing" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" "github.com/stretchr/testify/assert" "go.uber.org/zap" ) @@ -70,11 +71,10 @@ func BenchmarkWithPool(b *testing.B) { func constructWriterPoolSpan() *tracepb.Span { attributes := make(map[string]interface{}) - attributes[ComponentAttribute] = HTTPComponentType - attributes[MethodAttribute] = "GET" - attributes[URLAttribute] = "https://api.example.com/users/junit" - attributes[UserAgentAttribute] = "PostmanRuntime/7.16.3" - attributes[ClientIPAttribute] = "192.168.15.32" - attributes[StatusCodeAttribute] = 200 + attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP + attributes[semconventions.AttributeHTTPMethod] = "GET" + attributes[semconventions.AttributeHTTPURL] = "https://api.example.com/users/junit" + attributes[semconventions.AttributeHTTPClientIP] = "192.168.15.32" + attributes[semconventions.AttributeHTTPStatusCode] = 200 return constructHTTPServerSpan(attributes) } From 47c88e219d71dfe6a78bceb322285ff2d0ba59cf Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Thu, 5 Dec 2019 10:40:14 -0600 Subject: [PATCH 55/59] switched to status conversion functions defined in collector --- exporter/awsxrayexporter/go.mod | 2 +- exporter/awsxrayexporter/go.sum | 3 ++ exporter/awsxrayexporter/translator/cause.go | 3 +- exporter/awsxrayexporter/translator/http.go | 44 +------------------- 4 files changed, 7 insertions(+), 45 deletions(-) diff --git a/exporter/awsxrayexporter/go.mod b/exporter/awsxrayexporter/go.mod index bfc7c7b8718c..6d99a4c44354 100644 --- a/exporter/awsxrayexporter/go.mod +++ b/exporter/awsxrayexporter/go.mod @@ -110,7 +110,7 @@ require ( github.com/olivere/env v1.1.0 // indirect github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 // indirect // TODO: pin a released version - github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191203213105-fe3782c76de2 + github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205151336-8e2473c5e754 github.com/opentracing/basictracer-go v1.0.0 // indirect github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.4 // indirect github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c // indirect diff --git a/exporter/awsxrayexporter/go.sum b/exporter/awsxrayexporter/go.sum index 07b4d70621b2..4348cb32c4ca 100644 --- a/exporter/awsxrayexporter/go.sum +++ b/exporter/awsxrayexporter/go.sum @@ -1506,6 +1506,8 @@ github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb0c1d1e/go.mod h1:zZf9V+57o0Fd3ik5HzaHamVsWhudJTOwnKw9kJvWoDo= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191203213105-fe3782c76de2 h1:lrdCxCJpccXFU3jCWB869fy5yRiSRRa4VTVJgLFpUOw= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191203213105-fe3782c76de2/go.mod h1:pL3jClof5EzaEU97itKyjLg4b8PFUwG87dM51Bnobhc= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205151336-8e2473c5e754 h1:gG2Ig+OgvWCyKLk3/Mz10HkSFolKjsWerT8kE9u+qig= +github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205151336-8e2473c5e754/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 h1:lM6RxxfUMrYL/f8bWEUqdXrANWtrL7Nndbm9iFN0DlU= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9 h1:QsgXACQhd9QJhEmRumbsMQQvBtmdS0mafoVEBplWXEg= @@ -1839,6 +1841,7 @@ github.com/uber/jaeger-client-go v2.16.0+incompatible h1:Q2Pp6v3QYiocMxomCaJuwQG github.com/uber/jaeger-client-go v2.16.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/uber/jaeger-lib v2.0.0+incompatible h1:iMSCV0rmXEogjNWPh2D0xk9YVKvrtGoHJNe9ebLu/pw= github.com/uber/jaeger-lib v2.0.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/uber/tchannel-go v1.10.0 h1:YOihLHuvkwT3nzvpgqFtexFW+pb5vD1Tz7h/bIWApgE= github.com/uber/tchannel-go v1.10.0/go.mod h1:Rrgz1eL8kMjW/nEzZos0t+Heq0O4LhnUJVA32OvWKHo= github.com/ugorji/go v1.1.4 h1:j4s+tAvLfL3bZyefP2SEWmhBzmuIlH/eqNuPdFPgngw= diff --git a/exporter/awsxrayexporter/translator/cause.go b/exporter/awsxrayexporter/translator/cause.go index f345158ef2da..df653b39e9bc 100644 --- a/exporter/awsxrayexporter/translator/cause.go +++ b/exporter/awsxrayexporter/translator/cause.go @@ -19,6 +19,7 @@ import ( tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" + tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" ) // OpenTelemetry Semantic Convention attribute names for error/fault/exception related attributes @@ -111,6 +112,6 @@ func makeCause(status *tracepb.Status, attributes map[string]string) (isError, i } func isClientError(code int32) bool { - httpStatus := convertToHTTPStatusCode(code) + httpStatus := tracetranslator.HTTPStatusCodeFromOCStatus(code) return httpStatus >= 400 && httpStatus < 500 } diff --git a/exporter/awsxrayexporter/translator/http.go b/exporter/awsxrayexporter/translator/http.go index 1165f5a2d0e9..933588235090 100644 --- a/exporter/awsxrayexporter/translator/http.go +++ b/exporter/awsxrayexporter/translator/http.go @@ -15,7 +15,6 @@ package translator import ( - "net/http" "strconv" tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" @@ -45,47 +44,6 @@ type ResponseData struct { ContentLength int64 `json:"content_length,omitempty"` } -func convertToHTTPStatusCode(code int32) int64 { - switch code { - case tracetranslator.OCOK: - return http.StatusOK - case tracetranslator.OCCancelled: - return 499 // Client Closed Request - case tracetranslator.OCUnknown: - return http.StatusInternalServerError - case tracetranslator.OCInvalidArgument: - return http.StatusBadRequest - case tracetranslator.OCDeadlineExceeded: - return http.StatusGatewayTimeout - case tracetranslator.OCNotFound: - return http.StatusNotFound - case tracetranslator.OCAlreadyExists: - return http.StatusConflict - case tracetranslator.OCPermissionDenied: - return http.StatusForbidden - case tracetranslator.OCResourceExhausted: - return http.StatusTooManyRequests - case tracetranslator.OCFailedPrecondition: - return http.StatusBadRequest - case tracetranslator.OCAborted: - return http.StatusConflict - case tracetranslator.OCOutOfRange: - return http.StatusBadRequest - case tracetranslator.OCUnimplemented: - return http.StatusNotImplemented - case tracetranslator.OCInternal: - return http.StatusInternalServerError - case tracetranslator.OCUnavailable: - return http.StatusServiceUnavailable - case tracetranslator.OCDataLoss: - return http.StatusInternalServerError - case tracetranslator.OCUnauthenticated: - return http.StatusUnauthorized - default: - return http.StatusInternalServerError - } -} - func makeHTTP(span *tracepb.Span) (map[string]string, *HTTPData) { var ( info HTTPData @@ -151,7 +109,7 @@ func makeHTTP(span *tracepb.Span) (map[string]string, *HTTPData) { } if info.Response.Status == 0 { - info.Response.Status = convertToHTTPStatusCode(span.Status.Code) + info.Response.Status = int64(tracetranslator.HTTPStatusCodeFromOCStatus(span.Status.Code)) } info.Response.ContentLength = extractResponseSizeFromEvents(span) From 3915e0facb3dcc042d63f45fefeca87424697787 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Sat, 7 Dec 2019 10:37:05 -0600 Subject: [PATCH 56/59] fix latest code review issues --- exporter/awsxrayexporter/doc.go | 2 +- exporter/awsxrayexporter/go.mod | 163 +- exporter/awsxrayexporter/go.sum | 1458 +---------------- exporter/awsxrayexporter/translator/cause.go | 15 - .../awsxrayexporter/translator/cause_test.go | 25 - .../awsxrayexporter/translator/segment.go | 4 +- .../translator/segment_test.go | 2 +- 7 files changed, 50 insertions(+), 1619 deletions(-) diff --git a/exporter/awsxrayexporter/doc.go b/exporter/awsxrayexporter/doc.go index bd542c44e340..ec2c4046b6a6 100644 --- a/exporter/awsxrayexporter/doc.go +++ b/exporter/awsxrayexporter/doc.go @@ -12,6 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -// Package awsxrayexporter implements an Otel Collector exporter that sends trace data to +// Package awsxrayexporter implements an OpenTelemetry Collector exporter that sends trace data to // AWS X-Ray in the region the collector is running in using the PutTraceSegments API. package awsxrayexporter diff --git a/exporter/awsxrayexporter/go.mod b/exporter/awsxrayexporter/go.mod index 6d99a4c44354..228808d3cb2d 100644 --- a/exporter/awsxrayexporter/go.mod +++ b/exporter/awsxrayexporter/go.mod @@ -3,170 +3,17 @@ module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxra go 1.12 require ( - cloud.google.com/go/datastore v1.0.0 // indirect - collectd.org v0.3.0 // indirect - dmitri.shuralyov.com/route/github v0.0.0-20180323232716-ce4edef1f8c9 // indirect - git.apache.org/thrift.git v0.13.0 // indirect - github.com/AaronO/go-git-http v0.0.0-20161214145340-1d9485b3a98f // indirect - github.com/aclements/go-gg v0.0.0-20170323211221-abd1f791f5ee // indirect - github.com/aclements/go-moremath v0.0.0-20190830160640-d16893ddf098 // indirect - github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 // indirect - github.com/ajstarks/deck v0.0.0-20191009173945-82d717002242 // indirect - github.com/ajstarks/svgo v0.0.0-20190826172357-de52242f3d65 // indirect - github.com/andygrunwald/go-gerrit v0.0.0-20191101112536-3f5e365ccf57 // indirect - github.com/apache/arrow/go/arrow v0.0.0-20191105160933-1afbcb6bb2a6 // indirect - github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a // indirect + github.com/apache/thrift v0.12.0 // indirect github.com/aws/aws-sdk-go v1.23.12 - github.com/aws/aws-sdk-go-v2 v0.15.0 // indirect - github.com/aws/aws-xray-sdk-go v0.9.4 // indirect - github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59 // indirect - github.com/beyang/hgo v0.0.0-20150825035631-d45f1891a48a // indirect - github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40 // indirect - github.com/boltdb/bolt v1.3.1 // indirect - github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b // indirect - github.com/bsm/sarama-cluster v2.1.15+incompatible // indirect - github.com/cactus/go-statsd-client/statsd v0.0.0-20191030180650-a68a2246f89c // indirect - github.com/casbin/casbin v1.9.1 // indirect github.com/census-instrumentation/opencensus-proto v0.2.1 - github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect - github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec // indirect - github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0 // indirect - github.com/coreos/etcd v3.3.17+incompatible // indirect - github.com/crossdock/crossdock-go v0.0.0-20160816171116-049aabb0122b // indirect - github.com/cznic/cc v0.0.0-20181122101902-d673e9b70d4d // indirect - github.com/cznic/fileutil v0.0.0-20181122101858-4d67cfea8c87 // indirect - github.com/cznic/golex v0.0.0-20181122101858-9c343928389c // indirect - github.com/cznic/internal v0.0.0-20181122101858-3279554c546e // indirect - github.com/cznic/ir v0.0.0-20181122101859-da7ba2ecce8b // indirect - github.com/cznic/lex v0.0.0-20181122101858-ce0fb5e9bb1b // indirect - github.com/cznic/lexer v0.0.0-20181122101858-e884d4bd112e // indirect - github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 // indirect - github.com/cznic/strutil v0.0.0-20181122101858-275e90344537 // indirect - github.com/cznic/xc v0.0.0-20181122101856-45b06973881e // indirect - github.com/dgraph-io/badger v1.6.0 // indirect - github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8 // indirect - github.com/dimchansky/utfbom v1.1.0 // indirect - github.com/disintegration/gift v1.2.1 // indirect - github.com/djherbis/buffer v1.1.0 // indirect - github.com/djherbis/nio v2.0.3+incompatible // indirect - github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 // indirect - github.com/emicklei/go-restful-swagger12 v0.0.0-20170926063155-7524189396c6 // indirect - github.com/fogleman/gg v1.3.0 // indirect - github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8 // indirect - github.com/garyburd/redigo v1.6.0 // indirect - github.com/gin-gonic/gin v1.4.0 // indirect - github.com/glycerine/go-unsnap-stream v0.0.0-20190901134440-81cf024a9e0a // indirect - github.com/go-chi/chi v4.0.2+incompatible // indirect - github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab // indirect - github.com/gobuffalo/buffalo v0.15.0 // indirect - github.com/gocql/gocql v0.0.0-20191102131523-9faa4c08d962 // indirect - github.com/godbus/dbus v4.1.0+incompatible // indirect - github.com/goji/param v0.0.0-20160927210335-d7f49fd7d1ed // indirect - github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect github.com/golang/protobuf v1.3.2 - github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac // indirect - github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82 // indirect - github.com/gonum/internal v0.0.0-20181124074243-f884aa714029 // indirect - github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9 // indirect - github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9 // indirect - github.com/gorilla/handlers v1.4.2 // indirect - github.com/gorilla/schema v1.1.0 // indirect - github.com/graph-gophers/graphql-go v0.0.0-20191031232829-adde0d0f76a3 // indirect - github.com/hashicorp/go-hclog v0.10.0 // indirect - github.com/hashicorp/go-plugin v1.0.1 // indirect - github.com/hudl/fargo v1.3.0 // indirect - github.com/iancoleman/strcase v0.0.0-20190422225806-e506e3ef7365 // indirect - github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6 // indirect - github.com/inconshreveable/go-vhost v0.0.0-20160627193104-06d84117953b // indirect - github.com/inconshreveable/log15 v0.0.0-20180818164646-67afb5ed74ec // indirect - github.com/influxdata/flux v0.53.0 // indirect - github.com/influxdata/influxdb1-client v0.0.0-20190809212627-fc22c7df067e // indirect - github.com/influxdata/influxql v1.0.1 // indirect - github.com/influxdata/roaring v0.4.12 // indirect - github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368 // indirect - github.com/jsternberg/zap-logfmt v1.2.0 // indirect - github.com/jung-kurt/gofpdf v1.13.0 // indirect - github.com/justinas/alice v1.2.0 // indirect - github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef // indirect - github.com/kisielk/sqlstruct v0.0.0-20150923205031-648daed35d49 // indirect - github.com/klauspost/compress v1.9.1 // indirect - github.com/klauspost/pgzip v1.2.1 // indirect - github.com/lightstep/lightstep-tracer-go v0.17.1 // indirect - github.com/lyft/protoc-gen-star v0.4.11 // indirect - github.com/m3db/prometheus_client_golang v0.8.1 // indirect - github.com/m3db/prometheus_client_model v0.1.0 // indirect - github.com/m3db/prometheus_common v0.1.0 // indirect - github.com/m3db/prometheus_procfs v0.8.1 // indirect - github.com/marstr/goalias v0.0.0-20180416201319-8dff9a14db64 // indirect - github.com/marstr/guid v1.1.0 // indirect - github.com/marstr/randname v0.0.0-20181206212954-d5b0f288ab8c // indirect - github.com/martini-contrib/render v0.0.0-20150707142108-ec18f8345a11 // indirect - github.com/mjibson/appstats v0.0.0-20151004071057-0542d5f0e87e // indirect - github.com/montanaflynn/stats v0.5.0 // indirect - github.com/nats-io/nats.go v1.9.1 // indirect - github.com/oklog/oklog v0.3.2 // indirect - github.com/olekukonko/tablewriter v0.0.1 // indirect - github.com/olivere/elastic v6.2.26+incompatible // indirect - github.com/olivere/env v1.1.0 // indirect - github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 // indirect + github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect + github.com/mattn/go-isatty v0.0.10 // indirect // TODO: pin a released version github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205151336-8e2473c5e754 - github.com/opentracing/basictracer-go v1.0.0 // indirect - github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.4 // indirect - github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c // indirect - github.com/paulbellamy/ratecounter v0.2.0 // indirect - github.com/pborman/getopt v0.0.0-20190409184431-ee0cd42419d3 // indirect - github.com/performancecopilot/speed v3.0.0+incompatible // indirect - github.com/peterh/liner v1.1.0 // indirect - github.com/philhofer/fwd v1.0.0 // indirect - github.com/pkg/sftp v1.10.1 // indirect - github.com/pressly/chi v4.0.2+incompatible // indirect - github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237 // indirect - github.com/retailnext/hllpp v1.0.0 // indirect - github.com/rogpeppe/go-charset v0.0.0-20190617161244-0dc95cdf6f31 // indirect - github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd // indirect - github.com/samuel/go-thrift v0.0.0-20190219015601-e8b6b52668fe // indirect - github.com/shopspring/decimal v0.0.0-20191009025716-f1972eb1d1f5 // indirect - github.com/shurcooL/frontend v0.0.0-20180531171852-7e359e4b7b17 // indirect - github.com/shurcooL/githubv4 v0.0.0-20191102174205-af46314aec7b // indirect - github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f // indirect - github.com/shurcooL/httpgzip v0.0.0-20190720172056-320755c1c1b0 // indirect - github.com/shurcooL/markdownfmt v0.0.0-20190409060426-3438a10682f5 // indirect - github.com/shurcooL/notificationsapp v0.0.0-20181114034014-0a6e54cc4198 // indirect - github.com/shurcooL/resume v0.0.0-20190824223711-dc47c8f77a80 // indirect - github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9 // indirect - github.com/sony/gobreaker v0.4.1 // indirect - github.com/stathat/go v1.0.0 // indirect - github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a // indirect github.com/stretchr/testify v1.4.0 - github.com/syndtr/goleveldb v1.0.0 // indirect - github.com/tambet/go-asana v0.0.0-20161015030314-6c0cb7090a14 // indirect - github.com/tinylib/msgp v1.1.0 // indirect - github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2 // indirect - github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b // indirect - github.com/tj/go-spin v1.1.0 // indirect - github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31 // indirect - github.com/uber-go/tally v3.3.12+incompatible // indirect - github.com/unknwon/cae v1.0.0 // indirect - github.com/urfave/cli v1.22.1 // indirect - github.com/urfave/negroni v1.0.0 // indirect - github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c // indirect - github.com/xdg/stringprep v1.0.0 // indirect - go.etcd.io/etcd v3.3.17+incompatible // indirect - go.uber.org/automaxprocs v1.2.0 // indirect go.uber.org/zap v1.10.0 golang.org/x/net v0.0.0-20190923162816-aa69164e4478 - gopkg.in/cheggaaa/pb.v1 v1.0.28 // indirect - gopkg.in/gcfg.v1 v1.2.3 // indirect - gopkg.in/pipe.v2 v2.0.0-20140414041502-3c2ca4d52544 // indirect - gopkg.in/tomb.v2 v2.0.0-20161208151619-d5d1b5820637 // indirect - gopkg.in/validator.v2 v2.0.0-20191029180049-30e574a82075 // indirect - gopkg.in/vmihailenco/msgpack.v2 v2.9.1 // indirect - gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0 // indirect - honnef.co/go/js/dom v0.0.0-20190526011328-ebc4cf92d81f // indirect - istio.io/gogo-genproto v0.0.0-20191024203824-d079cc8b1d55 // indirect - sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 // indirect - sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67 // indirect - sourcegraph.com/sourcegraph/go-git v0.0.0-20190828120159-87e0e4ab9e95 // indirect - sourcegraph.com/sourcegraph/go-vcs v0.0.0-20190409071845-d784c9520ccd // indirect + golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e // indirect + golang.org/x/tools v0.0.0-20191030062658-86caa796c7ab // indirect ) diff --git a/exporter/awsxrayexporter/go.sum b/exporter/awsxrayexporter/go.sum index 4348cb32c4ca..c8a49efe1a34 100644 --- a/exporter/awsxrayexporter/go.sum +++ b/exporter/awsxrayexporter/go.sum @@ -1,43 +1,16 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.36.0/go.mod h1:RUoy9p/M4ge0HzT8L+SDZ8jg+Q6fth0CiBuhFJpSV40= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= cloud.google.com/go v0.44.1 h1:7gXaI3V/b4DRaK++rTqhRajcT7z8gtP0qKMZTXqlySM= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.47.0 h1:1JUtpcY9E7+eTospEwWS2QXP3DEn7poB3E2j0jN74mM= -cloud.google.com/go/datastore v1.0.0 h1:Kt+gOPPp2LEPWp8CSfxhsM8ik9CcyE/gYu+0r+RnZvM= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -collectd.org v0.3.0 h1:iNBHGw1VvPJxH2B6RiFWFZ+vsjo1lCdRszBeOuwGi00= -collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= contrib.go.opencensus.io/exporter/jaeger v0.1.1-0.20190430175949-e8b55949d948 h1:xdP25yLqNGSnpfDmEChwA9ZuKLdiyL0jqJKPm/Ypfag= contrib.go.opencensus.io/exporter/jaeger v0.1.1-0.20190430175949-e8b55949d948/go.mod h1:ukdzwIYYHgZ7QYtwVFQUjiT28BJHiMhTERo32s6qVgM= contrib.go.opencensus.io/exporter/ocagent v0.6.0 h1:Z1n6UAyr0QwM284yUuh5Zd8JlvxUGAhFZcgMJkMPrGM= contrib.go.opencensus.io/exporter/ocagent v0.6.0/go.mod h1:zmKjrJcdo0aYcVS7bmEeSEBLPA9YJp5bjrofdU3pIXs= contrib.go.opencensus.io/exporter/prometheus v0.1.0 h1:SByaIoWwNgMdPSgl5sMqM2KDE5H/ukPWBRo314xiDvg= contrib.go.opencensus.io/exporter/prometheus v0.1.0/go.mod h1:cGFniUXGZlKRjzOyuZJ6mgB+PgBcCIa79kEKR8YCW+A= -contrib.go.opencensus.io/exporter/zipkin v0.1.1 h1:PR+1zWqY8ceXs1qDQQIlgXe+sdiwCf0n32bH4+Epk8g= -contrib.go.opencensus.io/exporter/zipkin v0.1.1/go.mod h1:GMvdSl3eJ2gapOaLKzTKE3qDgUkJ86k9k3yY2eqwkzc= contrib.go.opencensus.io/resource v0.1.2 h1:b4WFJV8u7/NzPWHeTqj3Ec2AW8OGhtJxC/hbphIOvbU= contrib.go.opencensus.io/resource v0.1.2/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= -dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3 h1:hJiie5Bf3QucGRa4ymsAUOxyhYwGEz1xrsVk0P8erlw= -dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= -dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0 h1:SPOUaucgtVls75mg+X7CXigS71EnsfVUK/2CgVrwqgw= -dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= -dmitri.shuralyov.com/route/github v0.0.0-20180323232716-ce4edef1f8c9 h1:7rFRFegk+s3dVmOi/f8wDQ5O+uI29iNA7MzzMFVOmzU= -dmitri.shuralyov.com/route/github v0.0.0-20180323232716-ce4edef1f8c9/go.mod h1:5oSmIM2HxgXgKSUK0E6F3pcAfHztRSpKaVxglL+HLSk= -dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412 h1:GvWw74lx5noHocd+f6HBMXK6DuggBB1dhVkuGZbv7qM= -dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= -dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c h1:ivON6cwHK1OH26MZyWDCnbTRZZf0IhNsENoNAKFS1g4= -dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= -git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= -git.apache.org/thrift.git v0.13.0 h1:/3bz5WZ+sqYArk7MBBBbDufMxKKOA56/6JO6psDpUDY= -git.apache.org/thrift.git v0.13.0/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= -github.com/AaronO/go-git-http v0.0.0-20161214145340-1d9485b3a98f h1:x/RDwGRneK2/891S2o7KhZt3MhHMSCssoeDOfvolTMk= -github.com/AaronO/go-git-http v0.0.0-20161214145340-1d9485b3a98f/go.mod h1:+6Yuq73F9068Na+mSBNXCvyuxvgw4f/g5ii40e3U8Sc= -github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9 h1:HD8gA2tkByhMAwYaFAX9w2l7vxvBQ5NMoxDrkhqhtn4= -github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/Azure/azure-sdk-for-go v23.2.0+incompatible h1:bch1RS060vGpHpY3zvQDV4rOiRw25J1zmR/B9a76aSA= github.com/Azure/azure-sdk-for-go v23.2.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/go-autorest v11.1.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= @@ -47,20 +20,14 @@ github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/DATA-DOG/go-sqlmock v1.3.3 h1:CWUqKXe0s8A2z6qCgkP4Kru7wC11YoAnoupUKFDnH08= -github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v2.2.0+incompatible h1:V5BKkxACZLjzHjSgBbr2gvLA2Ae49yhc6CSY7MLy5k4= github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46 h1:lsxEuwrXEAokXB9qhlbKWPpo3KMLZQ5WB5WLQRW1uq0= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OneOfOne/xxhash v1.2.5 h1:zl/OfRA6nftbBK9qTohYBJ5xvw6C/oNKizR7cZGl3cI= github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= +github.com/OpenPeeDeeP/depguard v1.0.1 h1:VlW4R6jmBIv3/u1JNlawEvJMM4J+dPORPaZasQee8Us= github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= @@ -76,47 +43,16 @@ github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMx github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/aclements/go-gg v0.0.0-20170323211221-abd1f791f5ee h1:KJgh99JlYRhfgHtb7XyhAZSJMdfkjVmo3PP7XO1/HO8= -github.com/aclements/go-gg v0.0.0-20170323211221-abd1f791f5ee/go.mod h1:55qNq4vcpkIuHowELi5C8e+1yUHtoLoOUR9QU5j7Tes= -github.com/aclements/go-moremath v0.0.0-20190830160640-d16893ddf098 h1:a7+Y8VlXRC2VX5ue6tpCutr4PsrkRkWWVZv4zqfaHuc= -github.com/aclements/go-moremath v0.0.0-20190830160640-d16893ddf098/go.mod h1:idZL3yvz4kzx1dsBOAC+oYv6L92P1oFEhUXUB1A/lwQ= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 h1:rFw4nCn9iMW+Vajsk51NtYIcwSTkXr+JGrMd36kTDJw= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/ajg/form v0.0.0-20160822230020-523a5da1a92f/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= -github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= -github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= -github.com/ajstarks/deck v0.0.0-20191009173945-82d717002242 h1:30XVZzSxUv+pE25mnlAL5nW/KsUDBmldePggLIAEJgk= -github.com/ajstarks/deck v0.0.0-20191009173945-82d717002242/go.mod h1:j3f/59diR4DorW5A78eDYvRkdrkh+nps4p5LA1Tl05U= -github.com/ajstarks/svgo v0.0.0-20190826172357-de52242f3d65 h1:kZegOsPGxfV9mM8WzfllNZOx3MvM5zItmhQlvITKVvA= -github.com/ajstarks/svgo v0.0.0-20190826172357-de52242f3d65/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs= -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= -github.com/alecthomas/kingpin v2.2.6+incompatible h1:5svnBTFgJjZvGKyYBtMB0+m5wvrbUHiqye8wRJMlnYI= -github.com/alecthomas/kingpin v2.2.6+incompatible/go.mod h1:59OFYbFVLKQKq+mqrL6Rw5bR0c3ACQaawgXx0QYndlE= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= 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 h1:Hs82Z41s6SdL1CELW+XaDYmOH4hkBN4/N9og/AsOv7E= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/andygrunwald/go-gerrit v0.0.0-20191101112536-3f5e365ccf57 h1:wtSQ14h8qAUezER6QPfYmCh5+W5Ly1lVruhm/QeOVUE= -github.com/andygrunwald/go-gerrit v0.0.0-20191101112536-3f5e365ccf57/go.mod h1:0iuRQp6WJ44ts+iihy5E/WlPqfg5RNeQxOmzRkxCdtk= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/apache/arrow v0.0.0-20191105160933-1afbcb6bb2a6 h1:0Cn1JoEEOLKPNpSQhiug+H2aot6rVVSAigTROSX4YxE= -github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= -github.com/apache/arrow/go/arrow v0.0.0-20191105160933-1afbcb6bb2a6 h1:Cm45hoKQzk6EQbR6X0B6zfQhUMLYo0MEjLt3+PWZNx0= -github.com/apache/arrow/go/arrow v0.0.0-20191105160933-1afbcb6bb2a6/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= github.com/apache/thrift v0.0.0-20161221203622-b2a4d4ae21c7 h1:Fv9bK1Q+ly/ROk4aJsVMeuIwPel4bEnD8EPiI91nZMg= github.com/apache/thrift v0.0.0-20161221203622-b2a4d4ae21c7/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.12.0 h1:pODnxUFNcjP9UTLZGTdeh+j16A8lJbRvD3rOtrk/7bs= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apex/log v1.1.0 h1:J5rld6WVFi6NxA6m8GJ1LJqu3+GiTFIt3mYv27gdQWI= -github.com/apex/log v1.1.0/go.mod h1:yA770aXIDQrhVOIGurT/pVdfCpSq1GQV/auzMN5fzvY= -github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a h1:2KLQMJ8msqoPHIPDufkxVcoTtcmE5+1sL9950m4R9Pk= -github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a/go.mod h1:3NqKYiepwy8kCu4PNA+aP7WUV72eXWJeP9/r3/K9aLE= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 h1:G1bPvciwNyF7IUmKXNt9Ak3m6u9DE1rF+RmtIkBpVdA= @@ -129,58 +65,18 @@ github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/aws/aws-sdk-go v1.15.64/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= -github.com/aws/aws-sdk-go v1.15.77/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= github.com/aws/aws-sdk-go v1.23.12 h1:2UnxgNO6Y5J1OrkXS8XNp0UatDxD1bWHiDT62RDPggI= github.com/aws/aws-sdk-go v1.23.12/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go-v2 v0.15.0 h1:mQCV2MV4I0L02Nwi1xs0HM7yWbrcWjjUOy1UAv27sw8= -github.com/aws/aws-sdk-go-v2 v0.15.0/go.mod h1:pFLIN9LDjOEwHfruGweAXEq0XaD6uRkY8FsRkxhuBIg= -github.com/aws/aws-xray-sdk-go v0.9.4 h1:3mtFCrgFR5IefmWFV5pscHp9TTyOWuqaIKJIY0d1Y4g= -github.com/aws/aws-xray-sdk-go v0.9.4/go.mod h1:XtMKdBQfpVut+tJEwI7+dJFRxxRdxHDyVNp2tHXRq04= -github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59 h1:WWB576BN5zNSZc/M9d/10pqEx5VHNhaQ/yOVAkmj5Yo= -github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I= 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 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/beyang/hgo v0.0.0-20150825035631-d45f1891a48a h1:Gfewj+rrM2kJ2DI3+dfJj3W+PPEfNqwX/6R7lax9j14= -github.com/beyang/hgo v0.0.0-20150825035631-d45f1891a48a/go.mod h1:n88RubZnITBFvoKP88nD4ajBX+PekZgpQOCgxazSTTA= github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 h1:mXoPYz/Ul5HYEDvkta6I8/rnYM5gSdSV2tJ6XbZuEtY= -github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= -github.com/blakesmith/ar v0.0.0-20150311145944-8bd4349a67f2 h1:oMCHnXa6CCCafdPDbMh/lWRhRByN0VFLvv+g+ayx1SI= -github.com/blakesmith/ar v0.0.0-20150311145944-8bd4349a67f2/go.mod h1:PkYb9DJNAwrSvRx5DYA+gUcOIgTGVMNkfSCbZM8cWpI= -github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= -github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= -github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= -github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40 h1:y4B3+GPxKlrigF1ha5FFErxK+sr6sWxQovRMzwMhejo= -github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b h1:AP/Y7sqYicnjGDfD5VcY4CIfh1hRXBUavxrvELjTiOE= github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b/go.mod h1:ac9efd0D1fsDb3EJvhqgXRbFx7bs2wqZ10HQPeU8U/Q= -github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4= -github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/bombsimon/wsl v1.2.5 h1:9gTOkIwVtoDZywvX802SDHokeX4kW1cKnV8ZTVAPkRs= github.com/bombsimon/wsl v1.2.5/go.mod h1:43lEF/i0kpXbLCeDXL9LMT8c92HyBywXb0AsgMHYngM= -github.com/boombuler/barcode v1.0.0 h1:s1TvRnXwL2xJRaccrdcBQMZxq6X7DvsMogtmJeHDdrc= -github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= -github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625 h1:ckJgFhFWywOx+YLEMIJsTb+NV6NexWICk5+AMSuz3ss= -github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= -github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b h1:L/QXpzIa3pOvUGt1D1lA5KjYhPBAN/3iWdP7xeFS9F0= -github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA= -github.com/bsm/sarama-cluster v2.1.15+incompatible h1:RkV6WiNRnqEEbp81druK8zYhmnIgdOjqSVi0+9Cnl2A= -github.com/bsm/sarama-cluster v2.1.15+incompatible/go.mod h1:r7ao+4tTNXvWm+VRpRJchr2kQhqxgmAp2iEX5W96gMM= -github.com/c-bata/go-prompt v0.2.2 h1:uyKRz6Z6DUyj49QVijyM339UJV9yhbr70gESwbNU3e0= -github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= -github.com/caarlos0/ctrlc v1.0.0 h1:2DtF8GSIcajgffDFJzyG15vO+1PuBWOMUdFut7NnXhw= -github.com/caarlos0/ctrlc v1.0.0/go.mod h1:CdXpj4rmq0q/1Eb44M9zi2nKB0QraNKuRGYGrrHhcQw= -github.com/cactus/go-statsd-client v3.2.0+incompatible h1:ZJpQV7zHnerDzsEQS1wnI38tpR7wX3QFmL7WzTerEmY= -github.com/cactus/go-statsd-client/statsd v0.0.0-20191030180650-a68a2246f89c h1:rrLWPlpOKwnBpVUXitbgM3+Nie1eBaFfBZqfiPpxVj8= -github.com/cactus/go-statsd-client/statsd v0.0.0-20191030180650-a68a2246f89c/go.mod h1:l/bIBLeOl9eX+wxJAzxS4TveKRtAqlyDpHjhkfO0MEI= -github.com/campoy/unique v0.0.0-20180121183637-88950e537e7e h1:V9a67dfYqPLAvzk5hMQOXYJlZ4SLIXgyKIE+ZiHzgGQ= -github.com/campoy/unique v0.0.0-20180121183637-88950e537e7e/go.mod h1:9IOqJGCPMSc6E5ydlp5NIonxObaeu/Iub/X03EKPVYo= -github.com/casbin/casbin v1.9.1 h1:ucjbS5zTrmSLtH4XogqOG920Poe6QatdXtz1FEbApeM= -github.com/casbin/casbin v1.9.1/go.mod h1:z8uPsfBJGUsnkagrt3G8QvjgTKFMBJ32UP8HpZllfog= github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409 h1:Da6uN+CAo1Wf09Rz1U4i9QN8f0REjyNJ73BEwAq/paU= github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= @@ -188,126 +84,57 @@ github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA github.com/cespare/xxhash v0.0.0-20181017004759-096ff4a8a059/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible h1:C29Ae4G5GtYyYMm1aztcyj/J5ckgJm2zwdDajFbx1NY= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3 h1:TJH+oke8D16535+jHExHj4nQvzlZrj7ug5D7I/orNUA= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec h1:EdRZT3IeKQmfCSrgo8SZ8V3MEnskuJP0wCYNpe+aiXo= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= -github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= -github.com/cockroachdb/cockroach-go v0.0.0-20181001143604-e0a95dfd547c/go.mod h1:XGLbWH/ujMcbPbhZq52Nv6UrCghb1yGn//133kEsvDk= -github.com/cockroachdb/cockroach-go v0.0.0-20190916165215-ad57a61cc915 h1:QX2Zc22B15gdWwDCwS7BXmbeD/SWdcRK12gOfZ5BsIs= -github.com/cockroachdb/cockroach-go v0.0.0-20190916165215-ad57a61cc915/go.mod h1:XGLbWH/ujMcbPbhZq52Nv6UrCghb1yGn//133kEsvDk= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0 h1:sDMmm+q/3+BukdIpxwO365v/Rbspp2Nt5XntgQRXq8Q= -github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= -github.com/codegangsta/negroni v1.0.0 h1:+aYywywx4bnKXWvoWtRfJ91vC59NbEhEY03sZjQhbVY= -github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0= github.com/coreos/bbolt v1.3.2 h1:wZwiHHUieZCquLkDL0B8UhzreNWsPHooDAG3q34zk0s= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible h1:jFneRYjIvLMLhDLCzuTuU4rSJUjRplcJQ7pD7MnhC04= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.17+incompatible h1:f/Z3EoDSx1yjaIjLQGo1diYUlQYSBrrAQ5vP8NjwXwo= -github.com/coreos/etcd v3.3.17+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible h1:bXhRBIXoTm9BYHS3gE0TtQuyNZyeEMux2sDi4oo5YOo= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0 h1:3Jm3tLmsgAYcjC+4Up7hJrFBPr+n7rAqYeSw/SZazuY= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f h1:JOrtw2xFKzlg+cbHpyrpLDmnN1HqhBfnX7WDiW7eG2c= -github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.7 h1:6pwm8kMQKCmgUg0ZHTm5+/YvRK0s3THD/28+T6/kk4A= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/crossdock/crossdock-go v0.0.0-20160816171116-049aabb0122b h1:WR1qVJzbvrVywhAk4kMQKRPx09AZVI0NdEdYs59iHcA= -github.com/crossdock/crossdock-go v0.0.0-20160816171116-049aabb0122b/go.mod h1:v9FBN7gdVTpiD/+LZ7Po0UKvROyT87uLVxTHVky/dlQ= -github.com/cznic/cc v0.0.0-20181122101902-d673e9b70d4d h1:AePLLLsGE1yOEDAmaJlQ9zd/9qiaEVskYukZ1f2srAA= -github.com/cznic/cc v0.0.0-20181122101902-d673e9b70d4d/go.mod h1:m3fD/V+XTB35Kh9zw6dzjMY+We0Q7PMf6LLIC4vuG9k= -github.com/cznic/fileutil v0.0.0-20181122101858-4d67cfea8c87 h1:94XgeeTZ+3Xi9zsdgBjP1Byx/wywCImjF8FzQ7OaKdU= -github.com/cznic/fileutil v0.0.0-20181122101858-4d67cfea8c87/go.mod h1:8S58EK26zhXSxzv7NQFpnliaOQsmDUxvoQO3rt154Vg= -github.com/cznic/golex v0.0.0-20181122101858-9c343928389c h1:G8zTsaqyVfIHpgMFcGgdbhHSFhlNc77rAKkhVbQ9kQg= -github.com/cznic/golex v0.0.0-20181122101858-9c343928389c/go.mod h1:+bmmJDNmKlhWNG+gwWCkaBoTy39Fs+bzRxVBzoTQbIc= -github.com/cznic/internal v0.0.0-20181122101858-3279554c546e h1:58AcyflCe84EONph4gkyo3eDOEQcW5HIPfQBrD76W68= -github.com/cznic/internal v0.0.0-20181122101858-3279554c546e/go.mod h1:olo7eAdKwJdXxb55TKGLiJ6xt1H0/tiiRCWKVLmtjY4= -github.com/cznic/ir v0.0.0-20181122101859-da7ba2ecce8b h1:GelTfvbS1tZtnyCTx3aMIHbRw5euyrfHd6H3rLqLlHU= -github.com/cznic/ir v0.0.0-20181122101859-da7ba2ecce8b/go.mod h1:bctvsSxTD8Lpaj5RRQ0OrAAu4+0mD4KognDQItBNMn0= -github.com/cznic/lex v0.0.0-20181122101858-ce0fb5e9bb1b h1:KJtZdP0G3jUnpgEWZdJ7326WvTbREwcwlDSOpkpNZGY= -github.com/cznic/lex v0.0.0-20181122101858-ce0fb5e9bb1b/go.mod h1:LcYbbl1tn/c31gGxe2EOWyzr7EaBcdQOoIVGvJMc7Dc= -github.com/cznic/lexer v0.0.0-20181122101858-e884d4bd112e h1:K5kIaw68kxYw40mp8YKuwKrb63R0BPCR1iEGvBR6Mfs= -github.com/cznic/lexer v0.0.0-20181122101858-e884d4bd112e/go.mod h1:YNGh5qsZlhFHDfWBp/3DrJ37Uy4pRqlwxtL+LS7a/Qw= -github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 h1:iwZdTE0PVqJCos1vaoKsclOGD3ADKpshg3SRtYBbwso= -github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM= -github.com/cznic/strutil v0.0.0-20181122101858-275e90344537 h1:MZRmHqDBd0vxNwenEbKSQqRVT24d3C05ft8kduSwlqM= -github.com/cznic/strutil v0.0.0-20181122101858-275e90344537/go.mod h1:AHHPPPXTw0h6pVabbcbyGRK1DckRn7r/STdZEeIDzZc= -github.com/cznic/xc v0.0.0-20181122101856-45b06973881e h1:U9mUTtTukbCdFuphv3QiJBjtImXsUTHcX5toZZi4OzY= -github.com/cznic/xc v0.0.0-20181122101856-45b06973881e/go.mod h1:3oFoiOvCDBYH+swwf5+k/woVmWy7h1Fcyu8Qig/jjX0= -github.com/dave/jennifer v1.2.0 h1:S15ZkFMRoJ36mGAQgWL1tnr0NQJh9rZ8qatseX/VbBc= -github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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/dgraph-io/badger v1.6.0 h1:DshxFxZWXUcO0xX476VJC07Xsr6ZCBVRHKZ93Oh7Evo= -github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgrijalva/jwt-go v0.0.0-20160705203006-01aeca54ebda/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8 h1:akOQj8IVgoeFfBTzGOEQakCYshWD6RNo1M5pivFXt70= -github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dgryski/go-sip13 v0.0.0-20190329191031-25c5027a8c7b h1:Yqiad0+sloMPdd/0Fg22actpFx0dekpzt1xJmVNVkU0= github.com/dgryski/go-sip13 v0.0.0-20190329191031-25c5027a8c7b/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= -github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= -github.com/disintegration/gift v1.2.1 h1:Y005a1X4Z7Uc+0gLpSAsKhWi4qLtsdEcMIbbdvdZ6pc= -github.com/disintegration/gift v1.2.1/go.mod h1:Jh2i7f7Q2BM7Ezno3PhfezbR1xpUg9dUg3/RlKGr4HI= -github.com/djherbis/buffer v1.1.0 h1:uGQ+DZDAMlfC2z3khbBtLcAHC0wyoNrX9lpOml3g3fg= -github.com/djherbis/buffer v1.1.0/go.mod h1:VwN8VdFkMY0DCALdY8o00d3IZ6Amz/UNVMWcSaJT44o= -github.com/djherbis/nio v2.0.3+incompatible h1:CidFHoR25he4511AIQ3RW9LH9XkLMOoNML8xd7R7Irc= -github.com/djherbis/nio v2.0.3+incompatible/go.mod h1:v74owXPROGWsr1y28T13rlXf5Hn/bWJ1bbX8M+BqyPo= github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96 h1:cenwrSVm+Z7QLSV/BsnenAOcDXdX4cMv4wP0B/5QbPg= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 h1:bWDMxwH3px2JBh6AyO7hdCn/PkvCZXii8TGj7sbtEbQ= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/dustin/go-humanize v0.0.0-20180713052910-9f541cc9db5d/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/eapache/go-resiliency v1.1.0 h1:1NtRmCAqadE2FN4ZcN6g90TP3uk8cg9rn9eNK2197aU= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/eclipse/paho.mqtt.golang v1.2.0 h1:1F8mhG9+aO5/xpdtFkW4SxOJB67ukuDC3t2y2qayIX0= -github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e h1:p1yVGRW3nmb85p1Sh1ZJSDm4A4iKLS5QNbvUHMgGu/M= github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633 h1:H2pdYOb3KQ1/YsqVWoWNLQO+fusocsw354rqGTZtAgw= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful-swagger12 v0.0.0-20170926063155-7524189396c6 h1:V94anc0ZG3Pa/cAMwP2m1aQW3+/FF8Qmw/GsFyTJAp4= -github.com/emicklei/go-restful-swagger12 v0.0.0-20170926063155-7524189396c6/go.mod h1:qr0VowGBT4CS4Q8vFF8BSeKz34PuqKGxs/L0IAQA9DQ= -github.com/emirpasic/gods v1.9.0 h1:rUF4PuzEjMChMiNsVjdI+SyLu7rEqpQ5reNFnhC7oFo= -github.com/emirpasic/gods v1.9.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= github.com/envoyproxy/go-control-plane v0.6.9 h1:deEH9W8ZAUGNbCdX+9iNzBOGrAOrnpJGoy0PcTqk/tE= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/evanphx/json-patch v0.0.0-20190203023257-5858425f7550/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= @@ -316,47 +143,26 @@ github.com/evanphx/json-patch v4.5.0+incompatible h1:ouOWdg56aJriqS0huScTkVXPC5I github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/structs v1.0.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8= -github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8 h1:a9ENSRDFBUPkJ5lCgVZh26+ZbGyoVJG7yb5SSzF5H54= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/garyburd/redigo v1.6.0 h1:0VruCpn7yAIIu7pWVClQC8wxCJEcG3nyzpMSHKi1PQc= -github.com/garyburd/redigo v1.6.0/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3 h1:t8FVkw33L+wilf2QiWkw0UV77qRpcH/JHPKGpKa2E8g= -github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= -github.com/gin-gonic/gin v1.4.0 h1:3tMoCCfM7ppqsR0ptz/wi1impNpT7/9wQtMZ8lr1mCQ= -github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= -github.com/gliderlabs/ssh v0.1.1 h1:j3L6gSLQalDETeEg/Jg0mGY0/y/N6zI2xX1978P0Uqw= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8 h1:DujepqpGd1hyOd7aW59XpK7Qymp8iy83xq74fLr21is= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/glycerine/go-unsnap-stream v0.0.0-20190901134440-81cf024a9e0a h1:FQqoVvjbiUioBBFUL5up+h+GdCa/AnJsL/1bIs/veSI= -github.com/glycerine/go-unsnap-stream v0.0.0-20190901134440-81cf024a9e0a/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= -github.com/go-chi/chi v4.0.2+incompatible h1:maB6vn6FqCxrpz4FqWdh4+lwpyZIQS7YEAUcHlgXVRs= -github.com/go-chi/chi v4.0.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= +github.com/go-critic/go-critic v0.3.5-0.20190904082202-d79a9f0c64db h1:GYXWx7Vr3+zv833u+8IoXbNnQY0AdXsxAgI0kX7xcwA= github.com/go-critic/go-critic v0.3.5-0.20190904082202-d79a9f0c64db/go.mod h1:+sE8vrLDS2M0pZkBk0wy6+nLdKexVDrl/jBqQOTDThA= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-lintpack/lintpack v0.5.2 h1:DI5mA3+eKdWeJ40nU4d6Wc26qmdG8RCi/btYq0TuRN0= github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= -github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab h1:xveKWz2iaueeTaUgdetzel+U7exyigDYBryyVfV/rZk= -github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= @@ -416,499 +222,33 @@ github.com/go-openapi/validate v0.17.2/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+ github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= github.com/go-openapi/validate v0.19.2 h1:ky5l57HjyVRrsJfd2+Ro5Z9PjGuKbsmftwyMtk8H7js= github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA= -github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g= github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= +github.com/go-toolsmith/astcopy v1.0.0 h1:OMgl1b1MEpjFQ1m5ztEO06rz5CUd3oBv9RF7+DyvdG8= github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astequal v1.0.0 h1:4zxD8j3JRFNyLN46lodQuqz3xdKSrur7U/sr0SDS/gQ= github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= github.com/go-toolsmith/astfmt v0.0.0-20180903215011-8f8ee99c3086/go.mod h1:mP93XdblcopXwlyN4X4uodxXQhldPGZbcEJIimQHrkg= +github.com/go-toolsmith/astfmt v1.0.0 h1:A0vDDXt+vsvLEdbMFJAUBI/uTbRw1ffOPnxsILnFL6k= github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU= github.com/go-toolsmith/astp v0.0.0-20180903215135-0af7e3c24f30/go.mod h1:SV2ur98SGypH1UjcPpCatrV5hPazG6+IfNHbkDXBRrk= +github.com/go-toolsmith/astp v1.0.0 h1:alXE75TXgcmupDsMK1fRAy0YUzLzqPVvBKoyWV+KPXg= github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= github.com/go-toolsmith/pkgload v0.0.0-20181119091011-e9e65178eee8/go.mod h1:WoMrjiy4zvdS+Bg6z9jZH82QXwkcgCBX6nOfnmdaHks= +github.com/go-toolsmith/pkgload v1.0.0 h1:4DFWWMXVfbcN5So1sBNW9+yeiMqLFGl1wFLTL5R0Tgg= github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc= +github.com/go-toolsmith/strparse v1.0.0 h1:Vcw78DnpCAKlM20kSbAyO4mPfJn/lyYA4BJUDxe2Jb4= github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= +github.com/go-toolsmith/typep v1.0.0 h1:zKymWyA1TRYvqYrYDrfEMZULyrhcnGY3x7LDKU2XQaA= github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= -github.com/gobuffalo/attrs v0.0.0-20190219185331-f338c9388485/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= -github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= -github.com/gobuffalo/attrs v0.1.0 h1:LY6/rbhPD/hfa+AfviaMXBmZBGb0fGHF12yg7f3dPQA= -github.com/gobuffalo/attrs v0.1.0/go.mod h1:fmNpaWyHM0tRm8gCZWKx8yY9fvaNLo2PyzBNSrBZ5Hw= -github.com/gobuffalo/buffalo v0.12.8-0.20181004233540-fac9bb505aa8/go.mod h1:sLyT7/dceRXJUxSsE813JTQtA3Eb1vjxWfo/N//vXIY= -github.com/gobuffalo/buffalo v0.13.0/go.mod h1:Mjn1Ba9wpIbpbrD+lIDMy99pQ0H0LiddMIIDGse7qT4= -github.com/gobuffalo/buffalo v0.13.1/go.mod h1:K9c22KLfDz7obgxvHv1amvJtCQEZNiox9+q6FDJ1Zcs= -github.com/gobuffalo/buffalo v0.13.2/go.mod h1:vA8I4Dwcfkx7RAzIRHVDZxfS3QJR7muiOjX4r8P2/GE= -github.com/gobuffalo/buffalo v0.13.4/go.mod h1:y2jbKkO0k49OrNIOAkbWQiPBqxAFpHn5OKnkc7BDh+I= -github.com/gobuffalo/buffalo v0.13.5/go.mod h1:hPcP12TkFSZmT3gUVHZ24KRhTX3deSgu6QSgn0nbWf4= -github.com/gobuffalo/buffalo v0.13.6/go.mod h1:/Pm0MPLusPhWDayjRD+/vKYnelScIiv0sX9YYek0wpg= -github.com/gobuffalo/buffalo v0.13.7/go.mod h1:3gQwZhI8DSbqmDqlFh7kfwuv/wd40rqdVxXtFWlCQHw= -github.com/gobuffalo/buffalo v0.13.9/go.mod h1:vIItiQkTHq46D1p+bw8mFc5w3BwrtJhMvYjSIYK3yjE= -github.com/gobuffalo/buffalo v0.13.12/go.mod h1:Y9e0p0cdo/eI+lHm7EFzlkc9YzjwGo5QeDj+FbsyqVA= -github.com/gobuffalo/buffalo v0.13.13/go.mod h1:WAL36xBN8OkU71lNjuYv6llmgl0o8twjlY+j7oGUmYw= -github.com/gobuffalo/buffalo v0.14.0/go.mod h1:A9JI3juErlXNrPBeJ/0Pdky9Wz+GffEg7ZN0d1B5h48= -github.com/gobuffalo/buffalo v0.14.2/go.mod h1:VNMTzddg7bMnkVxCUXzqTS4PvUo6cDOs/imtG8Cnt/k= -github.com/gobuffalo/buffalo v0.14.3/go.mod h1:3O9vB/a4UNb16TevehTvDCaPnb98NWvYz0msJQ6ZlVA= -github.com/gobuffalo/buffalo v0.14.5/go.mod h1:RWK6evR4hY4nRVfw9xie9V/LYK3j0U9wU2oKgQUFZ88= -github.com/gobuffalo/buffalo v0.14.6/go.mod h1:71Un+T2JGgwXLjBqYFdGSooz/OUjw15BJM0nbbcAM0o= -github.com/gobuffalo/buffalo v0.14.9/go.mod h1:M8XWw+Rcotn7C4NYpCEGBg3yX+O1TeD1pBfmiILhgHw= -github.com/gobuffalo/buffalo v0.14.10/go.mod h1:49A7/JYlsCyTkVHtvKl91w6rG35ZiywwjWMVC1zKWsQ= -github.com/gobuffalo/buffalo v0.14.11/go.mod h1:RO5OwOJQjv6/TukzszV5ELA54lg84D1kZwla6oAkTlo= -github.com/gobuffalo/buffalo v0.15.0 h1:VsxIcfJaDm4u2UirLHGgMfQpfHVwJP3JoDmGyeeNnc0= -github.com/gobuffalo/buffalo v0.15.0/go.mod h1:WBSrSdbxiww/yXZlh2D69FByhM5xdYT1aDIwEQssTto= -github.com/gobuffalo/buffalo-docker v1.0.5/go.mod h1:NZ3+21WIdqOUlOlM2onCt7cwojYp4Qwlsngoolw8zlE= -github.com/gobuffalo/buffalo-docker v1.0.6/go.mod h1:UlqKHJD8CQvyIb+pFq+m/JQW2w2mXuhxsaKaTj1X1XI= -github.com/gobuffalo/buffalo-docker v1.0.7 h1:kj+AfChcev54v4N8N6PzNFWyiVSenzu6djrgxTBvbTk= -github.com/gobuffalo/buffalo-docker v1.0.7/go.mod h1:BdB8AhcmjwR6Lo3rDPMzyh/+eNjYnZ1TAO0eZeLkhig= -github.com/gobuffalo/buffalo-plugins v1.0.2/go.mod h1:pOp/uF7X3IShFHyobahTkTLZaeUXwb0GrUTb9ngJWTs= -github.com/gobuffalo/buffalo-plugins v1.0.4/go.mod h1:pWS1vjtQ6uD17MVFWf7i3zfThrEKWlI5+PYLw/NaDB4= -github.com/gobuffalo/buffalo-plugins v1.4.3/go.mod h1:uCzTY0woez4nDMdQjkcOYKanngeUVRO2HZi7ezmAjWY= -github.com/gobuffalo/buffalo-plugins v1.5.1/go.mod h1:jbmwSZK5+PiAP9cC09VQOrGMZFCa/P0UMlIS3O12r5w= -github.com/gobuffalo/buffalo-plugins v1.6.1/go.mod h1:/XZt7UuuDnx5P4v3cStK0+XoYiNOA2f0wDIsm1oLJQA= -github.com/gobuffalo/buffalo-plugins v1.6.4/go.mod h1:/+N1aophkA2jZ1ifB2O3Y9yGwu6gKOVMtUmJnbg+OZI= -github.com/gobuffalo/buffalo-plugins v1.6.5/go.mod h1:0HVkbgrVs/MnPZ/FOseDMVanCTm2RNcdM0PuXcL1NNI= -github.com/gobuffalo/buffalo-plugins v1.6.6/go.mod h1:hSWAEkJyL9RENJlmanMivgnNkrQ9RC4xJARz8dQryi0= -github.com/gobuffalo/buffalo-plugins v1.6.7/go.mod h1:ZGZRkzz2PiKWHs0z7QsPBOTo2EpcGRArMEym6ghKYgk= -github.com/gobuffalo/buffalo-plugins v1.6.9/go.mod h1:yYlYTrPdMCz+6/+UaXg5Jm4gN3xhsvsQ2ygVatZV5vw= -github.com/gobuffalo/buffalo-plugins v1.6.10/go.mod h1:HxzPZjAEzh9H0gnHelObxxrut9O+1dxydf7U93SYsc8= -github.com/gobuffalo/buffalo-plugins v1.6.11/go.mod h1:eAA6xJIL8OuynJZ8amXjRmHND6YiusVAaJdHDN1Lu8Q= -github.com/gobuffalo/buffalo-plugins v1.7.2/go.mod h1:vEbx30cLFeeZ48gBA/rkhbqC2M/2JpsKs5CoESWhkPw= -github.com/gobuffalo/buffalo-plugins v1.8.1/go.mod h1:vu71J3fD4b7KKywJQ1tyaJGtahG837Cj6kgbxX0e4UI= -github.com/gobuffalo/buffalo-plugins v1.8.2/go.mod h1:9te6/VjEQ7pKp7lXlDIMqzxgGpjlKoAcAANdCgoR960= -github.com/gobuffalo/buffalo-plugins v1.8.3/go.mod h1:IAWq6vjZJVXebIq2qGTLOdlXzmpyTZ5iJG5b59fza5U= -github.com/gobuffalo/buffalo-plugins v1.9.3/go.mod h1:BNRunDThMZKjqx6R+n14Rk3sRSOWgbMuzCKXLqbd7m0= -github.com/gobuffalo/buffalo-plugins v1.9.4/go.mod h1:grCV6DGsQlVzQwk6XdgcL3ZPgLm9BVxlBmXPMF8oBHI= -github.com/gobuffalo/buffalo-plugins v1.10.0/go.mod h1:4osg8d9s60txLuGwXnqH+RCjPHj9K466cDFRl3PErHI= -github.com/gobuffalo/buffalo-plugins v1.11.0/go.mod h1:rtIvAYRjYibgmWhnjKmo7OadtnxuMG5ZQLr25ozAzjg= -github.com/gobuffalo/buffalo-plugins v1.12.0/go.mod h1:kw4Mj2vQXqe4X5TI36PEQgswbL30heGQwJEeDKd1v+4= -github.com/gobuffalo/buffalo-plugins v1.13.0/go.mod h1:Y9nH2VwHVkeKhmdM380ulNXmhhD5On81nRVeD+WlDTQ= -github.com/gobuffalo/buffalo-plugins v1.13.1/go.mod h1:VcvhrgWcZLhOp8JPLckHBDtv05KepY/MxHsT2+06xX4= -github.com/gobuffalo/buffalo-plugins v1.14.0/go.mod h1:r2lykSXBT79c3T5JK1ouivVDrHvvCZUdZBmn+lPMHU8= -github.com/gobuffalo/buffalo-plugins v1.14.1 h1:ZL22sNZif+k/0I9X7LB8cpVMWh7zcVjfpiqxFlH4xSY= -github.com/gobuffalo/buffalo-plugins v1.14.1/go.mod h1:9BRBvXuKxR0m4YttVFRtuUcAP9Rs97mGq6OleyDbIuo= -github.com/gobuffalo/buffalo-pop v1.0.5/go.mod h1:Fw/LfFDnSmB/vvQXPvcXEjzP98Tc+AudyNWUBWKCwQ8= -github.com/gobuffalo/buffalo-pop v1.1.2/go.mod h1:czNLXcYbg5/fjr+uht0NyjZaQ0V2W23H1jzyORgCzQ4= -github.com/gobuffalo/buffalo-pop v1.1.5/go.mod h1:H01JIg42XwOHS4gRMhSeDZqBovNVlfBUsVXckU617s4= -github.com/gobuffalo/buffalo-pop v1.1.8/go.mod h1:1uaxOFzzVud/zR5f1OEBr21tMVLQS3OZpQ1A5cr0svE= -github.com/gobuffalo/buffalo-pop v1.1.13/go.mod h1:47GQoBjCMcl5Pw40iCWHQYJvd0HsT9kdaOPWgnzHzk4= -github.com/gobuffalo/buffalo-pop v1.1.14/go.mod h1:sAMh6+s7wytCn5cHqZIuItJbAqzvs6M7FemLexl+pwc= -github.com/gobuffalo/buffalo-pop v1.1.15/go.mod h1:vnvvxhbEFAaEbac9E2ZPjsBeL7WHkma2UyKNVA4y9Wo= -github.com/gobuffalo/buffalo-pop v1.2.1/go.mod h1:SHqojN0bVzaAzCbQDdWtsib202FDIxqwmCO8VDdweF4= -github.com/gobuffalo/buffalo-pop v1.3.0/go.mod h1:P0PhA225dRGyv0WkgYjYKqgoxPdDPDFZDvHj60AGF5w= -github.com/gobuffalo/buffalo-pop v1.6.0/go.mod h1:vrEVNOBKe042HjSNMj72J4FgER/VG6lt4xW6WMpTdlY= -github.com/gobuffalo/buffalo-pop v1.7.0/go.mod h1:UB5HHeFucJG7esTPUPjinBaJTEpVoREJHfSJJELnyeI= -github.com/gobuffalo/buffalo-pop v1.9.0/go.mod h1:MfrkBg0iN9+RdlxdHHAqqGFAC/iyCfTiKqH7Jvt+vhE= -github.com/gobuffalo/buffalo-pop v1.10.0/go.mod h1:C3/cFXB8Zd38XiGgHFdE7dw3Wu9MOKeD7bfELQicGPI= -github.com/gobuffalo/buffalo-pop v1.12.0/go.mod h1:pO2ONSJOCjyroGp4BwVHfMkfd7sLg1U9BvMJqRy6Otk= -github.com/gobuffalo/buffalo-pop v1.13.0/go.mod h1:h+zfyXCUFwihFqz6jmo9xsdsZ1Tm9n7knYpQjW0gv18= -github.com/gobuffalo/buffalo-pop v1.16.0/go.mod h1:XYA72cNFvL6m1o7PZ+Z7Yd/WDQTPcOiuDukiHvEo2KY= -github.com/gobuffalo/buffalo-pop v1.17.2/go.mod h1:nyOm0mtmp9/+m2NaXrp+9SqtuKZslA7Ys2DBaT/t2n4= -github.com/gobuffalo/buffalo-pop v1.22.0/go.mod h1:S8uJpbC9PUMFA6ZWbPnbk3c32n4vJ32p5NLsREcz+H8= -github.com/gobuffalo/buffalo-pop v1.23.1 h1:AnxJQZu/ZN7HCm3L8YBJoNWc2UiwSe6UHv5S4DfXUDA= -github.com/gobuffalo/buffalo-pop v1.23.1/go.mod h1:Sb+fy/hLtxfhOrtLAJiL7JsKqazydmAVqp5rcHio/yg= -github.com/gobuffalo/clara v0.4.1/go.mod h1:3QgAPqYgPqAzhfGbNLlp4UztaZRi2SOg+ZrZwaq9L94= -github.com/gobuffalo/clara v0.6.0/go.mod h1:RKZxkcH80pLykRi2hLkoxGMxA8T06Dc9fN/pFvutMFY= -github.com/gobuffalo/clara v0.7.0/go.mod h1:pen7ZMmnuYUYVF/3BbnvidYVAbMEfkyO4O+Tc+FKICU= -github.com/gobuffalo/clara v0.9.1 h1:LYjwmKG0VwwW/nOG2f5jNamvAcfdm2Ysokc/eoVhtZ8= -github.com/gobuffalo/clara v0.9.1/go.mod h1:OQ3HmSqLQJHaMmKhuTkmBCvBLL4BhgjweNpywRGulWo= -github.com/gobuffalo/depgen v0.0.0-20190219190223-ba8c93fa0c2c/go.mod h1:CE/HUV4vDCXtJayRf6WoMWgezb1yH4QHg8GNK8FL0JI= -github.com/gobuffalo/depgen v0.0.0-20190315122043-8442b3fa16db/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= -github.com/gobuffalo/depgen v0.0.0-20190315124901-e02f65b90669/go.mod h1:yTQe8xo5pGIDOApkeO95DjePS4ZOSSSx+ItkqJHxUG4= -github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= -github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= -github.com/gobuffalo/depgen v0.1.1/go.mod h1:65EOv3g7CMe4kc8J1Ds+l2bjcwrWKGXkE4/vpRRLPWY= -github.com/gobuffalo/depgen v0.2.0 h1:CYuqsR8sq+L9G9+A6uUcTEuaK8AGenAjtYOm238fN3M= -github.com/gobuffalo/depgen v0.2.0/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= -github.com/gobuffalo/envy v1.6.4/go.mod h1:Abh+Jfw475/NWtYMEt+hnJWRiC8INKWibIMyNt1w2Mc= -github.com/gobuffalo/envy v1.6.5/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= -github.com/gobuffalo/envy v1.6.6/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= -github.com/gobuffalo/envy v1.6.7/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= -github.com/gobuffalo/envy v1.6.8/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= -github.com/gobuffalo/envy v1.6.9/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= -github.com/gobuffalo/envy v1.6.10/go.mod h1:X0CFllQjTV5ogsnUrg+Oks2yTI+PU2dGYBJOEI2D1Uo= -github.com/gobuffalo/envy v1.6.11/go.mod h1:Fiq52W7nrHGDggFPhn2ZCcHw4u/rqXkqo+i7FB6EAcg= -github.com/gobuffalo/envy v1.6.12/go.mod h1:qJNrJhKkZpEW0glh5xP2syQHH5kgdmgsKss2Kk8PTP0= -github.com/gobuffalo/envy v1.6.13/go.mod h1:w9DJppgl51JwUFWWd/M/6/otrPtWV3WYMa+NNLunqKA= -github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= -github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= -github.com/gobuffalo/envy v1.7.1 h1:OQl5ys5MBea7OGCdvPbBJWRgnhC/fGona6QKfvFeau8= -github.com/gobuffalo/envy v1.7.1/go.mod h1:FurDp9+EDPE4aIUS3ZLyD+7/9fpx7YRt/ukY6jIHf0w= -github.com/gobuffalo/events v1.0.3/go.mod h1:Txo8WmqScapa7zimEQIwgiJBvMECMe9gJjsKNPN3uZw= -github.com/gobuffalo/events v1.0.7/go.mod h1:z8txf6H9jWhQ5Scr7YPLWg/cgXBRj8Q4uYI+rsVCCSQ= -github.com/gobuffalo/events v1.0.8/go.mod h1:A5KyqT1sA+3GJiBE4QKZibse9mtOcI9nw8gGrDdqYGs= -github.com/gobuffalo/events v1.1.1/go.mod h1:Ia9OgHMco9pEhJaPrPQJ4u4+IZlkxYVco2VbJ2XgnAE= -github.com/gobuffalo/events v1.1.3/go.mod h1:9yPGWYv11GENtzrIRApwQRMYSbUgCsZ1w6R503fCfrk= -github.com/gobuffalo/events v1.1.4/go.mod h1:09/YRRgZHEOts5Isov+g9X2xajxdvOAcUuAHIX/O//A= -github.com/gobuffalo/events v1.1.5/go.mod h1:3YUSzgHfYctSjEjLCWbkXP6djH2M+MLaVRzb4ymbAK0= -github.com/gobuffalo/events v1.1.6/go.mod h1:H/3ZB9BA+WorMb/0F79UvU6u0Cyo2hU97WA51bG2ONY= -github.com/gobuffalo/events v1.1.7/go.mod h1:6fGqxH2ing5XMb3EYRq9LEkVlyPGs4oO/eLzh+S8CxY= -github.com/gobuffalo/events v1.1.8/go.mod h1:UFy+W6X6VbCWS8k2iT81HYX65dMtiuVycMy04cplt/8= -github.com/gobuffalo/events v1.1.9/go.mod h1:/0nf8lMtP5TkgNbzYxR6Bl4GzBy5s5TebgNTdRfRbPM= -github.com/gobuffalo/events v1.2.0/go.mod h1:pxvpvsKXKZNPtHuIxUV3K+g+KP5o4forzaeFj++bh68= -github.com/gobuffalo/events v1.3.1/go.mod h1:9JOkQVoyRtailYVE/JJ2ZQ/6i4gTjM5t2HsZK4C1cSA= -github.com/gobuffalo/events v1.4.0 h1:Vje/vgTWs+dyhIS0U03oLpvx1SUdAqutv/hDWIz2ErM= -github.com/gobuffalo/events v1.4.0/go.mod h1:gQbNh681BwO+urxPpHHBiVD8Y+2lg17Wj2xuCMMKr8E= -github.com/gobuffalo/fizz v1.0.12/go.mod h1:C0sltPxpYK8Ftvf64kbsQa2yiCZY4RZviurNxXdAKwc= -github.com/gobuffalo/fizz v1.0.15/go.mod h1:EI3mEpjImuji6Bwu++N2uXhljQwOhwtimZQJ89zwyF4= -github.com/gobuffalo/fizz v1.0.16/go.mod h1:EI3mEpjImuji6Bwu++N2uXhljQwOhwtimZQJ89zwyF4= -github.com/gobuffalo/fizz v1.1.2/go.mod h1:THqzNTlNxNaF5hq3ddp16SnEcl2m83bTeTzJEoD+kqc= -github.com/gobuffalo/fizz v1.1.3/go.mod h1:THqzNTlNxNaF5hq3ddp16SnEcl2m83bTeTzJEoD+kqc= -github.com/gobuffalo/fizz v1.3.0/go.mod h1:THqzNTlNxNaF5hq3ddp16SnEcl2m83bTeTzJEoD+kqc= -github.com/gobuffalo/fizz v1.5.0/go.mod h1:Uu3ch14M4S7LDU7LAP1GQ+KNCRmZYd05Gqasc96XLa0= -github.com/gobuffalo/fizz v1.6.0/go.mod h1:V4V6EA8eYu/L43y6gZj7mjmPkigl9m+Eu3Pe+SWQRRg= -github.com/gobuffalo/fizz v1.6.1/go.mod h1:V4V6EA8eYu/L43y6gZj7mjmPkigl9m+Eu3Pe+SWQRRg= -github.com/gobuffalo/fizz v1.8.0/go.mod h1:2LqJOOGUp1JpN9m54ac5jMQ1MpbNvSVbFi9BY+AEXOo= -github.com/gobuffalo/fizz v1.9.0/go.mod h1:2LqJOOGUp1JpN9m54ac5jMQ1MpbNvSVbFi9BY+AEXOo= -github.com/gobuffalo/fizz v1.9.2/go.mod h1:XJb7Do1keOPkaJnJ48OCjV+7ABQ7mbOqui2WfDobXTQ= -github.com/gobuffalo/fizz v1.9.5 h1:Qh0GkP7MYtJs9RZwBkPJ0CzEXynVowdNfrjg8b+TOxA= -github.com/gobuffalo/fizz v1.9.5/go.mod h1:v9cFl56oXm+hNNayTsIQHnq209bTDUbIM8GYWCJw3TE= -github.com/gobuffalo/flect v0.0.0-20180907193754-dc14d8acaf9f/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= -github.com/gobuffalo/flect v0.0.0-20181002182613-4571df4b1daf/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= -github.com/gobuffalo/flect v0.0.0-20181007231023-ae7ed6bfe683/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= -github.com/gobuffalo/flect v0.0.0-20181018182602-fd24a256709f/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= -github.com/gobuffalo/flect v0.0.0-20181019110701-3d6f0b585514/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= -github.com/gobuffalo/flect v0.0.0-20181024204909-8f6be1a8c6c2/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= -github.com/gobuffalo/flect v0.0.0-20181104133451-1f6e9779237a/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= -github.com/gobuffalo/flect v0.0.0-20181108195648-8fe1b44cfe32/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= -github.com/gobuffalo/flect v0.0.0-20181109221320-179d36177b5b/go.mod h1:0HvNbHdfh+WOvDSIASqJOSxTOWSxCCUF++k/Y53v9rI= -github.com/gobuffalo/flect v0.0.0-20181114183036-47375f6d8328/go.mod h1:0HvNbHdfh+WOvDSIASqJOSxTOWSxCCUF++k/Y53v9rI= -github.com/gobuffalo/flect v0.0.0-20181210151238-24a2b68e0316/go.mod h1:en58vff74S9b99Eg42Dr+/9yPu437QjlNsO/hBYPuOk= -github.com/gobuffalo/flect v0.0.0-20190104192022-4af577e09bf2/go.mod h1:en58vff74S9b99Eg42Dr+/9yPu437QjlNsO/hBYPuOk= -github.com/gobuffalo/flect v0.0.0-20190117212819-a62e61d96794/go.mod h1:397QT6v05LkZkn07oJXXT6y9FCfwC8Pug0WA2/2mE9k= -github.com/gobuffalo/flect v0.0.0-20190205211104-b2cb381e56e0/go.mod h1:397QT6v05LkZkn07oJXXT6y9FCfwC8Pug0WA2/2mE9k= -github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs= -github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= -github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= -github.com/gobuffalo/flect v0.1.5/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= -github.com/gobuffalo/flect v0.1.6 h1:D7KWNRFiCknJKA495/e1BO7oxqf8tbieaLv/ehoZ/+g= -github.com/gobuffalo/flect v0.1.6/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= -github.com/gobuffalo/genny v0.0.0-20180924032338-7af3a40f2252/go.mod h1:tUTQOogrr7tAQnhajMSH6rv1BVev34H2sa1xNHMy94g= -github.com/gobuffalo/genny v0.0.0-20181003150629-3786a0744c5d/go.mod h1:WAd8HmjMVrnkAZbmfgH5dLBUchsZfqzp/WS5sQz+uTM= -github.com/gobuffalo/genny v0.0.0-20181005145118-318a41a134cc/go.mod h1:WAd8HmjMVrnkAZbmfgH5dLBUchsZfqzp/WS5sQz+uTM= -github.com/gobuffalo/genny v0.0.0-20181007153042-b8de7d566757/go.mod h1:+oG5Ljrw04czAHbPXREwaFojJbpUvcIy4DiOnbEJFTA= -github.com/gobuffalo/genny v0.0.0-20181012161047-33e5f43d83a6/go.mod h1:+oG5Ljrw04czAHbPXREwaFojJbpUvcIy4DiOnbEJFTA= -github.com/gobuffalo/genny v0.0.0-20181017160347-90a774534246/go.mod h1:+oG5Ljrw04czAHbPXREwaFojJbpUvcIy4DiOnbEJFTA= -github.com/gobuffalo/genny v0.0.0-20181019144442-df0a36fdd146/go.mod h1:IyRrGrQb/sbHu/0z9i5mbpZroIsdxjCYfj+zFiFiWZQ= -github.com/gobuffalo/genny v0.0.0-20181024195656-51392254bf53/go.mod h1:o9GEH5gn5sCKLVB5rHFC4tq40rQ3VRUzmx6WwmaqISE= -github.com/gobuffalo/genny v0.0.0-20181025145300-af3f81d526b8/go.mod h1:uZ1fFYvdcP8mu0B/Ynarf6dsGvp7QFIpk/QACUuFUVI= -github.com/gobuffalo/genny v0.0.0-20181027191429-94d6cfb5c7fc/go.mod h1:x7SkrQQBx204Y+O9EwRXeszLJDTaWN0GnEasxgLrQTA= -github.com/gobuffalo/genny v0.0.0-20181027195209-3887b7171c4f/go.mod h1:JbKx8HSWICu5zyqWOa0dVV1pbbXOHusrSzQUprW6g+w= -github.com/gobuffalo/genny v0.0.0-20181030163439-ed103521b8ec/go.mod h1:3Xm9z7/2oRxlB7PSPLxvadZ60/0UIek1YWmcC7QSaVs= -github.com/gobuffalo/genny v0.0.0-20181106193839-7dcb0924caf1/go.mod h1:x61yHxvbDCgQ/7cOAbJCacZQuHgB0KMSzoYcw5debjU= -github.com/gobuffalo/genny v0.0.0-20181107223128-f18346459dbe/go.mod h1:utQD3aKKEsdb03oR+Vi/6ztQb1j7pO10N3OBoowRcSU= -github.com/gobuffalo/genny v0.0.0-20181109163038-9539921b620f/go.mod h1:118bnhJR2oviiji++mZj0IH/IaFBCzwkWHaI4OQq5hQ= -github.com/gobuffalo/genny v0.0.0-20181110202416-7b7d8756a9e2/go.mod h1:118bnhJR2oviiji++mZj0IH/IaFBCzwkWHaI4OQq5hQ= -github.com/gobuffalo/genny v0.0.0-20181111200257-599b33630ab4/go.mod h1:w+iD/cdtIpPDFax6LlUFuCdXFD0DLRUXsfp3IeT/Doc= -github.com/gobuffalo/genny v0.0.0-20181114215459-0a4decd77f5d/go.mod h1:kN2KZ8VgXF9VIIOj/GM0Eo7YK+un4Q3tTreKOf0q1ng= -github.com/gobuffalo/genny v0.0.0-20181119162812-e8ff4adce8bb/go.mod h1:BA9htSe4bZwBDJLe8CUkoqkypq3hn3+CkoHqVOW718E= -github.com/gobuffalo/genny v0.0.0-20181127225641-2d959acc795b/go.mod h1:l54xLXNkteX/PdZ+HlgPk1qtcrgeOr3XUBBPDbH+7CQ= -github.com/gobuffalo/genny v0.0.0-20181128191930-77e34f71ba2a/go.mod h1:FW/D9p7cEEOqxYA71/hnrkOWm62JZ5ZNxcNIVJEaWBU= -github.com/gobuffalo/genny v0.0.0-20181203165245-fda8bcce96b1/go.mod h1:wpNSANu9UErftfiaAlz1pDZclrYzLtO5lALifODyjuM= -github.com/gobuffalo/genny v0.0.0-20181203201232-849d2c9534ea/go.mod h1:wpNSANu9UErftfiaAlz1pDZclrYzLtO5lALifODyjuM= -github.com/gobuffalo/genny v0.0.0-20181206121324-d6fb8a0dbe36/go.mod h1:wpNSANu9UErftfiaAlz1pDZclrYzLtO5lALifODyjuM= -github.com/gobuffalo/genny v0.0.0-20181207164119-84844398a37d/go.mod h1:y0ysCHGGQf2T3vOhCrGHheYN54Y/REj0ayd0Suf4C/8= -github.com/gobuffalo/genny v0.0.0-20181211165820-e26c8466f14d/go.mod h1:sHnK+ZSU4e2feXP3PA29ouij6PUEiN+RCwECjCTB3yM= -github.com/gobuffalo/genny v0.0.0-20190104222617-a71664fc38e7/go.mod h1:QPsQ1FnhEsiU8f+O0qKWXz2RE4TiDqLVChWkBuh1WaY= -github.com/gobuffalo/genny v0.0.0-20190112155932-f31a84fcacf5/go.mod h1:CIaHCrSIuJ4il6ka3Hub4DR4adDrGoXGEEt2FbBxoIo= -github.com/gobuffalo/genny v0.0.0-20190124191459-3310289fa4b4/go.mod h1:yIRqxhZV2sAzb+B3iPUMLauTRrYP8tJUlZ1zV9teKik= -github.com/gobuffalo/genny v0.0.0-20190131150032-1045e97d19fb/go.mod h1:yIRqxhZV2sAzb+B3iPUMLauTRrYP8tJUlZ1zV9teKik= -github.com/gobuffalo/genny v0.0.0-20190131190646-008a76242145/go.mod h1:NJvPZJxb9M4z790P6N2SMZKSUYpASpEvLuUWnHGKzb4= -github.com/gobuffalo/genny v0.0.0-20190219203444-c95082806342/go.mod h1:3BLT+Vs94EEz3fKR8WWOkYpL6c1tdJcZUNCe3LZAnvQ= -github.com/gobuffalo/genny v0.0.0-20190315121735-8b38fb089e88/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= -github.com/gobuffalo/genny v0.0.0-20190315124720-e16e52a93c79/go.mod h1:nKeefjbhYowo36ys9nG9VUvD9FRIS0p3BC2JFfcOucM= -github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= -github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28= -github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo= -github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk= -github.com/gobuffalo/genny v0.2.0/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= -github.com/gobuffalo/genny v0.3.0/go.mod h1:ywJ2CoXrTZj7rbS8HTbzv7uybnLKlsNSBhEQ+yFI3E8= -github.com/gobuffalo/genny v0.4.0/go.mod h1:Kdo8wsw5zmooVvEfMkfv4JI9Ogz/PMvBNvl133soylI= -github.com/gobuffalo/genny v0.4.1 h1:ylgRyFoVGtfq92Ziq0kyi0Sdwh//pqWEwg+vD3eK1ZA= -github.com/gobuffalo/genny v0.4.1/go.mod h1:dpded+KBgICFciAb+6R5Lo+1VxzofjqHgKqFYIL8M7U= -github.com/gobuffalo/gitgen v0.0.0-20190219185555-91c2c5f0aad5/go.mod h1:ZzGIrxBvCJEluaU4i3CN0GFlu1Qmb3yK8ziV02evJ1E= -github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211 h1:mSVZ4vj4khv+oThUfS+SQU3UuFIZ5Zo6UNcvK8E8Mz8= -github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw= -github.com/gobuffalo/github_flavored_markdown v1.0.4/go.mod h1:uRowCdK+q8d/RF0Kt3/DSalaIXbb0De/dmTqMQdkQ4I= -github.com/gobuffalo/github_flavored_markdown v1.0.5/go.mod h1:U0643QShPF+OF2tJvYNiYDLDGDuQmJZXsf/bHOJPsMY= -github.com/gobuffalo/github_flavored_markdown v1.0.7/go.mod h1:w93Pd9Lz6LvyQXEG6DktTPHkOtCbr+arAD5mkwMzXLI= -github.com/gobuffalo/github_flavored_markdown v1.1.0 h1:8Zzj4fTRl/OP2R7sGerzSf6g2nEJnaBEJe7UAOiEvbQ= -github.com/gobuffalo/github_flavored_markdown v1.1.0/go.mod h1:TSpTKWcRTI0+v7W3x8dkSKMLJSUpuVitlptCkpeY8ic= -github.com/gobuffalo/gogen v0.0.0-20190219194924-d32a17ad9761/go.mod h1:v47C8sid+ZM2qK+YpQ2MGJKssKAqyTsH1wl/pTCPdz8= -github.com/gobuffalo/gogen v0.0.0-20190224213239-1c6076128bbc/go.mod h1:tQqPADZKflmJCR4FHRHYNPP79cXPICyxUiUHyhuXtqg= -github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= -github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= -github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= -github.com/gobuffalo/gogen v0.2.0 h1:Xx7NCe+/y++eII2aWAFZ09/81MhDCsZwvMzIFJoQRnU= -github.com/gobuffalo/gogen v0.2.0/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= -github.com/gobuffalo/helpers v0.0.0-20190422082217-384f90c6579f/go.mod h1:g0I3qKQEyJxwnHtEmLugD75eoOiWxEtibcV62tYah9w= -github.com/gobuffalo/helpers v0.0.0-20190506214229-8e6f634af7c3/go.mod h1:HlNpmw2+Rjx882VUf6hJfNJs5wpNRzX02KcqCXDlLGc= -github.com/gobuffalo/helpers v0.2.1/go.mod h1:5UhA1EfGvyPZfzo9PqhKkSgmLolaTpnWYDbqCJcmiAE= -github.com/gobuffalo/helpers v0.2.2/go.mod h1:xYbzUdCUpVzLwLnqV8HIjT6hmG0Cs7YIBCJkNM597jw= -github.com/gobuffalo/helpers v0.2.4/go.mod h1:NX7v27yxPDOPTgUFYmJ5ow37EbxdoLraucOGvMNawyk= -github.com/gobuffalo/helpers v0.4.0 h1:DR/iYihrVCXv1cYeIGSK3EZz2CljO+DqDLQPWZAod9c= -github.com/gobuffalo/helpers v0.4.0/go.mod h1:2q/ZnVxCehM4/y1bNz3+wXsvWvWUY+iTUr7mPC6QqGQ= -github.com/gobuffalo/here v0.2.3 h1:1xamq7i4CKjGgICCXY0qpxPeXGdB8oVNSevkpqwd5X4= -github.com/gobuffalo/here v0.2.3/go.mod h1:2a6G14FaAKOGJMK/5UNa4Og/+iyFS5cq3MnlvFR7YDk= -github.com/gobuffalo/httptest v1.0.2/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E= -github.com/gobuffalo/httptest v1.0.3/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E= -github.com/gobuffalo/httptest v1.0.4/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E= -github.com/gobuffalo/httptest v1.0.5/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E= -github.com/gobuffalo/httptest v1.0.6/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E= -github.com/gobuffalo/httptest v1.1.0/go.mod h1:BIfCgiqCOotRc5xYwCcZN7IFYag4277Ynqjar/Ra3iI= -github.com/gobuffalo/httptest v1.2.0/go.mod h1:0KfourZCsapuvkljDMSr7YM+66kCt/rXv54YcWRWwhc= -github.com/gobuffalo/httptest v1.3.0/go.mod h1:Y4qebOsMH91XdB0cZuS8OUdAKHGV7hVDcjgzGupoYlk= -github.com/gobuffalo/httptest v1.4.0 h1:DaoTl/2iFRTk9Uau6b0Lh644tcbRtBNMHcWg6WhieS8= -github.com/gobuffalo/httptest v1.4.0/go.mod h1:VDkgCFmIxAunkLNts49TC949NRLTtvyLKuN67o6hrXM= -github.com/gobuffalo/licenser v0.0.0-20180924033006-eae28e638a42/go.mod h1:Ubo90Np8gpsSZqNScZZkVXXAo5DGhTb+WYFIjlnog8w= -github.com/gobuffalo/licenser v0.0.0-20181025145548-437d89de4f75/go.mod h1:x3lEpYxkRG/XtGCUNkio+6RZ/dlOvLzTI9M1auIwFcw= -github.com/gobuffalo/licenser v0.0.0-20181027200154-58051a75da95/go.mod h1:BzhaaxGd1tq1+OLKObzgdCV9kqVhbTulxOpYbvMQWS0= -github.com/gobuffalo/licenser v0.0.0-20181109171355-91a2a7aac9a7/go.mod h1:m+Ygox92pi9bdg+gVaycvqE8RVSjZp7mWw75+K5NPHk= -github.com/gobuffalo/licenser v0.0.0-20181116224424-1b7fd3f9cbb4/go.mod h1:icHYfF2FVDi6CpI8BK9Sy1ChkSijz/0GNN7Qzzdk6JE= -github.com/gobuffalo/licenser v0.0.0-20181128165715-cc7305f8abed/go.mod h1:oU9F9UCE+AzI/MueCKZamsezGOOHfSirltllOVeRTAE= -github.com/gobuffalo/licenser v0.0.0-20181128170751-82cc989582b9/go.mod h1:oU9F9UCE+AzI/MueCKZamsezGOOHfSirltllOVeRTAE= -github.com/gobuffalo/licenser v0.0.0-20181203160806-fe900bbede07/go.mod h1:ph6VDNvOzt1CdfaWC+9XwcBnlSTBz2j49PBwum6RFaU= -github.com/gobuffalo/licenser v0.0.0-20181211173111-f8a311c51159/go.mod h1:ve/Ue99DRuvnTaLq2zKa6F4KtHiYf7W046tDjuGYPfM= -github.com/gobuffalo/licenser v0.0.0-20190224205124-37799bc2ebf6/go.mod h1:ve/Ue99DRuvnTaLq2zKa6F4KtHiYf7W046tDjuGYPfM= -github.com/gobuffalo/licenser v0.0.0-20190329153211-c35c0a2813b2/go.mod h1:ZVWE6uKUE3rGf7sedUHWVjNWrEgxaUQLVFL+pQiWpfY= -github.com/gobuffalo/licenser v1.1.0/go.mod h1:ZVWE6uKUE3rGf7sedUHWVjNWrEgxaUQLVFL+pQiWpfY= -github.com/gobuffalo/licenser v1.2.0/go.mod h1:ZqDQ+UOqsXPovl65rbCr3Tye6+nKjT4ovwurjVxvMQM= -github.com/gobuffalo/licenser v1.4.0 h1:S8WY0nLT9zkBTjFYcbJ0E9MEK7SgE86aMfjsnuThQjY= -github.com/gobuffalo/licenser v1.4.0/go.mod h1:YkyTh2T/d7KECTh32j65auPV876gkJJk55aAdBfDehg= -github.com/gobuffalo/logger v0.0.0-20181022175615-46cfb361fc27/go.mod h1:8sQkgyhWipz1mIctHF4jTxmJh1Vxhp7mP8IqbljgJZo= -github.com/gobuffalo/logger v0.0.0-20181027144941-73d08d2bb969/go.mod h1:7uGg2duHKpWnN4+YmyKBdLXfhopkAdVM6H3nKbyFbz8= -github.com/gobuffalo/logger v0.0.0-20181027193913-9cf4dd0efe46/go.mod h1:7uGg2duHKpWnN4+YmyKBdLXfhopkAdVM6H3nKbyFbz8= -github.com/gobuffalo/logger v0.0.0-20181109185836-3feeab578c17/go.mod h1:oNErH0xLe+utO+OW8ptXMSA5DkiSEDW1u3zGIt8F9Ew= -github.com/gobuffalo/logger v0.0.0-20181117211126-8e9b89b7c264/go.mod h1:5etB91IE0uBlw9k756fVKZJdS+7M7ejVhmpXXiSFj0I= -github.com/gobuffalo/logger v0.0.0-20181127160119-5b956e21995c/go.mod h1:+HxKANrR9VGw9yN3aOAppJKvhO05ctDi63w4mDnKv2U= -github.com/gobuffalo/logger v0.0.0-20190224201004-be78ebfea0fa/go.mod h1:+HxKANrR9VGw9yN3aOAppJKvhO05ctDi63w4mDnKv2U= -github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= -github.com/gobuffalo/logger v1.0.0/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs= -github.com/gobuffalo/logger v1.0.1 h1:ZEgyRGgAm4ZAhAO45YXMs5Fp+bzGLESFewzAVBMKuTg= -github.com/gobuffalo/logger v1.0.1/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs= -github.com/gobuffalo/makr v1.1.5/go.mod h1:Y+o0btAH1kYAMDJW/TX3+oAXEu0bmSLLoC9mIFxtzOw= -github.com/gobuffalo/makr v1.2.0 h1:TA6ThoZEcq0F9FCrc/7xS1ycdCIL0K6Ux+5wmwYV7BY= -github.com/gobuffalo/makr v1.2.0/go.mod h1:SFQUrDtwDpmQ6BxKJqxg0emc4KkNzzvUtAtnHiVK/QQ= -github.com/gobuffalo/mapi v1.0.0/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= -github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= -github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= -github.com/gobuffalo/mapi v1.1.0 h1:VEhxtd2aoPXFqVmliLXGSmqPh541OprxYYZFwgNcjn4= -github.com/gobuffalo/mapi v1.1.0/go.mod h1:pqQ1XAqvpy/JYtRwoieNps2yU8MFiMxBUpAm2FBtQ50= -github.com/gobuffalo/meta v0.0.0-20181018155829-df62557efcd3/go.mod h1:XTTOhwMNryif3x9LkTTBO/Llrveezd71u3quLd0u7CM= -github.com/gobuffalo/meta v0.0.0-20181018192820-8c6cef77dab3/go.mod h1:E94EPzx9NERGCY69UWlcj6Hipf2uK/vnfrF4QD0plVE= -github.com/gobuffalo/meta v0.0.0-20181025145500-3a985a084b0a/go.mod h1:YDAKBud2FP7NZdruCSlmTmDOZbVSa6bpK7LJ/A/nlKg= -github.com/gobuffalo/meta v0.0.0-20181109154556-f76929ccd5fa/go.mod h1:1rYI5QsanV6cLpT1BlTAkrFi9rtCZrGkvSK8PglwfS8= -github.com/gobuffalo/meta v0.0.0-20181114191255-b130ebedd2f7/go.mod h1:K6cRZ29ozr4Btvsqkjvg5nDFTLOgTqf03KA70Ks0ypE= -github.com/gobuffalo/meta v0.0.0-20181116202903-8850e47774f5/go.mod h1:K6cRZ29ozr4Btvsqkjvg5nDFTLOgTqf03KA70Ks0ypE= -github.com/gobuffalo/meta v0.0.0-20181127070345-0d7e59dd540b/go.mod h1:RLO7tMvE0IAKAM8wny1aN12pvEKn7EtkBLkUZR00Qf8= -github.com/gobuffalo/meta v0.0.0-20190120163247-50bbb1fa260d/go.mod h1:KKsH44nIK2gA8p0PJmRT9GvWJUdphkDUA8AJEvFWiqM= -github.com/gobuffalo/meta v0.0.0-20190121163014-ecaa953cbfb3/go.mod h1:KLfkGnS+Tucc+iTkUcAUBtxpwOJGfhw2pHRLddPxMQY= -github.com/gobuffalo/meta v0.0.0-20190126124307-c8fb6f4eb5a9/go.mod h1:zoh6GLgkk9+iI/62dST4amAuVAczZrBXoAk/t64n7Ew= -github.com/gobuffalo/meta v0.0.0-20190207205153-50a99e08b8cf/go.mod h1:+VGfK9Jm9I7oJyFeJzIT6omCPvrDktzAtpHJKaieugY= -github.com/gobuffalo/meta v0.0.0-20190320152240-a5320142224a/go.mod h1:+VGfK9Jm9I7oJyFeJzIT6omCPvrDktzAtpHJKaieugY= -github.com/gobuffalo/meta v0.0.0-20190329152330-e161e8a93e3b/go.mod h1:mCRSy5F47tjK8yaIDcJad4oe9fXxY5gLrx3Xx2spK+0= -github.com/gobuffalo/meta v0.1.0/go.mod h1:vAgu28tKdaPIkt8j60wYv1dLuJ1UwOmAjZtYOnLJlko= -github.com/gobuffalo/meta v0.2.0 h1:QSDlR2nbGewl0OVL9kqtU8SeKq6zSonrKWB6G3EgADs= -github.com/gobuffalo/meta v0.2.0/go.mod h1:KZ9Hk/o+kFpwRhzUO95EOuxf3jXU4GleCTUDSTpe3hQ= -github.com/gobuffalo/mw-basicauth v1.0.3/go.mod h1:dg7+ilMZOKnQFHDefUzUHufNyTswVUviCBgF244C1+0= -github.com/gobuffalo/mw-basicauth v1.0.6/go.mod h1:RFyeGeDLZlVgp/eBflqu2eavFqyv0j0fVVP87WPYFwY= -github.com/gobuffalo/mw-basicauth v1.0.7 h1:9zTxCpu0ozzwpwvw5MO31w8nEoySNRNfZwM1YAWfGZs= -github.com/gobuffalo/mw-basicauth v1.0.7/go.mod h1:xJ9/OSiOWl+kZkjaSun62srODr3Cx8OB4AKr+G4FlS4= -github.com/gobuffalo/mw-contenttype v0.0.0-20180802152300-74f5a47f4d56/go.mod h1:7EvcmzBbeCvFtQm5GqF9ys6QnCxz2UM1x0moiWLq1No= -github.com/gobuffalo/mw-contenttype v0.0.0-20190129203934-2554e742333b h1:6LKJWRvshByPo/dvV4B1E2wvsqXp1uoynVndvuuOZZc= -github.com/gobuffalo/mw-contenttype v0.0.0-20190129203934-2554e742333b/go.mod h1:7x87+mDrr9Peh7AqhOtESyJLanMd2zQNz2Hts+vtBoE= -github.com/gobuffalo/mw-csrf v0.0.0-20180802151833-446ff26e108b/go.mod h1:sbGtb8DmDZuDUQoxjr8hG1ZbLtZboD9xsn6p77ppcHo= -github.com/gobuffalo/mw-csrf v0.0.0-20190129204204-25460a055517 h1:pOOXwl1xPLLP8oZw3e3t2wwrc/KSzmlRBcaQwGpG9oo= -github.com/gobuffalo/mw-csrf v0.0.0-20190129204204-25460a055517/go.mod h1:o5u+nnN0Oa7LBeDYH9QP36qeMPnXV9qbVnbZ4D+Kb0Q= -github.com/gobuffalo/mw-forcessl v0.0.0-20180802152810-73921ae7a130 h1:v94+IGhlBro0Lz1gOR3lrdAVSZ0mJF2NxsdppKd7FnI= -github.com/gobuffalo/mw-forcessl v0.0.0-20180802152810-73921ae7a130/go.mod h1:JvNHRj7bYNAMUr/5XMkZaDcw3jZhUZpsmzhd//FFWmQ= -github.com/gobuffalo/mw-i18n v0.0.0-20180802152014-e3060b7e13d6/go.mod h1:91AQfukc52A6hdfIfkxzyr+kpVYDodgAeT5cjX1UIj4= -github.com/gobuffalo/mw-i18n v0.0.0-20181027200759-09e0c99be4d3/go.mod h1:1PpGPgqP8VsfUppgBA9FrTOXjI6X9gjqhh/8dmg48lg= -github.com/gobuffalo/mw-i18n v0.0.0-20190129204410-552713a3ebb4 h1:c1fFPCxA7SozZPqMhpfZoOVa3wUpCl11gyCEZ4nYqUE= -github.com/gobuffalo/mw-i18n v0.0.0-20190129204410-552713a3ebb4/go.mod h1:rBg2eHxsyxVjtYra6fGy4GSF5C8NysOvz+Znnzk42EM= -github.com/gobuffalo/mw-paramlogger v0.0.0-20181005191442-d6ee392ec72e/go.mod h1:6OJr6VwSzgJMqWMj7TYmRUqzNe2LXu/W1rRW4MAz/ME= -github.com/gobuffalo/mw-paramlogger v0.0.0-20190129202837-395da1998525 h1:2QoD5giw2UrYJu65UKDEo9HFcz9yun387twL2zzn+/Q= -github.com/gobuffalo/mw-paramlogger v0.0.0-20190129202837-395da1998525/go.mod h1:gEo/ABCsKqvpp/KCxN2AIzDEe0OJUXbJ9293FYrXw+w= -github.com/gobuffalo/mw-tokenauth v0.0.0-20181001105134-8545f626c189/go.mod h1:UqBF00IfKvd39ni5+yI5MLMjAf4gX7cDKN/26zDOD6c= -github.com/gobuffalo/mw-tokenauth v0.0.0-20190129201951-95847f29c5c8 h1:dqwRMSzfhe3rL0vMDaRvc2ozLqxapWFBEDH6/f0nQT0= -github.com/gobuffalo/mw-tokenauth v0.0.0-20190129201951-95847f29c5c8/go.mod h1:n2oa93LHGD94hGI+PoJO+6cf60DNrXrAIv9L/Ke3GXc= -github.com/gobuffalo/nulls v0.0.0-20190305142546-85f3c9250d87/go.mod h1:KhaLCW+kFA/G97tZkmVkIxhRw3gvZszJn7JjPLI3gtI= -github.com/gobuffalo/nulls v0.1.0 h1:pR3SDzXyFcQrzyPreZj+OzNHSxI4DphSOFaQuidxrfw= -github.com/gobuffalo/nulls v0.1.0/go.mod h1:/HRtuDRoVoN5fABk3J6jzZaGEdcIZEMs0qczj71eKZY= -github.com/gobuffalo/packd v0.0.0-20181027182251-01ad393492c8/go.mod h1:SmdBdhj6uhOsg1Ui4SFAyrhuc7U4VCildosO5IDJ3lc= -github.com/gobuffalo/packd v0.0.0-20181027190505-aafc0d02c411/go.mod h1:SmdBdhj6uhOsg1Ui4SFAyrhuc7U4VCildosO5IDJ3lc= -github.com/gobuffalo/packd v0.0.0-20181027194105-7ae579e6d213/go.mod h1:SmdBdhj6uhOsg1Ui4SFAyrhuc7U4VCildosO5IDJ3lc= -github.com/gobuffalo/packd v0.0.0-20181028162033-6d52e0eabf41/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= -github.com/gobuffalo/packd v0.0.0-20181029140631-cf76bd87a5a6/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= -github.com/gobuffalo/packd v0.0.0-20181031195726-c82734870264/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= -github.com/gobuffalo/packd v0.0.0-20181103221656-16c4ed88b296/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= -github.com/gobuffalo/packd v0.0.0-20181104210303-d376b15f8e96/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= -github.com/gobuffalo/packd v0.0.0-20181111195323-b2e760a5f0ff/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= -github.com/gobuffalo/packd v0.0.0-20181114190715-f25c5d2471d7/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= -github.com/gobuffalo/packd v0.0.0-20181124090624-311c6248e5fb/go.mod h1:Foenia9ZvITEvG05ab6XpiD5EfBHPL8A6hush8SJ0o8= -github.com/gobuffalo/packd v0.0.0-20181207120301-c49825f8f6f4/go.mod h1:LYc0TGKFBBFTRC9dg2pcRcMqGCTMD7T2BIMP7OBuQAA= -github.com/gobuffalo/packd v0.0.0-20181212173646-eca3b8fd6687/go.mod h1:LYc0TGKFBBFTRC9dg2pcRcMqGCTMD7T2BIMP7OBuQAA= -github.com/gobuffalo/packd v0.0.0-20190224160250-d04dd98aca5b/go.mod h1:LYc0TGKFBBFTRC9dg2pcRcMqGCTMD7T2BIMP7OBuQAA= -github.com/gobuffalo/packd v0.0.0-20190315122247-83d601d65093/go.mod h1:LpEu7OkoplvlhztyAEePkS6JwcGgANdgGL5pB4Knxaw= -github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= -github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= -github.com/gobuffalo/packd v0.2.0/go.mod h1:k2CkHP3bjbqL2GwxwhxUy1DgnlbW644hkLC9iIUvZwY= -github.com/gobuffalo/packd v0.3.0 h1:eMwymTkA1uXsqxS0Tpoop3Lc0u3kTfiMBE6nKtQU4g4= -github.com/gobuffalo/packd v0.3.0/go.mod h1:zC7QkmNkYVGKPw4tHpBQ+ml7W/3tIebgeo1b36chA3Q= -github.com/gobuffalo/packr v1.13.7/go.mod h1:KkinLIn/n6+3tVXMwg6KkNvWwVsrRAz4ph+jgpk3Z24= -github.com/gobuffalo/packr v1.15.0/go.mod h1:t5gXzEhIviQwVlNx/+3SfS07GS+cZ2hn76WLzPp6MGI= -github.com/gobuffalo/packr v1.15.1/go.mod h1:IeqicJ7jm8182yrVmNbM6PR4g79SjN9tZLH8KduZZwE= -github.com/gobuffalo/packr v1.16.0/go.mod h1:Yx/lcR/7mDLXhuJSzsz2MauD/HUwSc+EK6oigMRGGsM= -github.com/gobuffalo/packr v1.19.0/go.mod h1:MstrNkfCQhd5o+Ct4IJ0skWlxN8emOq8DsoT1G98VIU= -github.com/gobuffalo/packr v1.20.0/go.mod h1:JDytk1t2gP+my1ig7iI4NcVaXr886+N0ecUga6884zw= -github.com/gobuffalo/packr v1.21.0/go.mod h1:H00jGfj1qFKxscFJSw8wcL4hpQtPe1PfU2wa6sg/SR0= -github.com/gobuffalo/packr v1.21.5/go.mod h1:zCvDxrZzFmq5Xd7Jw4vaGe/OYwzuXnma31D2EbTHMWk= -github.com/gobuffalo/packr v1.21.7/go.mod h1:73tmYjwi4Cvb1eNiAwpmrzZ0gxVA4KBqVSZ2FNeJodM= -github.com/gobuffalo/packr v1.21.9/go.mod h1:GC76q6nMzRtR+AEN/VV4w0z2/4q7SOaEmXh3Ooa8sOE= -github.com/gobuffalo/packr v1.22.0/go.mod h1:Qr3Wtxr3+HuQEwWqlLnNW4t1oTvK+7Gc/Rnoi/lDFvA= -github.com/gobuffalo/packr v1.24.0/go.mod h1:p9Sgang00I1hlr1ub+tgI9AQdFd4f+WH1h62jYpzetM= -github.com/gobuffalo/packr v1.24.1/go.mod h1:absPnW/XUUa4DmIh5ga7AipGXXg0DOcd5YWKk5RZs8Y= -github.com/gobuffalo/packr v1.25.0 h1:NtPK45yOKFdTKHTvRGKL+UIKAKmJVWIVJOZBDI/qEdY= -github.com/gobuffalo/packr v1.25.0/go.mod h1:NqsGg8CSB2ZD+6RBIRs18G7aZqdYDlYNNvsSqP6T4/U= -github.com/gobuffalo/packr/v2 v2.0.0-rc.5/go.mod h1:e6gmOfhf3KmT4zl2X/NDRSfBXk2oV4TXZ+NNOM0xwt8= -github.com/gobuffalo/packr/v2 v2.0.0-rc.7/go.mod h1:BzhceHWfF3DMAkbPUONHYWs63uacCZxygFY1b4H9N2A= -github.com/gobuffalo/packr/v2 v2.0.0-rc.8/go.mod h1:y60QCdzwuMwO2R49fdQhsjCPv7tLQFR0ayzxxla9zes= -github.com/gobuffalo/packr/v2 v2.0.0-rc.9/go.mod h1:fQqADRfZpEsgkc7c/K7aMew3n4aF1Kji7+lIZeR98Fc= -github.com/gobuffalo/packr/v2 v2.0.0-rc.10/go.mod h1:4CWWn4I5T3v4c1OsJ55HbHlUEKNWMITG5iIkdr4Px4w= -github.com/gobuffalo/packr/v2 v2.0.0-rc.11/go.mod h1:JoieH/3h3U4UmatmV93QmqyPUdf4wVM9HELaHEu+3fk= -github.com/gobuffalo/packr/v2 v2.0.0-rc.12/go.mod h1:FV1zZTsVFi1DSCboO36Xgs4pzCZBjB/tDV9Cz/lSaR8= -github.com/gobuffalo/packr/v2 v2.0.0-rc.13/go.mod h1:2Mp7GhBFMdJlOK8vGfl7SYtfMP3+5roE39ejlfjw0rA= -github.com/gobuffalo/packr/v2 v2.0.0-rc.14/go.mod h1:06otbrNvDKO1eNQ3b8hst+1010UooI2MFg+B2Ze4MV8= -github.com/gobuffalo/packr/v2 v2.0.0-rc.15/go.mod h1:IMe7H2nJvcKXSF90y4X1rjYIRlNMJYCxEhssBXNZwWs= -github.com/gobuffalo/packr/v2 v2.0.0/go.mod h1:7McfLpSxaPUoSQm7gYpTZRQSK63mX8EKzzYSEFKvfkM= -github.com/gobuffalo/packr/v2 v2.0.1/go.mod h1:tp5/5A2e67F1lUGTiNadtA2ToP045+mvkWzaqMCsZr4= -github.com/gobuffalo/packr/v2 v2.0.2/go.mod h1:6Y+2NY9cHDlrz96xkJG8bfPwLlCdJVS/irhNJmwD7kM= -github.com/gobuffalo/packr/v2 v2.0.6/go.mod h1:/TYKOjadT7P9jRWZtj4BRTgeXy2tIYntifGkD+aM2KY= -github.com/gobuffalo/packr/v2 v2.0.7/go.mod h1:1SBFAIr3YnxYdJRyrceR7zhOrhV/YhHzOjDwA9LLZ5Y= -github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= -github.com/gobuffalo/packr/v2 v2.0.10/go.mod h1:n90ZuXIc2KN2vFAOQascnPItp9A2g9QYSvYvS3AjQEM= -github.com/gobuffalo/packr/v2 v2.1.0/go.mod h1:n90ZuXIc2KN2vFAOQascnPItp9A2g9QYSvYvS3AjQEM= -github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= -github.com/gobuffalo/packr/v2 v2.3.2/go.mod h1:93elRVdDhpUgox9GnXswWK5dzpVBQsnlQjnnncSLoiU= -github.com/gobuffalo/packr/v2 v2.4.0/go.mod h1:ra341gygw9/61nSjAbfwcwh8IrYL4WmR4IsPkPBhQiY= -github.com/gobuffalo/packr/v2 v2.5.1/go.mod h1:8f9c96ITobJlPzI44jj+4tHnEKNt0xXWSVlXRN9X1Iw= -github.com/gobuffalo/packr/v2 v2.5.2/go.mod h1:sgEE1xNZ6G0FNN5xn9pevVu4nywaxHvgup67xisti08= -github.com/gobuffalo/packr/v2 v2.5.3/go.mod h1:sgEE1xNZ6G0FNN5xn9pevVu4nywaxHvgup67xisti08= -github.com/gobuffalo/packr/v2 v2.6.0/go.mod h1:sgEE1xNZ6G0FNN5xn9pevVu4nywaxHvgup67xisti08= -github.com/gobuffalo/packr/v2 v2.7.1 h1:n3CIW5T17T8v4GGK5sWXLVWJhCz7b5aNLSxW6gYim4o= -github.com/gobuffalo/packr/v2 v2.7.1/go.mod h1:qYEvAazPaVxy7Y7KR0W8qYEE+RymX74kETFqjFoFlOc= -github.com/gobuffalo/plush v3.7.16+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.7.20+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.7.21+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.7.22+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.7.23+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.7.30+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.7.31+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.7.32+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.7.33+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.7.34+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.8.0+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.8.2+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.8.3+incompatible h1:kzvUTnFPhwyfPEsx7U7LI05/IIslZVGnAlMA1heWub8= -github.com/gobuffalo/plush v3.8.3+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plushgen v0.0.0-20181128164830-d29dcb966cb2/go.mod h1:r9QwptTFnuvSaSRjpSp4S2/4e2D3tJhARYbvEBcKSb4= -github.com/gobuffalo/plushgen v0.0.0-20181203163832-9fc4964505c2/go.mod h1:opEdT33AA2HdrIwK1aibqnTJDVVKXC02Bar/GT1YRVs= -github.com/gobuffalo/plushgen v0.0.0-20181207152837-eedb135bd51b/go.mod h1:Lcw7HQbEVm09sAQrCLzIxuhFbB3nAgp4c55E+UlynR0= -github.com/gobuffalo/plushgen v0.0.0-20190104222512-177cd2b872b3/go.mod h1:tYxCozi8X62bpZyKXYHw1ncx2ZtT2nFvG42kuLwYjoc= -github.com/gobuffalo/plushgen v0.0.0-20190224160205-347ea233336e/go.mod h1:tYxCozi8X62bpZyKXYHw1ncx2ZtT2nFvG42kuLwYjoc= -github.com/gobuffalo/plushgen v0.0.0-20190329152458-0555238fe0d9/go.mod h1:3U71v6HWZpVER1nInTXeAwdoRNsRd4W8aeIa1Lyp+Bk= -github.com/gobuffalo/plushgen v0.1.0/go.mod h1:NK33QLkRK/xKexiPFSxlWRT286F4yStZUa/Fbx0guvo= -github.com/gobuffalo/plushgen v0.1.2 h1:s4yAgNdfNMyMQ7o+Is4f1VlH2L1tKosT+m7BF28C8H4= -github.com/gobuffalo/plushgen v0.1.2/go.mod h1:3U71v6HWZpVER1nInTXeAwdoRNsRd4W8aeIa1Lyp+Bk= -github.com/gobuffalo/pop v4.8.2+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.8.3+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.8.4+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.8.5+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.8.7+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.8.8+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.9.0+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.9.1+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.9.2+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.9.3+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.9.5+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.9.6+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.9.8+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.9.9+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.10.0+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.11.0+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.11.1+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.11.2+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.11.3+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.12.0+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.12.1+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.12.2+incompatible h1:WFHMzzHbVLulZnEium1VlYRnWkzHz39FzVLov6rZdDI= -github.com/gobuffalo/pop v4.12.2+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/release v1.0.35/go.mod h1:VtHFAKs61vO3wboCec5xr9JPTjYyWYcvaM3lclkc4x4= -github.com/gobuffalo/release v1.0.38/go.mod h1:VtHFAKs61vO3wboCec5xr9JPTjYyWYcvaM3lclkc4x4= -github.com/gobuffalo/release v1.0.42/go.mod h1:RPs7EtafH4oylgetOJpGP0yCZZUiO4vqHfTHJjSdpug= -github.com/gobuffalo/release v1.0.51/go.mod h1:RPs7EtafH4oylgetOJpGP0yCZZUiO4vqHfTHJjSdpug= -github.com/gobuffalo/release v1.0.52/go.mod h1:RPs7EtafH4oylgetOJpGP0yCZZUiO4vqHfTHJjSdpug= -github.com/gobuffalo/release v1.0.53/go.mod h1:FdF257nd8rqhNaqtDWFGhxdJ/Ig4J7VcS3KL7n/a+aA= -github.com/gobuffalo/release v1.0.54/go.mod h1:Pe5/RxRa/BE8whDpGfRqSI7D1a0evGK1T4JDm339tJc= -github.com/gobuffalo/release v1.0.61/go.mod h1:mfIO38ujUNVDlBziIYqXquYfBF+8FDHUjKZgYC1Hj24= -github.com/gobuffalo/release v1.0.63/go.mod h1:/7hQAikt0l8Iu/tAX7slC1qiOhD6Nb+3KMmn/htiUfc= -github.com/gobuffalo/release v1.0.72/go.mod h1:NP5NXgg/IX3M5XmHmWR99D687/3Dt9qZtTK/Lbwc1hU= -github.com/gobuffalo/release v1.0.74/go.mod h1:NP5NXgg/IX3M5XmHmWR99D687/3Dt9qZtTK/Lbwc1hU= -github.com/gobuffalo/release v1.1.1/go.mod h1:Sluak1Xd6kcp6snkluR1jeXAogdJZpFFRzTYRs/2uwg= -github.com/gobuffalo/release v1.1.3/go.mod h1:CuXc5/m+4zuq8idoDt1l4va0AXAn/OSs08uHOfMVr8E= -github.com/gobuffalo/release v1.1.6/go.mod h1:18naWa3kBsqO0cItXZNJuefCKOENpbbUIqRL1g+p6z0= -github.com/gobuffalo/release v1.2.2/go.mod h1:tkFFZua2N5WRxyGDk2cSwQjzkZ/apKKXl5T8P+kEO+E= -github.com/gobuffalo/release v1.2.5/go.mod h1:tkFFZua2N5WRxyGDk2cSwQjzkZ/apKKXl5T8P+kEO+E= -github.com/gobuffalo/release v1.4.0/go.mod h1:f4uUPnD9dxrWxVy9yy0k/mvDf3EzhFtf7/byl0tTdY4= -github.com/gobuffalo/release v1.7.0/go.mod h1:xH2NjAueVSY89XgC4qx24ojEQ4zQ9XCGVs5eXwJTkEs= -github.com/gobuffalo/release v1.8.3/go.mod h1:gCk/x5WD+aIGkPodO4CuLxdnhYn9Jgp7yFYxntK/8mk= -github.com/gobuffalo/release v1.13.4/go.mod h1:5Cc4TSNxP4QFV2ZUYcgPiBBV7YyRomHecGTQuuy26G4= -github.com/gobuffalo/release v1.14.0 h1:+Jy7eLN5md6Fg+AMuFRUiK4sTNq4+zXxRho7/wJe1HU= -github.com/gobuffalo/release v1.14.0/go.mod h1:5Cc4TSNxP4QFV2ZUYcgPiBBV7YyRomHecGTQuuy26G4= -github.com/gobuffalo/shoulders v1.0.1/go.mod h1:V33CcVmaQ4gRUmHKwq1fiTXuf8Gp/qjQBUL5tHPmvbA= -github.com/gobuffalo/shoulders v1.0.3/go.mod h1:LqMcHhKRuBPMAYElqOe3POHiZ1x7Ry0BE8ZZ84Bx+k4= -github.com/gobuffalo/shoulders v1.0.4/go.mod h1:LqMcHhKRuBPMAYElqOe3POHiZ1x7Ry0BE8ZZ84Bx+k4= -github.com/gobuffalo/shoulders v1.1.0/go.mod h1:kcIJs3p7VqoBJ36Mzs+x767NyzTx0pxBvzZdWTWZYF8= -github.com/gobuffalo/shoulders v1.2.0 h1:XcPmWbzN7944VXS/I//R7o2eupUHEp3mLFWbUlk1Sco= -github.com/gobuffalo/shoulders v1.2.0/go.mod h1:Ia3oFybQWg4711cb2S5JkFSt9V4rMiLGusWZ6mRAdNM= -github.com/gobuffalo/syncx v0.0.0-20181120191700-98333ab04150/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= -github.com/gobuffalo/syncx v0.0.0-20181120194010-558ac7de985f/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= -github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754 h1:tpom+2CJmpzAWj5/VEHync2rJGi+epHNIeRSWjzGA+4= -github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= -github.com/gobuffalo/tags v2.0.11+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= -github.com/gobuffalo/tags v2.0.14+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= -github.com/gobuffalo/tags v2.0.15+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= -github.com/gobuffalo/tags v2.0.16+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= -github.com/gobuffalo/tags v2.1.0+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= -github.com/gobuffalo/tags v2.1.5+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= -github.com/gobuffalo/tags v2.1.6+incompatible h1:xaWOM48Xz8lBh+C8l5R7vSmLAZJK4KeWcLo+0pJ516g= -github.com/gobuffalo/tags v2.1.6+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= -github.com/gobuffalo/uuid v2.0.3+incompatible/go.mod h1:ErhIzkRhm0FtRuiE/PeORqcw4cVi1RtSpnwYrxuvkfE= -github.com/gobuffalo/uuid v2.0.4+incompatible/go.mod h1:ErhIzkRhm0FtRuiE/PeORqcw4cVi1RtSpnwYrxuvkfE= -github.com/gobuffalo/uuid v2.0.5+incompatible h1:c5uWRuEnYggYCrT9AJm0U2v1QTG7OVDAvxhj8tIV5Gc= -github.com/gobuffalo/uuid v2.0.5+incompatible/go.mod h1:ErhIzkRhm0FtRuiE/PeORqcw4cVi1RtSpnwYrxuvkfE= -github.com/gobuffalo/validate v2.0.3+incompatible h1:6f4JCEz11Zi6iIlexMv7Jz10RBPvgI795AOaubtCwTE= -github.com/gobuffalo/validate v2.0.3+incompatible/go.mod h1:N+EtDe0J8252BgfzQUChBgfd6L93m9weay53EWFVsMM= -github.com/gobuffalo/x v0.0.0-20181003152136-452098b06085/go.mod h1:WevpGD+5YOreDJznWevcn8NTmQEW5STSBgIkpkjzqXc= -github.com/gobuffalo/x v0.0.0-20181007152206-913e47c59ca7/go.mod h1:9rDPXaB3kXdKWzMc4odGQQdG2e2DIEmANy5aSJ9yesY= -github.com/gobuffalo/x v0.0.0-20181025165825-f204f550da9d/go.mod h1:Qh2Pb/Ak1Ko2mzHlGPigrnxkhO4WTTCI1jJM58sbgtE= -github.com/gobuffalo/x v0.0.0-20181025192250-1ef645d63fe8/go.mod h1:AIlnMGlYXOCsoCntLPFLYtrJNS/pc2HD4IdSXH62TpU= -github.com/gobuffalo/x v0.0.0-20181109195216-5b3131238124/go.mod h1:GpdLUY6/Ztf/3FfxfwsLkDqAGZ0brhlh7LzIibHyZp0= -github.com/gobuffalo/x v0.0.0-20181110221217-14085ca3e1a9/go.mod h1:ig5vdn4+5IPtxgESlZWo1SSDyHKKef8EjVVKhY9kkIQ= -github.com/gobuffalo/x v0.0.0-20190224155809-6bb134105960 h1:DoUD23uwnzKJ3t5HH2SeTIszWmc13AV9TAdMhtXQts8= -github.com/gobuffalo/x v0.0.0-20190224155809-6bb134105960/go.mod h1:ig5vdn4+5IPtxgESlZWo1SSDyHKKef8EjVVKhY9kkIQ= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/gocql/gocql v0.0.0-20191102131523-9faa4c08d962 h1:+YAUiFOQF5pIjD9FYvk0xqpyuzDdJkgP9uzSC3pBk0E= -github.com/gocql/gocql v0.0.0-20191102131523-9faa4c08d962/go.mod h1:DL0ekTmBSTdlNF25Orwt/JMzqIq3EJ4MVa/J/uK64OY= -github.com/godbus/dbus v4.1.0+incompatible h1:WqqLRTsQic3apZUK9qC5sGNfXthmPXzUZ7nQPrNITa4= -github.com/godbus/dbus v4.1.0+incompatible/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= +github.com/gofrs/flock v0.0.0-20190320160742-5135e617513b h1:ekuhfTjngPhisSjOJ0QWKpPQE8/rbknHaes6WVJj5Hw= github.com/gofrs/flock v0.0.0-20190320160742-5135e617513b/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gofrs/uuid v3.1.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE= -github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.3.0 h1:M695OaDJ5ipWvDPcoAg/YL9c3uORAegkEfBqTQF/fTQ= github.com/gogo/googleapis v1.3.0/go.mod h1:d+q1s/xVJxZGKWwC/6UfPIF33J+G1Tq4GYv9Y+Tg/EU= @@ -920,75 +260,64 @@ github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5 github.com/gogo/protobuf v1.2.2-0.20190730201129-28a6bbf47e48/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.0 h1:G8O7TerXerS4F6sx9OV7/nRfJdnXgHZu/S/7F2SN+UE= github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/goji/param v0.0.0-20160927210335-d7f49fd7d1ed h1:4ZXAJ/IvcryiUPDddal4P7mu6V0+PoBe+2tKG6TNQtc= -github.com/goji/param v0.0.0-20160927210335-d7f49fd7d1ed/go.mod h1:GZJblUu7ACjguvQUK2un6nQBlnZk7H1MzXZdfrFUd8Q= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/lint v0.0.0-20180702182130-06c8688daad7 h1:2hRPrmiwPrp3fQX967rNJIhQPtiGXdlQWAxKbKw3VHA= -github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= 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 h1:qGJ6qTW+x6xX/my+8YUVl4WNpX9B7+/l2tRsHGZ7f2s= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 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 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0= github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM= github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6 h1:YYWNAGTKWhKpcLLt7aSj/odlKrSrelQwlovBpDuf19w= github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0= +github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613 h1:9kfjN3AdxcbsZBf8NjltjWihK2QfBBBZuv91cMFfDHw= github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= +github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3 h1:pe9JHs3cHHDQgOFXJJdYkK6fLz2PWyYtP4hthoCMvs8= github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3/go.mod h1:JXrF4TWy4tXYn62/9x8Wm/K/dm06p8tCKwFRDPZG/1o= +github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee h1:J2XAy40+7yz70uaOiMbNnluTg7gyQhtGqLQncQh+4J8= github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU= +github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a h1:iR3fYXUjHCR97qWS8ch1y9zPNsgXThGwjKPrYfqMPks= github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= +github.com/golangci/golangci-lint v1.21.0 h1:HxAxpR8Z0M8omihvQdsD3PF0qPjlqYqp2vMJzstoKeI= github.com/golangci/golangci-lint v1.21.0/go.mod h1:phxpHK52q7SE+5KpPnti4oZTdFCEsn/tKN+nFvCKXfk= +github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc h1:gLLhTLMk2/SutryVJ6D4VZCU3CUqr8YloG7FPIBWFpI= github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc/go.mod h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU= +github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA= github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA= github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= +github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770 h1:EL/O5HGrF7Jaq0yNhBLucz9hTuRzj2LdwGBOaENgxIk= github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21 h1:leSNB7iYzLYSSx3J/s5sVf4Drkc68W2wm4Ixh/mr0us= github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI= +github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0 h1:HVfrLniijszjS1aiNg8JbBMO2+E1WIQ+j/gL4SQqGPg= github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= -github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0= -github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= -github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac h1:Q0Jsdxl5jbxouNs1TQYt0gxesYMU4VXRbsTlgDloZ50= -github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= -github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82 h1:EvokxLQsaaQjcWVWSV38221VAK7qc2zhaO17bKys/18= -github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82/go.mod h1:PxC8OnwL11+aosOB5+iEPoV3picfs8tUpkVd0pDo+Kg= -github.com/gonum/internal v0.0.0-20181124074243-f884aa714029 h1:8jtTdc+Nfj9AR+0soOeia9UZSvYBvETVHZrugUowJ7M= -github.com/gonum/internal v0.0.0-20181124074243-f884aa714029/go.mod h1:Pu4dmpkhSyOzRwuXkOgAvijx4o+4YMUJJo9OvPYMkks= -github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9 h1:7qnwS9+oeSiOIsiUMajT+0R7HR6hw5NegnKPmn/94oI= -github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9/go.mod h1:XA3DeT6rxh2EAE789SSiSJNqxPaC0aE9J8NTOI0Jo/A= -github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9 h1:V2IgdyerlBa/MxaEFRbV5juy/C3MGdj4ePi+g6ePIp4= -github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9/go.mod h1:0EXg4mc1CNP0HCqCz+K4ts155PXIlUywf0wqN+GfPZw= github.com/google/addlicense v0.0.0-20190510175307-22550fa7c1b0 h1:ydbHzabf84uucKri5fcfiqYxGg+rYgP/zQfLLN8lyP0= github.com/google/addlicense v0.0.0-20190510175307-22550fa7c1b0/go.mod h1:QtPG26W17m+OIQgE6gQ24gC1M6pUaMBAbFrTIDtwG/E= github.com/google/btree v0.0.0-20160524151835-7d79101e329e/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/flatbuffers v1.11.0 h1:O7CEyB8Cb3/DmtxODGtLHcEvpr81Jm5qLg/hsHnxA2A= -github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= 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 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY= -github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= -github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= @@ -1005,9 +334,6 @@ github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/google/uuid v1.1.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go v2.0.0+incompatible h1:j0GKcs05QVmm7yesiZq2+9cxHkNK9YM6zKx4D2qucQU= -github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= -github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= @@ -1018,53 +344,26 @@ github.com/googleapis/gnostic v0.3.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTV github.com/gophercloud/gophercloud v0.0.0-20190126172459-c818fa66e4c8/go.mod h1:3WdhXV3rUYy9p6AUW8d94kr+HS62Y4VL9mBnFxsD8q4= github.com/gophercloud/gophercloud v0.3.0 h1:6sjpKIpVwRIIwmcEGp+WwNovNsem+c+2vm6oxshRpL8= github.com/gophercloud/gophercloud v0.3.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/goreleaser/goreleaser v0.94.0 h1:2CFMxMTLODjYfNOx2sADNzpgCwH9ltMqvQYtj+ntK1Q= -github.com/goreleaser/goreleaser v0.94.0/go.mod h1:OjbYR2NhOI6AEUWCowMSBzo9nP1aRif3sYtx+rhp+Zo= -github.com/goreleaser/nfpm v0.9.7 h1:h8RQMDztu6cW7b0/s4PGbdeMYykAbJG0UMXaWG5uBMI= -github.com/goreleaser/nfpm v0.9.7/go.mod h1:F2yzin6cBAL9gb+mSiReuXdsfTrOQwDMsuSpULof+y4= github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg= -github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/pat v0.0.0-20180118222023-199c85a7f6d1 h1:LqbZZ9sNMWVjeXS4NN5oVvhMjDyLhmA1LG86oSo+IqY= -github.com/gorilla/pat v0.0.0-20180118222023-199c85a7f6d1/go.mod h1:YeAe0gNeiNT5hoiZRI4yiOky6jVdNvfO2N6Kav/HmxY= -github.com/gorilla/schema v1.1.0 h1:CamqUDOFUBqzrvxuz2vEwo8+SUdwsluFh7IlzJh30LY= -github.com/gorilla/schema v1.1.0/go.mod h1:kgLaKoK1FELgZqMAVxx/5cbj0kT+57qxUrAlIO2eleU= -github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= -github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= -github.com/gorilla/sessions v1.1.2/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w= -github.com/gorilla/sessions v1.1.3/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w= -github.com/gorilla/sessions v1.2.0 h1:S7P+1Hm5V/AT9cjEcUD5uDaQSX0OE577aCXgoaKpYbQ= -github.com/gorilla/sessions v1.2.0/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3 h1:JVnpOZS+qxli+rgVl98ILOXVNbW+kb5wcxeGx8ShUIw= github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/graph-gophers/graphql-go v0.0.0-20191031232829-adde0d0f76a3 h1:HwRCZlPXN00r58jaIPE11HXn7EvhheQrE+Cxw0vkrH0= -github.com/graph-gophers/graphql-go v0.0.0-20191031232829-adde0d0f76a3/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7 h1:6TSoaYExHper8PYsJu23GWVNOyYRCSnIFyxKgLSZ54w= github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0 h1:Iju5GlWwrvL6UBg4zJJt3btmonfrMlCDdsejg4CZE7c= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.4/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.11.1 h1:/dBYI+n4xIL+Y9SKXQrjlKTmJJDwCSlNLRwZ5nBhIek= github.com/grpc-ecosystem/grpc-gateway v1.11.1/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8= -github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/api v1.2.0 h1:oPsuzLp2uk7I7rojPKuncWbZ+m5TMoD4Ivs+2Rkeh4Y= github.com/hashicorp/consul/api v1.2.0/go.mod h1:1SIkFYi2ZTXUE5Kgt179+4hH33djo11+0Eo2XgTAtkw= @@ -1076,9 +375,6 @@ github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brv github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= 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.10.0 h1:b86HUuA126IcSHyC55WjPo7KtCOVeTCKIjr+3lBhPxI= -github.com/hashicorp/go-hclog v0.10.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.1.0 h1:vN9wG1D6KG6YHRTWr8512cxGOVgTMEfgEdSj/hr8MPc= github.com/hashicorp/go-immutable-radix v1.1.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= @@ -1087,8 +383,6 @@ github.com/hashicorp/go-msgpack v0.5.5 h1:i9R9JSrqIz0QVLz3sz+i3YJdT7TTSLcfLLzJi9 github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-plugin v1.0.1 h1:4OtAfUGbnKC6yS48p0CtMX2oFYtzFZVv6rok3cRWgnE= -github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY= github.com/hashicorp/go-retryablehttp v0.5.3 h1:QlWt0KvWT0lq8MFppF9tsJGF+ynG7ztc2KIPhzRGk7s= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= @@ -1120,106 +414,20 @@ github.com/hashicorp/memberlist v0.1.4/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2p github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hashicorp/serf v0.8.3 h1:MWYcmct5EtKz0efYooPcL0yNkem+7kWxqXDi/UIh+8k= github.com/hashicorp/serf v0.8.3/go.mod h1:UpNcs7fFbpKIyZaUuSW6EPiH+eZC7OuyFD+wc1oal+k= -github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb h1:b5rjCoWHc7eqmAS4/qyk21ZsHyb6Mxv/jykxvNTkU4M= -github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/hudl/fargo v1.3.0 h1:0U6+BtN6LhaYuTnIJq4Wyq5cpn6O2kWrxAtcqBmYY6w= -github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/iancoleman/strcase v0.0.0-20190422225806-e506e3ef7365 h1:ECW73yc9MY7935nNYXUkK7Dz17YuSUI9yqRqYS8aBww= -github.com/iancoleman/strcase v0.0.0-20190422225806-e506e3ef7365/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6 h1:UDMh68UUwekSh5iP2OMhRRZJiiBccgV7axzUG8vi56c= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.5 h1:JboBksRwiiAJWvIYJVo46AfV+IAIKZpfrSzVKj42R4Q= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28= -github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/inconshreveable/go-vhost v0.0.0-20160627193104-06d84117953b h1:IpLPmn6Re21F0MaV6Zsc5RdSE6KuoFpWmHiUSEs3PrE= -github.com/inconshreveable/go-vhost v0.0.0-20160627193104-06d84117953b/go.mod h1:aA6DnFhALT3zH0y+A39we+zbrdMC2N0X/q21e6FI0LU= -github.com/inconshreveable/log15 v0.0.0-20180818164646-67afb5ed74ec h1:CGkYB1Q7DSsH/ku+to+foV4agt2F2miquaLUgF6L178= -github.com/inconshreveable/log15 v0.0.0-20180818164646-67afb5ed74ec/go.mod h1:cOaXtrgN4ScfRrD9Bre7U1thNq5RtJ8ZoP4iXVGRj6o= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/influxdata/changelog v1.1.0 h1:HXhmLZDrbuC+Ca5YX7g8B8cH5DmJpaOjd844d9Y7aTQ= -github.com/influxdata/changelog v1.1.0/go.mod h1:uzpGWE/qehT8L426YuXwpMQub+a63vIINhIeEI9mnSM= -github.com/influxdata/flux v0.53.0 h1:pQCXohOPM9gAA+ahh+Wdi1sxjuGTnPbN/6btpv9vIMY= -github.com/influxdata/flux v0.53.0/go.mod h1:ZFf4F0c8ACFP/5BkfCwk9I/vUwcByr0vMdLxwgOk57E= github.com/influxdata/influxdb v1.7.7 h1:UvNzAPfBrKMENVbQ4mr4ccA9sW+W1Ihl0Yh1s0BiVAg= github.com/influxdata/influxdb v1.7.7/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= -github.com/influxdata/influxdb1-client v0.0.0-20190809212627-fc22c7df067e h1:txQltCyjXAqVVSZDArPEhUTg35hKwVIuXwtQo7eAMNQ= -github.com/influxdata/influxdb1-client v0.0.0-20190809212627-fc22c7df067e/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/influxdata/influxql v1.0.1 h1:6PGG0SunRmptIMIreNRolhQ38Sq4qDfi2dS3BS1YD8Y= -github.com/influxdata/influxql v1.0.1/go.mod h1:KpVI7okXjK6PRi3Z5B+mtKZli+R1DnZgb3N+tzevNgo= -github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e h1:/o3vQtpWJhvnIbXley4/jwzzqNeigJK9z+LZcJZ9zfM= -github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= -github.com/influxdata/promql/v2 v2.12.0 h1:kXn3p0D7zPw16rOtfDR+wo6aaiH8tSMfhPwONTxrlEc= -github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= -github.com/influxdata/roaring v0.4.12 h1:3DzTjKHcXFs4P3D7xRLpCqVrfK6eFRQT0c8BG99M3Ms= -github.com/influxdata/roaring v0.4.12/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= -github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9 h1:MHTrDWmQpHq/hkq+7cw9oYAt2PqUw52TZazRA0N7PGE= -github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= -github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368 h1:+TUUmaFa4YD1Q+7bH9o5NCHQGPMqZCYJiNW6lIIS9z4= -github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= -github.com/jackc/chunkreader v1.0.0 h1:4s39bBR8ByfqH+DKm8rQA3E1LHZWB9XWcrz8fqaZbe0= -github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= -github.com/jackc/chunkreader/v2 v2.0.0 h1:DUwgMQuuPnS0rhMXenUtZpqZqrR/30NWY+qQvTpSvEs= -github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/fake v0.0.0-20150926172116-812a484cc733 h1:vr3AYkKovP8uR8AvSGGUK1IDqRa5lAAvEkZG1LKaCRc= -github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ= -github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA= -github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE= -github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s= -github.com/jackc/pgconn v1.0.1 h1:ZANo4pIkeHKIVD1cQMcxu8fwrwIICLblzi9HCjooZeQ= -github.com/jackc/pgconn v1.0.1/go.mod h1:GgY/Lbj1VonNaVdNUHs9AwWom3yP2eymFQ1C8z9r/Lk= -github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= -github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= -github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2 h1:JVX6jT/XfzNqIjye4717ITLaNwV9mWbJx0dLCpcRzdA= -github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= -github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= -github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgproto3 v1.1.0 h1:FYYE4yRw+AgI8wXIinMlNjBbp/UitDJwfj5LqqewP1A= -github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78= -github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA= -github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg= -github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.0 h1:FApgMJ/GtaXfI0s8Lvd0kaLaRwMOhs4VH92pwkwQQvU= -github.com/jackc/pgproto3/v2 v2.0.0/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= -github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= -github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59 h1:xOamcCJ9MFJTxR5bvw3ZXmiP8evQMohdt2VJ57C0W8Q= -github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= -github.com/jackc/pgx v3.2.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= -github.com/jackc/pgx v3.3.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= -github.com/jackc/pgx v3.5.0+incompatible h1:BRJ4G3UPtvml5R1ey0biqqGuYUGayMYekm3woO75orY= -github.com/jackc/pgx v3.5.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= -github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= -github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= -github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186 h1:ZQM8qLT/E/CGD6XX0E6q9FAwxJYmWpJufzmLMaFuzgQ= -github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= -github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9 h1:KLBBPU++1T3DHtm1B1QaIHy80Vhu0wNMErIFCNgAL8Y= -github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jaegertracing/jaeger v1.14.0 h1:C0En+gfcxf3NsAriMAvQ6LcSFrQ5VQGXddqfty1EpTI= github.com/jaegertracing/jaeger v1.14.0/go.mod h1:LUWPSnzNPGRubM8pk0inANGitpiMOOxihXx0+53llXI= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1 h1:ujPKutqRlJtcfWk6toYVYagwra7HQHbXOaS171b4Tg8= -github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= github.com/jessevdk/go-flags v0.0.0-20180331124232-1c38ed7ad0cc h1:0L2sGkaj6MWuV1BfXsrLJ/+XA8RzKKVsYlLVXNkK1Lw= github.com/jessevdk/go-flags v0.0.0-20180331124232-1c38ed7ad0cc/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= -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-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmoiron/sqlx v0.0.0-20180614180643-0dae4fefe7c0/go.mod h1:IiEW3SEiiErVyFdH8NTuWjSifiEQKUoyK3LNqr2kCHU= -github.com/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA= -github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= -github.com/joho/godotenv v1.2.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= -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 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7 h1:K//n/AqR5HjG3qxbrBCL4vJPW0MVFSs9CPK1OOJdRME= @@ -1231,57 +439,26 @@ github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62F github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024 h1:rBMNdlhTLzJjJSDIjNEXX1Pz3Hmwmz91v+zycvx9PJc= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jsternberg/zap-logfmt v1.2.0 h1:1v+PK4/B48cy8cfQbxL4FmmNZrjnIMr2BsnyEmXqv2o= -github.com/jsternberg/zap-logfmt v1.2.0/go.mod h1:kz+1CUmCutPWABnNkOu9hOHKdT2q3TDYCcsFy9hpqb0= github.com/julienschmidt/httprouter v1.2.0 h1:TDTW5Yz1mjftljbcKqRcrYhd4XeOoI98t+9HbQbYf7g= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/jung-kurt/gofpdf v1.13.0 h1:OrLyhb9VU2dNdxzDu5lpMhX5/vpfm6RY5Jlr4iPQ6ME= -github.com/jung-kurt/gofpdf v1.13.0/go.mod h1:1hl7y57EsiPAkLbOwzpzqgx1A30nQCk/YmFV8S2vmK0= -github.com/justinas/alice v1.2.0 h1:+MHSA/vccVCF4Uq37S42jwlkvI2Xzl7zTPCN5BnZNVo= -github.com/justinas/alice v1.2.0/go.mod h1:fN5HRH/reO/zrUflLfTN43t3vXvKzvZIENsNEe7i7qA= -github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef h1:2jNeR4YUziVtswNP9sEFAI913cVrzH85T+8Q6LpYbT0= -github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= -github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= -github.com/karrick/godirwalk v1.7.7/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= -github.com/karrick/godirwalk v1.7.8/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= -github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= -github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= -github.com/karrick/godirwalk v1.10.12/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= -github.com/karrick/godirwalk v1.12.0 h1:nkS4xxsjiZMvVlazd0mFyiwD4BR9f3m6LXGhM2TUx3Y= -github.com/karrick/godirwalk v1.12.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= -github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= -github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= -github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e h1:RgQk53JHp/Cjunrr1WlsXSZpqXn+uREuHvUVcK82CV8= -github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0 h1:reN85Pxc5larApoH1keMBiu2GWtPqXQ1nc9gx+jOU+E= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kisielk/sqlstruct v0.0.0-20150923205031-648daed35d49 h1:o/c0aWEP/m6n61xlYW2QP4t9424qlJOsxugn5Zds2Rg= -github.com/kisielk/sqlstruct v0.0.0-20150923205031-648daed35d49/go.mod h1:yyMNCyc/Ib3bDTKd379tNMpB/7/H5TjM2Y9QJ5THLbE= github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.9.1 h1:TWy0o9J9c6LK9C8t7Msh6IAJNXbsU/nvKLTQUU5HdaY= -github.com/klauspost/compress v1.9.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/pgzip v1.2.1 h1:oIPZROsWuPHpOdMVWLuJZXwgjhrW8r1yEX8UqMyeNHM= -github.com/klauspost/pgzip v1.2.1/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= -github.com/konsorten/go-windows-terminal-sequences v0.0.0-20180402223658-b729f2633dfe/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= 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.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5 h1:hyz3dwM5QLc1Rfoz4FuWJQG5BN7tc6K1MndAUnGpQr4= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/pty v1.1.8 h1:AkaSdXYQOWeaO3neb8EM634ahkXXe3jYbVh/F9lq+GI= @@ -1290,28 +467,11 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kylelemons/godebug v0.0.0-20160406211939-eadb3ce320cb h1:iiMILPl9HQFqdFXIuwfYT73NYtH0KApnCmyF7y5wYhs= github.com/kylelemons/godebug v0.0.0-20160406211939-eadb3ce320cb/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743 h1:143Bb8f8DuGWck/xpNUOckBVYfFbBTnLevfRZ1aVVqo= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= -github.com/lightstep/lightstep-tracer-go v0.17.1 h1:PgitbgUDool2AcHopDNTlvwq7BQeZssTGs4EVwcGhr8= -github.com/lightstep/lightstep-tracer-go v0.17.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= -github.com/lyft/protoc-gen-star v0.4.11 h1:zW6fJQBtCtVeSiO/Kbpzv32GO0J/Z8egSLeohES202w= -github.com/lyft/protoc-gen-star v0.4.11/go.mod h1:mE8fbna26u7aEA2QCVvvfBU/ZrPgocG1206xAFPcs94= github.com/lyft/protoc-gen-validate v0.0.13 h1:KNt/RhmQTOLr7Aj8PsJ7mTronaFyx80mRTT9qF261dA= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -github.com/lyft/protoc-gen-validate v0.1.0 h1:NytKd9K7UW7Szxn+9PYNsaJ/98TL/WsDq4ro4ZVuh5o= -github.com/m3db/prometheus_client_golang v0.8.1 h1:t7w/tcFws81JL1j5sqmpqcOyQOpH4RDOmIe3A3fdN3w= -github.com/m3db/prometheus_client_golang v0.8.1/go.mod h1:8R/f1xYhXWq59KD/mbRqoBulXejss7vYtYzWmruNUwI= -github.com/m3db/prometheus_client_model v0.1.0 h1:cg1+DiuyT6x8h9voibtarkH1KT6CmsewBSaBhe8wzLo= -github.com/m3db/prometheus_client_model v0.1.0/go.mod h1:Qfsxn+LypxzF+lNhak7cF7k0zxK7uB/ynGYoj80zcD4= -github.com/m3db/prometheus_common v0.1.0 h1:YJu6eCIV6MQlcwND24cRG/aRkZDX1jvYbsNNs1ZYr0w= -github.com/m3db/prometheus_common v0.1.0/go.mod h1:EBmDQaMAy4B8i+qsg1wMXAelLNVbp49i/JOeVszQ/rs= -github.com/m3db/prometheus_procfs v0.8.1 h1:LsxWzVELhDU9sLsZTaFLCeAwCn7bC7qecZcK4zobs/g= -github.com/m3db/prometheus_procfs v0.8.1/go.mod h1:N8lv8fLh3U3koZx1Bnisj60GYUMDpWb09x1R+dmMOJo= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -1321,91 +481,20 @@ github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq0y3QnmWAArdw9PqbmotexnWx/FU8= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/markbates/deplist v1.0.4/go.mod h1:gRRbPbbuA8TmMiRvaOzUlRfzfjeCCBqX2A6arxN01MM= -github.com/markbates/deplist v1.0.5/go.mod h1:gRRbPbbuA8TmMiRvaOzUlRfzfjeCCBqX2A6arxN01MM= -github.com/markbates/deplist v1.1.3/go.mod h1:BF7ioVzAJYEtzQN/os4rt8H8Ti3h0T7EoN+7eyALktE= -github.com/markbates/deplist v1.2.0/go.mod h1:dtsWLZ5bWoazbM0rCxZncQaAPifWbvHgBJk8UNI1Yfk= -github.com/markbates/deplist v1.3.0 h1:uPgoloPraPBPYtNSxj2UwZBh2EHW9TmMvQCP2FBiRlU= -github.com/markbates/deplist v1.3.0/go.mod h1:dtsWLZ5bWoazbM0rCxZncQaAPifWbvHgBJk8UNI1Yfk= -github.com/markbates/going v1.0.2/go.mod h1:UWCk3zm0UKefHZ7l8BNqi26UyiEMniznk8naLdTcy6c= -github.com/markbates/going v1.0.3 h1:mY45T5TvW+Xz5A6jY7lf4+NLg9D8+iuStIHyR7M8qsE= -github.com/markbates/going v1.0.3/go.mod h1:fQiT6v6yQar9UD6bd/D4Z5Afbk9J6BBVBtLiyY4gp2o= -github.com/markbates/grift v1.0.4/go.mod h1:wbmtW74veyx+cgfwFhlnnMWqhoz55rnHR47oMXzsyVs= -github.com/markbates/grift v1.0.5/go.mod h1:EHmVIjOQoj/OOBDzlZ8RW0ZkvOtQ4xRHjrPvmfoiFaU= -github.com/markbates/grift v1.0.6/go.mod h1:2AUYA/+pODhwonRbYwsltPVPIztBzw5nIJEGiWgKMPM= -github.com/markbates/grift v1.1.0 h1:DsljFKUSK1ELpU22ZE+Gi93jiQI3cYD/RQ+vHM/PpY8= -github.com/markbates/grift v1.1.0/go.mod h1:8N7ybWEcnMOvtSb0kW+dLJpYii9eq/FP3Gtu/cNPDTY= -github.com/markbates/hmax v1.0.0/go.mod h1:cOkR9dktiESxIMu+65oc/r/bdY4bE8zZw3OLhLx0X2c= -github.com/markbates/hmax v1.1.0 h1:MswE0ks4Iv1UAQNlvAyFpsyFQSBHolckas95gRUkka4= -github.com/markbates/hmax v1.1.0/go.mod h1:hhn8pJiRwNTEmNlxhfiTbL+CtEYiAX3wuhSf/kg/6wI= -github.com/markbates/inflect v1.0.0/go.mod h1:oTeZL2KHA7CUX6X+fovmK9OvIOFuqu0TwdQrZjLTh88= -github.com/markbates/inflect v1.0.1/go.mod h1:uv3UVNBe5qBIfCm8O8Q+DW+S1EopeyINj+Ikhc7rnCk= -github.com/markbates/inflect v1.0.3/go.mod h1:1fR9+pO2KHEO9ZRtto13gDwwZaAKstQzferVeWqbgNs= -github.com/markbates/inflect v1.0.4 h1:5fh1gzTFhfae06u3hzHYO9xe3l3v3nW5Pwt3naLTP5g= -github.com/markbates/inflect v1.0.4/go.mod h1:1fR9+pO2KHEO9ZRtto13gDwwZaAKstQzferVeWqbgNs= -github.com/markbates/oncer v0.0.0-20180924031910-e862a676800b/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= -github.com/markbates/oncer v0.0.0-20180924034138-723ad0170a46/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= -github.com/markbates/oncer v0.0.0-20181014194634-05fccaae8fc4/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= -github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= -github.com/markbates/oncer v1.0.0 h1:E83IaVAHygyndzPimgUYJjbshhDTALZyXxvk9FOlQRY= -github.com/markbates/oncer v1.0.0/go.mod h1:Z59JA581E9GP6w96jai+TGqafHPW+cPfRxz2aSZ0mcI= -github.com/markbates/refresh v1.4.10/go.mod h1:NDPHvotuZmTmesXxr95C9bjlw1/0frJwtME2dzcVKhc= -github.com/markbates/refresh v1.4.11/go.mod h1:awpJuyo4zgexB/JaHfmBX0sRdvOjo2dXwIayWIz9i3g= -github.com/markbates/refresh v1.5.0/go.mod h1:ZYMLkxV+x7wXQ2Xd7bXAPyF0EXiEWAMfiy/4URYb1+M= -github.com/markbates/refresh v1.6.0/go.mod h1:p8jWGABFUaFf/cSw0pxbo0MQVujiz5NTQ0bmCHLC4ac= -github.com/markbates/refresh v1.7.1/go.mod h1:hcGVJc3m5EeskliwSVJxcTHzUtMz2h8gBtCS0V94CgE= -github.com/markbates/refresh v1.8.0 h1:ELMS9kKyO/H6cJrqFo6qCyE0cRx2JeHWC9yusDkVeM8= -github.com/markbates/refresh v1.8.0/go.mod h1:ppl0l94oz3OKBAx3MV65vCDWPo51JQnypdtFUmps1NM= -github.com/markbates/safe v1.0.0/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= -github.com/markbates/safe v1.0.1 h1:yjZkbvRM6IzKj9tlu/zMJLS0n/V351OZWRnF3QfaUxI= -github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= -github.com/markbates/sigtx v1.0.0 h1:y/xtkBvNPRjD4KeEplf4w9rJVSc23/xl+jXYGowTwy0= -github.com/markbates/sigtx v1.0.0/go.mod h1:QF1Hv6Ic6Ca6W+T+DL0Y/ypborFKyvUY9HmuCD4VeTc= -github.com/markbates/willie v1.0.9 h1:394PpHImWjScL9X2VRCDXJAcc77sHsSr3w3sOnL/DVc= -github.com/markbates/willie v1.0.9/go.mod h1:fsrFVWl91+gXpx/6dv715j7i11fYPfZ9ZGfH0DQzY7w= -github.com/marstr/collection v1.0.1 h1:j61osRfyny7zxBlLRtoCvOZ2VX7HEyybkZcsLNLJ0z0= -github.com/marstr/collection v1.0.1/go.mod h1:HHDXVxjLO3UYCBXJWY+J/ZrxCUOYqrO66ob1AzIsmYA= -github.com/marstr/goalias v0.0.0-20180416201319-8dff9a14db64 h1:boT2QecCbBI45GoZDMlEFzSMQQFR4Yq+9v5XHt+XE00= -github.com/marstr/goalias v0.0.0-20180416201319-8dff9a14db64/go.mod h1:sFzSHdiOc23IPzkHolbVUGlnVBrTLPvx3B0uZ2uHAVc= -github.com/marstr/guid v1.1.0 h1:/M4H/1G4avsieL6BbUwCOBzulmoeKVP5ux/3mQNnbyI= -github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= -github.com/marstr/randname v0.0.0-20181206212954-d5b0f288ab8c h1:JE+MDz5rhFN5EC9Dj/N8dLYKboTWm6FXeWhnyKVj0vA= -github.com/marstr/randname v0.0.0-20181206212954-d5b0f288ab8c/go.mod h1:Xc224oUXd7/sKMjWKl17cfkYOKQ1S+HSOW7YHEGXauI= -github.com/martini-contrib/render v0.0.0-20150707142108-ec18f8345a11 h1:YFh+sjyJTMQSYjKwM4dFKhJPJC/wfo98tPUc17HdoYw= -github.com/martini-contrib/render v0.0.0-20150707142108-ec18f8345a11/go.mod h1:Ah2dBMoxZEqk118as2T4u4fjfXarE0pPnMJaArZQZsI= +github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb h1:RHba4YImhrUVQDHUCe2BNSOz4tVy2yGyXhvYDvxGgeE= github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-isatty v0.0.3 h1:ns/ykhmWi7G9O+8a448SecJU3nSMBXJfqQkl0upE1jI= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-runewidth v0.0.3 h1:a+kO+98RDGEfo6asOGMmpodZq4FNtnGP54yps8BzLR4= -github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-sqlite3 v1.10.0 h1:jbhqpg7tQe4SupckyijYiy0mJJ/pRyHvXf7JdWK860o= -github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104 h1:d8RFOZ2IiFtFWBcKEHAFYJcPTf0wY5q0exFNJZVWa1U= -github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= -github.com/mattn/go-zglob v0.0.0-20171230104132-4959821b4817/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= -github.com/mattn/go-zglob v0.0.0-20180803001819-2ea3427bfa53 h1:tGfIHhDghvEnneeRhODvGYOt305TPwingKt6p90F4MU= -github.com/mattn/go-zglob v0.0.0-20180803001819-2ea3427bfa53/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= -github.com/microcosm-cc/bluemonday v1.0.2 h1:5lPfLTTAvAbtS0VqT+94yOtFnGfUWYyx0+iToC3Os3s= -github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.15 h1:CSSIDtllwGLMoA6zjdKnaE6Tx6eVUxQ29LUgGetiDCI= github.com/miekg/dns v1.1.15/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= @@ -1415,7 +504,6 @@ github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrk github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= -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 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= 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 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4= @@ -1425,11 +513,8 @@ github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS4 github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.0.0/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mjibson/appstats v0.0.0-20151004071057-0542d5f0e87e h1:Jpn5gwt6vuJ9gcWP7sZdFQ6zDRjOU2UJHYb+iK1IC8c= -github.com/mjibson/appstats v0.0.0-20151004071057-0542d5f0e87e/go.mod h1:9oJenpYx/HCuJuv/fdEVpSb8PZ2t3tBFBbu+i6jU3UU= 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= @@ -1437,13 +522,6 @@ github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lN github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/monoculum/formam v0.0.0-20180901015400-4e68be1d79ba/go.mod h1:RKgILGEJq24YyJ2ban8EO0RUVSJlF1pGsEvoLEACr/Q= -github.com/monoculum/formam v0.0.0-20190307031628-bc555adff0cd/go.mod h1:JKa2av1XVkGjhxdLS59nDoXa2JpmIHpnURWNbzCtXtc= -github.com/monoculum/formam v0.0.0-20190730134247-0612307a4099/go.mod h1:JKa2av1XVkGjhxdLS59nDoXa2JpmIHpnURWNbzCtXtc= -github.com/monoculum/formam v0.0.0-20190830100315-7ff9597b1407 h1:ZU5O9BawmEx9Mu1lxn9NLIwO9DrqRfjE+HWKU+e9GKQ= -github.com/monoculum/formam v0.0.0-20190830100315-7ff9597b1407/go.mod h1:JKa2av1XVkGjhxdLS59nDoXa2JpmIHpnURWNbzCtXtc= -github.com/montanaflynn/stats v0.5.0 h1:2EkzeTSqBB4V4bJwWrt5gIIrZmpJBcoIRGS2kWLgzmk= -github.com/montanaflynn/stats v0.5.0/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/mozilla/tls-observatory v0.0.0-20190404164649-a3c1b6cfecfd/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d h1:7PxY7LVfSZm7PEeBTyK1rj1gABdCO2mbri6GKO1cMDs= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= @@ -1452,117 +530,54 @@ github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+ github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/nats-io/jwt v0.3.0 h1:xdnzwFETV++jNc4W1mw//qFyJGb2ABOombmZJQS4+Qo= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/nats.go v1.9.1 h1:ik3HbLhZ0YABLto7iX80pZLPw/6dx3T+++MZJwLnMrQ= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0 h1:qMd4+pRHgdr1nAClu+2h/2a5F2TmKcCzjCDazVgRoX4= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d h1:AREM5mwr4u1ORQBMvzfzBgpsctsbQikCVpvC+tX285E= github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= -github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86 h1:D6paGObi5Wud7xg83MaEFyjxQB1W5bz5d0IFppr+ymk= -github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= -github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab h1:eFXv9Nu1lGbrNbj619aWwZfVF5HBrm9Plte8aNptuTI= -github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= -github.com/nicksnyder/go-i18n v1.10.0 h1:5AzlPKvXBH4qBzmZ09Ua9Gipyruv6uApMcrNZdo96+Q= -github.com/nicksnyder/go-i18n v1.10.0/go.mod h1:HrK7VCrbOvQoUAQ7Vpy7i87N7JZZZ7R2xBGjv0j365Q= -github.com/oklog/oklog v0.3.2 h1:wVfs8F+in6nTBMkA7CbRw+zZMIB7nNM825cM1wuzoTk= -github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v0.0.0-20170117200651-66bb6560562f/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/olekukonko/tablewriter v0.0.1 h1:b3iUnf1v+ppJiOfNX4yxxqfWKMQPZR5yoh8urCTFX88= -github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olivere/elastic v6.2.26+incompatible h1:3PjUHKyt8xKwbFQpRC5cgtEY7Qz6ejopBkukhI7UWvE= -github.com/olivere/elastic v6.2.26+incompatible/go.mod h1:J+q1zQJTgAz9woqsbVRqGeB5G1iqDKVBWLNSYW8yfJ8= -github.com/olivere/env v1.1.0 h1:owp/uwMwhru5668JjMDp8UTG3JGT27GTCk4ufYQfaTw= -github.com/olivere/env v1.1.0/go.mod h1:zaoXy53SjZfxqZBGiGrZCkuVLYPdwrc+vArPuUVhJdQ= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w= github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.9.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v0.0.0-20190113212917-5533ce8a0da3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.6.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/open-telemetry/opentelemetry-collector v0.2.0 h1:38/NrGdEEXufWqYFkW/6yeW3koRvb1QbE/2owKSNQvI= -github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb0c1d1e h1:poxNKN8teT8QjLK6LwKN52cNQEPqHIOEsmPJv5ssZUU= -github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191016224815-dfabfb0c1d1e/go.mod h1:zZf9V+57o0Fd3ik5HzaHamVsWhudJTOwnKw9kJvWoDo= -github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191203213105-fe3782c76de2 h1:lrdCxCJpccXFU3jCWB869fy5yRiSRRa4VTVJgLFpUOw= -github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191203213105-fe3782c76de2/go.mod h1:pL3jClof5EzaEU97itKyjLg4b8PFUwG87dM51Bnobhc= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205151336-8e2473c5e754 h1:gG2Ig+OgvWCyKLk3/Mz10HkSFolKjsWerT8kE9u+qig= github.com/open-telemetry/opentelemetry-collector v0.2.1-0.20191205151336-8e2473c5e754/go.mod h1:WxiK9mcisb/hM6M6+2BRV/VIU2c8VzlCRJED2S1MWns= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 h1:lM6RxxfUMrYL/f8bWEUqdXrANWtrL7Nndbm9iFN0DlU= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9 h1:QsgXACQhd9QJhEmRumbsMQQvBtmdS0mafoVEBplWXEg= github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9/go.mod h1:PLldrQSroqzH70Xl+1DQcGnefIbqsKR7UDaiux3zV+w= -github.com/opentracing/basictracer-go v1.0.0 h1:YyUAhaEfjoWXclZVJ9sGoNct7j4TVk7lZWlQw5UXuoo= -github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.4 h1:bzTJRoOZEN7uI1gq594S5HhMYNSud4FKUEwd4aFbsEI= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.4/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= -github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= -github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1 h1:noL5/5Uf1HpVl3wNsfkZhIKbSWCVi5jgqkONNx8PXcA= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/orijtech/prometheus-go-metrics-exporter v0.0.3-0.20190313163149-b321c5297f60 h1:vN7d/Zv6aOXqhspiqoEMkb6uFHNARVESmYn5XtNeyrk= github.com/orijtech/prometheus-go-metrics-exporter v0.0.3-0.20190313163149-b321c5297f60/go.mod h1:+Mu9w51Uc2RNKSUTA95d6Pvy8cxFiRX3ANRPlCcnGLA= -github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw= -github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/paulbellamy/ratecounter v0.2.0 h1:2L/RhJq+HA8gBQImDXtLPrDXK5qAj6ozWVK/zFXVJGs= -github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= +github.com/pavius/impi v0.0.0-20180302134524-c1cbdcb8df2b h1:yS0+/i6mwRZCdssUd+MkFJkCn/Evh1PlUKCYe3aCtQw= github.com/pavius/impi v0.0.0-20180302134524-c1cbdcb8df2b/go.mod h1:x/hU0bfdWIhuOT1SKwiJg++yvkk6EuOtJk8WtDZqgr8= -github.com/pborman/getopt v0.0.0-20190409184431-ee0cd42419d3 h1:YtFkrqsMEj7YqpIhRteVxJxCeC3jJBieuLr0d4C4rSA= -github.com/pborman/getopt v0.0.0-20190409184431-ee0cd42419d3/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-buffruneio v0.2.0 h1:U4t4R6YkofJ5xHm3dJzuRpPZ0mr5MMCoAWooScCR7aA= -github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/performancecopilot/speed v3.0.0+incompatible h1:2WnRzIquHa5QxaJKShDkLM+sc0JPuwhXzK8OYOyt3Vg= -github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= -github.com/peterh/liner v1.1.0 h1:f+aAedNJA6uk7+6rXsYBnhdo4Xux7ESLe+kcuVUF5os= -github.com/peterh/liner v1.1.0/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= -github.com/philhofer/fwd v1.0.0 h1:UbZqGr5Y38ApvM/V/jEljVxwocdweyH+vmYvRPBnbqQ= -github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= -github.com/phpdave11/gofpdi v1.0.7 h1:k2oy4yhkQopCK+qW8KjCla0iU2RpDow+QUDmH9DDt44= -github.com/phpdave11/gofpdi v1.0.7/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= -github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I= -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 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1 h1:F++O52m40owAmADcojzM+9gyjmMOY/T4oYJkgFDH8RE= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pkg/sftp v1.10.1 h1:VasscCm72135zRysgrJDKsntdmPN+OuU3+nnHYA9wyc= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5 h1:tFwafIEMf0B7NlcxV/zJ6leBIa81D3hgGSgsE5hCkOQ= -github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -1570,36 +585,27 @@ github.com/posener/complete v1.1.1 h1:ccV59UEOTzVDnDUEFdT95ZzHVZ+5+158q8+SJb2QV5 github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/prashantv/protectmem v0.0.0-20171002184600-e20412882b3a h1:AA9vgIBDjMHPC2McaGPojgV2dcI78ZC0TLNhYCXEKH8= github.com/prashantv/protectmem v0.0.0-20171002184600-e20412882b3a/go.mod h1:lzZQ3Noex5pfAy7mkAeCjcBDteYU85uWWnJ/y6gKU8k= -github.com/pressly/chi v4.0.2+incompatible h1:IQCvpYSGI/zsVuwr8+Q2R/13k9EHaFi05M3g8thnyqs= -github.com/pressly/chi v4.0.2+incompatible/go.mod h1:s/kslmeFE633XtTPvfX2olbs4ymzIHxGGXmEJ/AvPT8= github.com/prometheus/alertmanager v0.18.0 h1:sPppYFge7kdf9O96KIh3fd093D1xN8JxIp03wW6yAEE= github.com/prometheus/alertmanager v0.18.0/go.mod h1:WcxHBl40VSPuOaqWae6l6HpnEOVRIycEJ7i9iYkadEE= -github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.1.0 h1:BQ53HtBmfOitExawJ6LokA4x8ov/z0SYYb0+HxJfRI8= github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/common v0.7.0 h1:L+1lyG48J1zAQXA3RBX/nG/B3gjlHq0zTt2tlbJLyCY= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= -github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= 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-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.3 h1:CTwfnzjQ+8dS6MhHHu4YswVAD99sL2wjPqP+VkURmKE= @@ -1612,188 +618,68 @@ github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40T github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a h1:9ZKAASQSHhDYGoxY8uLVpewe1GDZ2vu2Tr/vTdVAkFQ= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237 h1:HQagqIiBmr8YXawX/le3+O26N+vPPC1PtjaF3mwnook= -github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/retailnext/hllpp v1.0.0 h1:7+NffI2mo7lZG78NruEsf3jEnjJ6Z0n1otEyFqdK8zA= -github.com/retailnext/hllpp v1.0.0/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af h1:gu+uRPtBe88sKxUCEXRoeCvVG90TJmwhiqRpvdhQFng= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/go-charset v0.0.0-20190617161244-0dc95cdf6f31 h1:DE4LcMKyqAVa6a0CGmVxANbnVb7stzMmPkQiieyNmfQ= -github.com/rogpeppe/go-charset v0.0.0-20190617161244-0dc95cdf6f31/go.mod h1:qgYeAmZ5ZIpBWTGllZSQnw97Dj+woV0toclVaRGI8pc= -github.com/rogpeppe/go-internal v1.0.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0 h1:RR9dF3JtopPvtkroDZuVD7qquD0bnHlKSqaQhgwt8yk= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.3.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.4.0 h1:LUa41nrWTQNGhzdsZ5lTnkwbNjj6rXTdazA1cSdjkOY= -github.com/rogpeppe/go-internal v1.4.0/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rs/cors v1.6.0 h1:G9tHG9lebljV9mfp9SNPDL36nCDxmo3zTlAf1YgvzmI= github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc= -github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= -github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= -github.com/rs/zerolog v1.15.0 h1:uPRuwkWF4J6fGsJ2R0Gn2jB1EQiav9k3S6CSdygQJXY= -github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday v1.5.3-0.20190124082335-a477dd164691 h1:auJkuUc4uOuZNoH9jGLvqVaDLiuCOh/LY+Qw5NBFo4I= -github.com/russross/blackfriday v1.5.3-0.20190124082335-a477dd164691/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58 h1:nlG4Wa5+minh3S9LVFtNoY+GVRiudA2e3EVfcCi3RCA= -github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= -github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd h1:CmH9+J6ZSsIjUK3dcGsnCnO41eRBOnY12zwkn5qVwgc= -github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/columnize v2.1.0+incompatible h1:j1Wcmh8OrK4Q7GXY+V7SVSY8nUWQxHW5TkBe7YUl+2s= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/samuel/go-thrift v0.0.0-20190219015601-e8b6b52668fe h1:gD4vkYmuoWVgdV6UwI3tPo9MtMfVoIRY+Xn9919SJBg= -github.com/samuel/go-thrift v0.0.0-20190219015601-e8b6b52668fe/go.mod h1:Vrkh1pnjV9Bl8c3P9zH0/D4NlOHWP5d4/hF4YTULaec= github.com/samuel/go-zookeeper v0.0.0-20190810000440-0ceca61e4d75 h1:cA+Ubq9qEVIQhIWvP2kNuSZ2CmnfBJFSRq+kO1pu2cc= github.com/samuel/go-zookeeper v0.0.0-20190810000440-0ceca61e4d75/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/satori/go.uuid v0.0.0-20160603004225-b111a074d5ef h1:RoeI7K0oZIcUirMHsFpQjTVDrl1ouNh8T7v3eNsUxL0= github.com/satori/go.uuid v0.0.0-20160603004225-b111a074d5ef/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/securego/gosec v0.0.0-20191002120514-e680875ea14d h1:BzRvVq1EHuIjxpijCEKpAxzKUUMurOQ4sknehIATRh8= github.com/securego/gosec v0.0.0-20191002120514-e680875ea14d/go.mod h1:w5+eXa0mYznDkHaMCXA4XYffjlH+cy1oyKbfzJXa2Do= -github.com/segmentio/kafka-go v0.1.0 h1:IXCHG+sXPNiIR5pC/vTEItZduPKu4cnpr85YgxpxlW0= -github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= -github.com/serenize/snaker v0.0.0-20171204205717-a683aaf2d516 h1:ofR1ZdrNSkiWcMsRrubK9tb2/SlZVWttAfqUjJi6QYc= -github.com/serenize/snaker v0.0.0-20171204205717-a683aaf2d516/go.mod h1:Yow6lPLSAXx2ifx470yD/nUe22Dv5vBvxK/UK9UUTVs= -github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc= github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= -github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= -github.com/shopspring/decimal v0.0.0-20191009025716-f1972eb1d1f5 h1:Gojs/hac/DoYEM7WEICT45+hNWczIeuL5D21e5/HPAw= -github.com/shopspring/decimal v0.0.0-20191009025716-f1972eb1d1f5/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= -github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4 h1:Fth6mevc5rX7glNLpbAMJnqKlfIkcTjZCSHEeqvKbcI= -github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= -github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48 h1:vabduItPAIz9px5iryD5peyx7O3Ya8TBThapgXim98o= -github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= -github.com/shurcooL/frontend v0.0.0-20180531171852-7e359e4b7b17 h1:IXoSIR8kdcag4uLYYWHu7meIZOE6Z1fF0njklq5EKiE= -github.com/shurcooL/frontend v0.0.0-20180531171852-7e359e4b7b17/go.mod h1:ALtiPMc4jQz4RRgcPDF3/+NYQrVW2jjP9W1hPxSoK7c= -github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470 h1:qb9IthCFBmROJ6YBS31BEMeSYjOscSiG+EO+JVNTz64= -github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= -github.com/shurcooL/githubv4 v0.0.0-20191102174205-af46314aec7b h1:Cocq9/ZZxCoiybhygOR7hX4E3/PkV8eNbd1AEcUvaHM= -github.com/shurcooL/githubv4 v0.0.0-20191102174205-af46314aec7b/go.mod h1:hAF0iLZy4td2EX+/8Tw+4nodhlMrwN3HupfaXj3zkGo= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e h1:MZM7FHLqUHYI0Y/mQAt3d2aYa0SiNms/hFqC9qJYolM= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041 h1:llrF3Fs4018ePo4+G/HV/uQUqEI1HMDjCeOf2V6puPc= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= -github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d h1:Yoy/IzG4lULT6qZg62sVC+qyBL8DQkmD2zv6i7OImrc= -github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d/go.mod h1:05UtEgK5zq39gLST6uB0cf3NEHjETfB4Fgr3Gx5R9Vw= -github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c h1:UOk+nlt1BJtTcH15CT7iNO7YVWTfTv/DNwEAQHLIaDQ= -github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c/go.mod h1:8d3azKNyqcHP1GaQE/c6dDgjkgSx2BZ4IoEi4F1reUI= -github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f h1:tygelZueB1EtXkPI6mQ4o9DQ0+FKW41hTbunoXZCTqk= -github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f/go.mod h1:AuYgA5Kyo4c7HfUmvRGs/6rGlMMV/6B1bVnB9JxJEEg= -github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b h1:vYEG87HxbU6dXj5npkeulCS96Dtz5xg3jcfCgpcvbIw= -github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b/go.mod h1:ZpfEhSmds4ytuByIcDnOLkTHGUI6KNqRNPDLHDk+mUU= -github.com/shurcooL/highlight_go v0.0.0-20170515013102-78fb10f4a5f8/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= -github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20 h1:7pDq9pAMCQgRohFmd25X8hIH8VxmT3TaDm+r9LHxgBk= -github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= -github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9 h1:MPblCbqA5+z6XARjScMfz1TqtJC7TuTRj0U9VqIBs6k= -github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9/go.mod h1:+rgNQw2P9ARFAs37qieuu7ohDNQ3gds9msbT2yn85sg= -github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50 h1:crYRwvwjdVh1biHzzciFHe8DrZcYrVcZFlJtykhRctg= -github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50/go.mod h1:zPn1wHpTIePGnXSHpsVPWEktKXHr6+SS6x/IKRb7cpw= -github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc h1:eHRtZoIi6n9Wo1uR+RU44C247msLWwyA89hVKwRLkMk= -github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc/go.mod h1:aYMfkZ6DWSJPJ6c4Wwz3QtW22G7mf/PEgaB9k/ik5+Y= github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 h1:bUGsEnyNbVPw06Bs80sCeARAlK8lhwqGyi6UT8ymuGk= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= -github.com/shurcooL/httpgzip v0.0.0-20180522190206-b1c53ac65af9/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= -github.com/shurcooL/httpgzip v0.0.0-20190720172056-320755c1c1b0 h1:mj/nMDAwTBiaCqMEs4cYCqF7pO6Np7vhy1D1wcQGz+E= -github.com/shurcooL/httpgzip v0.0.0-20190720172056-320755c1c1b0/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= -github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191 h1:T4wuULTrzCKMFlg3HmKHgXAF8oStFb/+lOIupLV2v+o= -github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191/go.mod h1:e2qWDig5bLteJ4fwvDAc2NHzqFEthkqn7aOZAOpj+PQ= -github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241 h1:Y+TeIabU8sJD10Qwd/zMty2/LEaT9GNDaA6nyZf+jgo= -github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241/go.mod h1:NPpHK2TI7iSaM0buivtFUc9offApnI0Alt/K8hcHy0I= -github.com/shurcooL/markdownfmt v0.0.0-20190409060426-3438a10682f5 h1:1X30SFo6Em9oCyrReNh9//zC7uE6IDoc+XgVy/iFdlE= -github.com/shurcooL/markdownfmt v0.0.0-20190409060426-3438a10682f5/go.mod h1:wwC6+1FOCAA/hK8+pmBir20vneHxr8Nh0OGQNkyo2a8= -github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122 h1:TQVQrsyNaimGwF7bIhzoVC9QkKm4KsWd8cECGzFx8gI= -github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b5uSkrEVM1jQUspwbixRBhaIjIzL2xazXp6kntxYle0= -github.com/shurcooL/notificationsapp v0.0.0-20181114034014-0a6e54cc4198 h1:7QgoOp3Mt75G/Us+x63zoMpes773uWLpzYaVOJ+nUNs= -github.com/shurcooL/notificationsapp v0.0.0-20181114034014-0a6e54cc4198/go.mod h1:hk3wHCCz8slz+eGBb4+DQIy5nVnPH72adj2s9lMFfQo= -github.com/shurcooL/octicon v0.0.0-20180602230221-c42b0e3b24d9/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= -github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2 h1:bu666BQci+y4S0tVRVjsHUeRon6vUXmsGBwdowgMrg4= -github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= -github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82 h1:LneqU9PHDsg/AkPDU3AkqMxnMYL+imaqkpflHu73us8= -github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk= -github.com/shurcooL/resume v0.0.0-20190824223711-dc47c8f77a80 h1:vPvEqkxGS5EIFJKIc+F/FSPacFcyoGmD0DTv+/uJNfs= -github.com/shurcooL/resume v0.0.0-20190824223711-dc47c8f77a80/go.mod h1:PE5QMqQGr8EdiigTVrcorvUhBeSgd/PsCBWoq9L6foM= -github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537 h1:YGaxtkYjb8mnTvtufv2LKLwCQu2/C7qFB7UtrOlTWOY= -github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= github.com/shurcooL/vfsgen v0.0.0-20180825020608-02ddb050ef6b/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd h1:ug7PpSOB5RBPK1Kg6qskGBoP3Vnj/aNYFTznWvlkGo0= github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= -github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133 h1:JtcyT0rk/9PKOdnKQzuDR+FSjh7SGtJwpgVpfZBRKlQ= -github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= -github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= -github.com/sirupsen/logrus v1.1.0/go.mod h1:zrgwTnHtNr00buQ1vSptGe8m1f/BbgsPukg8qsT7A+A= -github.com/sirupsen/logrus v1.1.1/go.mod h1:zrgwTnHtNr00buQ1vSptGe8m1f/BbgsPukg8qsT7A+A= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9 h1:hp2CYQUINdZMHdvTdXtPOY2ainKl4IoMcpAXEf2xj3Q= -github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sony/gobreaker v0.4.1 h1:oMnRNZXX5j85zso6xCPRNPtmAycat+WcoKbklScLDgQ= -github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d h1:yKm7XZV6j9Ev6lojP2XaIshpT4ymkqhMeSghO5Ps00E= -github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= github.com/sourcegraph/go-diff v0.5.1 h1:gO6i5zugwzo1RVTvgvfwCOSVegNuvnNi6bAD1QCmkHs= github.com/sourcegraph/go-diff v0.5.1/go.mod h1:j2dHj3m8aZgQO8lMTcTnBcXkRRRqi34cd2MNlA9u1mE= -github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e h1:qpG93cPwA5f7s/ZPBJnGOYQNK/vKsaDaseuKT5Asee8= -github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.2.0/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/afero v1.2.1/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.4/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= 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/spf13/viper v1.2.1/go.mod h1:P4AexN0a+C9tGAnUFNwDMYYZv3pjFuvmeiMyKRaNVlI= -github.com/spf13/viper v1.3.0/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.3.1/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.4.1-0.20190911140308-99520c81d86e h1:D4jmJ9BqzeMv7BvAqjooNtXH2PXG7m+pcYRnj2Ojlrk= github.com/spf13/viper v1.4.1-0.20190911140308-99520c81d86e/go.mod h1:jUyf+v/KTOnRyUy2/AsjF537WfJWVv3AnlcKSNd+AIg= -github.com/src-d/gcfg v1.4.0 h1:xXbNR5AlLSA315x2UO+fTSSAXCDf+Ar38/6oyGbDKQ4= -github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= -github.com/stathat/go v1.0.0 h1:HFIS5YkyaI6tXu7JXIRRZBLRvYstdNZm034zcCeaybI= -github.com/stathat/go v1.0.0/go.mod h1:+9Eg2szqkcOGWv6gfheJmBBsmq9Qf5KDbzy8/aYYR0c= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94 h1:0ngsPmuP6XIjiFRNFYlvKwSr5zff2v+uPHaffZ6/M4k= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a h1:AhmOdSHeswKHBjhsLs/7+1voOxT+LLrSk/Nxvk35fug= -github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/streadway/quantile v0.0.0-20150917103942-b0c588724d25 h1:7z3LSn867ex6VSaahyKadf4WtSsJIgne6A1WLOAGM8A= github.com/streadway/quantile v0.0.0-20150917103942-b0c588724d25/go.mod h1:lbP8tGiBjZ5YWIc2fzuRpTaz0b/53vT6PEs3QuAWzuU= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -1801,46 +687,26 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= 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 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= -github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= -github.com/tambet/go-asana v0.0.0-20161015030314-6c0cb7090a14 h1:mv5oIIbRcPh6r80jbRM+9zYs4erKCx4700JaYqNBxKM= -github.com/tambet/go-asana v0.0.0-20161015030314-6c0cb7090a14/go.mod h1:erM8VNXdx5GeFvs939dYq4nfzij6d2Lzdc8COCDYZ6w= -github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07 h1:UyzmZLoiDWMRywV4DUYb9Fbt8uiOSooupjTq10vpvnU= -github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e h1:RumXZ56IrCj4CL+g1b9OL/oH0QnsF976bC8xQFYUD5Q= github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= -github.com/tinylib/msgp v1.1.0 h1:9fQd+ICuRIu/ue4vxJZu6/LzxN0HwMds2nq/0cFvxHU= -github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= -github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2 h1:eGaGNxrtoZf/mBURsnNQKDR7u50Klgcf2eFDQEnc8Bc= -github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eNAjXGDx2yma7uG2XoyRZTq1uv3M/o7imD0= -github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b h1:m74UWYy+HBs+jMFR9mdZU6shPewugMyH5+GV6LNgW8w= -github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b/go.mod h1:/yhzCV0xPfx6jb1bBgRFjl5lytqVqZXEaeqWP8lTEao= -github.com/tj/go-spin v1.1.0 h1:lhdWZsvImxvZ3q1C5OIB7d72DuOwP4O2NdBg9PyzNds= -github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31 h1:OXcKh35JaYsGMRzpvFkLv/MEyPuL49CThT1pZ8aSml4= -github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926 h1:G3dpKMzFDjgEh2q1Z7zUUtKa8ViPtH+ocF0bE0g00O8= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/uber-go/atomic v1.4.0 h1:yOuPqEq4ovnhEjpHmfFwsqBXDYbQeT6Nb0bwD6XnD5o= github.com/uber-go/atomic v1.4.0/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g= -github.com/uber-go/tally v3.3.12+incompatible h1:Qa0XrHsKXclmhEpHmBHTTEZotwvQHAbm3lvtJ6RNn+0= -github.com/uber-go/tally v3.3.12+incompatible/go.mod h1:YDTIBxdXyOU/sCWilKB4bgyufu1cEi0jdVnRdxvjnmU= github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/uber/jaeger-client-go v2.16.0+incompatible h1:Q2Pp6v3QYiocMxomCaJuwQGFt7E53bPYqEgug/AoBtY= github.com/uber/jaeger-client-go v2.16.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= -github.com/uber/jaeger-lib v2.0.0+incompatible h1:iMSCV0rmXEogjNWPh2D0xk9YVKvrtGoHJNe9ebLu/pw= -github.com/uber/jaeger-lib v2.0.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/uber/jaeger-lib v2.2.0+incompatible h1:MxZXOiR2JuoANZ3J6DE/U0kSFv/eJ/GfSYVCjK7dyaw= github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/uber/tchannel-go v1.10.0 h1:YOihLHuvkwT3nzvpgqFtexFW+pb5vD1Tz7h/bIWApgE= github.com/uber/tchannel-go v1.10.0/go.mod h1:Rrgz1eL8kMjW/nEzZos0t+Heq0O4LhnUJVA32OvWKHo= @@ -1848,111 +714,57 @@ github.com/ugorji/go v1.1.4 h1:j4s+tAvLfL3bZyefP2SEWmhBzmuIlH/eqNuPdFPgngw= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8 h1:3SVOIvH7Ae1KRYyQWRjXWJEA9sS/c/pjvH++55Gr648= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ultraware/funlen v0.0.2 h1:Av96YVBwwNSe4MLR7iI/BIa3VyI7/djnto/pK3Uxbdo= github.com/ultraware/funlen v0.0.2/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/whitespace v0.0.4 h1:If7Va4cM03mpgrNH9k49/VOicWpGoG70XPBFFODYDsg= github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= -github.com/unknwon/cae v1.0.0 h1:i39lOFaBXZxhGjQOy/RNbi8uzettCs6OQxpR0xXohGU= -github.com/unknwon/cae v1.0.0/go.mod h1:QaSeRctcea9fK6piJpAMCCPKxzJ01+xFcr2k1m3WRPU= -github.com/unrolled/secure v0.0.0-20180918153822-f340ee86eb8b/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= -github.com/unrolled/secure v0.0.0-20181005190816-ff9db2ff917f/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= -github.com/unrolled/secure v0.0.0-20181022170031-4b6b7cf51606/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= -github.com/unrolled/secure v0.0.0-20190103195806-76e6d4e9b90c h1:ZY4dowVsuIAQtXXwKJ9ezfonDQ2YT7pcXRpPF2iAy3Y= -github.com/unrolled/secure v0.0.0-20190103195806-76e6d4e9b90c/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= -github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/negroni v1.0.0 h1:kIimOitoypq34K7TG7DUaJ9kq/N4Ofuwi1sjz0KipXc= -github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= +github.com/uudashr/gocognit v0.0.0-20190926065955-1655d0de0517 h1:ChMKTho2hWKpks/nD/FL2KqM1wuVt62oJeiE8+eFpGs= github.com/uudashr/gocognit v0.0.0-20190926065955-1655d0de0517/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.2.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s= github.com/valyala/quicktemplate v1.2.0/go.mod h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOVRUAfrukLPuGJ4= github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= -github.com/xanzy/ssh-agent v0.2.0 h1:Adglfbi5p9Z0BmK2oKU9nTG+zKfniSfnaMYB+ULd+Ro= -github.com/xanzy/ssh-agent v0.2.0/go.mod h1:0NyE30eGUDliuLEHJgYte/zncp2zdTStcOnWhgSqHD8= -github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c h1:u40Z8hqBAAQyv+vATcGgV0YCnDjqSL7/q/JyPhhJSPk= -github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= -github.com/xdg/stringprep v1.0.0 h1:d9X0esnoa3dFsV0FG35rAT0RIhYFlPq7MiP+DW89La0= -github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6 h1:YdYsPAZ2pC6Tow/nPZOPQ96O3hm/ToAkGsPLzedXERk= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77 h1:ESFSdwYZvkeru3RtdrYueztKhOBCSAAzS4Gf+k0tEow= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/zenazn/goji v0.9.0 h1:RSQQAbXGArQ0dIDEq+PI6WqN6if+5KHu6x2Cx/GXLTQ= -github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= go.etcd.io/bbolt v1.3.2 h1:Z/90sZLPOeCy2PwprqkFa25PdkusRzaj9P8zm/KNyvk= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/etcd v3.3.17+incompatible h1:g8iRku1SID8QAW8cDlV0L/PkZlw63LSiYEHYHoE6j/s= -go.etcd.io/etcd v3.3.17+incompatible/go.mod h1:yaeTdrJi5lOmYerz05bd8+V7KubZs8YSFZfzsF9A6aI= go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.0.4 h1:bHxbjH6iwh1uInchXadI6hQR107KEbgYsMzoblDONmQ= go.mongodb.org/mongo-driver v1.0.4/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= -go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= 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.1 h1:8dP3SGL7MPB94crU3bEPplMPe83FI4EouesJUeFHv50= go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/automaxprocs v1.2.0 h1:+RUihKM+nmYUoB9w0D0Ov5TJ2PpFO2FgenTxMJiZBZA= -go.uber.org/automaxprocs v1.2.0/go.mod h1:YfO3fm683kQpzETxlTGZhGIVmXAhaw3gxeBADbpZtnU= go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go4.org v0.0.0-20180809161055-417644f6feb5 h1:+hE86LblG4AyDgwMCLTE6FOlM9+qjHSYS+rKqxUVdsM= -go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= -golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d h1:E2M5QgjZ/Jg+ObCQAudsXxuTsLj7Nl5RV/lZcQZmKSo= -golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180910181607-0e37d006457b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181015023909-0c41d7ab0a0e/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181024171144-74cb1d3d52f4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181025113841-85e1b3f9139a/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181025213731-e84da0312774/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181106171534-e4dc69e5b2fd/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181112202954-3d3f9f413869/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181127143415-eb0de9b17e85/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190102171810-8d7daa0c54b3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190103213133-ff983b9c42bc/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190122013713-64072686203f/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190130090550-b01c7a725664/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/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-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190403202508-8e1b8d32e692/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= -golang.org/x/crypto v0.0.0-20190404164418-38d8ce5564a5/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= -golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= -golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= 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-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 h1:HuIa8hRrWRSrqYzx1qI49NNxhdi2PrY7gxVSq1JjLDc= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392 h1:ACG4HJsFiNMf47Y4PeRoebLNy/2lXT9EtprMuTFWt1M= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522 h1:OeRHuibLsmZkFj773W4LcfAGsSxJgfPONhr8cmO+eLA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067 h1:KYGJGHOQy8oSi1fDlSpcZF0+juKwk/hEMv5SiwHogR0= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a h1:gHevYm0pO4QUbwy8Dmdr01R5r1BuKtfYqRqF0h/Cbh0= -golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 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= @@ -1965,28 +777,15 @@ golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e h1:JgcxKXxCjrA2tyDP/aNU9K0Ck golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180816102801-aaf60122140d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180921000356-2f5d2388922f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180926154720-4dfa2610cdf3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181017193950-04a2e542c03f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181102091132-c10e9556a7bc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181108082009-03003ca0c849/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-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181207154023-610586996380/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181213202711-891ebc4b82d6/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190119204137-ed066c81e75e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190206173232-65e2d4e15006/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= @@ -1994,7 +793,6 @@ golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn 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-20190514140710-3ec191127204/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= 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= @@ -2002,79 +800,42 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL 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 h1:Ao/3l156eZf2AW5wK8a7/smtodRU+gha3+BeqJ69lRk= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 h1:fHDIZ2oxGnUZRN6WgWFCbYBjH9uqVPRCUVUDhs0wnbA= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478 h1:l5EDrHhldLYb3ZRHDUhXF7Om7MvYXnkV9/iQNo1lX6g= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/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-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852 h1:xYq6+9AtI+xP3M4r0N1hCkHrInHDBohhquRgx9Kk6gI= -golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= 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-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180816055513-1c9583448a9c/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 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-20180903190138-2b024373dcd9/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-20180906133057-8cf3aee42992/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180921163948-d47a0f339242/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180927150500-dad3d9fb7b6e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181005133103-4497e2df6f9e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181011152604-fa43e7bc11ba/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181019084534-8f1d3d21f81b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181022134430-8a28ead16f52/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181024145615-5cd93ef61a7c/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181025063200-d989b31c8746/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026064943-731415f00dce/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181030150119-7e31e0c00fa0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181106135930-3a76605856fd/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181128092732-4ed8d59d0b35/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181206074257-70b957f3b65e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181213150753-586ba8c9bb14/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181213200352-4d1cda033e06/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190102155601-82a175fd1598/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190116161447-11f53e031339/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190122071731-054c452bb702/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-20190209173611-3b5209105503/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-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190220154126-629670e5acc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/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-20190321052220-f7bb7a8bee54/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-20190419153524-e8e3143a4f4a/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-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ= @@ -2090,144 +851,60 @@ golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5f golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20161028155119-f51c12702a4d/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181003024731-2f84ea8ef872/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181006002542-f60d9635b16a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181008205924-a2b3f7f249e9/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181013182035-5e66757b835f/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181017214349-06f26fdaaa28/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181019005945-6adeb8aab2de/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181024171208-a2dc47679d30/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181026183834-f60e5f99f081/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030151751-bb28844c46df/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181102223251-96e9e165b75e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181105230042-78dc5bac0cac/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181107215632-34b416bd17b3/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181109152631-138c20b93253/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181109202920-92d8274bd7b8/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181111003725-6d71ab8aade0/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181114190951-94339b83286c/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181117154741-2ddaf7f79a09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181119130350-139d099f6620/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181120060634-fc4f04983f62/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181122213734-04b5d21e00f1/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181127195227-b4e97c0ed882/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181127232545-e782529d0ddd/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181201035826-d0ca3933b724/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181203210056-e5f3ab76ea4b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181205224935-3576414c54a4/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181206194817-bcd4e47d0288/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181207183836-8bc39b988060/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181212172921-837e80568c09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181213190329-bbccd8cae4a9/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190102213336-ca9055ed7d04/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190104182027-498d95493402/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190111214448-fc1d57b08d7b/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-20190118193359-16909d206f00/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190122202912-9c309ee22fab/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190124004107-78ee07aa9465/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190131142011-8dbcc66f33bb/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206221403-44bcb96178d3/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190214204934-8dcb7bc8c7fe/go.mod h1:E6PF97AdD6v0s+fPshSmumCW1S1Ne85RbPQxELkKa44= -golang.org/x/tools v0.0.0-20190219135230-f000d56b39dc/go.mod h1:E6PF97AdD6v0s+fPshSmumCW1S1Ne85RbPQxELkKa44= -golang.org/x/tools v0.0.0-20190219185102-9394956cfdc5/go.mod h1:E6PF97AdD6v0s+fPshSmumCW1S1Ne85RbPQxELkKa44= -golang.org/x/tools v0.0.0-20190221204921-83362c3779f5/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= 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-20190311215038-5c2858a9cfe5/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-20190315044204-8b67d361bba2/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190318200714-bb1270c20edf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190404132500-923d25813098/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190407030857-0fdf0c73855b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190521203540-521d6ed310dd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190603152906-08e0b306e832/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190603231351-8aaa1484dc10/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190613204242-ed0dc450797f/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190617190820-da514acc4774/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-20190624180213-70d37148ca0c/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-20190719005602-e377ae9d6386/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= -golang.org/x/tools v0.0.0-20190809145639-6d4652c779c4/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190813034749-528a2984e271/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190825031127-d72b05d2b1b6/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190905035308-adb45749da8e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190906203814-12febf440ab1 h1:w4Q0TX3lC1NfGcWkzt5wG4ee4E5fUAPqh5myV0efeHI= -golang.org/x/tools v0.0.0-20190906203814-12febf440ab1/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190930201159-7c411dea38b0/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191004055002-72853e10c5a3/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191015150414-f936694f27bf/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191030062658-86caa796c7ab h1:tpc/nJ4vD66vAk/2KN0sw/DvQIz2sKmCpWvyKtPmfMQ= golang.org/x/tools v0.0.0-20191030062658-86caa796c7ab/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca h1:PupagGYwj8+I4ubCxcmcBRk3VlUWtTg5huQpZR9flmE= -gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6 h1:4WsZyVtkthqrHTbDCJfiTs8IWNYE4uvsSDgaV6xpp+o= -gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= -google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= 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.10.0 h1:7tmAxx3oKE98VMZ+SBZzvYYWRQ9HODBxmC8mXUsraSQ= google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= 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.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= -google.golang.org/genproto v0.0.0-20190201180003-4b09977fb922/go.mod h1:L3J43x8/uS+qIUoksaLKe6OS3nUKxOKuIFz1sl2/jx4= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/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-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64 h1:iKtrH9Y8mcbADOP0YFaEMth7OfuHY9xHOwNj4znpM1A= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= @@ -2237,83 +914,37 @@ google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0 h1:AzbTB6ux+okLTzP8Ru1Xs41C303zdcfEht7MQnYJt5A= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.24.0 h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s= -gopkg.in/airbrake/gobrake.v2 v2.0.9 h1:7z2uVWwn7oVeeugY1DtlPAy5H+KYgB1KeKTnqjNatLo= -gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= -gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= 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 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/cheggaaa/pb.v1 v1.0.28 h1:n1tBJnnK2r7g9OW2btFH91V92STTUevLXYFb8gy9EMk= -gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/fsnotify/fsnotify.v1 v1.4.7 h1:XNNYLJHt73EyYiCZi6+xjupS9CpvmiDgjPTAjrBlQbo= gopkg.in/fsnotify/fsnotify.v1 v1.4.7/go.mod h1:Fyux9zXlo4rWoMSIzpn9fDAYjalPqJ/K1qJ27s+7ltE= -gopkg.in/gcfg.v1 v1.2.3 h1:m8OOJ4ccYHnx2f4gQwpno8nAX5OGOh7RLaaz0pj3Ogs= -gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2 h1:OAj3g0cR6Dx/R07QgQe8wkA9RNjB2u4i700xBkIT4e0= -gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= -gopkg.in/go-playground/assert.v1 v1.2.1 h1:xoYuJVE7KT85PYWrN730RguIQO0ePzVRfFMXadIrXTM= -gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= -gopkg.in/go-playground/validator.v8 v8.18.2 h1:lFB4DoMU6B626w8ny76MV7VX6W2VHct2GVOI3xgiMrQ= -gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= -gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE= -gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw= -gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec h1:RlWgLqCMMIYYEVcAR5MDsuHlVkaIPDAF+5Dehzg8L5A= -gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/mail.v2 v2.0.0-20180731213649-a0242b2233b4 h1:a3llQg4+Czqaf+QH4diHuHiKv4j1abMwuRXwaRNHTPU= -gopkg.in/mail.v2 v2.0.0-20180731213649-a0242b2233b4/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw= -gopkg.in/pipe.v2 v2.0.0-20140414041502-3c2ca4d52544 h1:WJH1qsOB4/zb/li+zLMn0vaAUJ5FqPv6HYLI3aQVg1k= -gopkg.in/pipe.v2 v2.0.0-20140414041502-3c2ca4d52544/go.mod h1:UhTeH/yXCK/KY7TX24mqPkaQ7gZeqmWd/8SSS8B3aHw= gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/src-d/go-billy.v4 v4.2.1 h1:omN5CrMrMcQ+4I8bJ0wEhOBPanIRWzFC953IiXKdYzo= -gopkg.in/src-d/go-billy.v4 v4.2.1/go.mod h1:tm33zBoOwxjYHZIE+OV8bxTWFMJLrconzFMd38aARFk= -gopkg.in/src-d/go-git-fixtures.v3 v3.1.1 h1:XWW/s5W18RaJpmo1l0IYGqXKuJITWRFuA45iOf1dKJs= -gopkg.in/src-d/go-git-fixtures.v3 v3.1.1/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= -gopkg.in/src-d/go-git.v4 v4.8.1 h1:aAyBmkdE1QUUEHcP4YFCGKmsMQRAuRmUcPEQR7lOAa0= -gopkg.in/src-d/go-git.v4 v4.8.1/go.mod h1:Vtut8izDyrM8BUVQnzJ+YvmNcem2J89EmfZYCkLokZk= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/tomb.v2 v2.0.0-20161208151619-d5d1b5820637 h1:yiW+nvdHb9LVqSHQBXfZCieqV4fzYhNBql77zY0ykqs= -gopkg.in/tomb.v2 v2.0.0-20161208151619-d5d1b5820637/go.mod h1:BHsqpu/nsuzkT5BpiH1EMZPLyqSMM8JbIavyFACoFNk= -gopkg.in/validator.v2 v2.0.0-20191029180049-30e574a82075 h1:ZkdLG20PbbXJaM0hn3WOp6PDUEyai71k/0lK8XR8UY4= -gopkg.in/validator.v2 v2.0.0-20191029180049-30e574a82075/go.mod h1:o4V0GXN9/CAmCsvJ0oXYZvrZOe7syiDZSN1GWGZTGzc= -gopkg.in/vmihailenco/msgpack.v2 v2.9.1 h1:kb0VV7NuIojvRfzwslQeP3yArBqJHW9tOl4t38VS1jM= -gopkg.in/vmihailenco/msgpack.v2 v2.9.1/go.mod h1:/3Dn1Npt9+MYyLpYYXjInO/5jvMLamn+AEGwNEOatn8= -gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0 h1:POO/ycCATvegFmVuPpQzZFJ+pGZeX22Ufu6fibxDVjU= -gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -grpc.go4.org v0.0.0-20170609214715-11d0a25b4919 h1:tmXTu+dfa+d9Evp8NpJdgOy6+rt8/x4yG7qPBrtNfLY= -grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= -honnef.co/go/js/dom v0.0.0-20190526011328-ebc4cf92d81f h1:b3Q9PqH+5NYHfIjNUEN+f8lYvBh9A25AX+kPh8dpYmc= -honnef.co/go/js/dom v0.0.0-20190526011328-ebc4cf92d81f/go.mod h1:sUMDUKNB2ZcVjt92UnLy3cdGs+wDAcrPdV3JP6sVgA4= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -istio.io/gogo-genproto v0.0.0-20191024203824-d079cc8b1d55 h1:nvpx66mnuGvXYP4IfCWfUqB9YhiXBF3MvUDsclNnDzI= -istio.io/gogo-genproto v0.0.0-20191024203824-d079cc8b1d55/go.mod h1:OzpAts7jljZceG4Vqi5/zXy/pOg1b209T3jb7Nv5wIs= k8s.io/api v0.0.0-20190620084959-7cf5895f2711/go.mod h1:TBhBqb1AWbBQbW3XRusr7n7E4v2+5ZY8r8sAMnyFC5A= k8s.io/api v0.0.0-20190813020757-36bff7324fb7 h1:4uJOjRn9kWq4AqJRE8+qzmAy+lJd9rh8TY455dNef4U= k8s.io/api v0.0.0-20190813020757-36bff7324fb7/go.mod h1:3Iy+myeAORNCLgjd/Xu9ebwN7Vh59Bw0vh9jhoX+V58= @@ -2337,8 +968,11 @@ k8s.io/kube-openapi v0.0.0-20190722073852-5e22f3d471e6/go.mod h1:RZvgC8MSN6DjiMV k8s.io/utils v0.0.0-20190221042446-c2654d5206da/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3oVhZz7sSzSiPnVZayjIX0= k8s.io/utils v0.0.0-20190809000727-6c36bc71fc4a h1:uy5HAgt4Ha5rEMbhZA+aM1j2cq5LmR6LQ71EYC2sVH4= k8s.io/utils v0.0.0-20190809000727-6c36bc71fc4a/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo= mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= +mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f h1:Cq7MalBHYACRd6EesksG1Q8EoIAKOsiZviGKbOLIej4= mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f/go.mod h1:4G1h5nDURzA3bwVMZIVpwbkw+04kSxk3rAtzlimaUJw= rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= @@ -2346,15 +980,5 @@ sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e h1:4Z09Hglb sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 h1:ucqkfpjg9WzSUubAO62csmucvxl4/JeW3F4I4909XkM= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= -sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67 h1:e1sMhtVq9AfcEy8AXNb8eSg6gbzfdpYhoNqnPJa+GzI= -sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67/go.mod h1:L5q+DGLGOQFpo1snNEkLOJT2d1YTW66rWNzatr3He1k= -sourcegraph.com/sourcegraph/go-diff v0.5.0 h1:eTiIR0CoWjGzJcnQ3OkhIl/b9GJovq4lSAVRt0ZFEG8= -sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= -sourcegraph.com/sourcegraph/go-git v0.0.0-20190828120159-87e0e4ab9e95 h1:BXXbBIn17eUjrezW34vwkuHuMlLLjbHX+FqEaXkH9xo= -sourcegraph.com/sourcegraph/go-git v0.0.0-20190828120159-87e0e4ab9e95/go.mod h1:wuMupdBPOKq56tE4fMCsXV+Ouau8I/u45E7RnwPUvac= -sourcegraph.com/sourcegraph/go-vcs v0.0.0-20190409071845-d784c9520ccd h1:OUJzsDqNQQ0LULa4jkmL8zOi3POVWlIoLdI5l0mFOic= -sourcegraph.com/sourcegraph/go-vcs v0.0.0-20190409071845-d784c9520ccd/go.mod h1:rFelUayJfYYMJDKiqwmLc8YIWivajdW1a494kJsfXRg= sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4 h1:JPJh2pk3+X4lXAkZIk2RuE/7/FoK9maXw+TNPJhVS/c= sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= diff --git a/exporter/awsxrayexporter/translator/cause.go b/exporter/awsxrayexporter/translator/cause.go index df653b39e9bc..991382223389 100644 --- a/exporter/awsxrayexporter/translator/cause.go +++ b/exporter/awsxrayexporter/translator/cause.go @@ -22,13 +22,6 @@ import ( tracetranslator "github.com/open-telemetry/opentelemetry-collector/translator/trace" ) -// OpenTelemetry Semantic Convention attribute names for error/fault/exception related attributes -const ( - ErrorObjectAttribute = "error.object" - ErrorMessageAttribute = "error.message" - ErrorKindAttribute = "error.kind" -) - // CauseData provides the shape for unmarshalling data that records exception. type CauseData struct { WorkingDirectory string `json:"working_directory,omitempty"` @@ -66,18 +59,10 @@ func makeCause(status *tracepb.Status, attributes map[string]string) (isError, i filtered = make(map[string]string) for key, value := range attributes { switch key { - case ErrorKindAttribute: - errorKind = value - case ErrorMessageAttribute: - if message == "" { - message = value - } case semconventions.AttributeHTTPStatusText: if message == "" { message = value } - case ErrorObjectAttribute: - errorObject = value default: filtered[key] = value } diff --git a/exporter/awsxrayexporter/translator/cause_test.go b/exporter/awsxrayexporter/translator/cause_test.go index 6170abc19d9d..b5c581246fda 100644 --- a/exporter/awsxrayexporter/translator/cause_test.go +++ b/exporter/awsxrayexporter/translator/cause_test.go @@ -75,31 +75,6 @@ func TestCauseWithHttpStatusMessage(t *testing.T) { assert.True(t, strings.Contains(jsonStr, errorMsg)) } -func TestCauseWithErrorMessage(t *testing.T) { - errorMsg := "this is a test" - attributes := make(map[string]interface{}) - attributes[semconventions.AttributeHTTPMethod] = "POST" - attributes[semconventions.AttributeHTTPURL] = "https://api.example.com/widgets" - attributes[semconventions.AttributeHTTPStatusCode] = 500 - attributes[ErrorMessageAttribute] = errorMsg - span := constructExceptionServerSpan(attributes) - filtered, _ := makeHTTP(span) - - isError, isFault, filtered, cause := makeCause(span.Status, filtered) - - assert.False(t, isError) - assert.True(t, isFault) - assert.NotNil(t, filtered) - assert.NotNil(t, cause) - w := testWriters.borrow() - if err := w.Encode(cause); err != nil { - assert.Fail(t, "invalid json") - } - jsonStr := w.String() - testWriters.release(w) - assert.True(t, strings.Contains(jsonStr, errorMsg)) -} - func constructExceptionServerSpan(attributes map[string]interface{}) *tracepb.Span { endTime := time.Now().Round(time.Second) startTime := endTime.Add(-90 * time.Second) diff --git a/exporter/awsxrayexporter/translator/segment.go b/exporter/awsxrayexporter/translator/segment.go index 6ad9066370b9..c1e4b6697a84 100644 --- a/exporter/awsxrayexporter/translator/segment.go +++ b/exporter/awsxrayexporter/translator/segment.go @@ -105,7 +105,7 @@ var ( writers = newWriterPool(2048) ) -// MakeSegmentDocumentString converts an Otel Span to an X-Ray Segment and then serialzies to JSON +// MakeSegmentDocumentString converts an OpenCensus Span to an X-Ray Segment and then serialzies to JSON func MakeSegmentDocumentString(name string, span *tracepb.Span) (string, error) { segment := MakeSegment(name, span) w := writers.borrow() @@ -117,7 +117,7 @@ func MakeSegmentDocumentString(name string, span *tracepb.Span) (string, error) return jsonStr, nil } -// MakeSegment converts an Otel Span to an X-Ray Segment +// MakeSegment converts an OpenCensus Span to an X-Ray Segment func MakeSegment(name string, span *tracepb.Span) Segment { var ( traceID = convertToAmazonTraceID(span.TraceId) diff --git a/exporter/awsxrayexporter/translator/segment_test.go b/exporter/awsxrayexporter/translator/segment_test.go index c6f72ff96084..b13ee923b6fa 100644 --- a/exporter/awsxrayexporter/translator/segment_test.go +++ b/exporter/awsxrayexporter/translator/segment_test.go @@ -89,7 +89,7 @@ func TestServerSpanWithInternalServerError(t *testing.T) { attributes[semconventions.AttributeHTTPURL] = "https://api.example.org/api/locations" attributes[semconventions.AttributeHTTPTarget] = "/api/locations" attributes[semconventions.AttributeHTTPStatusCode] = 500 - attributes[ErrorKindAttribute] = "java.lang.NullPointerException" + attributes[semconventions.AttributeHTTPStatusText] = "java.lang.NullPointerException" labels := constructDefaultResourceLabels() span := constructServerSpan(parentSpanID, spanName, tracetranslator.OCInternal, errorMessage, attributes, labels) timeEvents := constructTimedEventsWithSentMessageEvent(span.StartTime) From ddc477718091eb734a3901dd166d464c83a60836 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Wed, 11 Dec 2019 11:23:21 -0600 Subject: [PATCH 57/59] fix new static check issues --- exporter/awsxrayexporter/conn.go | 2 +- exporter/awsxrayexporter/conn_test.go | 2 +- exporter/awsxrayexporter/translator/http.go | 2 +- exporter/awsxrayexporter/translator/segment.go | 3 --- exporter/awsxrayexporter/translator/segment_test.go | 4 ++-- 5 files changed, 5 insertions(+), 8 deletions(-) diff --git a/exporter/awsxrayexporter/conn.go b/exporter/awsxrayexporter/conn.go index 1b46c36d4c54..924bfcb0b660 100644 --- a/exporter/awsxrayexporter/conn.go +++ b/exporter/awsxrayexporter/conn.go @@ -201,7 +201,7 @@ func (c *Conn) newAWSSession(logger *zap.Logger, roleArn string, region string) return s, err } } else { - stsCreds, err := getSTSCreds(logger, region, roleArn) + stsCreds, _ := getSTSCreds(logger, region, roleArn) s, err = session.NewSession(&aws.Config{ Credentials: stsCreds, diff --git a/exporter/awsxrayexporter/conn_test.go b/exporter/awsxrayexporter/conn_test.go index 0c19bf3f5923..649a54ea9f07 100644 --- a/exporter/awsxrayexporter/conn_test.go +++ b/exporter/awsxrayexporter/conn_test.go @@ -89,7 +89,7 @@ func loadExporterConfig(t *testing.T) *Config { assert.Nil(t, err) factory := &Factory{} factories.Exporters[factory.Type()] = factory - otelcfg, err := config.LoadConfigFile( + otelcfg, _ := config.LoadConfigFile( t, path.Join(".", "testdata", "config.yaml"), factories, ) xrayExporterCfg := otelcfg.Exporters["awsxray"].(*Config) diff --git a/exporter/awsxrayexporter/translator/http.go b/exporter/awsxrayexporter/translator/http.go index 933588235090..6a77a63fa5c7 100644 --- a/exporter/awsxrayexporter/translator/http.go +++ b/exporter/awsxrayexporter/translator/http.go @@ -206,7 +206,7 @@ func constructServerURL(component string, urlParts map[string]string) string { if !ok { host, ok = urlParts[semconventions.AttributeHTTPServerName] if !ok { - host, ok = urlParts[semconventions.AttributeHostName] + host = urlParts[semconventions.AttributeHostName] } port, ok = urlParts[semconventions.AttributeHTTPHostPort] if !ok { diff --git a/exporter/awsxrayexporter/translator/segment.go b/exporter/awsxrayexporter/translator/segment.go index c1e4b6697a84..d622d769837d 100644 --- a/exporter/awsxrayexporter/translator/segment.go +++ b/exporter/awsxrayexporter/translator/segment.go @@ -20,7 +20,6 @@ import ( "math/rand" "reflect" "regexp" - "sync" "time" resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1" @@ -39,8 +38,6 @@ const ( var ( zeroSpanID = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - r = rand.New(rand.NewSource(time.Now().UnixNano())) // random, not secure - mutex = &sync.Mutex{} ) var ( diff --git a/exporter/awsxrayexporter/translator/segment_test.go b/exporter/awsxrayexporter/translator/segment_test.go index b13ee923b6fa..ed784ce347f2 100644 --- a/exporter/awsxrayexporter/translator/segment_test.go +++ b/exporter/awsxrayexporter/translator/segment_test.go @@ -317,7 +317,7 @@ func constructTimedEventsWithReceivedMessageEvent(tm *timestamp.Timestamp) trace Annotation: &annotation, }, } - events := make([]*tracepb.Span_TimeEvent, 1, 1) + events := make([]*tracepb.Span_TimeEvent, 1) events[0] = &event timeEvents := tracepb.Span_TimeEvents{ TimeEvent: events, @@ -353,7 +353,7 @@ func constructTimedEventsWithSentMessageEvent(tm *timestamp.Timestamp) tracepb.S Annotation: &annotation, }, } - events := make([]*tracepb.Span_TimeEvent, 1, 1) + events := make([]*tracepb.Span_TimeEvent, 1) events[0] = &event timeEvents := tracepb.Span_TimeEvents{ TimeEvent: events, From e76baa4beafbe9ab8ac26206fd8a65089dde39ec Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Thu, 12 Dec 2019 08:56:10 -0600 Subject: [PATCH 58/59] fix test that breaks if no valid aws session available --- exporter/awsxrayexporter/awsxray.go | 7 +++++-- exporter/awsxrayexporter/awsxray_test.go | 5 +++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/exporter/awsxrayexporter/awsxray.go b/exporter/awsxrayexporter/awsxray.go index ffada0a1eb0e..8ac8cff63b3d 100644 --- a/exporter/awsxrayexporter/awsxray.go +++ b/exporter/awsxrayexporter/awsxray.go @@ -27,8 +27,8 @@ import ( "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter/translator" ) -// NewTraceExporter creates an exporter.TraceExporter that just drops the -// received data and logs debugging messages. +// NewTraceExporter creates an exporter.TraceExporter that converts to an X-Ray PutTraceSegments +// request and then posts the request to the configured region's X-Ray endpoint. func NewTraceExporter(config configmodels.Exporter, logger *zap.Logger, cn connAttr) (exporter.TraceExporter, error) { typeLog := zap.String("type", config.Type()) nameLog := zap.String("name", config.Name()) @@ -44,6 +44,9 @@ func NewTraceExporter(config configmodels.Exporter, logger *zap.Logger, cn connA droppedSpans, input := assembleRequest(td, logger) logger.Debug("request: " + input.String()) output, err := xrayClient.PutTraceSegments(input) + if config.(*Config).LocalMode { + err = nil // test mode, ignore errors + } logger.Debug("response: " + output.String()) if output != nil && output.UnprocessedTraceSegments != nil { droppedSpans += len(output.UnprocessedTraceSegments) diff --git a/exporter/awsxrayexporter/awsxray_test.go b/exporter/awsxrayexporter/awsxray_test.go index d165f58cd6ee..ab241a36c9e6 100644 --- a/exporter/awsxrayexporter/awsxray_test.go +++ b/exporter/awsxrayexporter/awsxray_test.go @@ -17,6 +17,7 @@ package awsxrayexporter import ( "context" "fmt" + "os" "reflect" "testing" "time" @@ -43,6 +44,10 @@ func TestTraceExport(t *testing.T) { } func initializeTraceExporter() exporter.TraceExporter { + os.Setenv("AWS_ACCESS_KEY_ID", "AKIASSWVJUY4PZXXXXXX") + os.Setenv("AWS_SECRET_ACCESS_KEY", "XYrudg2H87u+ADAAq19Wqx3D41a09RsTXXXXXXXX") + os.Setenv("AWS_DEFAULT_REGION", "us-east-1") + os.Setenv("AWS_REGION", "us-east-1") logger := zap.NewNop() factory := Factory{} config := factory.CreateDefaultConfig() From 2ae696ba34273a8e474e8687f65cb43341219605 Mon Sep 17 00:00:00 2001 From: Kevin Brockhoff Date: Fri, 13 Dec 2019 08:45:46 -0600 Subject: [PATCH 59/59] fix pull request issues --- exporter/awsxrayexporter/awsxray_test.go | 36 ++++++++++++++----- exporter/awsxrayexporter/translator/cause.go | 2 +- .../awsxrayexporter/translator/cause_test.go | 6 ++-- .../awsxrayexporter/translator/http_test.go | 12 +++---- .../awsxrayexporter/translator/segment.go | 22 ++++++------ .../translator/segment_test.go | 33 +++++++++++++---- 6 files changed, 75 insertions(+), 36 deletions(-) diff --git a/exporter/awsxrayexporter/awsxray_test.go b/exporter/awsxrayexporter/awsxray_test.go index ab241a36c9e6..e7a03edf4d0d 100644 --- a/exporter/awsxrayexporter/awsxray_test.go +++ b/exporter/awsxrayexporter/awsxray_test.go @@ -16,7 +16,9 @@ package awsxrayexporter import ( "context" + "encoding/binary" "fmt" + "math/rand" "os" "reflect" "testing" @@ -31,8 +33,6 @@ import ( semconventions "github.com/open-telemetry/opentelemetry-collector/translator/conventions" "github.com/stretchr/testify/assert" "go.uber.org/zap" - - "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter/translator" ) func TestTraceExport(t *testing.T) { @@ -104,9 +104,9 @@ func constructHTTPClientSpan() *tracepb.Span { spanAttributes := constructSpanAttributes(attributes) return &tracepb.Span{ - TraceId: translator.NewTraceID(), - SpanId: translator.NewSegmentID(), - ParentSpanId: translator.NewSegmentID(), + TraceId: newTraceID(), + SpanId: newSegmentID(), + ParentSpanId: newSegmentID(), Name: &tracepb.TruncatableString{Value: "/users/junit"}, Kind: tracepb.Span_CLIENT, StartTime: convertTimeToTimestamp(startTime), @@ -140,9 +140,9 @@ func constructHTTPServerSpan() *tracepb.Span { spanAttributes := constructSpanAttributes(attributes) return &tracepb.Span{ - TraceId: translator.NewTraceID(), - SpanId: translator.NewSegmentID(), - ParentSpanId: translator.NewSegmentID(), + TraceId: newTraceID(), + SpanId: newSegmentID(), + ParentSpanId: newSegmentID(), Name: &tracepb.TruncatableString{Value: "/users/junit"}, Kind: tracepb.Span_SERVER, StartTime: convertTimeToTimestamp(startTime), @@ -197,3 +197,23 @@ func constructSpanAttributes(attributes map[string]interface{}) map[string]*trac } return attrs } + +func newTraceID() []byte { + var r [16]byte + epoch := time.Now().Unix() + binary.BigEndian.PutUint32(r[0:4], uint32(epoch)) + _, err := rand.Read(r[4:]) + if err != nil { + panic(err) + } + return r[:] +} + +func newSegmentID() []byte { + var r [8]byte + _, err := rand.Read(r[:]) + if err != nil { + panic(err) + } + return r[:] +} diff --git a/exporter/awsxrayexporter/translator/cause.go b/exporter/awsxrayexporter/translator/cause.go index 991382223389..a297d6a94f9a 100644 --- a/exporter/awsxrayexporter/translator/cause.go +++ b/exporter/awsxrayexporter/translator/cause.go @@ -72,7 +72,7 @@ func makeCause(status *tracepb.Status, attributes map[string]string) (isError, i } if message != "" { - id := NewSegmentID() + id := newSegmentID() hexID := hex.EncodeToString(id) cause = &CauseData{ diff --git a/exporter/awsxrayexporter/translator/cause_test.go b/exporter/awsxrayexporter/translator/cause_test.go index b5c581246fda..588f82ddc464 100644 --- a/exporter/awsxrayexporter/translator/cause_test.go +++ b/exporter/awsxrayexporter/translator/cause_test.go @@ -81,9 +81,9 @@ func constructExceptionServerSpan(attributes map[string]interface{}) *tracepb.Sp spanAttributes := constructSpanAttributes(attributes) return &tracepb.Span{ - TraceId: NewTraceID(), - SpanId: NewSegmentID(), - ParentSpanId: NewSegmentID(), + TraceId: newTraceID(), + SpanId: newSegmentID(), + ParentSpanId: newSegmentID(), Name: &tracepb.TruncatableString{Value: "/widgets"}, Kind: tracepb.Span_SERVER, StartTime: convertTimeToTimestamp(startTime), diff --git a/exporter/awsxrayexporter/translator/http_test.go b/exporter/awsxrayexporter/translator/http_test.go index 96ac2b86d6f9..b197fd9713e5 100644 --- a/exporter/awsxrayexporter/translator/http_test.go +++ b/exporter/awsxrayexporter/translator/http_test.go @@ -264,9 +264,9 @@ func constructHTTPClientSpan(attributes map[string]interface{}) *tracepb.Span { spanAttributes := constructSpanAttributes(attributes) return &tracepb.Span{ - TraceId: NewTraceID(), - SpanId: NewSegmentID(), - ParentSpanId: NewSegmentID(), + TraceId: newTraceID(), + SpanId: newSegmentID(), + ParentSpanId: newSegmentID(), Name: &tracepb.TruncatableString{Value: "/users/junit"}, Kind: tracepb.Span_CLIENT, StartTime: convertTimeToTimestamp(startTime), @@ -298,9 +298,9 @@ func constructHTTPServerSpan(attributes map[string]interface{}) *tracepb.Span { spanAttributes := constructSpanAttributes(attributes) return &tracepb.Span{ - TraceId: NewTraceID(), - SpanId: NewSegmentID(), - ParentSpanId: NewSegmentID(), + TraceId: newTraceID(), + SpanId: newSegmentID(), + ParentSpanId: newSegmentID(), Name: &tracepb.TruncatableString{Value: "/users/junit"}, Kind: tracepb.Span_SERVER, StartTime: convertTimeToTimestamp(startTime), diff --git a/exporter/awsxrayexporter/translator/segment.go b/exporter/awsxrayexporter/translator/segment.go index d622d769837d..0d54e927e845 100644 --- a/exporter/awsxrayexporter/translator/segment.go +++ b/exporter/awsxrayexporter/translator/segment.go @@ -127,7 +127,7 @@ func MakeSegment(name string, span *tracepb.Span) Segment { awsfiltered, aws = makeAws(causefiltered, span.Resource) service = makeService(span.Resource) sqlfiltered, sql = makeSQL(awsfiltered) - user, annotations = makeAnnotations(sqlfiltered) + annotations = makeAnnotations(sqlfiltered) namespace string ) @@ -151,7 +151,6 @@ func MakeSegment(name string, span *tracepb.Span) Segment { Cause: cause, Origin: origin, Namespace: namespace, - User: user, HTTP: http, AWS: aws, Service: service, @@ -161,8 +160,8 @@ func MakeSegment(name string, span *tracepb.Span) Segment { } } -// NewTraceID generates a new valid X-Ray TraceID -func NewTraceID() []byte { +// newTraceID generates a new valid X-Ray TraceID +func newTraceID() []byte { var r [16]byte epoch := time.Now().Unix() binary.BigEndian.PutUint32(r[0:4], uint32(epoch)) @@ -173,8 +172,8 @@ func NewTraceID() []byte { return r[:] } -// NewSegmentID generates a new valid X-Ray SegmentID -func NewSegmentID() []byte { +// newSegmentID generates a new valid X-Ray SegmentID +func newSegmentID() []byte { var r [8]byte _, err := rand.Read(r[:]) if err != nil { @@ -267,26 +266,25 @@ func timestampToFloatSeconds(ts *timestamp.Timestamp, startTs *timestamp.Timesta return float64(t.UnixNano()) / 1e9 } -func mergeAnnotations(dest map[string]interface{}, src map[string]string) { +func sanitizeAndTransferAnnotations(dest map[string]interface{}, src map[string]string) { for key, value := range src { key = fixAnnotationKey(key) dest[key] = value } } -func makeAnnotations(attributes map[string]string) (string, map[string]interface{}) { +func makeAnnotations(attributes map[string]string) map[string]interface{} { var ( result = map[string]interface{}{} - user string ) delete(attributes, semconventions.AttributeComponent) - mergeAnnotations(result, attributes) + sanitizeAndTransferAnnotations(result, attributes) if len(result) == 0 { - return user, nil + return nil } - return user, result + return result } // fixSegmentName removes any invalid characters from the span name. AWS X-Ray defines diff --git a/exporter/awsxrayexporter/translator/segment_test.go b/exporter/awsxrayexporter/translator/segment_test.go index ed784ce347f2..6b3371ad9306 100644 --- a/exporter/awsxrayexporter/translator/segment_test.go +++ b/exporter/awsxrayexporter/translator/segment_test.go @@ -56,7 +56,7 @@ func TestClientSpanWithGrpcComponent(t *testing.T) { func TestClientSpanWithAwsSdkClient(t *testing.T) { spanName := "AmazonDynamoDB.getItem" - parentSpanID := NewSegmentID() + parentSpanID := newSegmentID() user := "testingT" attributes := make(map[string]interface{}) attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP @@ -81,7 +81,7 @@ func TestClientSpanWithAwsSdkClient(t *testing.T) { func TestServerSpanWithInternalServerError(t *testing.T) { spanName := "/api/locations" - parentSpanID := NewSegmentID() + parentSpanID := newSegmentID() errorMessage := "java.lang.NullPointerException" attributes := make(map[string]interface{}) attributes[semconventions.AttributeComponent] = semconventions.ComponentTypeHTTP @@ -172,11 +172,32 @@ func TestSpanWithInvalidTraceId(t *testing.T) { assert.False(t, strings.Contains(jsonStr, "1-11")) } +func TestFixSegmentName(t *testing.T) { + validName := "EP @ test_15.testing-d\u00F6main.org#GO" + fixedName := fixSegmentName(validName) + assert.Equal(t, validName, fixedName) + invalidName := ".example.com" + fixedName = fixSegmentName(invalidName) + assert.Equal(t, "subDomain.example.com", fixedName) + fullyInvalidName := "<>" + fixedName = fixSegmentName(fullyInvalidName) + assert.Equal(t, defaultSegmentName, fixedName) +} + +func TestFixAnnotationKey(t *testing.T) { + validKey := "Key_1" + fixedKey := fixAnnotationKey(validKey) + assert.Equal(t, validKey, fixedKey) + invalidKey := "Key@1" + fixedKey = fixAnnotationKey(invalidKey) + assert.Equal(t, "Key_1", fixedKey) +} + func constructClientSpan(parentSpanID []byte, name string, code int32, message string, attributes map[string]interface{}, rscLabels map[string]string) *tracepb.Span { var ( - traceID = NewTraceID() - spanID = NewSegmentID() + traceID = newTraceID() + spanID = newSegmentID() endTime = time.Now() startTime = endTime.Add(-215 * time.Millisecond) spanAttributes = constructSpanAttributes(attributes) @@ -207,8 +228,8 @@ func constructClientSpan(parentSpanID []byte, name string, code int32, message s func constructServerSpan(parentSpanID []byte, name string, code int32, message string, attributes map[string]interface{}, rscLabels map[string]string) *tracepb.Span { var ( - traceID = NewTraceID() - spanID = NewSegmentID() + traceID = newTraceID() + spanID = newSegmentID() endTime = time.Now() startTime = endTime.Add(-215 * time.Millisecond) spanAttributes = constructSpanAttributes(attributes)