From 80805d2d45a1735cdcb167848b52d734496b76ec Mon Sep 17 00:00:00 2001 From: Kositsyn Pavel Date: Tue, 10 Nov 2020 02:03:56 +0300 Subject: [PATCH 01/12] Bump opentelemetry-collector to v0.14.0 (#2617) * bump opentelemetry-collector to v0.14.0 Signed-off-by: Pavel Kositsyn * initialize traceid and spanid explicitly Signed-off-by: Pavel Kositsyn * fix comments and empty parent span check Signed-off-by: Pavel Kositsyn * fasten convert traceID/spanID Signed-off-by: Pavel Kositsyn * fix convertTraceID + fix tests Signed-off-by: Pavel Kositsyn --- .../app/exporter/badgerexporter/factory.go | 8 ++-- .../exporter/badgerexporter/factory_test.go | 2 +- .../exporter/cassandraexporter/exporter.go | 4 +- .../app/exporter/cassandraexporter/factory.go | 6 +-- .../cassandraexporter/factory_test.go | 2 +- .../esmodeltranslator/modeltranslator.go | 21 ++++----- .../esmodeltranslator/modeltranslator_test.go | 46 +++++++++---------- .../elasticsearchexporter/exporter.go | 3 +- .../exporter/elasticsearchexporter/factory.go | 6 +-- .../elasticsearchexporter/factory_test.go | 4 +- .../elasticsearchexporter/spanstore.go | 3 +- .../exporter/grpcpluginexporter/exporter.go | 4 +- .../exporter/grpcpluginexporter/factory.go | 6 +-- .../grpcpluginexporter/factory_test.go | 2 +- .../jaegerexporter/jaeger_exporter.go | 8 ++-- .../jaegerexporter/jaeger_exporter_test.go | 1 - .../exporter/kafkaexporter/kafka_exporter.go | 8 ++-- .../app/exporter/memoryexporter/factory.go | 8 ++-- .../exporter/memoryexporter/factory_test.go | 8 ++-- .../app/exporter/span_writer_exporter.go | 3 +- .../app/exporter/span_writer_exporter_test.go | 16 ++++--- .../internal/reader/es/esspanreader/query.go | 2 +- .../resourceprocessor/resource_processor.go | 10 ++-- .../resource_processor_test.go | 6 +-- .../jaegerreceiver/jaeger_receiver.go | 10 ++-- .../receiver/kafkareceiver/kafka_receiver.go | 10 ++-- .../zipkinreceiver/zipkin_receiver.go | 10 ++-- cmd/opentelemetry/go.mod | 2 +- cmd/opentelemetry/go.sum | 30 ++++++++++++ 29 files changed, 138 insertions(+), 111 deletions(-) diff --git a/cmd/opentelemetry/app/exporter/badgerexporter/factory.go b/cmd/opentelemetry/app/exporter/badgerexporter/factory.go index 1114f9936c8..dcd1cc1ec26 100644 --- a/cmd/opentelemetry/app/exporter/badgerexporter/factory.go +++ b/cmd/opentelemetry/app/exporter/badgerexporter/factory.go @@ -89,19 +89,19 @@ func (f Factory) CreateDefaultConfig() configmodels.Exporter { } } -// CreateTraceExporter creates Jaeger Cassandra trace exporter. +// CreateTracesExporter creates Jaeger Cassandra trace exporter. // This function implements OTEL component.ExporterFactory interface. -func (f Factory) CreateTraceExporter( +func (f Factory) CreateTracesExporter( _ context.Context, params component.ExporterCreateParams, cfg configmodels.Exporter, -) (component.TraceExporter, error) { +) (component.TracesExporter, error) { config := cfg.(*Config) factory, err := f.createStorageFactory(params, config) if err != nil { return nil, err } - return exporter.NewSpanWriterExporter(cfg, factory, + return exporter.NewSpanWriterExporter(cfg, params, factory, exporterhelper.WithTimeout(config.TimeoutSettings), exporterhelper.WithQueue(config.QueueSettings), exporterhelper.WithRetry(config.RetrySettings)) diff --git a/cmd/opentelemetry/app/exporter/badgerexporter/factory_test.go b/cmd/opentelemetry/app/exporter/badgerexporter/factory_test.go index ef280f64699..be65541eca4 100644 --- a/cmd/opentelemetry/app/exporter/badgerexporter/factory_test.go +++ b/cmd/opentelemetry/app/exporter/badgerexporter/factory_test.go @@ -37,7 +37,7 @@ func TestCreateTraceExporter(t *testing.T) { factory := NewFactory(func() *badger.Options { return opts }) - exporter, err := factory.CreateTraceExporter(context.Background(), component.ExporterCreateParams{Logger: zap.NewNop()}, factory.CreateDefaultConfig()) + exporter, err := factory.CreateTracesExporter(context.Background(), component.ExporterCreateParams{Logger: zap.NewNop()}, factory.CreateDefaultConfig()) require.NoError(t, err) assert.NotNil(t, exporter) } diff --git a/cmd/opentelemetry/app/exporter/cassandraexporter/exporter.go b/cmd/opentelemetry/app/exporter/cassandraexporter/exporter.go index 74234e0bf32..2e5b1406b59 100644 --- a/cmd/opentelemetry/app/exporter/cassandraexporter/exporter.go +++ b/cmd/opentelemetry/app/exporter/cassandraexporter/exporter.go @@ -24,7 +24,7 @@ import ( ) // new creates Cassandra exporter/storage -func new(config *Config, params component.ExporterCreateParams) (component.TraceExporter, error) { +func new(config *Config, params component.ExporterCreateParams) (component.TracesExporter, error) { f := cassandra.NewFactory() f.InitFromOptions(&config.Options) @@ -32,7 +32,7 @@ func new(config *Config, params component.ExporterCreateParams) (component.Trace if err != nil { return nil, err } - return exporter.NewSpanWriterExporter(config, f, + return exporter.NewSpanWriterExporter(config, params, f, exporterhelper.WithTimeout(config.TimeoutSettings), exporterhelper.WithQueue(config.QueueSettings), exporterhelper.WithRetry(config.RetrySettings)) diff --git a/cmd/opentelemetry/app/exporter/cassandraexporter/factory.go b/cmd/opentelemetry/app/exporter/cassandraexporter/factory.go index f9c4f16327a..9209bcb9cb0 100644 --- a/cmd/opentelemetry/app/exporter/cassandraexporter/factory.go +++ b/cmd/opentelemetry/app/exporter/cassandraexporter/factory.go @@ -71,13 +71,13 @@ func (f Factory) CreateDefaultConfig() configmodels.Exporter { } } -// CreateTraceExporter creates Jaeger Cassandra trace exporter. +// CreateTracesExporter creates Jaeger Cassandra trace exporter. // This function implements OTEL component.ExporterFactory interface. -func (f Factory) CreateTraceExporter( +func (f Factory) CreateTracesExporter( _ context.Context, params component.ExporterCreateParams, cfg configmodels.Exporter, -) (component.TraceExporter, error) { +) (component.TracesExporter, error) { config := cfg.(*Config) return new(config, params) } diff --git a/cmd/opentelemetry/app/exporter/cassandraexporter/factory_test.go b/cmd/opentelemetry/app/exporter/cassandraexporter/factory_test.go index 7e6bea83f12..ea17c875eea 100644 --- a/cmd/opentelemetry/app/exporter/cassandraexporter/factory_test.go +++ b/cmd/opentelemetry/app/exporter/cassandraexporter/factory_test.go @@ -37,7 +37,7 @@ func TestCreateTraceExporter(t *testing.T) { factory := Factory{OptionsFactory: func() *cassandra.Options { return opts }} - exporter, err := factory.CreateTraceExporter(context.Background(), component.ExporterCreateParams{}, factory.CreateDefaultConfig()) + exporter, err := factory.CreateTracesExporter(context.Background(), component.ExporterCreateParams{}, factory.CreateDefaultConfig()) require.Nil(t, exporter) assert.Contains(t, err.Error(), "gocql: unable to create session") } diff --git a/cmd/opentelemetry/app/exporter/elasticsearchexporter/esmodeltranslator/modeltranslator.go b/cmd/opentelemetry/app/exporter/elasticsearchexporter/esmodeltranslator/modeltranslator.go index 7939802aa41..ef016bbb104 100644 --- a/cmd/opentelemetry/app/exporter/elasticsearchexporter/esmodeltranslator/modeltranslator.go +++ b/cmd/opentelemetry/app/exporter/elasticsearchexporter/esmodeltranslator/modeltranslator.go @@ -15,6 +15,7 @@ package esmodeltranslator import ( + "encoding/hex" "errors" "fmt" "strconv" @@ -167,7 +168,7 @@ func toTime(nano pdata.TimestampUnixNano) time.Time { } func references(links pdata.SpanLinkSlice, parentSpanID pdata.SpanID, traceID dbmodel.TraceID) ([]dbmodel.Reference, error) { - parentSpanIDSet := len(parentSpanID.Bytes()) != 0 + parentSpanIDSet := parentSpanID.IsValid() if !parentSpanIDSet && links.Len() == 0 { return emptyReferenceList, nil } @@ -222,24 +223,20 @@ func references(links pdata.SpanLinkSlice, parentSpanID pdata.SpanID, traceID db } func convertSpanID(spanID pdata.SpanID) (dbmodel.SpanID, error) { - spanIDInt, err := tracetranslator.BytesToUInt64SpanID(spanID.Bytes()) - if err != nil { - return "", err - } - if spanIDInt == 0 { + if !spanID.IsValid() { return "", errZeroSpanID } - return dbmodel.SpanID(fmt.Sprintf("%016x", spanIDInt)), nil + src := spanID.Bytes() + dst := make([]byte, hex.EncodedLen(len(src))) + hex.Encode(dst, src[:]) + return dbmodel.SpanID(dst), nil } func convertTraceID(traceID pdata.TraceID) (dbmodel.TraceID, error) { - high, low, err := tracetranslator.BytesToUInt64TraceID(traceID.Bytes()) - if err != nil { - return "", err - } - if low == 0 && high == 0 { + if !traceID.IsValid() { return "", errZeroTraceID } + high, low := tracetranslator.BytesToUInt64TraceID(traceID.Bytes()) return dbmodel.TraceID(traceIDToString(high, low)), nil } diff --git a/cmd/opentelemetry/app/exporter/elasticsearchexporter/esmodeltranslator/modeltranslator_test.go b/cmd/opentelemetry/app/exporter/elasticsearchexporter/esmodeltranslator/modeltranslator_test.go index 75d65756503..3713c4609d5 100644 --- a/cmd/opentelemetry/app/exporter/elasticsearchexporter/esmodeltranslator/modeltranslator_test.go +++ b/cmd/opentelemetry/app/exporter/elasticsearchexporter/esmodeltranslator/modeltranslator_test.go @@ -15,7 +15,6 @@ package esmodeltranslator import ( - "encoding/binary" "fmt" "testing" "time" @@ -30,8 +29,9 @@ import ( ) var ( - traceID = pdata.NewTraceID([]byte("0123456789abcdef")) - spanID = pdata.NewSpanID([]byte("01234567")) + traceID = pdata.NewTraceID([16]byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}) + spanID = pdata.NewSpanID([8]byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}) ) func TestAttributeToKeyValue(t *testing.T) { @@ -129,7 +129,9 @@ func TestConvertSpan(t *testing.T) { span.Links().Resize(1) span.Links().At(0).InitEmpty() span.Links().At(0).SetSpanID(spanID) - span.Links().At(0).SetTraceID(traceID) + traceIDZeroHigh := pdata.NewTraceID([16]byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}) + span.Links().At(0).SetTraceID(traceIDZeroHigh) c := &Translator{ tagKeysAsFields: map[string]bool{"toTagMap": true}, @@ -143,15 +145,15 @@ func TestConvertSpan(t *testing.T) { Resource: resource, InstrumentationLibrary: traces.ResourceSpans().At(0).InstrumentationLibrarySpans().At(0).InstrumentationLibrary(), DBSpan: &dbmodel.Span{ - TraceID: "30313233343536373839616263646566", - SpanID: "3031323334353637", + TraceID: "000102030405060708090a0b0c0d0e0f", + SpanID: "0001020304050607", StartTime: 1000, Duration: 1000, OperationName: "root", StartTimeMillis: 1, Tags: []dbmodel.KeyValue{ {Key: "span.kind", Type: dbmodel.StringType, Value: "client"}, - {Key: "status.code", Type: dbmodel.StringType, Value: "STATUS_CODE_CANCELLED"}, + {Key: "status.code", Type: dbmodel.StringType, Value: "STATUS_CODE_OK"}, {Key: "error", Type: dbmodel.BoolType, Value: "true"}, {Key: "status.message", Type: dbmodel.StringType, Value: "messagetext"}, {Key: "foo", Type: dbmodel.BoolType, Value: "true"}, @@ -163,8 +165,8 @@ func TestConvertSpan(t *testing.T) { {Key: "event", Value: "eventName", Type: dbmodel.StringType}, {Key: "foo", Value: "bar", Type: dbmodel.StringType}}, Timestamp: 500}}, References: []dbmodel.Reference{ - {SpanID: "3031323334353637", TraceID: "30313233343536373839616263646566", RefType: dbmodel.ChildOf}, - {SpanID: "3031323334353637", TraceID: "30313233343536373839616263646566", RefType: dbmodel.FollowsFrom}}, + {SpanID: "0001020304050607", TraceID: "000102030405060708090a0b0c0d0e0f", RefType: dbmodel.ChildOf}, + {SpanID: "0001020304050607", TraceID: "0001020304050607", RefType: dbmodel.FollowsFrom}}, Process: dbmodel.Process{ ServiceName: "myservice", Tags: []dbmodel.KeyValue{{Key: "num", Value: "16.66", Type: dbmodel.Float64Type}}, @@ -173,6 +175,12 @@ func TestConvertSpan(t *testing.T) { }, spansData[0]) } +func BenchmarkConvertSpanID(b *testing.B) { + for i := 0; i < b.N; i++ { + _, _ = convertSpanID(spanID) + } +} + func TestSpanEmptyRef(t *testing.T) { traces := traces("myservice") span := addSpan(traces, "root", traceID, spanID) @@ -190,8 +198,8 @@ func TestSpanEmptyRef(t *testing.T) { Resource: traces.ResourceSpans().At(0).Resource(), InstrumentationLibrary: traces.ResourceSpans().At(0).InstrumentationLibrarySpans().At(0).InstrumentationLibrary(), DBSpan: &dbmodel.Span{ - TraceID: "30313233343536373839616263646566", - SpanID: "3031323334353637", + TraceID: "000102030405060708090a0b0c0d0e0f", + SpanID: "0001020304050607", StartTime: 1000, Duration: 1000, OperationName: "root", @@ -215,26 +223,16 @@ func TestEmpty(t *testing.T) { } func TestErrorIDs(t *testing.T) { - zero64Bytes := make([]byte, 16) - binary.LittleEndian.PutUint64(zero64Bytes, 0) - binary.LittleEndian.PutUint64(zero64Bytes, 0) + var zero64Bytes [16]byte + var zero32Bytes [8]byte tests := []struct { spanID pdata.SpanID traceID pdata.TraceID err string }{ - { - traceID: pdata.NewTraceID([]byte("invalid-%")), - err: "TraceID does not have 16 bytes", - }, - { - traceID: traceID, - spanID: pdata.NewSpanID([]byte("invalid-%")), - err: "SpanID does not have 8 bytes", - }, { traceID: traceID, - spanID: pdata.NewSpanID(zero64Bytes[:8]), + spanID: pdata.NewSpanID(zero32Bytes), err: errZeroSpanID.Error(), }, { diff --git a/cmd/opentelemetry/app/exporter/elasticsearchexporter/exporter.go b/cmd/opentelemetry/app/exporter/elasticsearchexporter/exporter.go index d330452472a..d9118c984b5 100644 --- a/cmd/opentelemetry/app/exporter/elasticsearchexporter/exporter.go +++ b/cmd/opentelemetry/app/exporter/elasticsearchexporter/exporter.go @@ -24,7 +24,7 @@ import ( ) // newExporter creates Elasticsearch exporter/storage. -func newExporter(ctx context.Context, config *Config, params component.ExporterCreateParams) (component.TraceExporter, error) { +func newExporter(ctx context.Context, config *Config, params component.ExporterCreateParams) (component.TracesExporter, error) { esCfg := config.GetPrimary() w, err := newEsSpanWriter(*esCfg, params.Logger, false, config.Name()) if err != nil { @@ -38,6 +38,7 @@ func newExporter(ctx context.Context, config *Config, params component.ExporterC } return exporterhelper.NewTraceExporter( config, + params.Logger, w.WriteTraces, exporterhelper.WithTimeout(config.TimeoutSettings), exporterhelper.WithQueue(config.QueueSettings), diff --git a/cmd/opentelemetry/app/exporter/elasticsearchexporter/factory.go b/cmd/opentelemetry/app/exporter/elasticsearchexporter/factory.go index 75b9580843f..c254e45eddc 100644 --- a/cmd/opentelemetry/app/exporter/elasticsearchexporter/factory.go +++ b/cmd/opentelemetry/app/exporter/elasticsearchexporter/factory.go @@ -72,13 +72,13 @@ func (f Factory) CreateDefaultConfig() configmodels.Exporter { } } -// CreateTraceExporter creates Jaeger Elasticsearch trace exporter. +// CreateTracesExporter creates Jaeger Elasticsearch trace exporter. // This function implements OTEL component.ExporterFactory interface. -func (Factory) CreateTraceExporter( +func (Factory) CreateTracesExporter( ctx context.Context, params component.ExporterCreateParams, cfg configmodels.Exporter, -) (component.TraceExporter, error) { +) (component.TracesExporter, error) { esCfg, ok := cfg.(*Config) if !ok { return nil, fmt.Errorf("could not cast configuration to %s", TypeStr) diff --git a/cmd/opentelemetry/app/exporter/elasticsearchexporter/factory_test.go b/cmd/opentelemetry/app/exporter/elasticsearchexporter/factory_test.go index e3dec84610a..13f30b298d7 100644 --- a/cmd/opentelemetry/app/exporter/elasticsearchexporter/factory_test.go +++ b/cmd/opentelemetry/app/exporter/elasticsearchexporter/factory_test.go @@ -40,14 +40,14 @@ func TestCreateTraceExporter(t *testing.T) { }} config := factory.CreateDefaultConfig().(*Config) config.Primary.Servers = []string{"http://foobardoesnotexists.test"} - exporter, err := factory.CreateTraceExporter(context.Background(), component.ExporterCreateParams{Logger: zap.NewNop()}, config) + exporter, err := factory.CreateTracesExporter(context.Background(), component.ExporterCreateParams{Logger: zap.NewNop()}, config) require.Nil(t, exporter) assert.Contains(t, err.Error(), "no such host") } func TestCreateTraceExporter_nilConfig(t *testing.T) { factory := &Factory{} - exporter, err := factory.CreateTraceExporter(context.Background(), component.ExporterCreateParams{}, nil) + exporter, err := factory.CreateTracesExporter(context.Background(), component.ExporterCreateParams{}, nil) require.Nil(t, exporter) assert.Contains(t, err.Error(), "could not cast configuration to jaeger_elasticsearch") } diff --git a/cmd/opentelemetry/app/exporter/elasticsearchexporter/spanstore.go b/cmd/opentelemetry/app/exporter/elasticsearchexporter/spanstore.go index bdb6c4ed120..b8905eae28b 100644 --- a/cmd/opentelemetry/app/exporter/elasticsearchexporter/spanstore.go +++ b/cmd/opentelemetry/app/exporter/elasticsearchexporter/spanstore.go @@ -46,7 +46,6 @@ const ( serviceIndexBaseName = "jaeger-service" spanTypeName = "span" serviceTypeName = "service" - indexDateFormat = "2006-01-02" // date format for index e.g. 2020-01-20 ) // esSpanWriter holds components required for ES span writer @@ -245,7 +244,7 @@ func bulkItemsToTraces(bulkItems []bulkItem) pdata.Traces { rss := traces.ResourceSpans().At(i) if !spanData.Resource.IsNil() { rss.Resource().InitEmpty() - rss.Resource().Attributes().InitFromAttributeMap(spanData.Resource.Attributes()) + spanData.Resource.Attributes().CopyTo(rss.Resource().Attributes()) } rss.InstrumentationLibrarySpans().Resize(1) ispans := rss.InstrumentationLibrarySpans().At(0) diff --git a/cmd/opentelemetry/app/exporter/grpcpluginexporter/exporter.go b/cmd/opentelemetry/app/exporter/grpcpluginexporter/exporter.go index c9ba8dda60b..85c17073551 100644 --- a/cmd/opentelemetry/app/exporter/grpcpluginexporter/exporter.go +++ b/cmd/opentelemetry/app/exporter/grpcpluginexporter/exporter.go @@ -24,14 +24,14 @@ import ( ) // new creates gRPC exporter/storage. -func new(config *Config, params component.ExporterCreateParams) (component.TraceExporter, error) { +func new(config *Config, params component.ExporterCreateParams) (component.TracesExporter, error) { factory := storageGrpc.NewFactory() factory.InitFromOptions(config.Options) err := factory.Initialize(metrics.NullFactory, params.Logger) if err != nil { return nil, err } - return storageOtelExporter.NewSpanWriterExporter(&config.ExporterSettings, factory, + return storageOtelExporter.NewSpanWriterExporter(&config.ExporterSettings, params, factory, exporterhelper.WithTimeout(config.TimeoutSettings), exporterhelper.WithQueue(config.QueueSettings), exporterhelper.WithRetry(config.RetrySettings)) diff --git a/cmd/opentelemetry/app/exporter/grpcpluginexporter/factory.go b/cmd/opentelemetry/app/exporter/grpcpluginexporter/factory.go index 129fa5b0933..741c90878eb 100644 --- a/cmd/opentelemetry/app/exporter/grpcpluginexporter/factory.go +++ b/cmd/opentelemetry/app/exporter/grpcpluginexporter/factory.go @@ -65,13 +65,13 @@ func (f Factory) CreateDefaultConfig() configmodels.Exporter { } } -// CreateTraceExporter creates Jaeger gRPC trace exporter. +// CreateTracesExporter creates Jaeger gRPC trace exporter. // This function implements OTEL component.ExporterFactory interface. -func (f Factory) CreateTraceExporter( +func (f Factory) CreateTracesExporter( _ context.Context, params component.ExporterCreateParams, cfg configmodels.Exporter, -) (component.TraceExporter, error) { +) (component.TracesExporter, error) { grpcCfg := cfg.(*Config) return new(grpcCfg, params) } diff --git a/cmd/opentelemetry/app/exporter/grpcpluginexporter/factory_test.go b/cmd/opentelemetry/app/exporter/grpcpluginexporter/factory_test.go index b0d1b649520..1e9eea80527 100644 --- a/cmd/opentelemetry/app/exporter/grpcpluginexporter/factory_test.go +++ b/cmd/opentelemetry/app/exporter/grpcpluginexporter/factory_test.go @@ -36,7 +36,7 @@ func TestCreateTraceExporter(t *testing.T) { factory := &Factory{OptionsFactory: func() *storageGrpc.Options { return opts }} - exporter, err := factory.CreateTraceExporter(context.Background(), component.ExporterCreateParams{}, factory.CreateDefaultConfig()) + exporter, err := factory.CreateTracesExporter(context.Background(), component.ExporterCreateParams{}, factory.CreateDefaultConfig()) require.Nil(t, exporter) assert.Contains(t, err.Error(), "error attempting to connect to plugin rpc client: fork/exec : no such file or directory") } diff --git a/cmd/opentelemetry/app/exporter/jaegerexporter/jaeger_exporter.go b/cmd/opentelemetry/app/exporter/jaegerexporter/jaeger_exporter.go index 8bba30ac831..e8ff5d87f31 100644 --- a/cmd/opentelemetry/app/exporter/jaegerexporter/jaeger_exporter.go +++ b/cmd/opentelemetry/app/exporter/jaegerexporter/jaeger_exporter.go @@ -58,14 +58,14 @@ func (f Factory) CreateDefaultConfig() configmodels.Exporter { return cfg } -// CreateTraceExporter creates Jaeger trace exporter. +// CreateTracesExporter creates Jaeger trace exporter. // This function implements OTEL component.ExporterFactory interface. -func (f Factory) CreateTraceExporter( +func (f Factory) CreateTracesExporter( ctx context.Context, params component.ExporterCreateParams, cfg configmodels.Exporter, -) (component.TraceExporter, error) { - return f.Wrapped.CreateTraceExporter(ctx, params, cfg) +) (component.TracesExporter, error) { + return f.Wrapped.CreateTracesExporter(ctx, params, cfg) } // CreateMetricsExporter creates a metrics exporter based on provided config. diff --git a/cmd/opentelemetry/app/exporter/jaegerexporter/jaeger_exporter_test.go b/cmd/opentelemetry/app/exporter/jaegerexporter/jaeger_exporter_test.go index 1c49540bb66..006fbbd09ba 100644 --- a/cmd/opentelemetry/app/exporter/jaegerexporter/jaeger_exporter_test.go +++ b/cmd/opentelemetry/app/exporter/jaegerexporter/jaeger_exporter_test.go @@ -64,7 +64,6 @@ func TestDefaultValueFromViper(t *testing.T) { cfg := f.CreateDefaultConfig().(*jaegerexporter.Config) qs := exporterhelper.CreateDefaultQueueSettings() - qs.Enabled = false assert.Equal(t, &jaegerexporter.Config{ ExporterSettings: configmodels.ExporterSettings{ TypeVal: "jaeger", diff --git a/cmd/opentelemetry/app/exporter/kafkaexporter/kafka_exporter.go b/cmd/opentelemetry/app/exporter/kafkaexporter/kafka_exporter.go index 288331450f0..4cf4c583b66 100644 --- a/cmd/opentelemetry/app/exporter/kafkaexporter/kafka_exporter.go +++ b/cmd/opentelemetry/app/exporter/kafkaexporter/kafka_exporter.go @@ -97,14 +97,14 @@ func (f Factory) CreateDefaultConfig() configmodels.Exporter { return cfg } -// CreateTraceExporter creates Jaeger trace exporter. +// CreateTracesExporter creates Jaeger trace exporter. // This function implements OTEL component.ExporterFactory interface. -func (f Factory) CreateTraceExporter( +func (f Factory) CreateTracesExporter( ctx context.Context, params component.ExporterCreateParams, cfg configmodels.Exporter, -) (component.TraceExporter, error) { - return f.Wrapped.CreateTraceExporter(ctx, params, cfg) +) (component.TracesExporter, error) { + return f.Wrapped.CreateTracesExporter(ctx, params, cfg) } // CreateMetricsExporter creates a metrics exporter based on provided config. diff --git a/cmd/opentelemetry/app/exporter/memoryexporter/factory.go b/cmd/opentelemetry/app/exporter/memoryexporter/factory.go index 7bb5491cd75..968b09a3bb6 100644 --- a/cmd/opentelemetry/app/exporter/memoryexporter/factory.go +++ b/cmd/opentelemetry/app/exporter/memoryexporter/factory.go @@ -78,18 +78,18 @@ func (f Factory) CreateDefaultConfig() configmodels.Exporter { } } -// CreateTraceExporter creates Jaeger Kafka trace exporter. +// CreateTracesExporter creates Jaeger Kafka trace exporter. // This function implements OTEL component.ExporterFactory interface. -func (f Factory) CreateTraceExporter( +func (f Factory) CreateTracesExporter( _ context.Context, params component.ExporterCreateParams, cfg configmodels.Exporter, -) (component.TraceExporter, error) { +) (component.TracesExporter, error) { factory, err := f.createStorageFactory(params, cfg) if err != nil { return nil, err } - return exporter.NewSpanWriterExporter(cfg, factory) + return exporter.NewSpanWriterExporter(cfg, params, factory) } // CreateMetricsExporter is not implemented. diff --git a/cmd/opentelemetry/app/exporter/memoryexporter/factory_test.go b/cmd/opentelemetry/app/exporter/memoryexporter/factory_test.go index 32d8fa18ff4..2d4f28ee02e 100644 --- a/cmd/opentelemetry/app/exporter/memoryexporter/factory_test.go +++ b/cmd/opentelemetry/app/exporter/memoryexporter/factory_test.go @@ -39,7 +39,7 @@ func TestCreateTraceExporter(t *testing.T) { v, _ := jConfig.Viperize(AddFlags) factory := NewFactory(v) - exporter, err := factory.CreateTraceExporter(context.Background(), component.ExporterCreateParams{Logger: zap.NewNop()}, factory.CreateDefaultConfig()) + exporter, err := factory.CreateTracesExporter(context.Background(), component.ExporterCreateParams{Logger: zap.NewNop()}, factory.CreateDefaultConfig()) require.NoError(t, err) require.NotNil(t, exporter) } @@ -48,7 +48,7 @@ func TestCreateTraceExporter_nilConfig(t *testing.T) { defer cleanup() factory := &Factory{} - exporter, err := factory.CreateTraceExporter(context.Background(), component.ExporterCreateParams{}, nil) + exporter, err := factory.CreateTracesExporter(context.Background(), component.ExporterCreateParams{}, nil) require.Nil(t, exporter) assert.Contains(t, err.Error(), "could not cast configuration to jaeger_memory") } @@ -84,11 +84,11 @@ func TestSingleton(t *testing.T) { f := NewFactory(viper.New()) logger := zap.NewNop() assert.Nil(t, instance) - exp, err := f.CreateTraceExporter(context.Background(), component.ExporterCreateParams{Logger: logger}, &Config{}) + exp, err := f.CreateTracesExporter(context.Background(), component.ExporterCreateParams{Logger: logger}, &Config{}) require.NoError(t, err) require.NotNil(t, exp) previousInstance := instance - exp, err = f.CreateTraceExporter(context.Background(), component.ExporterCreateParams{Logger: logger}, &Config{}) + exp, err = f.CreateTracesExporter(context.Background(), component.ExporterCreateParams{Logger: logger}, &Config{}) require.NoError(t, err) require.NotNil(t, exp) assert.Equal(t, previousInstance, instance) diff --git a/cmd/opentelemetry/app/exporter/span_writer_exporter.go b/cmd/opentelemetry/app/exporter/span_writer_exporter.go index ab0c885d776..e5616b4a575 100644 --- a/cmd/opentelemetry/app/exporter/span_writer_exporter.go +++ b/cmd/opentelemetry/app/exporter/span_writer_exporter.go @@ -33,7 +33,7 @@ import ( ) // NewSpanWriterExporter returns component.TraceExporter -func NewSpanWriterExporter(config configmodels.Exporter, factory storage.Factory, opts ...exporterhelper.ExporterOption) (component.TraceExporter, error) { +func NewSpanWriterExporter(config configmodels.Exporter, params component.ExporterCreateParams, factory storage.Factory, opts ...exporterhelper.ExporterOption) (component.TracesExporter, error) { spanWriter, err := factory.CreateSpanWriter() if err != nil { return nil, err @@ -41,6 +41,7 @@ func NewSpanWriterExporter(config configmodels.Exporter, factory storage.Factory storage := store{Writer: spanWriter, storageNameTag: tag.Insert(storagemetrics.TagExporterName(), config.Name())} return exporterhelper.NewTraceExporter( config, + params.Logger, storage.traceDataPusher, opts...) } diff --git a/cmd/opentelemetry/app/exporter/span_writer_exporter_test.go b/cmd/opentelemetry/app/exporter/span_writer_exporter_test.go index f02e5226353..c863c1c2112 100644 --- a/cmd/opentelemetry/app/exporter/span_writer_exporter_test.go +++ b/cmd/opentelemetry/app/exporter/span_writer_exporter_test.go @@ -24,6 +24,7 @@ import ( "github.com/uber/jaeger-lib/metrics" "go.opencensus.io/stats/view" "go.opencensus.io/tag" + "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/config/configmodels" "go.opentelemetry.io/collector/consumer/pdata" "go.uber.org/zap" @@ -35,21 +36,21 @@ import ( ) func TestNew_closableWriter(t *testing.T) { - exporter, err := NewSpanWriterExporter(&configmodels.ExporterSettings{}, mockStorageFactory{spanWriter: spanWriter{}}) + exporter, err := NewSpanWriterExporter(&configmodels.ExporterSettings{}, component.ExporterCreateParams{Logger: zap.NewNop()}, mockStorageFactory{spanWriter: spanWriter{}}) require.NoError(t, err) assert.NotNil(t, exporter) assert.Nil(t, exporter.Shutdown(context.Background())) } func TestNew_noClosableWriter(t *testing.T) { - exporter, err := NewSpanWriterExporter(&configmodels.ExporterSettings{}, mockStorageFactory{spanWriter: noClosableWriter{}}) + exporter, err := NewSpanWriterExporter(&configmodels.ExporterSettings{}, component.ExporterCreateParams{Logger: zap.NewNop()}, mockStorageFactory{spanWriter: noClosableWriter{}}) require.NoError(t, err) assert.NotNil(t, exporter) assert.Nil(t, exporter.Shutdown(context.Background())) } func TestNew_failedToCreateWriter(t *testing.T) { - exporter, err := NewSpanWriterExporter(&configmodels.ExporterSettings{}, mockStorageFactory{err: errors.New("failed to create writer"), spanWriter: spanWriter{}}) + exporter, err := NewSpanWriterExporter(&configmodels.ExporterSettings{}, component.ExporterCreateParams{Logger: zap.NewNop()}, mockStorageFactory{err: errors.New("failed to create writer"), spanWriter: spanWriter{}}) require.Nil(t, exporter) assert.Error(t, err, "failed to create writer") } @@ -74,8 +75,9 @@ func AddSpan(traces pdata.Traces, name string, traceID pdata.TraceID, spanID pda } func TestStore(t *testing.T) { - traceID := pdata.NewTraceID([]byte("0123456789abcdef")) - spanID := pdata.NewSpanID([]byte("01234567")) + traceID := pdata.NewTraceID([16]byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}) + spanID := pdata.NewSpanID([8]byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}) tests := []struct { storage store data pdata.Traces @@ -94,8 +96,8 @@ func TestStore(t *testing.T) { { caption: "wrong data", storage: store{Writer: spanWriter{}, storageNameTag: tag.Insert(storagemetrics.TagExporterName(), "memory")}, - data: AddSpan(traces(), "", pdata.NewTraceID(nil), pdata.NewSpanID(nil)), - err: "TraceID is nil", + data: AddSpan(traces(), "", pdata.NewTraceID([16]byte{}), pdata.NewSpanID([8]byte{})), + err: "Permanent error: OC span has an all zeros trace ID", dropped: 1, }, { diff --git a/cmd/opentelemetry/app/internal/reader/es/esspanreader/query.go b/cmd/opentelemetry/app/internal/reader/es/esspanreader/query.go index f015320beb9..3793101c93e 100644 --- a/cmd/opentelemetry/app/internal/reader/es/esspanreader/query.go +++ b/cmd/opentelemetry/app/internal/reader/es/esspanreader/query.go @@ -97,7 +97,7 @@ func addOperationNameQuery(operationName string, query esclient.Query) { } func addTagQuery(converter dbmodel.ToDomain, tags map[string]string, query esclient.Query) { - if tags == nil || len(tags) == 0 { + if len(tags) == 0 { return } diff --git a/cmd/opentelemetry/app/processor/resourceprocessor/resource_processor.go b/cmd/opentelemetry/app/processor/resourceprocessor/resource_processor.go index 38995b39b37..b7630576c45 100644 --- a/cmd/opentelemetry/app/processor/resourceprocessor/resource_processor.go +++ b/cmd/opentelemetry/app/processor/resourceprocessor/resource_processor.go @@ -67,14 +67,14 @@ func (f Factory) GetTags() map[string]string { return tags } -// CreateTraceProcessor creates resource processor. +// CreateTracesProcessor creates resource processor. // This function implements OTEL component.ProcessorFactoryOld interface. -func (f Factory) CreateTraceProcessor( +func (f Factory) CreateTracesProcessor( ctx context.Context, params component.ProcessorCreateParams, cfg configmodels.Processor, - nextConsumer consumer.TraceConsumer, -) (component.TraceProcessor, error) { + nextConsumer consumer.TracesConsumer, +) (component.TracesProcessor, error) { c := cfg.(*resourceprocessor.Config) attributeKeys := map[string]bool{} for _, kv := range c.AttributesActions { @@ -91,7 +91,7 @@ func (f Factory) CreateTraceProcessor( }) } } - return f.Wrapped.CreateTraceProcessor(ctx, params, cfg, nextConsumer) + return f.Wrapped.CreateTracesProcessor(ctx, params, cfg, nextConsumer) } // CreateMetricsProcessor creates a resource processor. diff --git a/cmd/opentelemetry/app/processor/resourceprocessor/resource_processor_test.go b/cmd/opentelemetry/app/processor/resourceprocessor/resource_processor_test.go index 21eca222ae3..31496ac880b 100644 --- a/cmd/opentelemetry/app/processor/resourceprocessor/resource_processor_test.go +++ b/cmd/opentelemetry/app/processor/resourceprocessor/resource_processor_test.go @@ -56,7 +56,7 @@ func TestDefaultValueFromViper(t *testing.T) { } cfg := f.CreateDefaultConfig().(*resourceprocessor.Config) - p, err := f.CreateTraceProcessor(context.Background(), component.ProcessorCreateParams{Logger: zap.NewNop()}, cfg, &componenttest.ExampleExporterConsumer{}) + p, err := f.CreateTracesProcessor(context.Background(), component.ProcessorCreateParams{Logger: zap.NewNop()}, cfg, &componenttest.ExampleExporterConsumer{}) require.NoError(t, err) assert.NotNil(t, p) @@ -81,7 +81,7 @@ func TestLegacyJaegerTagsOnly(t *testing.T) { } cfg := f.CreateDefaultConfig().(*resourceprocessor.Config) - p, err := f.CreateTraceProcessor(context.Background(), component.ProcessorCreateParams{Logger: zap.NewNop()}, cfg, &componenttest.ExampleExporterConsumer{}) + p, err := f.CreateTracesProcessor(context.Background(), component.ProcessorCreateParams{Logger: zap.NewNop()}, cfg, &componenttest.ExampleExporterConsumer{}) require.NoError(t, err) assert.NotNil(t, p) @@ -116,7 +116,7 @@ func TestLoadConfigAndFlags(t *testing.T) { require.NotNil(t, colConfig) cfg := colConfig.Processors[string(f.Type())].(*resourceprocessor.Config) - p, err := f.CreateTraceProcessor(context.Background(), component.ProcessorCreateParams{Logger: zap.NewNop()}, cfg, &componenttest.ExampleExporterConsumer{}) + p, err := f.CreateTracesProcessor(context.Background(), component.ProcessorCreateParams{Logger: zap.NewNop()}, cfg, &componenttest.ExampleExporterConsumer{}) require.NoError(t, err) assert.NotNil(t, p) assert.Equal(t, []processorhelper.ActionKeyValue{ diff --git a/cmd/opentelemetry/app/receiver/jaegerreceiver/jaeger_receiver.go b/cmd/opentelemetry/app/receiver/jaegerreceiver/jaeger_receiver.go index ee3cbafe079..0f293dabeb9 100644 --- a/cmd/opentelemetry/app/receiver/jaegerreceiver/jaeger_receiver.go +++ b/cmd/opentelemetry/app/receiver/jaegerreceiver/jaeger_receiver.go @@ -147,15 +147,15 @@ func createDefaultSamplingConfig(v *viper.Viper) *jaegerreceiver.RemoteSamplingC return samplingConf } -// CreateTraceReceiver creates Jaeger receiver trace receiver. +// CreateTracesReceiver creates Jaeger receiver trace receiver. // This function implements OTEL component.ReceiverFactory interface. -func (f *Factory) CreateTraceReceiver( +func (f *Factory) CreateTracesReceiver( ctx context.Context, params component.ReceiverCreateParams, cfg configmodels.Receiver, - nextConsumer consumer.TraceConsumer, -) (component.TraceReceiver, error) { - return f.Wrapped.CreateTraceReceiver(ctx, params, cfg, nextConsumer) + nextConsumer consumer.TracesConsumer, +) (component.TracesReceiver, error) { + return f.Wrapped.CreateTracesReceiver(ctx, params, cfg, nextConsumer) } // CreateMetricsReceiver creates a metrics receiver based on provided config. diff --git a/cmd/opentelemetry/app/receiver/kafkareceiver/kafka_receiver.go b/cmd/opentelemetry/app/receiver/kafkareceiver/kafka_receiver.go index ad68851c6c1..912dc906de9 100644 --- a/cmd/opentelemetry/app/receiver/kafkareceiver/kafka_receiver.go +++ b/cmd/opentelemetry/app/receiver/kafkareceiver/kafka_receiver.go @@ -104,15 +104,15 @@ func (f *Factory) CreateDefaultConfig() configmodels.Receiver { return cfg } -// CreateTraceReceiver creates Jaeger receiver trace receiver. +// CreateTracesReceiver creates Jaeger receiver trace receiver. // This function implements OTEL component.ReceiverFactory interface. -func (f *Factory) CreateTraceReceiver( +func (f *Factory) CreateTracesReceiver( ctx context.Context, params component.ReceiverCreateParams, cfg configmodels.Receiver, - nextConsumer consumer.TraceConsumer, -) (component.TraceReceiver, error) { - return f.Wrapped.CreateTraceReceiver(ctx, params, cfg, nextConsumer) + nextConsumer consumer.TracesConsumer, +) (component.TracesReceiver, error) { + return f.Wrapped.CreateTracesReceiver(ctx, params, cfg, nextConsumer) } // CreateMetricsReceiver creates a metrics receiver based on provided config. diff --git a/cmd/opentelemetry/app/receiver/zipkinreceiver/zipkin_receiver.go b/cmd/opentelemetry/app/receiver/zipkinreceiver/zipkin_receiver.go index 2dc852f6fe2..8746b0cd195 100644 --- a/cmd/opentelemetry/app/receiver/zipkinreceiver/zipkin_receiver.go +++ b/cmd/opentelemetry/app/receiver/zipkinreceiver/zipkin_receiver.go @@ -55,15 +55,15 @@ func (f Factory) CreateDefaultConfig() configmodels.Receiver { return cfg } -// CreateTraceReceiver creates Zipkin receiver trace receiver. +// CreateTracesReceiver creates Zipkin receiver trace receiver. // This function implements OTEL component.ReceiverFactoryOld interface. -func (f Factory) CreateTraceReceiver( +func (f Factory) CreateTracesReceiver( ctx context.Context, params component.ReceiverCreateParams, cfg configmodels.Receiver, - nextConsumer consumer.TraceConsumer, -) (component.TraceReceiver, error) { - return f.Wrapped.CreateTraceReceiver(ctx, params, cfg, nextConsumer) + nextConsumer consumer.TracesConsumer, +) (component.TracesReceiver, error) { + return f.Wrapped.CreateTracesReceiver(ctx, params, cfg, nextConsumer) } // CreateMetricsReceiver creates a metrics receiver based on provided config. diff --git a/cmd/opentelemetry/go.mod b/cmd/opentelemetry/go.mod index 3fbf590c715..3208ecba1bc 100644 --- a/cmd/opentelemetry/go.mod +++ b/cmd/opentelemetry/go.mod @@ -17,6 +17,6 @@ require ( github.com/uber/jaeger-client-go v2.25.0+incompatible github.com/uber/jaeger-lib v2.4.0+incompatible go.opencensus.io v0.22.4 - go.opentelemetry.io/collector v0.12.0 + go.opentelemetry.io/collector v0.14.0 go.uber.org/zap v1.16.0 ) diff --git a/cmd/opentelemetry/go.sum b/cmd/opentelemetry/go.sum index a127a1d938e..5aa864706ab 100644 --- a/cmd/opentelemetry/go.sum +++ b/cmd/opentelemetry/go.sum @@ -122,6 +122,8 @@ github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/antonmedv/expr v1.8.9 h1:O9stiHmHHww9b4ozhPx7T6BK7fXfOCHJ8ybxf0833zw= +github.com/antonmedv/expr v1.8.9/go.mod h1:5qsM3oLGDND7sDmQGDXHkYfkjYMUX14qsgqmHhwGEk8= github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0 h1:5hryIiq9gtn+MiLVn0wP37kb/uTeRZgN08WoCsAhIhI= @@ -189,6 +191,7 @@ github.com/containerd/containerd v1.3.4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMX 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/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-oidc v2.2.1+incompatible h1:mh48q/BqXqgjVHpy2ZY7WnWAbenxRjsz9N1i1YxjHAk= github.com/coreos/go-oidc v2.2.1+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -206,6 +209,7 @@ github.com/crossdock/crossdock-go v0.0.0-20160816171116-049aabb0122b/go.mod h1:v github.com/daixiang0/gci v0.2.4 h1:BUCKk5nlK2m+kRIsoj+wb/5hazHvHeZieBKWd9Afa8Q= github.com/daixiang0/gci v0.2.4/go.mod h1:+AV8KmHTGxxwp/pY84TLQfFKp2vuKXXJVzF3kD/hfR4= github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= +github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/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= @@ -213,6 +217,8 @@ github.com/denis-tingajkin/go-header v0.3.1 h1:ymEpSiFjeItCy1FOP+x0M2KdCELdEAHUs github.com/denis-tingajkin/go-header v0.3.1/go.mod h1:sq/2IxMhaZX+RRcgHfCRx/m0M5na0fBt4/CRe7Lrji0= github.com/dgraph-io/badger v1.5.3 h1:5oWIuRvwn93cie+OSt1zSnkaIQ1JFQM8bGlIv6O6Sts= github.com/dgraph-io/badger v1.5.3/go.mod h1:VZxzAIRPHRVNRKRo6AXrX9BJegn6il06VMTZVJYCIjQ= +github.com/dgraph-io/badger v1.6.2 h1:mNw0qs90GVgGGWylh0umH5iag1j6n/PeJtNvL6KY/x8= +github.com/dgraph-io/badger v1.6.2/go.mod h1:JW2yswe3V058sS0kZ2h/AXeDSqFjxnZcRrVH//y2UQE= github.com/dgraph-io/ristretto v0.0.1/go.mod h1:T40EBc7CJke8TkpiYfGGKAeFjSaxuFXhuXRyumBd6RE= github.com/dgraph-io/ristretto v0.0.2 h1:a5WaUrDa0qm0YrAAS1tUykT5El3kt62KNZZeMxQn3po= github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= @@ -238,6 +244,8 @@ github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDD github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/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/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-resiliency v1.2.0 h1:v7g92e/KSN71Rq7vSThKaWIq68fL4YHvWyiUKorFR1Q= github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= @@ -276,6 +284,8 @@ github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= +github.com/gdamore/tcell v1.3.0/go.mod h1:Hjvr+Ofd+gLglo7RYKxxnzCBmev3BzsS67MebKS4zMM= 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= @@ -579,6 +589,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.14.5/go.mod h1:UJ0EZAp832vCd54Wev9N1BM github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw= github.com/grpc-ecosystem/grpc-gateway v1.15.0 h1:ntPNC9TD/6l2XDenJZe6T5lSMg95thpV9sGAqHX4WU8= github.com/grpc-ecosystem/grpc-gateway v1.15.0/go.mod h1:vO11I9oWA+KsxmfFQPhLnnIb1VDE24M+pdxZFiuZcA8= +github.com/grpc-ecosystem/grpc-gateway v1.15.2 h1:HC+hWRWf+v5zTMPyoaYTKIJih+4sd4XRWmj0qlG87Co= +github.com/grpc-ecosystem/grpc-gateway v1.15.2/go.mod h1:vO11I9oWA+KsxmfFQPhLnnIb1VDE24M+pdxZFiuZcA8= github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= 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= @@ -737,6 +749,8 @@ 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/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= +github.com/lucasb-eyer/go-colorful v1.0.2/go.mod h1:0MS4r+7BZKSJ5mw4/S5MPN+qHFF1fYclkSPilDOKW0s= +github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= 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= @@ -771,6 +785,8 @@ github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHX github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= @@ -924,6 +940,7 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= 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/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= @@ -990,6 +1007,8 @@ github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563/go.mod h1:bCqn github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 h1:MkV+77GLUNo5oJ0jf870itWm3D0Sjh7+Za9gazKc5LQ= github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= +github.com/rivo/tview v0.0.0-20200219210816-cd38d7432498/go.mod h1:6lkG1x+13OShEf0EaOCaTQYyB7d5nSbb181KtjlS+84= +github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -1010,6 +1029,7 @@ github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da h1:p3Vo3i64TCL github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/samuel/go-zookeeper v0.0.0-20200724154423-2164a8ac840e h1:CGjiMQ0wMH4wtNWrlj6kiTbkPt2F3rbYnhGX6TWLfco= github.com/samuel/go-zookeeper v0.0.0-20200724154423-2164a8ac840e/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sanity-io/litter v1.2.0/go.mod h1:JF6pZUFgu2Q0sBZ+HSV35P8TVPI1TTzEwyu9FXAw2W4= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= @@ -1063,6 +1083,7 @@ github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= @@ -1073,6 +1094,7 @@ github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn 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.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.6.2/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= @@ -1086,6 +1108,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ 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-20161117074351-18a02ba4a312/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.0/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= @@ -1127,6 +1150,7 @@ github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6 github.com/uber/jaeger-lib v2.4.0+incompatible h1:fY7QsGQWiCt8pajv4r7JEvmATdCVaWxXbjwyYwsNaLQ= github.com/uber/jaeger-lib v2.4.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= 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.3 h1:5ylVWm8wsNwH5aWo9438pwvsK0QiqVuUrt9bn7S/iLA= github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= github.com/ultraware/whitespace v0.0.4 h1:If7Va4cM03mpgrNH9k49/VOicWpGoG70XPBFFODYDsg= @@ -1172,6 +1196,8 @@ go.opencensus.io v0.22.4 h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opentelemetry.io/collector v0.12.0 h1:SQFxSQBqD8P0ki29xrH+LaB1gBpLxAWcnmUL9/yaDKE= go.opentelemetry.io/collector v0.12.0/go.mod h1:mKQha2MeRhJi0rHS8yvZlzFk28ZVBCf6qMTsjGX0n1Y= +go.opentelemetry.io/collector v0.14.0 h1:ZAMJPY89SizyvRGBnKLKOIOMm26eKhJtmfnc+GthryU= +go.opentelemetry.io/collector v0.14.0/go.mod h1:itblxiZ5r454TNNQVvcAp7vj7LbwCdeNRtodo2t+lGM= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= 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= @@ -1195,6 +1221,7 @@ go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM= go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/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= @@ -1318,6 +1345,7 @@ golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5h 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-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= @@ -1335,6 +1363,8 @@ golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7w 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-20190626150813-e07cf5db2756/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= From 4d5a9345a1644c26ff942f4e785a18c96fa5339c Mon Sep 17 00:00:00 2001 From: Justin Hutchings Date: Tue, 10 Nov 2020 12:35:23 -0800 Subject: [PATCH 02/12] Update CodeQL to latest best practices (#2615) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This will parallelize your analysis and speed things up a bunch. Signed-off-by: jhutchings1 Co-authored-by: Juraci Paixão Kröhling --- .github/workflows/codeql.yml | 51 ++++++++++++++---------------------- 1 file changed, 19 insertions(+), 32 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 7f0f6e77a0f..04f02cce35e 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -1,26 +1,23 @@ name: "Code Scanning - Action" on: - # Trigger the workflow on push or pull request, - # but only for the master branch push: - branches: - - master + branches: [ master ] pull_request: - branches: - - master + branches: [ master ] schedule: - - cron: '0 0 * * 0' + - cron: '31 6 * * 1' jobs: - CodeQL-Build: + analyze: + name: Analyze + runs-on: ubuntu-latest strategy: - fail-fast: true - - - # CodeQL runs on ubuntu-latest, windows-latest, and macos-latest - runs-on: ubuntu-latest + fail-fast: false + matrix: + language: [ 'go', 'python' ] + # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection steps: - name: Checkout repository @@ -29,25 +26,15 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v1 - # Override language selection by uncommenting this and choosing your languages - # with: - # languages: go, javascript, csharp, python, cpp, java - - # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). - # If this step fails, then you should remove it and run the build manually (see below). - #- name: Autobuild - # uses: github/codeql-action/autobuild@v1 - - # ℹ️ Command-line programs to run using the OS shell. - # 📚 https://git.io/JvXDl - - # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines - # and modify them (or add more) to build your code if your project - # uses a compiled language - - #- run: | - # make bootstrap - # make release + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # queries: ./path/to/local/query, your-org/your-repo/queries@main + + - name: Autobuild + uses: github/codeql-action/autobuild@v1 - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v1 From 839f42e537646a68684e0f5f8faac904a3295a50 Mon Sep 17 00:00:00 2001 From: Albert <26584478+albertteoh@users.noreply.github.com> Date: Wed, 11 Nov 2020 07:38:02 +1100 Subject: [PATCH 03/12] Fix flaky TestReload (#2624) Signed-off-by: albertteoh --- pkg/config/tlscfg/cert_watcher.go | 7 ++++++- pkg/config/tlscfg/cert_watcher_test.go | 20 ++++++++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/pkg/config/tlscfg/cert_watcher.go b/pkg/config/tlscfg/cert_watcher.go index 50b7107f394..7368d6d425f 100644 --- a/pkg/config/tlscfg/cert_watcher.go +++ b/pkg/config/tlscfg/cert_watcher.go @@ -112,7 +112,12 @@ func (w *certWatcher) watchChangesLoop(rootCAs, clientCAs *x509.CertPool) { w.mu.Unlock() err = e } - if err != nil { + if err == nil { + w.logger.Info("Loaded modified certificate", + zap.String("certificate", event.Name), + zap.String("event", event.Op.String())) + + } else { w.logger.Error("Failed to load certificate", zap.String("certificate", event.Name), zap.String("event", event.Op.String()), diff --git a/pkg/config/tlscfg/cert_watcher_test.go b/pkg/config/tlscfg/cert_watcher_test.go index f8b484294f8..a0e9c0394b0 100644 --- a/pkg/config/tlscfg/cert_watcher_test.go +++ b/pkg/config/tlscfg/cert_watcher_test.go @@ -17,6 +17,7 @@ package tlscfg import ( "crypto/tls" "crypto/x509" + "fmt" "io/ioutil" "os" "path/filepath" @@ -92,9 +93,24 @@ func TestReload(t *testing.T) { require.NoError(t, err) waitUntil(func() bool { - return logObserver.FilterField(zap.String("certificate", certFile.Name())).Len() > 0 + // Logged when both matching public and private keys are modified in the cert. + // If mismatched keys are present in the cert, the "Failed to load certificate" error will be logged instead. + return logObserver.FilterMessage("Loaded modified certificate").Len() > 0 }, 100, time.Millisecond*200) - assert.True(t, logObserver.FilterField(zap.String("certificate", certFile.Name())).Len() > 0) + + // Logged when the cert is modified with the client's public key due to + // a mismatch with the existing server private key. + assert.True(t, logObserver. + FilterMessage("Failed to load certificate"). + FilterField(zap.String("certificate", certFile.Name())).Len() > 0, + "Failed to find wanted logs. All logs: "+fmt.Sprint(logObserver.All())) + + // Logged when the cert is modified with the client's private key, + // resulting in both public and private keys matching (from the client). + assert.True(t, logObserver. + FilterMessage("Loaded modified certificate"). + FilterField(zap.String("certificate", keyFile.Name())).Len() > 0, + "Failed to find wanted logs. All logs: "+fmt.Sprint(logObserver.All())) cert, err = tls.LoadX509KeyPair(filepath.Clean(clientCert), clientKey) require.NoError(t, err) From 4e7935ba4745d6e4a923bf22b86db79c8ad06b02 Mon Sep 17 00:00:00 2001 From: Gary Brown Date: Wed, 11 Nov 2020 15:55:35 +0000 Subject: [PATCH 04/12] Update x/text to v0.3.4 (#2625) Signed-off-by: Gary Brown --- cmd/opentelemetry/go.sum | 2 ++ go.mod | 1 + go.sum | 4 ++++ 3 files changed, 7 insertions(+) diff --git a/cmd/opentelemetry/go.sum b/cmd/opentelemetry/go.sum index 5aa864706ab..bbf6439db0a 100644 --- a/cmd/opentelemetry/go.sum +++ b/cmd/opentelemetry/go.sum @@ -1408,6 +1408,8 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 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/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= diff --git a/go.mod b/go.mod index d98bd3ac171..70f515f2b96 100644 --- a/go.mod +++ b/go.mod @@ -76,6 +76,7 @@ require ( golang.org/x/lint v0.0.0-20200302205851-738671d3881b golang.org/x/net v0.0.0-20200625001655-4c5254603344 golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae + golang.org/x/text v0.3.4 // indirect golang.org/x/tools v0.0.0-20200603131246-cc40288be839 // indirect google.golang.org/grpc v1.29.1 gopkg.in/ini.v1 v1.52.0 // indirect diff --git a/go.sum b/go.sum index eb3e29a56fc..5b2b81dff11 100644 --- a/go.sum +++ b/go.sum @@ -10,6 +10,7 @@ github.com/DataDog/zstd v1.4.4/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t github.com/HdrHistogram/hdrhistogram-go v0.9.0 h1:dpujRju0R4M/QZzcnR1LH1qm+TVG3UzkWdp5tH1WMcg= github.com/HdrHistogram/hdrhistogram-go v0.9.0/go.mod h1:nxrse8/Tzg2tg3DZcZjm6qEclQKK70g0KxO61gFFZD4= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= @@ -533,6 +534,7 @@ 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/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= 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= @@ -722,6 +724,8 @@ golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fq golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 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/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= From dcf56e8e45535ec99cbb675ac9ddd7f3018b4753 Mon Sep 17 00:00:00 2001 From: Yuri Shkuro Date: Thu, 12 Nov 2020 11:25:41 -0500 Subject: [PATCH 05/12] Bump to latest UI for snapshot builds (#2626) Signed-off-by: Yuri Shkuro --- jaeger-ui | 2 +- scripts/travis/build-all-in-one-image.sh | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/jaeger-ui b/jaeger-ui index fd216065375..df17e8d80e6 160000 --- a/jaeger-ui +++ b/jaeger-ui @@ -1 +1 @@ -Subproject commit fd2160653755f2d2ffa3466df53b080eda22badf +Subproject commit df17e8d80e6f630ed3ed744a80dbf27c0418718c diff --git a/scripts/travis/build-all-in-one-image.sh b/scripts/travis/build-all-in-one-image.sh index 8b390da13e7..46492a387d8 100755 --- a/scripts/travis/build-all-in-one-image.sh +++ b/scripts/travis/build-all-in-one-image.sh @@ -29,13 +29,12 @@ run_integration_test() { upload_to_docker() { # Only push the docker container to Docker Hub for master branch if [[ ("$BRANCH" == "master" || $BRANCH =~ ^v[0-9]+\.[0-9]+\.[0-9]+$) && "$TRAVIS_SECURE_ENV_VARS" == "true" ]]; then - echo 'upload to Docker Hub' + echo "upload $1 to Docker Hub" + export REPO=$1 + bash ./scripts/travis/upload-to-docker.sh else echo 'skip docker upload for PR' - exit 0 fi - export REPO=$1 - bash ./scripts/travis/upload-to-docker.sh } make build-all-in-one GOOS=linux GOARCH=$GOARCH From 1d22aaf59e53c37b4af7367117b99f5212255173 Mon Sep 17 00:00:00 2001 From: Ashmita Date: Fri, 13 Nov 2020 07:18:53 +0800 Subject: [PATCH 06/12] Implement anonymizer's main program (#2621) --- .gitignore | 2 + Makefile | 4 + cmd/anonymizer/app/anonymizer/anonymizer.go | 32 ++++--- .../app/anonymizer/anonymizer_test.go | 20 +++-- cmd/anonymizer/app/flags.go | 89 +++++++++++++++++++ cmd/anonymizer/app/flags_test.go | 62 +++++++++++++ cmd/anonymizer/app/query/.nocover | 1 + cmd/anonymizer/app/query/query.go | 88 ++++++++++++++++++ cmd/anonymizer/app/writer/writer.go | 34 ++++--- cmd/anonymizer/main.go | 66 +++++++++++++- 10 files changed, 363 insertions(+), 35 deletions(-) create mode 100644 cmd/anonymizer/app/flags.go create mode 100644 cmd/anonymizer/app/flags_test.go create mode 100644 cmd/anonymizer/app/query/.nocover create mode 100644 cmd/anonymizer/app/query/query.go diff --git a/.gitignore b/.gitignore index 3ab8672ab4b..471f3c91849 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,8 @@ examples/memstore-plugin/memstore-plugin cmd/all-in-one/all-in-one-* cmd/agent/agent cmd/agent/agent-* +cmd/anonymizer/anonymizer +cmd/anonymizer/anonymizer-* cmd/collector/collector cmd/collector/collector-* cmd/ingester/ingester diff --git a/Makefile b/Makefile index 61bc175cd59..469697ead79 100644 --- a/Makefile +++ b/Makefile @@ -250,6 +250,10 @@ build-all-in-one build-all-in-one-debug: build-ui elasticsearch-mappings build-agent build-agent-debug: $(GOBUILD) $(DISABLE_OPTIMIZATIONS) -o ./cmd/agent/agent$(SUFFIX)-$(GOOS)-$(GOARCH) $(BUILD_INFO) ./cmd/agent/main.go +.PHONY: build-anonymizer +build-anonymizer: + $(GOBUILD) $(DISABLE_OPTIMIZATIONS) -o ./cmd/anonymizer/anonymizer$(SUFFIX)-$(GOOS)-$(GOARCH) $(BUILD_INFO) ./cmd/anonymizer/main.go + .PHONY: build-query build-query-debug build-query build-query-debug: build-ui $(GOBUILD) $(DISABLE_OPTIMIZATIONS) -tags ui -o ./cmd/query/query$(SUFFIX)-$(GOOS)-$(GOARCH) $(BUILD_INFO) ./cmd/query/main.go diff --git a/cmd/anonymizer/app/anonymizer/anonymizer.go b/cmd/anonymizer/app/anonymizer/anonymizer.go index 9996900b518..13d8dd17737 100644 --- a/cmd/anonymizer/app/anonymizer/anonymizer.go +++ b/cmd/anonymizer/app/anonymizer/anonymizer.go @@ -53,19 +53,24 @@ type mapping struct { // // The mapping from original to obfuscated strings is stored in a file and can be reused between runs. type Anonymizer struct { - mappingFile string - logger *zap.Logger - lock sync.Mutex - mapping mapping - hashStandardTags bool - hashCustomTags bool - hashLogs bool - hashProcess bool + mappingFile string + logger *zap.Logger + lock sync.Mutex + mapping mapping + options Options +} + +// Options represents the various options with which the anonymizer can be configured. +type Options struct { + HashStandardTags bool `yaml:"hash_standard_tags" name:"hash_standard_tags"` + HashCustomTags bool `yaml:"hash_custom_tags" name:"hash_custom_tags"` + HashLogs bool `yaml:"hash_logs" name:"hash_logs"` + HashProcess bool `yaml:"hash_process" name:"hash_process"` } // New creates new Anonymizer. The mappingFile stores the mapping from original to // obfuscated strings, in case later investigations require looking at the original traces. -func New(mappingFile string, logger *zap.Logger) *Anonymizer { +func New(mappingFile string, options Options, logger *zap.Logger) *Anonymizer { a := &Anonymizer{ mappingFile: mappingFile, logger: logger, @@ -73,6 +78,7 @@ func New(mappingFile string, logger *zap.Logger) *Anonymizer { Services: make(map[string]string), Operations: make(map[string]string), }, + options: options, } if _, err := os.Stat(filepath.Clean(mappingFile)); err == nil { dat, err := ioutil.ReadFile(filepath.Clean(mappingFile)) @@ -142,18 +148,18 @@ func (a *Anonymizer) AnonymizeSpan(span *model.Span) *uimodel.Span { outputTags := filterStandardTags(span.Tags) // when true, the allowedTags are hashed and when false they are preserved as it is - if a.hashStandardTags { + if a.options.HashStandardTags { outputTags = hashTags(outputTags) } // when true, all tags other than allowedTags are hashed, when false they are dropped - if a.hashCustomTags { + if a.options.HashCustomTags { customTags := hashTags(filterCustomTags(span.Tags)) outputTags = append(outputTags, customTags...) } span.Tags = outputTags // when true, logs are hashed, when false, they are dropped - if a.hashLogs { + if a.options.HashLogs { for _, log := range span.Logs { log.Fields = hashTags(log.Fields) } @@ -164,7 +170,7 @@ func (a *Anonymizer) AnonymizeSpan(span *model.Span) *uimodel.Span { span.Process.ServiceName = a.mapServiceName(service) // when true, process tags are hashed, when false they are dropped - if a.hashProcess { + if a.options.HashProcess { span.Process.Tags = hashTags(span.Process.Tags) } else { span.Process.Tags = nil diff --git a/cmd/anonymizer/app/anonymizer/anonymizer_test.go b/cmd/anonymizer/app/anonymizer/anonymizer_test.go index d89279b37fb..94e35f7903f 100644 --- a/cmd/anonymizer/app/anonymizer/anonymizer_test.go +++ b/cmd/anonymizer/app/anonymizer/anonymizer_test.go @@ -103,10 +103,12 @@ func TestAnonymizer_AnonymizeSpan_AllTrue(t *testing.T) { Services: make(map[string]string), Operations: make(map[string]string), }, - hashStandardTags: true, - hashCustomTags: true, - hashProcess: true, - hashLogs: true, + options: Options{ + HashStandardTags: true, + HashCustomTags: true, + HashProcess: true, + HashLogs: true, + }, } _ = anonymizer.AnonymizeSpan(span1) assert.Equal(t, 3, len(span1.Tags)) @@ -120,10 +122,12 @@ func TestAnonymizer_AnonymizeSpan_AllFalse(t *testing.T) { Services: make(map[string]string), Operations: make(map[string]string), }, - hashStandardTags: false, - hashCustomTags: false, - hashProcess: false, - hashLogs: false, + options: Options{ + HashStandardTags: false, + HashCustomTags: false, + HashProcess: false, + HashLogs: false, + }, } _ = anonymizer.AnonymizeSpan(span2) assert.Equal(t, 2, len(span2.Tags)) diff --git a/cmd/anonymizer/app/flags.go b/cmd/anonymizer/app/flags.go new file mode 100644 index 00000000000..91382c15a47 --- /dev/null +++ b/cmd/anonymizer/app/flags.go @@ -0,0 +1,89 @@ +// Copyright (c) 2020 The Jaeger 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 app + +import ( + "github.com/spf13/cobra" +) + +// Options represent configurable parameters for jaeger-anonymizer +type Options struct { + QueryGRPCHostPort string + MaxSpansCount int + TraceID string + OutputDir string + HashStandardTags bool + HashCustomTags bool + HashLogs bool + HashProcess bool +} + +const ( + queryGRPCHostPortFlag = "query-host-port" + outputDirFlag = "output-dir" + traceIDFlag = "trace-id" + hashStandardTagsFlag = "hash-standard-tags" + hashCustomTagsFlag = "hash-custom-tags" + hashLogsFlag = "hash-logs" + hashProcessFlag = "hash-process" + maxSpansCount = "max-spans-count" +) + +// AddFlags adds flags for anonymizer main program +func (o *Options) AddFlags(command *cobra.Command) { + command.Flags().StringVar( + &o.QueryGRPCHostPort, + queryGRPCHostPortFlag, + "localhost:16686", + "The host:port of the jaeger-query endpoint") + command.Flags().StringVar( + &o.OutputDir, + outputDirFlag, + "/tmp", + "The directory to store the anonymized trace") + command.Flags().StringVar( + &o.TraceID, + traceIDFlag, + "", + "The trace-id of trace to anonymize") + command.Flags().BoolVar( + &o.HashStandardTags, + hashStandardTagsFlag, + false, + "Whether to hash standard tags") + command.Flags().BoolVar( + &o.HashCustomTags, + hashCustomTagsFlag, + false, + "Whether to hash custom tags") + command.Flags().BoolVar( + &o.HashLogs, + hashLogsFlag, + false, + "Whether to hash logs") + command.Flags().BoolVar( + &o.HashProcess, + hashProcessFlag, + false, + "Whether to hash process") + command.Flags().IntVar( + &o.MaxSpansCount, + maxSpansCount, + -1, + "The maximum number of spans to anonymize") + + // mark traceid flag as mandatory + command.MarkFlagRequired(traceIDFlag) +} diff --git a/cmd/anonymizer/app/flags_test.go b/cmd/anonymizer/app/flags_test.go new file mode 100644 index 00000000000..80790f15c15 --- /dev/null +++ b/cmd/anonymizer/app/flags_test.go @@ -0,0 +1,62 @@ +// Copyright (c) 2020 The Jaeger 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 app + +import ( + "testing" + + "github.com/spf13/cobra" + "github.com/stretchr/testify/assert" +) + +func TestOptionsWithDefaultFlags(t *testing.T) { + o := Options{} + c := cobra.Command{} + o.AddFlags(&c) + + assert.Equal(t, "localhost:16686", o.QueryGRPCHostPort) + assert.Equal(t, "/tmp", o.OutputDir) + assert.Equal(t, false, o.HashStandardTags) + assert.Equal(t, false, o.HashCustomTags) + assert.Equal(t, false, o.HashLogs) + assert.Equal(t, false, o.HashProcess) + assert.Equal(t, -1, o.MaxSpansCount) +} + +func TestOptionsWithFlags(t *testing.T) { + o := Options{} + c := cobra.Command{} + + o.AddFlags(&c) + c.ParseFlags([]string{ + "--query-host-port=192.168.1.10:16686", + "--output-dir=/data", + "--trace-id=6ef2debb698f2f7c", + "--hash-standard-tags", + "--hash-custom-tags", + "--hash-logs", + "--hash-process", + "--max-spans-count=100", + }) + + assert.Equal(t, "192.168.1.10:16686", o.QueryGRPCHostPort) + assert.Equal(t, "/data", o.OutputDir) + assert.Equal(t, "6ef2debb698f2f7c", o.TraceID) + assert.Equal(t, true, o.HashStandardTags) + assert.Equal(t, true, o.HashCustomTags) + assert.Equal(t, true, o.HashLogs) + assert.Equal(t, true, o.HashProcess) + assert.Equal(t, 100, o.MaxSpansCount) +} diff --git a/cmd/anonymizer/app/query/.nocover b/cmd/anonymizer/app/query/.nocover new file mode 100644 index 00000000000..5b583b79e93 --- /dev/null +++ b/cmd/anonymizer/app/query/.nocover @@ -0,0 +1 @@ +non-critical test utility diff --git a/cmd/anonymizer/app/query/query.go b/cmd/anonymizer/app/query/query.go new file mode 100644 index 00000000000..ffbf2126d9e --- /dev/null +++ b/cmd/anonymizer/app/query/query.go @@ -0,0 +1,88 @@ +// Copyright (c) 2020 The Jaeger 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 query + +import ( + "context" + "fmt" + "io" + "time" + + "google.golang.org/grpc" + "google.golang.org/grpc/status" + + "github.com/jaegertracing/jaeger/model" + "github.com/jaegertracing/jaeger/proto-gen/api_v2" + "github.com/jaegertracing/jaeger/storage/spanstore" +) + +// Query represents a jaeger-query's query for trace-id +type Query struct { + client api_v2.QueryServiceClient + conn *grpc.ClientConn +} + +// New creates a Query object +func New(addr string) (*Query, error) { + ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) + defer cancel() + + conn, err := grpc.DialContext(ctx, addr, grpc.WithInsecure()) + if err != nil { + return nil, fmt.Errorf("failed to connect with the jaeger-query service: %w", err) + } + + return &Query{ + client: api_v2.NewQueryServiceClient(conn), + conn: conn, + }, nil +} + +// unwrapNotFoundErr is a conversion function +func unwrapNotFoundErr(err error) error { + if s, _ := status.FromError(err); s != nil { + if s.Message() == spanstore.ErrTraceNotFound.Error() { + return spanstore.ErrTraceNotFound + } + } + return err +} + +// QueryTrace queries for a trace and returns all spans inside it +func (q *Query) QueryTrace(traceID string) ([]model.Span, error) { + mTraceID, err := model.TraceIDFromString(traceID) + if err != nil { + return nil, fmt.Errorf("failed to convert the provided trace id: %w", err) + } + + stream, err := q.client.GetTrace(context.Background(), &api_v2.GetTraceRequest{ + TraceID: mTraceID, + }) + if err != nil { + return nil, unwrapNotFoundErr(err) + } + + var spans []model.Span + for received, err := stream.Recv(); err != io.EOF; received, err = stream.Recv() { + if err != nil { + return nil, unwrapNotFoundErr(err) + } + for i := range received.Spans { + spans = append(spans, received.Spans[i]) + } + } + + return spans, nil +} diff --git a/cmd/anonymizer/app/writer/writer.go b/cmd/anonymizer/app/writer/writer.go index 5e36f8a4db2..5d04e61df53 100644 --- a/cmd/anonymizer/app/writer/writer.go +++ b/cmd/anonymizer/app/writer/writer.go @@ -30,10 +30,11 @@ import ( // Config contains parameters to NewWriter. type Config struct { - MaxSpansCount int `yaml:"max_spans_count" name:"max_spans_count"` - CapturedFile string `yaml:"captured_file" name:"captured_file"` - AnonymizedFile string `yaml:"anonymized_file" name:"anonymized_file"` - MappingFile string `yaml:"mapping_file" name:"mapping_file"` + MaxSpansCount int `yaml:"max_spans_count" name:"max_spans_count"` + CapturedFile string `yaml:"captured_file" name:"captured_file"` + AnonymizedFile string `yaml:"anonymized_file" name:"anonymized_file"` + MappingFile string `yaml:"mapping_file" name:"mapping_file"` + AnonymizerOpts anonymizer.Options `yaml:"anonymizer" name:"anonymizer"` } // Writer is a span Writer that obfuscates the span and writes it to a JSON file. @@ -75,12 +76,20 @@ func New(config Config, logger *zap.Logger) (*Writer, error) { if err != nil { return nil, fmt.Errorf("cannot write tp output file: %w", err) } + + options := anonymizer.Options{ + HashStandardTags: config.AnonymizerOpts.HashStandardTags, + HashCustomTags: config.AnonymizerOpts.HashCustomTags, + HashLogs: config.AnonymizerOpts.HashLogs, + HashProcess: config.AnonymizerOpts.HashProcess, + } + return &Writer{ config: config, logger: logger, capturedFile: cf, anonymizedFile: af, - anonymizer: anonymizer.New(config.MappingFile, logger), + anonymizer: anonymizer.New(config.MappingFile, options, logger), }, nil } @@ -120,13 +129,18 @@ func (w *Writer) WriteSpan(msg *model.Span) error { if w.spanCount >= w.config.MaxSpansCount { w.logger.Info("Saved enough spans, exiting...") - w.capturedFile.WriteString("\n]\n") - w.capturedFile.Close() - w.anonymizedFile.WriteString("\n]\n") - w.anonymizedFile.Close() - w.anonymizer.SaveMapping() + w.Close() os.Exit(0) } return nil } + +// Close closes the captured and anonymized files. +func (w *Writer) Close() { + w.capturedFile.WriteString("\n]\n") + w.capturedFile.Close() + w.anonymizedFile.WriteString("\n]\n") + w.anonymizedFile.Close() + w.anonymizer.SaveMapping() +} diff --git a/cmd/anonymizer/main.go b/cmd/anonymizer/main.go index 221bdc04eb8..a4dd00e4a9f 100644 --- a/cmd/anonymizer/main.go +++ b/cmd/anonymizer/main.go @@ -15,13 +15,71 @@ package main import ( + "fmt" + "os" + + "github.com/spf13/cobra" "go.uber.org/zap" - "github.com/jaegertracing/jaeger/cmd/anonymizer/app/writer" + app "github.com/jaegertracing/jaeger/cmd/anonymizer/app" + "github.com/jaegertracing/jaeger/cmd/anonymizer/app/anonymizer" + query "github.com/jaegertracing/jaeger/cmd/anonymizer/app/query" + writer "github.com/jaegertracing/jaeger/cmd/anonymizer/app/writer" + "github.com/jaegertracing/jaeger/pkg/version" ) +var logger, _ = zap.NewDevelopment() + func main() { - // TODO - _, _ = writer.New(writer.Config{}, zap.NewNop()) - println("not implemented") + var options = app.Options{} + + var command = &cobra.Command{ + Use: "jaeger-anonymizer", + Short: "Jaeger anonymizer hashes fields of a trace for easy sharing", + Long: `Jaeger anonymizer queries Jaeger query for a trace, anonymizes fields, and store in file`, + Run: func(cmd *cobra.Command, args []string) { + prefix := options.OutputDir + "/" + options.TraceID + conf := writer.Config{ + MaxSpansCount: options.MaxSpansCount, + CapturedFile: prefix + ".original", + AnonymizedFile: prefix + ".anonymized", + MappingFile: prefix + ".mapping", + AnonymizerOpts: anonymizer.Options{ + HashStandardTags: options.HashStandardTags, + HashCustomTags: options.HashCustomTags, + HashLogs: options.HashLogs, + HashProcess: options.HashProcess, + }, + } + + writer, err := writer.New(conf, logger) + if err != nil { + logger.Fatal("error while creating writer object", zap.Error(err)) + } + + query, err := query.New(options.QueryGRPCHostPort) + if err != nil { + logger.Fatal("error while creating query object", zap.Error(err)) + } + + spans, err := query.QueryTrace(options.TraceID) + if err != nil { + logger.Fatal("error while querying for trace", zap.Error(err)) + } + + for _, span := range spans { + writer.WriteSpan(&span) + } + writer.Close() + }, + } + + options.AddFlags(command) + + command.AddCommand(version.Command()) + + if error := command.Execute(); error != nil { + fmt.Println(error.Error()) + os.Exit(1) + } } From 72b9a062e57afa466f30ebe0f547d34a9b57ea26 Mon Sep 17 00:00:00 2001 From: Joe Elliott Date: Mon, 16 Nov 2020 09:47:57 -0500 Subject: [PATCH 07/12] Preparing release 1.21.0 (#2630) * updated changelog Signed-off-by: Joe Elliott * Added ui changelog Signed-off-by: Joe Elliott * Fixed UI changelog to point to 1.12.0 Signed-off-by: Joe Elliott * Updated jaeger-ui to v1.12.0 Signed-off-by: Joe Elliott * Resolving concerns Signed-off-by: Joe Elliott --- CHANGELOG.md | 43 ++++++++++++++++++++++++++++++++++++++++++- jaeger-ui | 2 +- 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1462f67289f..10fcf16bd2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,50 @@ Changes by Version ================== -1.21.0 (unreleased) +1.22.0 (unreleased) ------------------- +1.21.0 (2020-11-13) +------------------- + +### Backend Changes + +#### New Features + +* Add trace anonymizer utility ([#2621](https://github.com/jaegertracing/jaeger/pull/2621), [#2585](https://github.com/jaegertracing/jaeger/pull/2585), [@Ashmita152](https://github.com/Ashmita152)) +* Add URL option for sampling strategies file ([#2519](https://github.com/jaegertracing/jaeger/pull/2519), [@goku321](https://github.com/goku321)) +* Expose tunning options via expvar ([#2496](https://github.com/jaegertracing/jaeger/pull/2496), [@dstdfx](https://github.com/dstdfx)) +* Support more encodings for Kafka in OTel Ingester ([#2580](https://github.com/jaegertracing/jaeger/pull/2580), [@XSAM](https://github.com/XSAM)) +* Create debug docker images for jaeger backends ([#2545](https://github.com/jaegertracing/jaeger/pull/2545), [@Ashmita152](https://github.com/Ashmita152)) +* Display backend & UI versions in Jaeger UI + * Inject version info into index.html ([#2547](https://github.com/jaegertracing/jaeger/pull/2547), [@yurishkuro](https://github.com/yurishkuro)) + * Added jaeger ui version to about menu ([#606](https://github.com/jaegertracing/jaeger-ui/pull/606), [@alanisaac](https://github.com/alanisaac)) + +#### Bug fixes, Minor Improvements + +* Update x/text to v0.3.4 ([#2625](https://github.com/jaegertracing/jaeger/pull/2625), [@objectiser](https://github.com/objectiser)) +* Update CodeQL to latest best practices ([#2615](https://github.com/jaegertracing/jaeger/pull/2615), [@jhutchings1](https://github.com/jhutchings1)) +* Bump opentelemetry-collector to v0.14.0 ([#2617](https://github.com/jaegertracing/jaeger/pull/2617), [@Vemmy124](https://github.com/Vemmy124)) +* Bump Badger to v1.6.2 ([#2613](https://github.com/jaegertracing/jaeger/pull/2613), [@Ackar](https://github.com/Ackar)) +* Fix sarama consumer deadlock ([#2587](https://github.com/jaegertracing/jaeger/pull/2587), [@albertteoh](https://github.com/albertteoh)) +* Avoid deadlock if Stop is called before Serve ([#2608](https://github.com/jaegertracing/jaeger/pull/2608), [@chlunde](https://github.com/chlunde)) +* Return buffers to pool on network errors or queue overflow ([#2609](https://github.com/jaegertracing/jaeger/pull/2609), [@chlunde](https://github.com/chlunde)) +* Clarify deadlock panic message ([#2605](https://github.com/jaegertracing/jaeger/pull/2605), [@yurishkuro](https://github.com/yurishkuro)) +* fix: don't create tags w/ empty name for internal zipkin spans ([#2596](https://github.com/jaegertracing/jaeger/pull/2596), [@mzahor](https://github.com/mzahor)) +* TBufferedServer: Avoid channel close/send race on Stop ([#2583](https://github.com/jaegertracing/jaeger/pull/2583), [@chlunde](https://github.com/chlunde)) +* Bumped OpenTelemetry Collector to v0.12.0 ([#2562](https://github.com/jaegertracing/jaeger/pull/2562), [@jpkrohling](https://github.com/jpkrohling)) +* Disable Zipkin server if port/address is not configured ([#2554](https://github.com/jaegertracing/jaeger/pull/2554), [@yurishkuro](https://github.com/yurishkuro)) +* [hotrod] Add links to traces ([#2536](https://github.com/jaegertracing/jaeger/pull/2536), [@yurishkuro](https://github.com/yurishkuro)) +* OTel Cassandra/Elasticsearch Exporter queue defaults ([#2533](https://github.com/jaegertracing/jaeger/pull/2533), [@joe-elliott](https://github.com/joe-elliott)) +* [otel] Update jaeger-lib to v2.4.0 ([#2538](https://github.com/jaegertracing/jaeger/pull/2538), [@dstdfx](https://github.com/dstdfx)) +* Remove unnecessary ServiceName index seek if tags query is available ([#2535](https://github.com/jaegertracing/jaeger/pull/2535), [@burmanm](https://github.com/burmanm)) +* Update static UI assets path in contrib doc ([#2548](https://github.com/jaegertracing/jaeger/pull/2548), [@albertteoh](https://github.com/albertteoh)) + +### UI Changes + +* UI pinned to version 1.12.0. The changelog is available here [v1.12.0](https://github.com/jaegertracing/jaeger-ui/blob/master/CHANGELOG.md#v1120-november-14-2020) + + 1.20.0 (2020-09-29) ------------------- diff --git a/jaeger-ui b/jaeger-ui index df17e8d80e6..1d0330d6519 160000 --- a/jaeger-ui +++ b/jaeger-ui @@ -1 +1 @@ -Subproject commit df17e8d80e6f630ed3ed744a80dbf27c0418718c +Subproject commit 1d0330d6519316037109dbafc4afd9c5123779c9 From 008772e8f8293cf60520dd4d9109914ee25a25cb Mon Sep 17 00:00:00 2001 From: Yuri Shkuro Date: Tue, 17 Nov 2020 12:30:24 -0500 Subject: [PATCH 08/12] [anonymizer] Save trace in UI format (#2629) --- cmd/anonymizer/app/uiconv/extractor.go | 94 ++++++++++++++ cmd/anonymizer/app/uiconv/extractor_test.go | 118 ++++++++++++++++++ .../app/uiconv/fixtures/trace_empty.json | 0 .../uiconv/fixtures/trace_invalid_json.json | 2 + .../app/uiconv/fixtures/trace_scan_error.json | 2 + .../app/uiconv/fixtures/trace_success.json | 3 + .../uiconv/fixtures/trace_wrong_format.json | 1 + cmd/anonymizer/app/uiconv/module.go | 40 ++++++ cmd/anonymizer/app/uiconv/module_test.go | 80 ++++++++++++ cmd/anonymizer/app/uiconv/reader.go | 90 +++++++++++++ cmd/anonymizer/app/uiconv/reader_test.go | 103 +++++++++++++++ cmd/anonymizer/app/writer/writer.go | 2 +- cmd/anonymizer/main.go | 23 +++- 13 files changed, 551 insertions(+), 7 deletions(-) create mode 100644 cmd/anonymizer/app/uiconv/extractor.go create mode 100644 cmd/anonymizer/app/uiconv/extractor_test.go create mode 100644 cmd/anonymizer/app/uiconv/fixtures/trace_empty.json create mode 100644 cmd/anonymizer/app/uiconv/fixtures/trace_invalid_json.json create mode 100644 cmd/anonymizer/app/uiconv/fixtures/trace_scan_error.json create mode 100644 cmd/anonymizer/app/uiconv/fixtures/trace_success.json create mode 100644 cmd/anonymizer/app/uiconv/fixtures/trace_wrong_format.json create mode 100644 cmd/anonymizer/app/uiconv/module.go create mode 100644 cmd/anonymizer/app/uiconv/module_test.go create mode 100644 cmd/anonymizer/app/uiconv/reader.go create mode 100644 cmd/anonymizer/app/uiconv/reader_test.go diff --git a/cmd/anonymizer/app/uiconv/extractor.go b/cmd/anonymizer/app/uiconv/extractor.go new file mode 100644 index 00000000000..8679766318f --- /dev/null +++ b/cmd/anonymizer/app/uiconv/extractor.go @@ -0,0 +1,94 @@ +// Copyright (c) 2020 The Jaeger 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 uiconv + +import ( + "encoding/json" + "fmt" + "io" + "os" + + "go.uber.org/zap" + + uimodel "github.com/jaegertracing/jaeger/model/json" +) + +// Extractor reads the spans from reader, filters by traceID, and stores as JSON into uiFile. +type Extractor struct { + uiFile *os.File + traceID string + reader *Reader + logger *zap.Logger +} + +// NewExtractor creates Extractor. +func NewExtractor(uiFile string, traceID string, reader *Reader, logger *zap.Logger) (*Extractor, error) { + f, err := os.OpenFile(uiFile, os.O_CREATE|os.O_WRONLY, os.ModePerm) + if err != nil { + return nil, fmt.Errorf("cannot create output file: %w", err) + } + logger.Sugar().Infof("Writing spans to UI file %s", uiFile) + + return &Extractor{ + uiFile: f, + traceID: traceID, + reader: reader, + logger: logger, + }, nil +} + +// Run executes the extraction. +func (e *Extractor) Run() error { + e.logger.Info("Parsing captured file for trace", zap.String("trace_id", e.traceID)) + + var ( + spans []uimodel.Span + span *uimodel.Span + err error + ) + for span, err = e.reader.NextSpan(); err == nil; span, err = e.reader.NextSpan() { + if string(span.TraceID) == e.traceID { + spans = append(spans, *span) + } + } + if err != io.EOF { + return fmt.Errorf("failed when scanning the file: %w", err) + } + trace := uimodel.Trace{ + TraceID: uimodel.TraceID(e.traceID), + Spans: spans, + Processes: make(map[uimodel.ProcessID]uimodel.Process), + } + // (ys) The following is not exactly correct because it does not dedupe the processes, + // but I don't think it affects the UI. + for i := range spans { + span := &spans[i] + pid := uimodel.ProcessID(fmt.Sprintf("p%d", i)) + trace.Processes[pid] = *span.Process + span.Process = nil + span.ProcessID = pid + } + jsonBytes, err := json.Marshal(trace) + if err != nil { + return fmt.Errorf("failed to marshal UI trace: %w", err) + } + e.uiFile.Write([]byte(`{"data": [`)) + e.uiFile.Write(jsonBytes) + e.uiFile.Write([]byte(`]}`)) + e.uiFile.Sync() + e.uiFile.Close() + e.logger.Sugar().Infof("Wrote spans to UI file %s", e.uiFile.Name()) + return nil +} diff --git a/cmd/anonymizer/app/uiconv/extractor_test.go b/cmd/anonymizer/app/uiconv/extractor_test.go new file mode 100644 index 00000000000..369ac11caba --- /dev/null +++ b/cmd/anonymizer/app/uiconv/extractor_test.go @@ -0,0 +1,118 @@ +// Copyright (c) 2020 The Jaeger 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 uiconv + +import ( + "io/ioutil" + "os" + "testing" + + "github.com/go-openapi/swag" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.uber.org/zap" + + "github.com/jaegertracing/jaeger/model" +) + +type UITrace struct { + Data []model.Trace +} + +func TestExtractor_TraceSuccess(t *testing.T) { + inputFile := "fixtures/trace_success.json" + outputFile := "fixtures/trace_success_ui_anonymized.json" + defer os.Remove(outputFile) + + reader, err := NewReader( + inputFile, + zap.NewNop(), + ) + require.NoError(t, err) + + extractor, err := NewExtractor( + outputFile, + "2be38093ead7a083", + reader, + zap.NewNop(), + ) + require.NoError(t, err) + + err = extractor.Run() + require.NoError(t, err) + + var trace UITrace + loadJSON(t, outputFile, &trace) + + for i := range trace.Data { + for j := range trace.Data[i].Spans { + assert.Equal(t, "span.kind", trace.Data[i].Spans[j].Tags[0].Key) + } + } +} + +func TestExtractor_TraceOutputFileError(t *testing.T) { + inputFile := "fixtures/trace_success.json" + outputFile := "fixtures/trace_success_ui_anonymized.json" + defer os.Remove(outputFile) + + reader, err := NewReader( + inputFile, + zap.NewNop(), + ) + require.NoError(t, err) + + err = os.Chmod("fixtures", 0000) + require.NoError(t, err) + defer os.Chmod("fixtures", 0755) + + _, err = NewExtractor( + outputFile, + "2be38093ead7a083", + reader, + zap.NewNop(), + ) + require.Contains(t, err.Error(), "cannot create output file") +} + +func TestExtractor_TraceScanError(t *testing.T) { + inputFile := "fixtures/trace_scan_error.json" + outputFile := "fixtures/trace_scan_error_ui_anonymized.json" + defer os.Remove(outputFile) + + reader, err := NewReader( + inputFile, + zap.NewNop(), + ) + require.NoError(t, err) + + extractor, err := NewExtractor( + outputFile, + "2be38093ead7a083", + reader, + zap.NewNop(), + ) + require.NoError(t, err) + + err = extractor.Run() + require.Contains(t, err.Error(), "failed when scanning the file") +} + +func loadJSON(t *testing.T, fileName string, i interface{}) { + b, err := ioutil.ReadFile(fileName) + require.NoError(t, err) + err = swag.ReadJSON(b, i) + require.NoError(t, err, "Failed to parse json fixture file %s", fileName) +} diff --git a/cmd/anonymizer/app/uiconv/fixtures/trace_empty.json b/cmd/anonymizer/app/uiconv/fixtures/trace_empty.json new file mode 100644 index 00000000000..e69de29bb2d diff --git a/cmd/anonymizer/app/uiconv/fixtures/trace_invalid_json.json b/cmd/anonymizer/app/uiconv/fixtures/trace_invalid_json.json new file mode 100644 index 00000000000..cc2337d97a1 --- /dev/null +++ b/cmd/anonymizer/app/uiconv/fixtures/trace_invalid_json.json @@ -0,0 +1,2 @@ +[{"traceID":"2be38093ead7a083","spanID":"7bd66f09ba90ea3d","duration": "invalid"} +] \ No newline at end of file diff --git a/cmd/anonymizer/app/uiconv/fixtures/trace_scan_error.json b/cmd/anonymizer/app/uiconv/fixtures/trace_scan_error.json new file mode 100644 index 00000000000..963a379ab25 --- /dev/null +++ b/cmd/anonymizer/app/uiconv/fixtures/trace_scan_error.json @@ -0,0 +1,2 @@ +[{"traceID":"2be38093ead7a083","spanID":"7606ddfe69932d34","duration":267037}, +] \ No newline at end of file diff --git a/cmd/anonymizer/app/uiconv/fixtures/trace_success.json b/cmd/anonymizer/app/uiconv/fixtures/trace_success.json new file mode 100644 index 00000000000..7caed81fe70 --- /dev/null +++ b/cmd/anonymizer/app/uiconv/fixtures/trace_success.json @@ -0,0 +1,3 @@ +[{"traceID":"2be38093ead7a083","spanID":"7606ddfe69932d34","flags":1,"operationName":"a071653098f9250d","references":[{"refType":"CHILD_OF","traceID":"2be38093ead7a083","spanID":"492770a15935810f"}],"startTime":1605223981761425,"duration":267037,"tags":[{"key":"span.kind","type":"string","value":"server"}],"logs":[],"process":{"serviceName":"16af988c443cff37","tags":[]},"warnings":null}, + {"traceID":"2be38093ead7a083","spanID":"7bd66f09ba90ea3d","flags":1,"operationName":"471418097747d04a","references":[{"refType":"CHILD_OF","traceID":"2be38093ead7a083","spanID":"7606ddfe69932d34"}],"startTime":1605223981965074,"duration":32782,"tags":[{"key":"span.kind","type":"string","value":"client"},{"key":"error","type":"bool","value":"true"}],"logs":[],"process":{"serviceName":"3c220036602f839e","tags":[]},"warnings":null} +] \ No newline at end of file diff --git a/cmd/anonymizer/app/uiconv/fixtures/trace_wrong_format.json b/cmd/anonymizer/app/uiconv/fixtures/trace_wrong_format.json new file mode 100644 index 00000000000..672ae56f024 --- /dev/null +++ b/cmd/anonymizer/app/uiconv/fixtures/trace_wrong_format.json @@ -0,0 +1 @@ +{"traceID":"2be38093ead7a083","spanID":"7606ddfe69932d34","duration":267037} diff --git a/cmd/anonymizer/app/uiconv/module.go b/cmd/anonymizer/app/uiconv/module.go new file mode 100644 index 00000000000..bd19620dd0c --- /dev/null +++ b/cmd/anonymizer/app/uiconv/module.go @@ -0,0 +1,40 @@ +// Copyright (c) 2020 The Jaeger 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 uiconv + +import ( + "go.uber.org/zap" +) + +// Config for the extractor. +type Config struct { + CapturedFile string `yaml:"captured_file"` + UIFile string `yaml:"ui_file"` + TraceID string `yaml:"trace_id"` +} + +// Extract reads anonymized file, finds spans for a given trace, +// and writes out that trace in the UI format. +func Extract(config Config, logger *zap.Logger) error { + reader, err := NewReader(config.CapturedFile, logger) + if err != nil { + return err + } + ext, err := NewExtractor(config.UIFile, config.TraceID, reader, logger) + if err != nil { + return err + } + return ext.Run() +} diff --git a/cmd/anonymizer/app/uiconv/module_test.go b/cmd/anonymizer/app/uiconv/module_test.go new file mode 100644 index 00000000000..cdaee6c9fb1 --- /dev/null +++ b/cmd/anonymizer/app/uiconv/module_test.go @@ -0,0 +1,80 @@ +// Copyright (c) 2020 The Jaeger 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 uiconv + +import ( + "os" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.uber.org/zap" +) + +func TestModule_TraceSuccess(t *testing.T) { + inputFile := "fixtures/trace_success.json" + outputFile := "fixtures/trace_success_ui_anonymized.json" + defer os.Remove(outputFile) + + config := Config{ + CapturedFile: inputFile, + UIFile: outputFile, + TraceID: "2be38093ead7a083", + } + err := Extract(config, zap.NewNop()) + require.NoError(t, err) + + var trace UITrace + loadJSON(t, outputFile, &trace) + + for i := range trace.Data { + for j := range trace.Data[i].Spans { + assert.Equal(t, "span.kind", trace.Data[i].Spans[j].Tags[0].Key) + } + } +} + +func TestModule_TraceNonExistent(t *testing.T) { + inputFile := "fixtures/trace_non_existent.json" + outputFile := "fixtures/trace_non_existent_ui_anonymized.json" + defer os.Remove(outputFile) + + config := Config{ + CapturedFile: inputFile, + UIFile: outputFile, + TraceID: "2be38093ead7a083", + } + err := Extract(config, zap.NewNop()) + require.Contains(t, err.Error(), "cannot open captured file") +} + +func TestModule_TraceOutputFileError(t *testing.T) { + inputFile := "fixtures/trace_success.json" + outputFile := "fixtures/trace_success_ui_anonymized.json" + defer os.Remove(outputFile) + + config := Config{ + CapturedFile: inputFile, + UIFile: outputFile, + TraceID: "2be38093ead7a083", + } + + err := os.Chmod("fixtures", 0550) + require.NoError(t, err) + defer os.Chmod("fixtures", 0755) + + err = Extract(config, zap.NewNop()) + require.Contains(t, err.Error(), "cannot create output file") +} diff --git a/cmd/anonymizer/app/uiconv/reader.go b/cmd/anonymizer/app/uiconv/reader.go new file mode 100644 index 00000000000..ee26edb5093 --- /dev/null +++ b/cmd/anonymizer/app/uiconv/reader.go @@ -0,0 +1,90 @@ +// Copyright (c) 2020 The Jaeger 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 uiconv + +import ( + "bufio" + "encoding/json" + "fmt" + "io" + "os" + + "go.uber.org/zap" + + uimodel "github.com/jaegertracing/jaeger/model/json" +) + +// Reader loads previously captured spans from a file. +type Reader struct { + logger *zap.Logger + capturedFile *os.File + reader *bufio.Reader + spansRead int + eofReached bool +} + +// NewReader creates a Reader. +func NewReader(capturedFile string, logger *zap.Logger) (*Reader, error) { + cf, err := os.OpenFile(capturedFile, os.O_RDONLY, os.ModePerm) + if err != nil { + return nil, fmt.Errorf("cannot open captured file: %w", err) + } + logger.Sugar().Infof("Reading captured spans from file %s", capturedFile) + + return &Reader{ + logger: logger, + capturedFile: cf, + reader: bufio.NewReader(cf), + }, nil +} + +// NextSpan reads the next span from the capture file, or returns io.EOF. +func (r *Reader) NextSpan() (*uimodel.Span, error) { + if r.eofReached { + return nil, io.EOF + } + if r.spansRead == 0 { + b, err := r.reader.ReadByte() + if err != nil { + r.eofReached = true + return nil, fmt.Errorf("cannot read file: %w", err) + } + if b != '[' { + r.eofReached = true + return nil, fmt.Errorf("file must begin with '['") + } + } + s, err := r.reader.ReadString('\n') + if err != nil { + r.eofReached = true + return nil, fmt.Errorf("cannot read file: %w", err) + } + if s[len(s)-2] == ',' { // all but last span lines end with ,\n + s = s[0 : len(s)-2] + } else { + r.eofReached = true + } + var span uimodel.Span + err = json.Unmarshal([]byte(s), &span) + if err != nil { + r.eofReached = true + return nil, fmt.Errorf("cannot unmarshal span: %w; %s", err, s) + } + r.spansRead++ + if r.spansRead%1000 == 0 { + r.logger.Info("Scan progress", zap.Int("span_count", r.spansRead)) + } + return &span, nil +} diff --git a/cmd/anonymizer/app/uiconv/reader_test.go b/cmd/anonymizer/app/uiconv/reader_test.go new file mode 100644 index 00000000000..c9e230c876c --- /dev/null +++ b/cmd/anonymizer/app/uiconv/reader_test.go @@ -0,0 +1,103 @@ +// Copyright (c) 2020 The Jaeger 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 uiconv + +import ( + "io" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.uber.org/zap" +) + +func TestReader_TraceSuccess(t *testing.T) { + inputFile := "fixtures/trace_success.json" + r, err := NewReader( + inputFile, + zap.NewNop(), + ) + require.NoError(t, err) + + s1, err := r.NextSpan() + require.NoError(t, err) + assert.Equal(t, "a071653098f9250d", s1.OperationName) + assert.Equal(t, 1, r.spansRead) + assert.Equal(t, false, r.eofReached) + + r.spansRead = 999 + + s2, err := r.NextSpan() + require.NoError(t, err) + assert.Equal(t, "471418097747d04a", s2.OperationName) + assert.Equal(t, 1000, r.spansRead) + assert.Equal(t, true, r.eofReached) + + _, err = r.NextSpan() + require.Equal(t, io.EOF, err) + assert.Equal(t, 1000, r.spansRead) + assert.Equal(t, true, r.eofReached) +} + +func TestReader_TraceNonExistent(t *testing.T) { + inputFile := "fixtures/trace_non_existent.json" + _, err := NewReader( + inputFile, + zap.NewNop(), + ) + require.Contains(t, err.Error(), "cannot open captured file") +} + +func TestReader_TraceEmpty(t *testing.T) { + inputFile := "fixtures/trace_empty.json" + r, err := NewReader( + inputFile, + zap.NewNop(), + ) + require.NoError(t, err) + + _, err = r.NextSpan() + require.Contains(t, err.Error(), "cannot read file") + assert.Equal(t, 0, r.spansRead) + assert.Equal(t, true, r.eofReached) +} + +func TestReader_TraceWrongFormat(t *testing.T) { + inputFile := "fixtures/trace_wrong_format.json" + r, err := NewReader( + inputFile, + zap.NewNop(), + ) + require.NoError(t, err) + + _, err = r.NextSpan() + require.Equal(t, "file must begin with '['", err.Error()) + assert.Equal(t, 0, r.spansRead) + assert.Equal(t, true, r.eofReached) +} + +func TestReader_TraceInvalidJson(t *testing.T) { + inputFile := "fixtures/trace_invalid_json.json" + r, err := NewReader( + inputFile, + zap.NewNop(), + ) + require.NoError(t, err) + + _, err = r.NextSpan() + require.Contains(t, err.Error(), "cannot unmarshal span") + assert.Equal(t, 0, r.spansRead) + assert.Equal(t, true, r.eofReached) +} diff --git a/cmd/anonymizer/app/writer/writer.go b/cmd/anonymizer/app/writer/writer.go index 5d04e61df53..dee49e1735d 100644 --- a/cmd/anonymizer/app/writer/writer.go +++ b/cmd/anonymizer/app/writer/writer.go @@ -127,7 +127,7 @@ func (w *Writer) WriteSpan(msg *model.Span) error { w.logger.Info("progress", zap.Int("numSpans", w.spanCount)) } - if w.spanCount >= w.config.MaxSpansCount { + if w.config.MaxSpansCount > 0 && w.spanCount >= w.config.MaxSpansCount { w.logger.Info("Saved enough spans, exiting...") w.Close() os.Exit(0) diff --git a/cmd/anonymizer/main.go b/cmd/anonymizer/main.go index a4dd00e4a9f..d80d609adaa 100644 --- a/cmd/anonymizer/main.go +++ b/cmd/anonymizer/main.go @@ -21,10 +21,11 @@ import ( "github.com/spf13/cobra" "go.uber.org/zap" - app "github.com/jaegertracing/jaeger/cmd/anonymizer/app" + "github.com/jaegertracing/jaeger/cmd/anonymizer/app" "github.com/jaegertracing/jaeger/cmd/anonymizer/app/anonymizer" - query "github.com/jaegertracing/jaeger/cmd/anonymizer/app/query" - writer "github.com/jaegertracing/jaeger/cmd/anonymizer/app/writer" + "github.com/jaegertracing/jaeger/cmd/anonymizer/app/query" + "github.com/jaegertracing/jaeger/cmd/anonymizer/app/uiconv" + "github.com/jaegertracing/jaeger/cmd/anonymizer/app/writer" "github.com/jaegertracing/jaeger/pkg/version" ) @@ -41,9 +42,9 @@ func main() { prefix := options.OutputDir + "/" + options.TraceID conf := writer.Config{ MaxSpansCount: options.MaxSpansCount, - CapturedFile: prefix + ".original", - AnonymizedFile: prefix + ".anonymized", - MappingFile: prefix + ".mapping", + CapturedFile: prefix + ".original.json", + AnonymizedFile: prefix + ".anonymized.json", + MappingFile: prefix + ".mapping.json", AnonymizerOpts: anonymizer.Options{ HashStandardTags: options.HashStandardTags, HashCustomTags: options.HashCustomTags, @@ -71,6 +72,16 @@ func main() { writer.WriteSpan(&span) } writer.Close() + + uiCfg := uiconv.Config{ + CapturedFile: conf.AnonymizedFile, + UIFile: prefix + ".anonymized-ui-trace.json", + TraceID: options.TraceID, + } + if err := uiconv.Extract(uiCfg, logger); err != nil { + logger.Fatal("error while extracing UI trace", zap.Error(err)) + } + logger.Sugar().Infof("Wrote UI-compatible anonymized file to %s", uiCfg.UIFile) }, } From f4d6968147141fecb3207aae37ac083b6b2d6b08 Mon Sep 17 00:00:00 2001 From: Sora Morimoto Date: Wed, 18 Nov 2020 02:32:56 +0900 Subject: [PATCH 09/12] Use fossa-contrib/fossa-action instead (#2571) * Use fossa-contrib/fossa-action instead Signed-off-by: Sora Morimoto * Make step name clearer Signed-off-by: Sora Morimoto Co-authored-by: Yuri Shkuro --- .github/workflows/fossa.yml | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/.github/workflows/fossa.yml b/.github/workflows/fossa.yml index 2429e9e8eb8..45e647432a8 100644 --- a/.github/workflows/fossa.yml +++ b/.github/workflows/fossa.yml @@ -8,20 +8,25 @@ on: jobs: build: runs-on: ubuntu-latest + steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2 + - name: Checkout code + uses: actions/checkout@v2 + + - name: Use Go ^1.14.x + uses: actions/setup-go@v2 + with: + go-version: ^1.14.x + + - name: Add GOPATH to GITHUB_ENV + run: echo "GOPATH=$(go env GOPATH)" >>"$GITHUB_ENV" + + - name: Add GOPATH to GITHUB_PATH + run: echo "$GOPATH/bin" >>"$GITHUB_PATH" + + - name: Run FOSSA scan and upload build data + uses: fossa-contrib/fossa-action@v1 with: - go-version: "^1.14.x" - - run: go version - # Runs a set of commands to initialize and analyze with FOSSA - - name: run FOSSA analysis - env: # FOSSA Push-Only API Token - FOSSA_API_KEY: '304657e2357ba57b416b94e6b119131b' - run: | - export GOPATH=$HOME/go - export PATH=$PATH:$(go env GOPATH)/bin - curl -H 'Cache-Control: no-cache' https://raw.githubusercontent.com/fossas/fossa-cli/master/install.sh | bash - fossa init - fossa analyze + fossa-api-key: 304657e2357ba57b416b94e6b119131b + github-token: ${{ github.token }} From e1142011ea6f71ba07ae9084ae7ef2d5a716abfc Mon Sep 17 00:00:00 2001 From: Ashmita Date: Thu, 19 Nov 2020 23:29:43 +0800 Subject: [PATCH 10/12] Update Makefile and Dockerfile for anonymizer (#2632) Signed-off-by: Ashmita Bohara --- Makefile | 19 +++++++++++++------ cmd/anonymizer/Dockerfile | 5 +++++ scripts/travis/upload-all-docker-images.sh | 1 + 3 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 cmd/anonymizer/Dockerfile diff --git a/Makefile b/Makefile index 469697ead79..97d858d73b3 100644 --- a/Makefile +++ b/Makefile @@ -213,6 +213,10 @@ build-examples: build-tracegen: $(GOBUILD) -o ./cmd/tracegen/tracegen-$(GOOS)-$(GOARCH) ./cmd/tracegen/main.go +.PHONY: build-anonymizer +build-anonymizer: + $(GOBUILD) -o ./cmd/anonymizer/anonymizer-$(GOOS)-$(GOARCH) ./cmd/anonymizer/main.go + .PHONY: docker-hotrod docker-hotrod: GOOS=linux $(MAKE) build-examples @@ -250,10 +254,6 @@ build-all-in-one build-all-in-one-debug: build-ui elasticsearch-mappings build-agent build-agent-debug: $(GOBUILD) $(DISABLE_OPTIMIZATIONS) -o ./cmd/agent/agent$(SUFFIX)-$(GOOS)-$(GOARCH) $(BUILD_INFO) ./cmd/agent/main.go -.PHONY: build-anonymizer -build-anonymizer: - $(GOBUILD) $(DISABLE_OPTIMIZATIONS) -o ./cmd/anonymizer/anonymizer$(SUFFIX)-$(GOOS)-$(GOARCH) $(BUILD_INFO) ./cmd/anonymizer/main.go - .PHONY: build-query build-query-debug build-query build-query-debug: build-ui $(GOBUILD) $(DISABLE_OPTIMIZATIONS) -tags ui -o ./cmd/query/query$(SUFFIX)-$(GOOS)-$(GOARCH) $(BUILD_INFO) ./cmd/query/main.go @@ -321,6 +321,7 @@ build-platform-binaries: build-agent \ build-all-in-one \ build-examples \ build-tracegen \ + build-anonymizer \ build-otel-collector \ build-otel-agent \ build-otel-ingester \ @@ -364,12 +365,18 @@ docker-images-tracegen: docker build -t $(DOCKER_NAMESPACE)/jaeger-tracegen:${DOCKER_TAG} cmd/tracegen/ --build-arg TARGETARCH=$(GOARCH) @echo "Finished building jaeger-tracegen ==============" +.PHONY: docker-images-anonymizer +docker-images-anonymizer: + docker build -t $(DOCKER_NAMESPACE)/jaeger-anonymizer:${DOCKER_TAG} cmd/anonymizer/ --build-arg TARGETARCH=$(GOARCH) + @echo "Finished building jaeger-anonymizer ==============" + .PHONY: docker-images-only docker-images-only: docker-images-cassandra \ docker-images-elastic \ docker-images-jaeger-backend \ docker-images-jaeger-backend-debug \ - docker-images-tracegen + docker-images-tracegen \ + docker-images-anonymizer .PHONY: docker-push docker-push: @@ -379,7 +386,7 @@ docker-push: if [ $$CONFIRM != "y" ] && [ $$CONFIRM != "Y" ]; then \ echo "Exiting." ; exit 1 ; \ fi - for component in agent cassandra-schema es-index-cleaner es-rollover collector query ingester example-hotrod tracegen; do \ + for component in agent cassandra-schema es-index-cleaner es-rollover collector query ingester example-hotrod tracegen anonymizer; do \ docker push $(DOCKER_NAMESPACE)/jaeger-$$component ; \ done diff --git a/cmd/anonymizer/Dockerfile b/cmd/anonymizer/Dockerfile new file mode 100644 index 00000000000..096f6929b09 --- /dev/null +++ b/cmd/anonymizer/Dockerfile @@ -0,0 +1,5 @@ +FROM scratch +ARG TARGETARCH=amd64 + +COPY anonymizer-linux-$TARGETARCH /go/bin/anonymizer-linux +ENTRYPOINT ["/go/bin/anonymizer-linux"] diff --git a/scripts/travis/upload-all-docker-images.sh b/scripts/travis/upload-all-docker-images.sh index 061ac8c4169..8273b950a1f 100755 --- a/scripts/travis/upload-all-docker-images.sh +++ b/scripts/travis/upload-all-docker-images.sh @@ -34,6 +34,7 @@ jaeger_components=( ingester ingester-debug tracegen + anonymizer opentelemetry-collector opentelemetry-agent opentelemetry-ingester From 51b53ec50de11ed6ce3cf65b23883de459b668c9 Mon Sep 17 00:00:00 2001 From: ZouYu Date: Fri, 20 Nov 2020 11:44:24 +0800 Subject: [PATCH 11/12] Fix listen IP in unit test (#2636) Signed-off-by: zouyu --- cmd/agent/app/agent_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/agent/app/agent_test.go b/cmd/agent/app/agent_test.go index 3e37e282bf7..8be684c7e73 100644 --- a/cmd/agent/app/agent_test.go +++ b/cmd/agent/app/agent_test.go @@ -96,7 +96,7 @@ func withRunningAgent(t *testing.T, testcase func(string, chan error)) { }, }, HTTPServer: HTTPServerConfiguration{ - HostPort: ":0", + HostPort: "127.0.0.1:0", }, } logger, logBuf := testutils.NewLogger() From 2a0d0be62c4d47ed512d0c8d61faea28b66e4379 Mon Sep 17 00:00:00 2001 From: Kositsyn Pavel Date: Sat, 21 Nov 2020 04:32:38 +0300 Subject: [PATCH 12/12] Bump opentelemetry to v0.15.0 (#2634) * Bump opentelemetry to v0.15.0 Signed-off-by: Pavel Kositsyn * add default value instead of nil value for jaegerreceiver config Signed-off-by: Pavel Kositsyn * make lint Signed-off-by: Pavel Kositsyn --- .../app/defaultconfig/default_config.go | 10 +- .../app/defaultconfig/default_config_test.go | 2 + .../app/defaultconfig/merge_test.go | 16 +- .../cassandraexporter/factory_test.go | 1 + .../esmodeltranslator/modeltranslator.go | 2 +- .../esmodeltranslator/modeltranslator_test.go | 1 - .../elasticsearchexporter/factory_test.go | 2 + .../elasticsearchexporter/spanstore.go | 5 +- .../elasticsearchexporter/spanstore_test.go | 2 - .../grpcpluginexporter/factory_test.go | 1 + .../kafkaexporter/kafka_exporter_test.go | 1 + .../exporter/memoryexporter/factory_test.go | 1 + .../app/exporter/span_writer_exporter_test.go | 1 + .../app/internal/esclient/client_test.go | 1 + .../app/internal/esclient/ping_test.go | 1 + .../dependency_store_test.go | 1 + .../jaegerreceiver/jaeger_receiver.go | 10 +- .../jaegerreceiver/jaeger_receiver_test.go | 15 +- .../kafkareceiver/kafka_receiver_test.go | 1 + cmd/opentelemetry/go.mod | 8 +- cmd/opentelemetry/go.sum | 298 ++++++++++++------ 21 files changed, 247 insertions(+), 133 deletions(-) diff --git a/cmd/opentelemetry/app/defaultconfig/default_config.go b/cmd/opentelemetry/app/defaultconfig/default_config.go index 9f719b355ca..8b02849f7e5 100644 --- a/cmd/opentelemetry/app/defaultconfig/default_config.go +++ b/cmd/opentelemetry/app/defaultconfig/default_config.go @@ -206,13 +206,15 @@ func createExporters(component ComponentType, storageTypes string, factories com func enableAgentUDPEndpoints(jaeger *jaegerreceiver.Config) { if jaeger.ThriftCompact == nil { - jaeger.ThriftCompact = &confignet.TCPAddr{ - Endpoint: udpThriftCompactEndpoint, + jaeger.ThriftCompact = &jaegerreceiver.ProtocolUDP{ + Endpoint: udpThriftCompactEndpoint, + ServerConfigUDP: jaegerreceiver.DefaultServerConfigUDP(), } } if jaeger.ThriftBinary == nil { - jaeger.ThriftBinary = &confignet.TCPAddr{ - Endpoint: udpThriftBinaryEndpoint, + jaeger.ThriftBinary = &jaegerreceiver.ProtocolUDP{ + Endpoint: udpThriftBinaryEndpoint, + ServerConfigUDP: jaegerreceiver.DefaultServerConfigUDP(), } } } diff --git a/cmd/opentelemetry/app/defaultconfig/default_config_test.go b/cmd/opentelemetry/app/defaultconfig/default_config_test.go index 21551d94354..36237da9f03 100644 --- a/cmd/opentelemetry/app/defaultconfig/default_config_test.go +++ b/cmd/opentelemetry/app/defaultconfig/default_config_test.go @@ -203,9 +203,11 @@ func TestService(t *testing.T) { cfg, err := createDefaultConfig(viper.New(), factories) if test.err != "" { require.Nil(t, cfg) + assert.Error(t, err) assert.Contains(t, err.Error(), test.err) return } + require.NoError(t, err) sort.Strings(test.service.Pipelines["traces"].Exporters) sort.Strings(cfg.Service.Pipelines["traces"].Exporters) sort.Strings(test.service.Pipelines["traces"].Receivers) diff --git a/cmd/opentelemetry/app/defaultconfig/merge_test.go b/cmd/opentelemetry/app/defaultconfig/merge_test.go index 4416df6873e..b03f5d95cfe 100644 --- a/cmd/opentelemetry/app/defaultconfig/merge_test.go +++ b/cmd/opentelemetry/app/defaultconfig/merge_test.go @@ -61,8 +61,14 @@ func TestMergeConfigs(t *testing.T) { Endpoint: "def", }, }, - ThriftCompact: &confignet.TCPAddr{ + ThriftCompact: &jaegerreceiver.ProtocolUDP{ Endpoint: "def", + ServerConfigUDP: jaegerreceiver.ServerConfigUDP{ + QueueSize: 100, + MaxPacketSize: 65_536, + Workers: 10, + SocketBufferSize: 65_536, + }, }, }, }, @@ -128,8 +134,14 @@ func TestMergeConfigs(t *testing.T) { Endpoint: "master_jaeger_url", }, }, - ThriftCompact: &confignet.TCPAddr{ + ThriftCompact: &jaegerreceiver.ProtocolUDP{ Endpoint: "def", + ServerConfigUDP: jaegerreceiver.ServerConfigUDP{ + QueueSize: 100, + MaxPacketSize: 65_536, + Workers: 10, + SocketBufferSize: 65_536, + }, }, }, }, diff --git a/cmd/opentelemetry/app/exporter/cassandraexporter/factory_test.go b/cmd/opentelemetry/app/exporter/cassandraexporter/factory_test.go index ea17c875eea..7ef20c71152 100644 --- a/cmd/opentelemetry/app/exporter/cassandraexporter/factory_test.go +++ b/cmd/opentelemetry/app/exporter/cassandraexporter/factory_test.go @@ -39,6 +39,7 @@ func TestCreateTraceExporter(t *testing.T) { }} exporter, err := factory.CreateTracesExporter(context.Background(), component.ExporterCreateParams{}, factory.CreateDefaultConfig()) require.Nil(t, exporter) + require.Error(t, err) assert.Contains(t, err.Error(), "gocql: unable to create session") } diff --git a/cmd/opentelemetry/app/exporter/elasticsearchexporter/esmodeltranslator/modeltranslator.go b/cmd/opentelemetry/app/exporter/elasticsearchexporter/esmodeltranslator/modeltranslator.go index ef016bbb104..b370b90d3ac 100644 --- a/cmd/opentelemetry/app/exporter/elasticsearchexporter/esmodeltranslator/modeltranslator.go +++ b/cmd/opentelemetry/app/exporter/elasticsearchexporter/esmodeltranslator/modeltranslator.go @@ -248,7 +248,7 @@ func traceIDToString(high, low uint64) string { } func (c *Translator) process(resource pdata.Resource) *dbmodel.Process { - if resource.IsNil() || resource.Attributes().Len() == 0 { + if resource.Attributes().Len() == 0 { return nil } p := &dbmodel.Process{} diff --git a/cmd/opentelemetry/app/exporter/elasticsearchexporter/esmodeltranslator/modeltranslator_test.go b/cmd/opentelemetry/app/exporter/elasticsearchexporter/esmodeltranslator/modeltranslator_test.go index 3713c4609d5..dac2da5dc5e 100644 --- a/cmd/opentelemetry/app/exporter/elasticsearchexporter/esmodeltranslator/modeltranslator_test.go +++ b/cmd/opentelemetry/app/exporter/elasticsearchexporter/esmodeltranslator/modeltranslator_test.go @@ -258,7 +258,6 @@ func traces(serviceName string) pdata.Traces { traces := pdata.NewTraces() traces.ResourceSpans().Resize(1) traces.ResourceSpans().At(0).InstrumentationLibrarySpans().Resize(1) - traces.ResourceSpans().At(0).Resource().InitEmpty() traces.ResourceSpans().At(0).Resource().Attributes().InitFromMap(map[string]pdata.AttributeValue{conventions.AttributeServiceName: pdata.NewAttributeValueString(serviceName)}) return traces } diff --git a/cmd/opentelemetry/app/exporter/elasticsearchexporter/factory_test.go b/cmd/opentelemetry/app/exporter/elasticsearchexporter/factory_test.go index 13f30b298d7..6db378d47ef 100644 --- a/cmd/opentelemetry/app/exporter/elasticsearchexporter/factory_test.go +++ b/cmd/opentelemetry/app/exporter/elasticsearchexporter/factory_test.go @@ -42,6 +42,7 @@ func TestCreateTraceExporter(t *testing.T) { config.Primary.Servers = []string{"http://foobardoesnotexists.test"} exporter, err := factory.CreateTracesExporter(context.Background(), component.ExporterCreateParams{Logger: zap.NewNop()}, config) require.Nil(t, exporter) + require.Error(t, err) assert.Contains(t, err.Error(), "no such host") } @@ -49,6 +50,7 @@ func TestCreateTraceExporter_nilConfig(t *testing.T) { factory := &Factory{} exporter, err := factory.CreateTracesExporter(context.Background(), component.ExporterCreateParams{}, nil) require.Nil(t, exporter) + require.Error(t, err) assert.Contains(t, err.Error(), "could not cast configuration to jaeger_elasticsearch") } diff --git a/cmd/opentelemetry/app/exporter/elasticsearchexporter/spanstore.go b/cmd/opentelemetry/app/exporter/elasticsearchexporter/spanstore.go index b8905eae28b..c4608e332b7 100644 --- a/cmd/opentelemetry/app/exporter/elasticsearchexporter/spanstore.go +++ b/cmd/opentelemetry/app/exporter/elasticsearchexporter/spanstore.go @@ -242,10 +242,7 @@ func bulkItemsToTraces(bulkItems []bulkItem) pdata.Traces { for i, op := range bulkItems { spanData := op.spanData rss := traces.ResourceSpans().At(i) - if !spanData.Resource.IsNil() { - rss.Resource().InitEmpty() - spanData.Resource.Attributes().CopyTo(rss.Resource().Attributes()) - } + spanData.Resource.Attributes().CopyTo(rss.Resource().Attributes()) rss.InstrumentationLibrarySpans().Resize(1) ispans := rss.InstrumentationLibrarySpans().At(0) ispans.InitEmpty() diff --git a/cmd/opentelemetry/app/exporter/elasticsearchexporter/spanstore_test.go b/cmd/opentelemetry/app/exporter/elasticsearchexporter/spanstore_test.go index 5a48da5c1bd..ae3698b5b30 100644 --- a/cmd/opentelemetry/app/exporter/elasticsearchexporter/spanstore_test.go +++ b/cmd/opentelemetry/app/exporter/elasticsearchexporter/spanstore_test.go @@ -105,7 +105,6 @@ func TestBulkItemsToTraces(t *testing.T) { span.InitEmpty() span.SetName("name") resource := pdata.NewResource() - resource.InitEmpty() resource.Attributes().Insert("key", pdata.NewAttributeValueString("val")) inst := pdata.NewInstrumentationLibrary() inst.InitEmpty() @@ -176,7 +175,6 @@ func TestWriteSpans(t *testing.T) { span.InitEmpty() span.SetName("name") resource := pdata.NewResource() - resource.InitEmpty() resource.Attributes().Insert("key", pdata.NewAttributeValueString("val")) inst := pdata.NewInstrumentationLibrary() inst.InitEmpty() diff --git a/cmd/opentelemetry/app/exporter/grpcpluginexporter/factory_test.go b/cmd/opentelemetry/app/exporter/grpcpluginexporter/factory_test.go index 1e9eea80527..eae2068fde8 100644 --- a/cmd/opentelemetry/app/exporter/grpcpluginexporter/factory_test.go +++ b/cmd/opentelemetry/app/exporter/grpcpluginexporter/factory_test.go @@ -38,6 +38,7 @@ func TestCreateTraceExporter(t *testing.T) { }} exporter, err := factory.CreateTracesExporter(context.Background(), component.ExporterCreateParams{}, factory.CreateDefaultConfig()) require.Nil(t, exporter) + require.Error(t, err) assert.Contains(t, err.Error(), "error attempting to connect to plugin rpc client: fork/exec : no such file or directory") } diff --git a/cmd/opentelemetry/app/exporter/kafkaexporter/kafka_exporter_test.go b/cmd/opentelemetry/app/exporter/kafkaexporter/kafka_exporter_test.go index 81176264921..f828e165a7e 100644 --- a/cmd/opentelemetry/app/exporter/kafkaexporter/kafka_exporter_test.go +++ b/cmd/opentelemetry/app/exporter/kafkaexporter/kafka_exporter_test.go @@ -65,6 +65,7 @@ func TestLoadConfigAndFlags(t *testing.T) { } factories, err := componenttest.ExampleComponents() + require.NoError(t, err) factories.Exporters[TypeStr] = factory cfg, err := configtest.LoadConfigFile(t, path.Join(".", "testdata", "config.yaml"), factories) require.NoError(t, err) diff --git a/cmd/opentelemetry/app/exporter/memoryexporter/factory_test.go b/cmd/opentelemetry/app/exporter/memoryexporter/factory_test.go index 2d4f28ee02e..b96e38e84ed 100644 --- a/cmd/opentelemetry/app/exporter/memoryexporter/factory_test.go +++ b/cmd/opentelemetry/app/exporter/memoryexporter/factory_test.go @@ -50,6 +50,7 @@ func TestCreateTraceExporter_nilConfig(t *testing.T) { factory := &Factory{} exporter, err := factory.CreateTracesExporter(context.Background(), component.ExporterCreateParams{}, nil) require.Nil(t, exporter) + require.Error(t, err) assert.Contains(t, err.Error(), "could not cast configuration to jaeger_memory") } diff --git a/cmd/opentelemetry/app/exporter/span_writer_exporter_test.go b/cmd/opentelemetry/app/exporter/span_writer_exporter_test.go index c863c1c2112..f6cf2e6e806 100644 --- a/cmd/opentelemetry/app/exporter/span_writer_exporter_test.go +++ b/cmd/opentelemetry/app/exporter/span_writer_exporter_test.go @@ -127,6 +127,7 @@ func TestStore(t *testing.T) { dropped, err := test.storage.traceDataPusher(context.Background(), test.data) assert.Equal(t, test.dropped, dropped) if test.err != "" { + assert.Error(t, err) assert.Contains(t, err.Error(), test.err) } else { require.NoError(t, err) diff --git a/cmd/opentelemetry/app/internal/esclient/client_test.go b/cmd/opentelemetry/app/internal/esclient/client_test.go index ecea117f7c8..9f35c08ab8f 100644 --- a/cmd/opentelemetry/app/internal/esclient/client_test.go +++ b/cmd/opentelemetry/app/internal/esclient/client_test.go @@ -163,6 +163,7 @@ func testBulk(t *testing.T, clientFactory func(tripper http.RoundTripper) (Elast bulkResp, err := client.Bulk(context.Background(), strings.NewReader("data")) if test.err != "" { + assert.Error(t, err) assert.Contains(t, err.Error(), test.err) return } diff --git a/cmd/opentelemetry/app/internal/esclient/ping_test.go b/cmd/opentelemetry/app/internal/esclient/ping_test.go index 3958c7219e4..2ae9bc167c2 100644 --- a/cmd/opentelemetry/app/internal/esclient/ping_test.go +++ b/cmd/opentelemetry/app/internal/esclient/ping_test.go @@ -90,6 +90,7 @@ func TestPing(t *testing.T) { esPing := elasticsearchPing{} version, err := esPing.getVersion(ts.URL) if test.err != "" { + assert.Error(t, err) assert.Contains(t, err.Error(), test.err) assert.Equal(t, 0, version) } else { diff --git a/cmd/opentelemetry/app/internal/reader/es/esdependencyreader/dependency_store_test.go b/cmd/opentelemetry/app/internal/reader/es/esdependencyreader/dependency_store_test.go index ac19e02b5c0..ac69e56b6e5 100644 --- a/cmd/opentelemetry/app/internal/reader/es/esdependencyreader/dependency_store_test.go +++ b/cmd/opentelemetry/app/internal/reader/es/esdependencyreader/dependency_store_test.go @@ -111,6 +111,7 @@ func TestGetDependencies_err_unmarshall(t *testing.T) { } store := NewDependencyStore(client, zap.NewNop(), "foo", defaultMaxDocCount) dependencies, err := store.GetDependencies(context.Background(), tsNow, time.Hour) + require.Error(t, err) require.Contains(t, err.Error(), "invalid character") assert.Nil(t, dependencies) } diff --git a/cmd/opentelemetry/app/receiver/jaegerreceiver/jaeger_receiver.go b/cmd/opentelemetry/app/receiver/jaegerreceiver/jaeger_receiver.go index 0f293dabeb9..98dc7cf731b 100644 --- a/cmd/opentelemetry/app/receiver/jaegerreceiver/jaeger_receiver.go +++ b/cmd/opentelemetry/app/receiver/jaegerreceiver/jaeger_receiver.go @@ -69,13 +69,15 @@ func configureAgent(v *viper.Viper, cfg *jaegerreceiver.Config) { aOpts := agentApp.Builder{} aOpts.InitFromViper(v) if v.IsSet(thriftBinaryHostPort) { - cfg.ThriftBinary = &confignet.TCPAddr{ - Endpoint: v.GetString(thriftBinaryHostPort), + cfg.ThriftBinary = &jaegerreceiver.ProtocolUDP{ + Endpoint: v.GetString(thriftBinaryHostPort), + ServerConfigUDP: jaegerreceiver.DefaultServerConfigUDP(), } } if v.IsSet(thriftCompactHostPort) { - cfg.ThriftCompact = &confignet.TCPAddr{ - Endpoint: v.GetString(thriftCompactHostPort), + cfg.ThriftCompact = &jaegerreceiver.ProtocolUDP{ + Endpoint: v.GetString(thriftCompactHostPort), + ServerConfigUDP: jaegerreceiver.DefaultServerConfigUDP(), } } } diff --git a/cmd/opentelemetry/app/receiver/jaegerreceiver/jaeger_receiver_test.go b/cmd/opentelemetry/app/receiver/jaegerreceiver/jaeger_receiver_test.go index 2b331bc5b5d..d19ab0e2cc6 100644 --- a/cmd/opentelemetry/app/receiver/jaegerreceiver/jaeger_receiver_test.go +++ b/cmd/opentelemetry/app/receiver/jaegerreceiver/jaeger_receiver_test.go @@ -72,8 +72,9 @@ func TestDefaultValueFromViper(t *testing.T) { flags: []string{fmt.Sprintf("--%s=%s", thriftCompactHostPort, "localhost:9999")}, expected: &jaegerreceiver.Config{ Protocols: jaegerreceiver.Protocols{ - ThriftCompact: &confignet.TCPAddr{ - Endpoint: "localhost:9999", + ThriftCompact: &jaegerreceiver.ProtocolUDP{ + Endpoint: "localhost:9999", + ServerConfigUDP: jaegerreceiver.DefaultServerConfigUDP(), }, }, }, @@ -83,8 +84,9 @@ func TestDefaultValueFromViper(t *testing.T) { flags: []string{fmt.Sprintf("--%s=%s", thriftBinaryHostPort, "localhost:8888")}, expected: &jaegerreceiver.Config{ Protocols: jaegerreceiver.Protocols{ - ThriftBinary: &confignet.TCPAddr{ - Endpoint: "localhost:8888", + ThriftBinary: &jaegerreceiver.ProtocolUDP{ + Endpoint: "localhost:8888", + ServerConfigUDP: jaegerreceiver.DefaultServerConfigUDP(), }, }, }, @@ -121,8 +123,9 @@ func TestDefaultValueFromViper(t *testing.T) { ThriftHTTP: &confighttp.HTTPServerSettings{ Endpoint: "localhost:8089", }, - ThriftBinary: &confignet.TCPAddr{ - Endpoint: "localhost:2222", + ThriftBinary: &jaegerreceiver.ProtocolUDP{ + Endpoint: "localhost:2222", + ServerConfigUDP: jaegerreceiver.DefaultServerConfigUDP(), }, }, }, diff --git a/cmd/opentelemetry/app/receiver/kafkareceiver/kafka_receiver_test.go b/cmd/opentelemetry/app/receiver/kafkareceiver/kafka_receiver_test.go index 34318287371..54b39e89f3e 100644 --- a/cmd/opentelemetry/app/receiver/kafkareceiver/kafka_receiver_test.go +++ b/cmd/opentelemetry/app/receiver/kafkareceiver/kafka_receiver_test.go @@ -67,6 +67,7 @@ func TestLoadConfigAndFlags(t *testing.T) { } factories, err := componenttest.ExampleComponents() + require.NoError(t, err) factories.Receivers[TypeStr] = factory cfg, err := configtest.LoadConfigFile(t, path.Join(".", "testdata", "config.yaml"), factories) require.NoError(t, err) diff --git a/cmd/opentelemetry/go.mod b/cmd/opentelemetry/go.mod index 3208ecba1bc..9eb8a84ddaa 100644 --- a/cmd/opentelemetry/go.mod +++ b/cmd/opentelemetry/go.mod @@ -5,18 +5,18 @@ go 1.14 replace github.com/jaegertracing/jaeger => ./../../ require ( - github.com/Shopify/sarama v1.27.0 + github.com/Shopify/sarama v1.27.2 github.com/elastic/go-elasticsearch/v6 v6.8.10 github.com/elastic/go-elasticsearch/v7 v7.0.0 github.com/imdario/mergo v0.3.9 - github.com/jaegertracing/jaeger v1.20.0 + github.com/jaegertracing/jaeger v1.21.0 github.com/opentracing/opentracing-go v1.2.0 github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.7.1 github.com/stretchr/testify v1.6.1 github.com/uber/jaeger-client-go v2.25.0+incompatible github.com/uber/jaeger-lib v2.4.0+incompatible - go.opencensus.io v0.22.4 - go.opentelemetry.io/collector v0.14.0 + go.opencensus.io v0.22.5 + go.opentelemetry.io/collector v0.15.0 go.uber.org/zap v1.16.0 ) diff --git a/cmd/opentelemetry/go.sum b/cmd/opentelemetry/go.sum index bbf6439db0a..e67ae7abcba 100644 --- a/cmd/opentelemetry/go.sum +++ b/cmd/opentelemetry/go.sum @@ -13,11 +13,19 @@ cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6T cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.56.0 h1:WRz29PgAsVEyPSDHyk+0fpEkwEFyfhHn+JbksT6gIL4= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0 h1:Dg9iHVQfrhq82rUNu9ZxUDrJLaxFUe/HlCVaLyRruq8= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= @@ -25,34 +33,39 @@ cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqCl cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= contrib.go.opencensus.io/exporter/prometheus v0.2.0 h1:9PUk0/8V0LGoPqVCrf8fQZJkFGBxudu8jOjQSMwoD6w= contrib.go.opencensus.io/exporter/prometheus v0.2.0/go.mod h1:TYmVAyE8Tn1lyPcltF5IYYfWp2KHu7lQGIZnj8iZMys= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIoKjsnZuH8vjyaysT/ses3EvZeaV/1UkF2M= github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= -github.com/Azure/azure-sdk-for-go v45.1.0+incompatible h1:kxtaPD8n2z5Za+9e3sKsYG2IX6PG2R6VXtgS7gAbh3A= -github.com/Azure/azure-sdk-for-go v45.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v46.4.0+incompatible h1:fCN6Pi+tEiEwFa8RSmtVlFHRXEZ+DJm9gfx/MKqYWw4= +github.com/Azure/azure-sdk-for-go v46.4.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= -github.com/Azure/go-autorest/autorest v0.11.4 h1:iWJqGEvip7mjibEqC/srXNdo+4wLEPiwlP/7dZLtoPc= -github.com/Azure/go-autorest/autorest v0.11.4/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= +github.com/Azure/go-autorest/autorest v0.9.6/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= +github.com/Azure/go-autorest/autorest v0.11.10 h1:j5sGbX7uj1ieYYkQ3Mpvewd4DCsEQ+ZeJpqnSM9pjnM= +github.com/Azure/go-autorest/autorest v0.11.10/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= -github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= -github.com/Azure/go-autorest/autorest/adal v0.9.2 h1:Aze/GQeAN1RRbGmnUJvUj+tFGBzFdIg3293/A9rbxC4= -github.com/Azure/go-autorest/autorest/adal v0.9.2/go.mod h1:/3SMAM86bP6wC9Ev35peQDUeqFZBMH07vvUOmg4z/fE= +github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= +github.com/Azure/go-autorest/autorest/adal v0.9.5 h1:Y3bBUV4rTuxenJJs41HU3qmqsb+auo+a3Lz+PlJPpL0= +github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= +github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= github.com/Azure/go-autorest/autorest/mocks v0.4.1 h1:K0laFcLE6VLTOwNgSxaGbUcLPuGXlNkbVvq4cW4nIHk= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/autorest/to v0.3.0 h1:zebkZaadz7+wIQYgC7GXaz3Wb28yKYfVkkBKwc38VF8= @@ -98,8 +111,8 @@ github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV 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/sarama v1.22.2-0.20190604114437-cd910a683f9f/go.mod h1:XLH1GYJnLVE0XCr6KdJGVJRTwY30moWNJ4sERjXX6fs= -github.com/Shopify/sarama v1.27.0 h1:tqo2zmyzPf1+gwTTwhI6W+EXDw4PVSczynpHKFtVAmo= -github.com/Shopify/sarama v1.27.0/go.mod h1:aCdj6ymI8uyPEux1JJ9gcaDT6cinjGhNCAhs54taSUo= +github.com/Shopify/sarama v1.27.2 h1:1EyY1dsxNDUQEv0O/4TsjosHI2CgB1uo9H/v56xzTxc= +github.com/Shopify/sarama v1.27.2/go.mod h1:g5s5osgELxgM+Md9Qni9rzo7Rbt+vvFQI4bt/Mc93II= 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/Songmu/retry v0.1.0 h1:hPA5xybQsksLR/ry/+t/7cFajPW+dqjmjhzZhioBILA= @@ -142,8 +155,8 @@ github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496 h1:zV3ejI06 github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.34.9 h1:cUGBW9CVdi0mS7K1hDzxIqTpfeWhpoQiguq81M1tjK0= -github.com/aws/aws-sdk-go v1.34.9/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= +github.com/aws/aws-sdk-go v1.35.5 h1:doSEOxC0UkirPcle20Rc+1kAhJ4Ip+GSEeZ3nKl7Qlk= +github.com/aws/aws-sdk-go v1.35.5/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= 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= @@ -215,8 +228,6 @@ 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/denis-tingajkin/go-header v0.3.1 h1:ymEpSiFjeItCy1FOP+x0M2KdCELdEAHUsNa8F+hHc6w= github.com/denis-tingajkin/go-header v0.3.1/go.mod h1:sq/2IxMhaZX+RRcgHfCRx/m0M5na0fBt4/CRe7Lrji0= -github.com/dgraph-io/badger v1.5.3 h1:5oWIuRvwn93cie+OSt1zSnkaIQ1JFQM8bGlIv6O6Sts= -github.com/dgraph-io/badger v1.5.3/go.mod h1:VZxzAIRPHRVNRKRo6AXrX9BJegn6il06VMTZVJYCIjQ= github.com/dgraph-io/badger v1.6.2 h1:mNw0qs90GVgGGWylh0umH5iag1j6n/PeJtNvL6KY/x8= github.com/dgraph-io/badger v1.6.2/go.mod h1:JW2yswe3V058sS0kZ2h/AXeDSqFjxnZcRrVH//y2UQE= github.com/dgraph-io/ristretto v0.0.1/go.mod h1:T40EBc7CJke8TkpiYfGGKAeFjSaxuFXhuXRyumBd6RE= @@ -229,9 +240,9 @@ github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUn github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/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/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/digitalocean/godo v1.42.1 h1:SJ/XMVsp5CZmyQal8gLlOl9jSl1i3FaN20LlgtK5ZMs= -github.com/digitalocean/godo v1.42.1/go.mod h1:p7dOjjtSBqCTUksqtA5Fd3uaKs9kyTq2xcz76ulEJRU= +github.com/dgryski/go-sip13 v0.0.0-20200911182023-62edffca9245/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/digitalocean/godo v1.46.0 h1:WRbwjATilgz2NE4NGMeSDpeicy9h4xSKNGuRJ/Nq/fA= +github.com/digitalocean/godo v1.46.0/go.mod h1:p7dOjjtSBqCTUksqtA5Fd3uaKs9kyTq2xcz76ulEJRU= github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug= github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v17.12.0-ce-rc1.0.20200706150819-a40b877fbb9e+incompatible h1:+mzU0jHyjWpYHiD0StRlsVXkCvecWS2hc55M3OlUJSk= @@ -266,21 +277,21 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evanphx/json-patch v0.0.0-20200808040245-162e5629780b/go.mod h1:NAJj0yf/KaRKURN6nyi7A9IZydMivZEm9oQLWNjfKDc= -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/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= +github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/form3tech-oss/jwt-go v3.2.2+incompatible h1:TcekIExNqud5crz4xD2pavyTgWiPvpYe4Xau31I0PRk= +github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.7.3/go.mod h1:V1d2J5pfxYH6EjBAgSK7YNXcXlTWxUHdE1sVDXkjnig= -github.com/frankban/quicktest v1.10.0 h1:Gfh+GAJZOAoKZsIZeZbdn2JF10kN1XHNvjsvQK8gVkE= -github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= +github.com/frankban/quicktest v1.10.2 h1:19ARM85nVi4xH7xPXuc5eM/udya5ieh7b/Sv+d844Tk= +github.com/frankban/quicktest v1.10.2/go.mod h1:K+q6oSqb0W0Ininfk863uOk1lMy69l/P6txr3mVT54s= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= @@ -307,6 +318,8 @@ github.com/go-logfmt/logfmt v0.5.0 h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= 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-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= +github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= 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= @@ -379,13 +392,8 @@ github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2K github.com/go-openapi/validate v0.19.3/go.mod h1:90Vh6jjkTn+OT1Eefm0ZixWNFjhtOH7vS9k0lo6zwJo= github.com/go-openapi/validate v0.19.8 h1:YFzsdWIDfVuLvIOF+ZmKjVg1MbPJ1QgY9PihMwei1ys= github.com/go-openapi/validate v0.19.8/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= -github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/validator/v10 v10.4.0/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= 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= @@ -438,6 +446,7 @@ github.com/gocql/gocql v0.0.0-20200228163523-cd4b606dd2fb h1:H3tisfjQwq9FTyWqlKs github.com/gocql/gocql v0.0.0-20200228163523-cd4b606dd2fb/go.mod h1:DL0ekTmBSTdlNF25Orwt/JMzqIq3EJ4MVa/J/uK64OY= github.com/gofrs/flock v0.8.0 h1:MSdYClljsF3PbENUUEx85nkWfJSGfzYI9yEBZOJz6CY= github.com/gofrs/flock v0.8.0/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gofrs/uuid v3.3.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= @@ -461,9 +470,11 @@ github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3 h1:GV+pQPG/EUUbkh47niozDcADz6go/dUwhVzdUQHIVRw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/mock v1.4.4 h1:l75CXGRSwbaYNpl/Z2X1XIIAMSCquvXgpVZDhwEIJsc= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -478,6 +489,8 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= 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= @@ -526,8 +539,11 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3 h1:x95R7cp+rSeeqAMI2knLtQ0DKlaBhv2NrtrOvafPHRo= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 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= @@ -536,12 +552,15 @@ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201007051231-1066cbb265c7/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= 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.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= @@ -551,15 +570,14 @@ github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ 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-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.4.0 h1:BXDUo8p/DaxC+4FJY/SSx3gvnx9C1VdHNgaUkiEL5mk= -github.com/googleapis/gnostic v0.4.0/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= +github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I= +github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= github.com/gookit/color v1.2.5 h1:s1gzb/fg3HhkSLKyWVUsZcVBUo+R1TwEYTmmxH8gGFg= github.com/gookit/color v1.2.5/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1KB7xg= -github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= -github.com/gophercloud/gophercloud v0.12.0 h1:mZrie07npp6ODiwHZolTicr5jV8Ogn43AvAsSMm6Ork= -github.com/gophercloud/gophercloud v0.12.0/go.mod h1:gmC5oQqMDOMO1t1gq5DquX/yAU808e/4mzjjDA76+Ss= +github.com/gookit/color v1.3.1 h1:PPD/C7sf8u2L8XQPdPgsWRoAiLQGZEZOzU3cf5IYYUk= +github.com/gookit/color v1.3.1/go.mod h1:R3ogXq2B9rTbXoSHJ1HyUVAZ3poOJHpd9nQmyGZsfvQ= +github.com/gophercloud/gophercloud v0.13.0 h1:1XkslZZRm6Ks0bLup+hBNth+KQf+0JA1UeoB7YKw9E8= +github.com/gophercloud/gophercloud v0.13.0/go.mod h1:VX0Ibx85B60B5XOrZr6kaNwrmPUzcmMpwxvQ1WQIIWM= 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/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= @@ -586,18 +604,17 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.9.0/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.14.5/go.mod h1:UJ0EZAp832vCd54Wev9N1BMKEyvcZ5+IM0AwDrnlkEc= -github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw= github.com/grpc-ecosystem/grpc-gateway v1.15.0 h1:ntPNC9TD/6l2XDenJZe6T5lSMg95thpV9sGAqHX4WU8= github.com/grpc-ecosystem/grpc-gateway v1.15.0/go.mod h1:vO11I9oWA+KsxmfFQPhLnnIb1VDE24M+pdxZFiuZcA8= -github.com/grpc-ecosystem/grpc-gateway v1.15.2 h1:HC+hWRWf+v5zTMPyoaYTKIJih+4sd4XRWmj0qlG87Co= -github.com/grpc-ecosystem/grpc-gateway v1.15.2/go.mod h1:vO11I9oWA+KsxmfFQPhLnnIb1VDE24M+pdxZFiuZcA8= +github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= 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.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/api v1.6.0 h1:SZB2hQW8AcTOpfDmiVblQbijxzsRuiyy0JpHfabvHio= -github.com/hashicorp/consul/api v1.6.0/go.mod h1:1NSuaUUkFaJzMasbfq/11wKYWSR67Xn6r2DXKhuDNFg= +github.com/hashicorp/consul/api v1.7.0 h1:tGs8Oep67r8CcA2Ycmb/8BLBcJ70St44mF2X10a/qPg= +github.com/hashicorp/consul/api v1.7.0/go.mod h1:1NSuaUUkFaJzMasbfq/11wKYWSR67Xn6r2DXKhuDNFg= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.6.0 h1:FfhMEkwvQl57CildXJyGHnwGGM4HMODGyfjGwNM1Vdw= @@ -657,8 +674,8 @@ github.com/hashicorp/serf v0.9.3/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKEN github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/hashicorp/yamux v0.0.0-20190923154419-df201c70410d h1:W+SIwDdl3+jXWeidYySAgzytE3piq6GumXeBjFBG67c= github.com/hashicorp/yamux v0.0.0-20190923154419-df201c70410d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/hetznercloud/hcloud-go v1.21.1 h1:LWNozxiZhKmeMqYbAS7KsAcPcxg47afCnTeLKmN+n7w= -github.com/hetznercloud/hcloud-go v1.21.1/go.mod h1:xng8lbDUg+xM1dgc0yGHX5EeqbwIq7UYlMWMTx3SQVg= +github.com/hetznercloud/hcloud-go v1.22.0 h1:CC0jwkaBzwP4ObFE0sdJBTvGh5DE9kB/tuDETnRfOik= +github.com/hetznercloud/hcloud-go v1.22.0/go.mod h1:xng8lbDUg+xM1dgc0yGHX5EeqbwIq7UYlMWMTx3SQVg= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -667,10 +684,10 @@ github.com/imdario/mergo v0.3.9 h1:UauaLniWCFHWd+Jp9oCEkTBj8VO/9DKg3PV3VCNMDIg= github.com/imdario/mergo v0.3.9/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/flux v0.65.0/go.mod h1:BwN2XG2lMszOoquQaFdPET8FRQfrXiZsWmcMO9rkaVY= -github.com/influxdata/influxdb v1.8.2/go.mod h1:SIzcnsjaHRFpmlxpJ4S3NT64qtEKYweNTUMb/vh0OMQ= +github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= +github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/influxdata/influxql v1.1.0/go.mod h1:KpVI7okXjK6PRi3Z5B+mtKZli+R1DnZgb3N+tzevNgo= +github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= @@ -685,13 +702,14 @@ github.com/jingyugao/rowserrcheck v0.0.0-20191204022205-72ab7603b68a/go.mod h1:x github.com/jirfag/go-printf-func-name v0.0.0-20191110105641-45db9963cdd3 h1:jNYPNLe3d8smommaoQlK7LOA5ESyUJJ+Wf79ZtA7Vp4= github.com/jirfag/go-printf-func-name v0.0.0-20191110105641-45db9963cdd3/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc= -github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/jmoiron/sqlx v1.2.1-0.20190826204134-d7d95172beb5/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/joshdk/go-junit v0.0.0-20200702055522-6efcf4050909/go.mod h1:TiiV0PqkaNfFXjEiyjWM3XXrhVyCa1K4Zfga6W52ung= github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -721,6 +739,8 @@ github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0 github.com/klauspost/compress v1.10.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.10.10 h1:a/y8CglcM7gLGYmlbP/stPE5sR3hbhFRUjCBfd/0B3I= github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.0 h1:wJbzvpYMVGG9iTI9VxpnNZfd4DzMPoCWze3GgSqz8yg= +github.com/klauspost/compress v1.11.0/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= @@ -732,6 +752,8 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= 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= @@ -741,7 +763,6 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/kyoh86/exportloopref v0.1.7 h1:u+iHuTbkbTS2D/JP7fCuZDo/t3rBVGo3Hf58Rc+lQVY= github.com/kyoh86/exportloopref v0.1.7/go.mod h1:h1rDl2Kdj97+Kwh4gdz3ujE7XHmH51Q0lUiZ1z4NLj8= -github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leoluk/perflib_exporter v0.1.0 h1:fXe/mDaf9jR+Zk8FjFlcCSksACuIj2VNN4GyKHmQqtA= github.com/leoluk/perflib_exporter v0.1.0/go.mod h1:rpV0lYj7lemdTm31t7zpCqYqPnw7xs86f+BaaNBVYFM= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= @@ -869,6 +890,8 @@ github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0 github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.13.0 h1:M76yO2HkZASFjXL0HSoZJ1AYEmQxNJmY41Jx1zNUq1Y= github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0= +github.com/onsi/ginkgo v1.14.1 h1:jMU0WaQrP0a/YAEq8eJmJKjBoMs+pClEr1vDMlM/Do4= +github.com/onsi/ginkgo v1.14.1/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= 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= @@ -877,6 +900,8 @@ github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7J github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.10.2 h1:aY/nuoWlKJud2J6U0E3NWsjlg+0GtwXxgEqthRdzlcs= +github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= @@ -899,8 +924,8 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2 h1:nY8Hti+WKaP0cRsSeQ026wU03QsM762XBeCXBb9NAWI= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.4-0.20200818204336-dc18516bbb4c h1:r2TNN46RxW319R/erz4ZBF2R0U2hbGQejvSMo8vecAw= -github.com/openzipkin/zipkin-go v0.2.4-0.20200818204336-dc18516bbb4c/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= +github.com/openzipkin/zipkin-go v0.2.5 h1:UwtQQx2pyPIgWYHRg+epgdx1/HnBQTgN3/oIYEJTQzU= +github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= github.com/orijtech/prometheus-go-metrics-exporter v0.0.6 h1:ExkpQsyDDcyp0U3zhoNUQaCQ/o0Ovq7e1jRCL9lQ/4o= github.com/orijtech/prometheus-go-metrics-exporter v0.0.6/go.mod h1:BiTx/ugZex8LheBk3j53tktWaRdFjV5FCfT2o0P7msE= github.com/ory/go-acc v0.2.6 h1:YfI+L9dxI7QCtWn2RbawqO0vXhiThdXu/RgizJBbaq0= @@ -928,6 +953,8 @@ github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d h1:CdDQnGF8Nq9oc github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= 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/philhofer/fwd v1.1.0 h1:PAdZw9+/BCf4gc/kA2L/PbGPkFe72Kl2GLZXTG8HpU8= +github.com/philhofer/fwd v1.1.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v0.0.0-20190327172049-315a67e90e41/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= 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= @@ -961,6 +988,8 @@ github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3O github.com/prometheus/client_golang v1.6.0/go.mod h1:ZLOG9ck3JLRdB5MgO8f+lLTe83AXG6ro35rLTxvnIl4= github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.8.0 h1:zvJNkoCFAnYFNC24FV8nW4JdRJ3GIFcLbg65lL/JDcw= +github.com/prometheus/client_golang v1.8.0/go.mod h1:O9VU6huf47PktckDQfMTX0Y8tY0/7TSWwj+ITvv0TnM= 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= @@ -977,8 +1006,6 @@ github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+ github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.13.0 h1:vJlpe9wPgDRM1Z+7Wj3zUUjY1nr6/1jNKyl7llliccg= -github.com/prometheus/common v0.13.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.14.0 h1:RHRyE8UocrbjU+6UvRzwi6HjiDfxrrBU91TtbKzkGp4= github.com/prometheus/common v0.14.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -992,8 +1019,10 @@ github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+Gx github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/prometheus v1.8.2-0.20200827201422-1195cc24e3c8 h1:loobW5yeZ4zvv/hE5tin7j6XR5KBAJbOmbc0jwWo+hg= -github.com/prometheus/prometheus v1.8.2-0.20200827201422-1195cc24e3c8/go.mod h1:Td6hjwdXDmVt5CI9T03Sw+yBNxLBq/Yx3ZtmtP8zlCA= +github.com/prometheus/procfs v0.2.0 h1:wH4vA7pcjKuZzjF7lM8awk4fnuJO6idemZXoKnULUx4= +github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/prometheus v1.8.2-0.20201105135750-00f16d1ac3a4 h1:54z99l8Q3TuyyeoNZkyY4Lq7eFht9J2Mynq4T1Hxbzc= +github.com/prometheus/prometheus v1.8.2-0.20201105135750-00f16d1ac3a4/go.mod h1:XYjkJiog7fyQu3puQNivZPI2pNq1C/775EIoHfDvuvY= github.com/prometheus/statsd_exporter v0.15.0 h1:UiwC1L5HkxEPeapXdm2Ye0u1vUJfTj7uwT5yydYpa1E= github.com/prometheus/statsd_exporter v0.15.0/go.mod h1:Dv8HnkoLQkeEjkIE4/2ndAA7WL1zHKK7WMqFQqu72rw= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= @@ -1031,7 +1060,6 @@ github.com/samuel/go-zookeeper v0.0.0-20200724154423-2164a8ac840e h1:CGjiMQ0wMH4 github.com/samuel/go-zookeeper v0.0.0-20200724154423-2164a8ac840e/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/sanity-io/litter v1.2.0/go.mod h1:JF6pZUFgu2Q0sBZ+HSV35P8TVPI1TTzEwyu9FXAw2W4= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= 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= @@ -1039,14 +1067,16 @@ github.com/securego/gosec v0.0.0-20200203094520-d13bb6d2420c h1:pThusIwnQVcKbuZS github.com/securego/gosec v0.0.0-20200203094520-d13bb6d2420c/go.mod h1:gp0gaHj0WlmPh9BdsTmo1aq6C27yIPWdxCKGFGdVKBE= github.com/securego/gosec/v2 v2.4.0 h1:ivAoWcY5DMs9n04Abc1VkqZBO0FL0h4ShTcVsC53lCE= github.com/securego/gosec/v2 v2.4.0/go.mod h1:0/Q4cjmlFDfDUj1+Fib61sc+U5IQb2w+Iv9/C3wPVko= +github.com/securego/gosec/v2 v2.5.0 h1:kjfXLeKdk98gBe2+eYRFMpC4+mxmQQtbidpiiOQ69Qc= +github.com/securego/gosec/v2 v2.5.0/go.mod h1:L/CDXVntIff5ypVHIkqPXbtRpJiNCh6c6Amn68jXDjo= github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc= -github.com/shirou/gopsutil v2.20.6+incompatible h1:P37G9YH8M4vqkKcwBosp+URN5O8Tay67D2MbR361ioY= -github.com/shirou/gopsutil v2.20.6+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil v3.20.10+incompatible h1:kQuRhh6h6y4luXvnmtu/lJEGtdJ3q8lbu9NQY99GP+o= +github.com/shirou/gopsutil v3.20.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/go v0.0.0-20180423040247-9e1955d9fb6e h1:MZM7FHLqUHYI0Y/mQAt3d2aYa0SiNms/hFqC9qJYolM= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= @@ -1055,7 +1085,7 @@ github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOms github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= -github.com/shurcooL/vfsgen v0.0.0-20200627165143-92b8a710ab6c/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= +github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/sirupsen/logrus v1.2.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= @@ -1086,6 +1116,8 @@ github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3 github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/cobra v1.1.1 h1:KfztREH0tPxJJ+geloSLaAkaPkr4ki2Er5quFV1TDo4= +github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= @@ -1097,6 +1129,7 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An 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.6.2/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= +github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/ssgreg/nlreturn/v2 v2.1.0 h1:6/s4Rc49L6Uo6RLjhWZGBpWWjfzk2yrf1nIW8m4wgVA= @@ -1114,7 +1147,6 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= @@ -1134,19 +1166,18 @@ github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhV 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.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= -github.com/tinylib/msgp v1.1.2 h1:gWmO7n0Ys2RBEb7GPYB9Ujq8Mk5p2U08lRnmMcGy6BQ= -github.com/tinylib/msgp v1.1.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= +github.com/tinylib/msgp v1.1.4 h1:LoJjc8YHnBUXK7kR6ocUJ0xHuonGLzpzV3RxMZ/4G4M= +github.com/tinylib/msgp v1.1.4/go.mod h1:fw0zyanbVLI0CNimiAzGT53nQhEXzCaKYmTfeon9xHc= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tommy-muehle/go-mnd v1.3.1-0.20200224220436-e6f9a994e8fa h1:RC4maTWLKKwb7p1cnoygsbKIgNlJqSYBeAFON3Ar8As= github.com/tommy-muehle/go-mnd v1.3.1-0.20200224220436-e6f9a994e8fa/go.mod h1:dSUh0FtTP8VhvkL1S+gUR1OKd9ZnSaozuI6r3m6wOig= +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/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/uber/jaeger-client-go v2.23.1+incompatible h1:uArBYHQR0HqLFFAypI7RsWTzPSj/bDpmZZuQjMLSg1A= github.com/uber/jaeger-client-go v2.23.1+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/uber/jaeger-client-go v2.25.0+incompatible h1:IxcNZ7WRY1Y3G4poYlx24szfsn/3LvK9QHCq9oQw8+U= github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= -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/jaeger-lib v2.4.0+incompatible h1:fY7QsGQWiCt8pajv4r7JEvmATdCVaWxXbjwyYwsNaLQ= github.com/uber/jaeger-lib v2.4.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= @@ -1177,6 +1208,7 @@ github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1: github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= @@ -1194,10 +1226,10 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4 h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opentelemetry.io/collector v0.12.0 h1:SQFxSQBqD8P0ki29xrH+LaB1gBpLxAWcnmUL9/yaDKE= -go.opentelemetry.io/collector v0.12.0/go.mod h1:mKQha2MeRhJi0rHS8yvZlzFk28ZVBCf6qMTsjGX0n1Y= -go.opentelemetry.io/collector v0.14.0 h1:ZAMJPY89SizyvRGBnKLKOIOMm26eKhJtmfnc+GthryU= -go.opentelemetry.io/collector v0.14.0/go.mod h1:itblxiZ5r454TNNQVvcAp7vj7LbwCdeNRtodo2t+lGM= +go.opencensus.io v0.22.5 h1:dntmOdLpSpHlVqbW5Eay97DelsZHe+55D+xC6i0dDS0= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opentelemetry.io/collector v0.15.0 h1:6KhyZq5NajCf2mAkZGcqpArLI/inkfm4JpAUrtPes8w= +go.opentelemetry.io/collector v0.15.0/go.mod h1:QeiCQI3arU/r+kz0EahWIn9q5CZscNT9iI8nT5Ij5WE= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= 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= @@ -1222,7 +1254,6 @@ go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/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-20190404164418-38d8ce5564a5/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= @@ -1236,10 +1267,13 @@ golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191202143827-86a70503ff7e/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 h1:hb9wdF1z5waM+dSIICn1l0DkLVDT3hqhhQsDNUmHPRE= +golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1276,7 +1310,6 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -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= @@ -1297,28 +1330,35 @@ golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190921015927-1a5e07d1ff72/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-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200528225125-3c3fba18258b/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344 h1:vGXIOMxbNfDTk/aXCmfdLgkrSV+Z2tcbze+pEc3v5W4= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 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= @@ -1326,6 +1366,8 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43 h1:ld7aEMNHoBnnDAX15v1T6z31v8HwR2A9FYOuAhWqkwc= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 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= @@ -1336,7 +1378,9 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208 h1:qwRHBd0NqMbJxfbotnDhm2ByMI1Shq4Y6oRJo21SGJA= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.0.0-20200930132711-30421366ff76/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 h1:SQFwaSi55rU7vdNs9Yr0Z324VNlrF+0wMqRXT4St8ck= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1347,7 +1391,6 @@ golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5h 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-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-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1374,7 +1417,6 @@ golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191113165036-4c7a9d0fe056/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1391,17 +1433,26 @@ golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200821140526-fda516888d29 h1:mNuhGagCf3lDDm5C0376C/sxh6V7fy9WbdEu/YDNA04= -golang.org/x/sys v0.0.0-20200821140526-fda516888d29/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201008064518-c1f3e3309c71/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211 h1:9UQO31fZ+0aKQOFldThf7BKPMJTiBfWycGh/u3UoO88= +golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1462,7 +1513,6 @@ golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191203134012-c197fd4bf371/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1477,22 +1527,36 @@ golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200321224714-0d839f3cf2ed/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200410194907-79a7a3126eef/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200513201620-d5fe73897c97/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200519015757-0d0afa43d58a/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200603131246-cc40288be839/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200701041122-1837592efa10/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305 h1:yaM5S0KcY0lIoZo7Fl+oi91b/DdlU2zuWpfHrpWbCS0= golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200822203824-307de81be3f4 h1:r0nbB2EeRbGpnVeqxlkgiBpNi/bednpSg78qzZGOuv0= -golang.org/x/tools v0.0.0-20200822203824-307de81be3f4/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201007032633-0806396f153e/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201008025239-9df69603baec/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9 h1:sEvmEcJVKBNUvgCUClbUQeHOAa9U0I2Ce1BooMvVCY4= +golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= @@ -1515,9 +1579,16 @@ google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsb google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.29.0 h1:BaiDisFir8O4IJxvAabCGGkQ6yCJegNQqSVoYUNAnbk= google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.32.0 h1:Le77IccnTqEa8ryp9wIpX5W3zYm7Gf9LhOp9PHcwFts= +google.golang.org/api v0.32.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= 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.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1547,13 +1618,23 @@ google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvx google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200624020401-64a14ca9d1ad h1:uAwc13+y0Y8QZLTYhLCu6lHhnG99ecQU5FYTj8zxAng= google.golang.org/genproto v0.0.0-20200624020401-64a14ca9d1ad/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200815001618-f69a88009b70 h1:wboULUXGF3c5qdUnKp+6gLAccE6PRpa/czkYvQ4UXv8= -google.golang.org/genproto v0.0.0-20200815001618-f69a88009b70/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d h1:92D1fum1bJLKSdr11OJ+54YeCMCGYIygTA7R/YZxH5M= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= 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= @@ -1572,8 +1653,13 @@ google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8 google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.32.0 h1:zWTV+LMdc3kaiJMSTOFz2UgSBgx8RNQoTGiZu3fR9S0= google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc/examples v0.0.0-20200728065043-dfc0c05b2da9 h1:f+/+gfZ/tfaHBXXiv1gWRmCej6wlX3mLY4bnLpI99wk= google.golang.org/grpc/examples v0.0.0-20200728065043-dfc0c05b2da9/go.mod h1:5j1uub0jRGhRiSghIlrThmBUgcgLXOVJQ/l1getT4uo= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -1594,6 +1680,8 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U= +gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= @@ -1629,12 +1717,10 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200601152816-913338de1bd2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= @@ -1646,26 +1732,29 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.5 h1:nI5egYTGJakVyOryqLs1cQO5dO0ksin5XXs2pspk75k= honnef.co/go/tools v0.0.1-2020.1.5/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.18.8 h1:aIKUzJPb96f3fKec2lxtY7acZC9gQNDLVhfSGpxBAC4= -k8s.io/api v0.18.8/go.mod h1:d/CXqwWv+Z2XEG1LgceeDmHQwpUJhROPx16SlxJgERY= -k8s.io/apimachinery v0.18.8 h1:jimPrycCqgx2QPearX3to1JePz7wSbVLq+7PdBTTwQ0= -k8s.io/apimachinery v0.18.8/go.mod h1:6sQd+iHEqmOtALqOFjSWp2KZ9F0wlU/nWm0ZgsYWMig= -k8s.io/client-go v0.18.8 h1:SdbLpIxk5j5YbFr1b7fq8S7mDgDjYmUxSbszyoesoDM= -k8s.io/client-go v0.18.8/go.mod h1:HqFqMllQ5NnQJNwjro9k5zMyfhZlOwpuTLVrxjkYSxU= -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= +honnef.co/go/tools v0.0.1-2020.1.6 h1:W18jzjh8mfPez+AwGLxmOImucz/IFjpNlrKVnaj2YVc= +honnef.co/go/tools v0.0.1-2020.1.6/go.mod h1:pyyisuGw24ruLjrr1ddx39WE0y9OooInRzEYLhQB2YY= +k8s.io/api v0.19.2 h1:q+/krnHWKsL7OBZg/rxnycsl9569Pud76UJ77MvKXms= +k8s.io/api v0.19.2/go.mod h1:IQpK0zFQ1xc5iNIQPqzgoOwuFugaYHK4iCknlAQP9nI= +k8s.io/apimachinery v0.19.2 h1:5Gy9vQpAGTKHPVOh5c4plE274X8D/6cuEiTO2zve7tc= +k8s.io/apimachinery v0.19.2/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= +k8s.io/client-go v0.19.2 h1:gMJuU3xJZs86L1oQ99R4EViAADUPMHHtS9jFshasHSc= +k8s.io/client-go v0.19.2/go.mod h1:S5wPhCqyDNAlzM9CnEdgTGV4OqhsW3jGO1UM1epwfJA= +k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.0.0 h1:Foj74zO6RbjjP4hBEKjnYtjjAhGg4jNynUdYF6fJrok= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= -k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6 h1:Oh3Mzx5pJ+yIumsAD0MOECPVeXsVot0UkiaCGVyfGQY= -k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= -k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= -k8s.io/utils v0.0.0-20200414100711-2df71ebbae66 h1:Ly1Oxdu5p5ZFmiVT71LFgeZETvMfZ1iBIGeOenT2JeM= -k8s.io/utils v0.0.0-20200414100711-2df71ebbae66/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= +k8s.io/klog/v2 v2.3.0 h1:WmkrnW7fdrm0/DMClc+HIxtftvxVIPAhlVwMQo5yLco= +k8s.io/klog/v2 v2.3.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= +k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 h1:+WnxoVtG8TMiudHBSEtrVL1egv36TkkJm+bA8AxicmQ= +k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= +k8s.io/utils v0.0.0-20200729134348-d5654de09c73 h1:uJmqzgNWG7XyClnU/mLPBWwfKKF1K8Hf8whTseBgJcg= +k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= mvdan.cc/gofumpt v0.0.0-20200709182408-4fd085cb6d5f h1:gi7cb8HTDZ6q8VqsUpkdoFi3vxwHMneQ6+Q5Ap5hjPE= mvdan.cc/gofumpt v0.0.0-20200709182408-4fd085cb6d5f/go.mod h1:9VQ397fNXEnF84t90W4r4TRCQK+pg9f8ugVfyj+S26w= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= @@ -1678,9 +1767,8 @@ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8 rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= -sigs.k8s.io/structured-merge-diff/v3 v3.0.0 h1:dOmIZBMfhcHS09XZkMyUgkq5trg3/jRyJYFZUiaOp8E= -sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= +sigs.k8s.io/structured-merge-diff/v4 v4.0.1 h1:YXTMot5Qz/X1iBRJhAt+vI+HVttY0WkSqqhKxQ0xVbA= +sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=