From 648a27a8e9e2b94ef6d5d4e639cf6a3f749ca14a Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Fri, 25 Sep 2020 16:16:09 +0200 Subject: [PATCH 01/25] extract redisClient; add notification and SignalEvent --- go.sum | 7 --- network/client.go | 16 +++++++ peek/peek.go | 102 ++++++++++++++++++++++++++++++++++++++++ runtime/notification.go | 10 ++++ sync/client.go | 31 ++++++++---- sync/client_state.go | 31 ++++++++++++ 6 files changed, 180 insertions(+), 17 deletions(-) create mode 100644 peek/peek.go create mode 100644 runtime/notification.go diff --git a/go.sum b/go.sum index 81aea5a..e9e7e7e 100644 --- a/go.sum +++ b/go.sum @@ -36,7 +36,6 @@ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfU github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= @@ -49,7 +48,6 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -87,7 +85,6 @@ github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+ github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -118,7 +115,6 @@ 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/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= @@ -149,7 +145,6 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 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-20190923162816-aa69164e4478 h1:l5EDrHhldLYb3ZRHDUhXF7Om7MvYXnkV9/iQNo1lX6g= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191112182307-2180aed22343 h1:00ohfJ4K98s3m6BGUoBd8nyfp4Yl0GoIKvw5abItTjI= golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -183,7 +178,6 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f h1:kDxGY2VmgABOe55qheT/TFqUMtcTHnomIPS1iv3G4Ms= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -204,7 +198,6 @@ google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQ google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= diff --git a/network/client.go b/network/client.go index 250390e..c533201 100644 --- a/network/client.go +++ b/network/client.go @@ -34,6 +34,14 @@ func NewClient(client sync.Client, runenv *runtime.RunEnv) *Client { // WaitNetworkInitialized waits for the sidecar to initialize the network, if // the sidecar is enabled. If not, it returns immediately. func (c *Client) WaitNetworkInitialized(ctx context.Context) error { + synccl, ok := c.client.(*sync.Client) + if ok { + err := synccl.SignalEvent(ctx, &runtime.Notification{GroupID: c.runenv.TestGroupID, Scope: "stage", EventType: "entry", StageName: "network-initialized"}) + if err != nil { + return err + } + } + if c.runenv.TestSidecar { err := <-c.client.MustBarrier(ctx, "network-initialized", c.runenv.TestInstanceCount).C if err != nil { @@ -42,6 +50,14 @@ func (c *Client) WaitNetworkInitialized(ctx context.Context) error { } } c.runenv.RecordMessage(InitialisationSuccessful) + + if ok { + err := synccl.SignalEvent(ctx, &runtime.Notification{GroupID: c.runenv.TestGroupID, Scope: "stage", EventType: "exit", StageName: "network-initialized"}) + if err != nil { + return err + } + } + return nil } diff --git a/peek/peek.go b/peek/peek.go new file mode 100644 index 0000000..b27530e --- /dev/null +++ b/peek/peek.go @@ -0,0 +1,102 @@ +package peek + +import ( + "encoding/json" + "fmt" + "time" + + "github.com/go-redis/redis/v7" + "github.com/testground/sdk-go/runtime" + "github.com/testground/sdk-go/sync" +) + +var DefaultRedisOpts = redis.Options{ + MinIdleConns: 2, // allow the pool to downsize to 0 conns. + PoolSize: 5, // one for subscriptions, one for nonblocking operations. + PoolTimeout: 3 * time.Minute, // amount of time a waiter will wait for a conn to become available. + MaxRetries: 30, + MinRetryBackoff: 1 * time.Second, + MaxRetryBackoff: 3 * time.Second, + DialTimeout: 10 * time.Second, + ReadTimeout: 10 * time.Second, + WriteTimeout: 10 * time.Second, + IdleCheckFrequency: 30 * time.Second, + MaxConnAge: 2 * time.Minute, +} + +//func MonitorBarriers(rp *runtime.RunParams) { +//host := "testground-infra-redis-headless" +//port := 6379 +//opts := DefaultRedisOpts +//opts.Addr = fmt.Sprintf("%s:%d", host, port) +//client := redis.NewClient(&opts) + +//key := fmt.Sprintf("run:%s:plan:%s:case:%s", rp.TestRun, rp.TestPlan, rp.TestCase) + +//members, err := client.SMembers(key).Result() +//if err != nil { +//panic(err) +//} + +//spew.Dump(members) + +////vals, err := client.MGet(key).Result() +////if err != nil { +////panic(err) +////} + +////v := vals[0] + +////if v == nil { +////return +////} + +////curr, err := strconv.ParseInt(v.(string), 10, 64) +////if err != nil { +////panic(err) +////} + +////fmt.Println(curr) +////spew.Dump(curr) +//} + +func MonitorBarriers(rp *runtime.RunParams, lastid string) (retlastid string, nots []*runtime.Notification) { + host := "testground-infra-redis-headless" + port := 6379 + opts := DefaultRedisOpts + opts.Addr = fmt.Sprintf("%s:%d", host, port) + client := redis.NewClient(&opts) + + key := fmt.Sprintf("run:%s:plan:%s:case:%s", rp.TestRun, rp.TestPlan, rp.TestCase) + + args := new(redis.XReadArgs) + args.Streams = []string{key, lastid} + args.Block = 1 * time.Second + args.Count = 10000 + + streams, err := client.XRead(args).Result() + if err != nil { + if err == redis.Nil { + return lastid, nil + } + + panic(err) + } + + for _, xr := range streams { + for _, msg := range xr.Messages { + payload := msg.Values[sync.RedisPayloadKey].(string) + + notification := &runtime.Notification{} + err := json.Unmarshal([]byte(payload), notification) + if err != nil { + panic(err) + } + + nots = append(nots, notification) + + retlastid = msg.ID + } + } + return +} diff --git a/runtime/notification.go b/runtime/notification.go new file mode 100644 index 0000000..7b9d64c --- /dev/null +++ b/runtime/notification.go @@ -0,0 +1,10 @@ +package runtime + +type Notification struct { + InstanceID string `json:"instance_id"` + GroupID string `json:"group_id"` + GlobalSeqNum string `json:"global_seq_num"` + EventType string `json:"event_type"` // start, end, failure, crash, entry, exit for stages + Scope string `json:"scope"` // test case, test case stage + StageName string `json:"stage_name"` +} diff --git a/sync/client.go b/sync/client.go index e69a33f..fd29340 100644 --- a/sync/client.go +++ b/sync/client.go @@ -65,7 +65,14 @@ type DefaultClient struct { // // For test plans, a suitable context to pass here is the background context. func NewBoundClient(ctx context.Context, runenv *runtime.RunEnv) (*DefaultClient, error) { - return newClient(ctx, runenv.SLogger(), func(ctx context.Context) *runtime.RunParams { + log := runenv.SLogger() + + rclient, err := redisClient(ctx, log) + if err != nil { + return nil, fmt.Errorf("failed to create redis client: %w", err) + } + + return newClient(ctx, rclient, log, func(ctx context.Context) *runtime.RunParams { return &runenv.RunParams }) } @@ -94,7 +101,16 @@ func MustBoundClient(ctx context.Context, runenv *runtime.RunEnv) *DefaultClient // A suitable context to pass here is the background context of the main // process. func NewGenericClient(ctx context.Context, log *zap.SugaredLogger) (*DefaultClient, error) { - return newClient(ctx, log, GetRunParams) + rclient, err := redisClient(ctx, log) + if err != nil { + return nil, fmt.Errorf("failed to create redis client: %w", err) + } + + return newClient(ctx, rclient, log, GetRunParams) +} + +func NewGenericClientWithRedis(ctx context.Context, rclient *redis.Client, log *zap.SugaredLogger) (*DefaultClient, error) { + return newClient(ctx, rclient, log, GetRunParams) } // MustGenericClient creates a new generic client by calling NewGenericClient, @@ -108,19 +124,14 @@ func MustGenericClient(ctx context.Context, log *zap.SugaredLogger) *DefaultClie } // newClient creates a new sync client. -func newClient(ctx context.Context, log *zap.SugaredLogger, extractor func(ctx context.Context) *runtime.RunParams) (*DefaultClient, error) { - rclient, err := redisClient(ctx, log) - if err != nil { - return nil, fmt.Errorf("failed to create redis client: %w", err) - } - +func newClient(ctx context.Context, redisClient *redis.Client, log *zap.SugaredLogger, extractor func(ctx context.Context) *runtime.RunParams) (*DefaultClient, error) { ctx, cancel := context.WithCancel(ctx) c := &DefaultClient{ ctx: ctx, cancel: cancel, log: log, extractor: extractor, - rclient: rclient, + rclient: redisClient, barrierCh: make(chan *newBarrier), newSubCh: make(chan *newSubscription), } @@ -139,7 +150,7 @@ func newClient(ctx context.Context, log *zap.SugaredLogger, extractor func(ctx c for { select { case <-tick.C: - stats := rclient.PoolStats() + stats := redisClient.PoolStats() log.Debugw("redis pool stats", "stats", stats) case <-ctx.Done(): return diff --git a/sync/client_state.go b/sync/client_state.go index 023f75c..06a2a0d 100644 --- a/sync/client_state.go +++ b/sync/client_state.go @@ -2,6 +2,10 @@ package sync import ( "context" + "encoding/json" + "fmt" + + "github.com/go-redis/redis/v7" ) // Barrier sets a barrier on the supplied State that fires when it reaches its @@ -73,3 +77,30 @@ func (c *DefaultClient) SignalEntry(ctx context.Context, state State) (after int c.log.Debugw("new value of state", "key", key, "value", seq) return seq, err } + +func (c *Client) SignalEvent(ctx context.Context, event interface{}) (err error) { + rp := c.extractor(ctx) + if rp == nil { + return ErrNoRunParameters + } + + key := fmt.Sprintf("run:%s:plan:%s:case:%s", rp.TestRun, rp.TestPlan, rp.TestCase) + + ev, err := json.Marshal(event) + if err != nil { + return err + } + + args := &redis.XAddArgs{ + Stream: key, + ID: "*", + Values: map[string]interface{}{RedisPayloadKey: ev}, + } + + _, err = c.rclient.XAdd(args).Result() + if err != nil { + return err + } + + return nil +} From bc0da66feb11898e750b772ce72e6954db516d90 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Fri, 25 Sep 2020 16:19:41 +0200 Subject: [PATCH 02/25] rename MonitorBarriers to MonitorEvents --- peek/peek.go | 38 +------------------------------------- 1 file changed, 1 insertion(+), 37 deletions(-) diff --git a/peek/peek.go b/peek/peek.go index b27530e..8d53cb5 100644 --- a/peek/peek.go +++ b/peek/peek.go @@ -24,43 +24,7 @@ var DefaultRedisOpts = redis.Options{ MaxConnAge: 2 * time.Minute, } -//func MonitorBarriers(rp *runtime.RunParams) { -//host := "testground-infra-redis-headless" -//port := 6379 -//opts := DefaultRedisOpts -//opts.Addr = fmt.Sprintf("%s:%d", host, port) -//client := redis.NewClient(&opts) - -//key := fmt.Sprintf("run:%s:plan:%s:case:%s", rp.TestRun, rp.TestPlan, rp.TestCase) - -//members, err := client.SMembers(key).Result() -//if err != nil { -//panic(err) -//} - -//spew.Dump(members) - -////vals, err := client.MGet(key).Result() -////if err != nil { -////panic(err) -////} - -////v := vals[0] - -////if v == nil { -////return -////} - -////curr, err := strconv.ParseInt(v.(string), 10, 64) -////if err != nil { -////panic(err) -////} - -////fmt.Println(curr) -////spew.Dump(curr) -//} - -func MonitorBarriers(rp *runtime.RunParams, lastid string) (retlastid string, nots []*runtime.Notification) { +func MonitorEvents(rp *runtime.RunParams, lastid string) (retlastid string, nots []*runtime.Notification) { host := "testground-infra-redis-headless" port := 6379 opts := DefaultRedisOpts From 2da1b41ec4d24152b1346a7c04c47f618b8c7369 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Fri, 25 Sep 2020 16:31:46 +0200 Subject: [PATCH 03/25] attach sync client for runenv --- network/client.go | 2 +- peek/peek.go | 5 ++++- runtime/runenv.go | 10 ++++++++++ runtime/runenv_events.go | 5 +++++ sync/client_state.go | 2 +- 5 files changed, 21 insertions(+), 3 deletions(-) diff --git a/network/client.go b/network/client.go index c533201..7b10156 100644 --- a/network/client.go +++ b/network/client.go @@ -34,7 +34,7 @@ func NewClient(client sync.Client, runenv *runtime.RunEnv) *Client { // WaitNetworkInitialized waits for the sidecar to initialize the network, if // the sidecar is enabled. If not, it returns immediately. func (c *Client) WaitNetworkInitialized(ctx context.Context) error { - synccl, ok := c.client.(*sync.Client) + synccl, ok := c.client.(*sync.DefaultClient) if ok { err := synccl.SignalEvent(ctx, &runtime.Notification{GroupID: c.runenv.TestGroupID, Scope: "stage", EventType: "entry", StageName: "network-initialized"}) if err != nil { diff --git a/peek/peek.go b/peek/peek.go index 8d53cb5..4dc3942 100644 --- a/peek/peek.go +++ b/peek/peek.go @@ -32,6 +32,7 @@ func MonitorEvents(rp *runtime.RunParams, lastid string) (retlastid string, nots client := redis.NewClient(&opts) key := fmt.Sprintf("run:%s:plan:%s:case:%s", rp.TestRun, rp.TestPlan, rp.TestCase) + fmt.Println(key) args := new(redis.XReadArgs) args.Streams = []string{key, lastid} @@ -44,7 +45,9 @@ func MonitorEvents(rp *runtime.RunParams, lastid string) (retlastid string, nots return lastid, nil } - panic(err) + fmt.Println(err.Error()) + return + //panic(err) } for _, xr := range streams { diff --git a/runtime/runenv.go b/runtime/runenv.go index 3e08baa..8b64662 100644 --- a/runtime/runenv.go +++ b/runtime/runenv.go @@ -1,6 +1,7 @@ package runtime import ( + "context" "os" gosync "sync" "time" @@ -32,6 +33,7 @@ type RunEnv struct { logger *zap.Logger metrics *Metrics + synccl SyncClient wg gosync.WaitGroup closeCh chan struct{} @@ -70,6 +72,14 @@ func NewRunEnv(params RunParams) *RunEnv { return re } +type SyncClient interface { + SignalEvent(context.Context, interface{}) error +} + +func (re *RunEnv) AttachSyncClient(synccl SyncClient) { + re.synccl = synccl +} + // R returns a metrics object for results. func (re *RunEnv) R() *MetricsApi { return re.metrics.R() diff --git a/runtime/runenv_events.go b/runtime/runenv_events.go index 274aec9..bc26d66 100644 --- a/runtime/runenv_events.go +++ b/runtime/runenv_events.go @@ -1,6 +1,7 @@ package runtime import ( + "context" "fmt" "runtime/debug" @@ -120,6 +121,10 @@ func (re *RunEnv) RecordSuccess() { } re.logger.Info("", zap.Object("event", evt)) re.metrics.recordEvent(&evt) + + if re.synccl != nil { + _ = re.synccl.SignalEvent(context.Background(), &Notification{GroupID: re.RunParams.TestGroupID, Scope: "test-case", EventType: "outcome-ok"}) + } } // RecordFailure records that the calling instance failed with the supplied diff --git a/sync/client_state.go b/sync/client_state.go index 06a2a0d..edd627e 100644 --- a/sync/client_state.go +++ b/sync/client_state.go @@ -78,7 +78,7 @@ func (c *DefaultClient) SignalEntry(ctx context.Context, state State) (after int return seq, err } -func (c *Client) SignalEvent(ctx context.Context, event interface{}) (err error) { +func (c *DefaultClient) SignalEvent(ctx context.Context, event interface{}) (err error) { rp := c.extractor(ctx) if rp == nil { return ErrNoRunParameters From ef833a883d1c9b2f8645394baf1bc07c758cda9f Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Fri, 25 Sep 2020 17:35:23 +0200 Subject: [PATCH 04/25] add signalevent to interface --- sync/interface.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sync/interface.go b/sync/interface.go index d27d799..1f3f283 100644 --- a/sync/interface.go +++ b/sync/interface.go @@ -25,4 +25,6 @@ type Client interface { MustPublishAndWait(ctx context.Context, topic *Topic, payload interface{}, state State, target int) (seq int64) MustPublishSubscribe(ctx context.Context, topic *Topic, payload interface{}, ch interface{}) (seq int64, sub *Subscription) MustSignalAndWait(ctx context.Context, state State, target int) (seq int64) + + SignalEvent(context.Context, interface{}) error } From 8021b353b1dd561013775dd73eb0c82c23f8fbcc Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Fri, 25 Sep 2020 17:43:32 +0200 Subject: [PATCH 05/25] debug --- peek/peek.go | 5 +---- run/invoker.go | 10 +++++++++- runtime/notification.go | 12 ++++++------ sync/client_state.go | 4 ++++ 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/peek/peek.go b/peek/peek.go index 4dc3942..8d53cb5 100644 --- a/peek/peek.go +++ b/peek/peek.go @@ -32,7 +32,6 @@ func MonitorEvents(rp *runtime.RunParams, lastid string) (retlastid string, nots client := redis.NewClient(&opts) key := fmt.Sprintf("run:%s:plan:%s:case:%s", rp.TestRun, rp.TestPlan, rp.TestCase) - fmt.Println(key) args := new(redis.XReadArgs) args.Streams = []string{key, lastid} @@ -45,9 +44,7 @@ func MonitorEvents(rp *runtime.RunParams, lastid string) (retlastid string, nots return lastid, nil } - fmt.Println(err.Error()) - return - //panic(err) + panic(err) } for _, xr := range streams { diff --git a/run/invoker.go b/run/invoker.go index 028b419..7f85d7e 100644 --- a/run/invoker.go +++ b/run/invoker.go @@ -85,6 +85,13 @@ func invoke(runenv *runtime.RunEnv, fn interface{}) { runenv.RecordStart() + var closer func() + defer func() { + if closer != nil { + closer() + } + }() + var err error errfile, err := runenv.CreateRawAsset("run.err") if err != nil { @@ -144,7 +151,8 @@ func invoke(runenv *runtime.RunEnv, fn interface{}) { case InitializedTestCaseFn: ic := new(InitContext) ic.init(runenv) - defer ic.close() + //defer ic.close() + closer = ic.close errCh <- f(runenv, ic) default: msg := fmt.Sprintf("unexpected function passed to Invoke*; expected types: TestCaseFn, InitializedTestCaseFn; was: %T", f) diff --git a/runtime/notification.go b/runtime/notification.go index 7b9d64c..9ddac94 100644 --- a/runtime/notification.go +++ b/runtime/notification.go @@ -1,10 +1,10 @@ package runtime type Notification struct { - InstanceID string `json:"instance_id"` - GroupID string `json:"group_id"` - GlobalSeqNum string `json:"global_seq_num"` - EventType string `json:"event_type"` // start, end, failure, crash, entry, exit for stages - Scope string `json:"scope"` // test case, test case stage - StageName string `json:"stage_name"` + //InstanceID string `json:"instance_id"` + //GlobalSeqNum string `json:"global_seq_num"` + GroupID string `json:"group_id"` + EventType string `json:"event_type"` // start, end, failure, crash, entry, exit for stages + Scope string `json:"scope"` // test case, test case stage + StageName string `json:"stage_name"` } diff --git a/sync/client_state.go b/sync/client_state.go index edd627e..60fc8ce 100644 --- a/sync/client_state.go +++ b/sync/client_state.go @@ -79,17 +79,20 @@ func (c *DefaultClient) SignalEntry(ctx context.Context, state State) (after int } func (c *DefaultClient) SignalEvent(ctx context.Context, event interface{}) (err error) { + c.log.Debugw("inside signal entry") rp := c.extractor(ctx) if rp == nil { return ErrNoRunParameters } key := fmt.Sprintf("run:%s:plan:%s:case:%s", rp.TestRun, rp.TestPlan, rp.TestCase) + c.log.Debugw("signal entry key", "key", key) ev, err := json.Marshal(event) if err != nil { return err } + c.log.Debugw("signal event marshaled", "key", key) args := &redis.XAddArgs{ Stream: key, @@ -101,6 +104,7 @@ func (c *DefaultClient) SignalEvent(ctx context.Context, event interface{}) (err if err != nil { return err } + c.log.Debugw("signal event xadded", "key", key) return nil } From c690505e252d58c2202f81d09787df3a3276eb0b Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Mon, 28 Sep 2020 16:51:49 +0200 Subject: [PATCH 06/25] attach sync client in init --- run/init_context.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/run/init_context.go b/run/init_context.go index 0725df7..9411828 100644 --- a/run/init_context.go +++ b/run/init_context.go @@ -59,6 +59,8 @@ func (ic *InitContext) init(runenv *runtime.RunEnv) { runenv: runenv, } + runenv.AttachSyncClient(client) + runenv.RecordMessage("claimed sequence numbers; global=%d, group(%s)=%d", ic.GlobalSeq, runenv.TestGroupID, ic.GroupSeq) } From d188a523e3e381140b1ef7965f5a701690b73881 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Mon, 28 Sep 2020 17:04:58 +0200 Subject: [PATCH 07/25] fix tests --- sync/client_inmem.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sync/client_inmem.go b/sync/client_inmem.go index 3656a88..b81b450 100644 --- a/sync/client_inmem.go +++ b/sync/client_inmem.go @@ -119,6 +119,10 @@ func (i *inmemClient) SignalEntry(_ context.Context, state State) (after int64, return v, nil } +func (i *inmemClient) SignalEvent(_ context.Context, event interface{}) error { + return nil +} + func (i *inmemClient) Close() error { return nil } From ca3b09b0b54c722503c0a20e482a71b2d7b12d0f Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Mon, 28 Sep 2020 17:09:13 +0200 Subject: [PATCH 08/25] renames --- network/client.go | 31 +++++++++++++------------------ runtime/runenv.go | 10 +++++----- runtime/runenv_events.go | 4 ++-- 3 files changed, 20 insertions(+), 25 deletions(-) diff --git a/network/client.go b/network/client.go index 7b10156..acf63ba 100644 --- a/network/client.go +++ b/network/client.go @@ -18,32 +18,29 @@ const ( ) type Client struct { - runenv *runtime.RunEnv - client sync.Client + runenv *runtime.RunEnv + syncClient sync.Client } // NewClient returns a new network client. Use this client to request network // changes, such as setting latencies, jitter, packet loss, connectedness, etc. -func NewClient(client sync.Client, runenv *runtime.RunEnv) *Client { +func NewClient(syncClient sync.Client, runenv *runtime.RunEnv) *Client { return &Client{ - runenv: runenv, - client: client, + runenv: runenv, + syncClient: syncClient, } } // WaitNetworkInitialized waits for the sidecar to initialize the network, if // the sidecar is enabled. If not, it returns immediately. func (c *Client) WaitNetworkInitialized(ctx context.Context) error { - synccl, ok := c.client.(*sync.DefaultClient) - if ok { - err := synccl.SignalEvent(ctx, &runtime.Notification{GroupID: c.runenv.TestGroupID, Scope: "stage", EventType: "entry", StageName: "network-initialized"}) - if err != nil { - return err - } + err := c.syncClient.SignalEvent(ctx, &runtime.Notification{GroupID: c.runenv.TestGroupID, Scope: "stage", EventType: "entry", StageName: "network-initialized"}) + if err != nil { + return err } if c.runenv.TestSidecar { - err := <-c.client.MustBarrier(ctx, "network-initialized", c.runenv.TestInstanceCount).C + err := <-c.syncClient.MustBarrier(ctx, "network-initialized", c.runenv.TestInstanceCount).C if err != nil { c.runenv.RecordMessage(InitialisationFailed) return fmt.Errorf("failed to initialize network: %w", err) @@ -51,11 +48,9 @@ func (c *Client) WaitNetworkInitialized(ctx context.Context) error { } c.runenv.RecordMessage(InitialisationSuccessful) - if ok { - err := synccl.SignalEvent(ctx, &runtime.Notification{GroupID: c.runenv.TestGroupID, Scope: "stage", EventType: "exit", StageName: "network-initialized"}) - if err != nil { - return err - } + err = c.syncClient.SignalEvent(ctx, &runtime.Notification{GroupID: c.runenv.TestGroupID, Scope: "stage", EventType: "exit", StageName: "network-initialized"}) + if err != nil { + return err } return nil @@ -97,7 +92,7 @@ func (c *Client) ConfigureNetwork(ctx context.Context, config *Config) (err erro target = c.runenv.TestInstanceCount } - _, err = c.client.PublishAndWait(ctx, topic, config, config.CallbackState, target) + _, err = c.syncClient.PublishAndWait(ctx, topic, config, config.CallbackState, target) if err != nil { err = fmt.Errorf("failed to configure network: %w", err) } diff --git a/runtime/runenv.go b/runtime/runenv.go index 8b64662..ffe6a97 100644 --- a/runtime/runenv.go +++ b/runtime/runenv.go @@ -31,9 +31,9 @@ var ( type RunEnv struct { RunParams - logger *zap.Logger - metrics *Metrics - synccl SyncClient + logger *zap.Logger + metrics *Metrics + syncClient SyncClient wg gosync.WaitGroup closeCh chan struct{} @@ -76,8 +76,8 @@ type SyncClient interface { SignalEvent(context.Context, interface{}) error } -func (re *RunEnv) AttachSyncClient(synccl SyncClient) { - re.synccl = synccl +func (re *RunEnv) AttachSyncClient(sc SyncClient) { + re.syncClient = sc } // R returns a metrics object for results. diff --git a/runtime/runenv_events.go b/runtime/runenv_events.go index bc26d66..022d04c 100644 --- a/runtime/runenv_events.go +++ b/runtime/runenv_events.go @@ -122,8 +122,8 @@ func (re *RunEnv) RecordSuccess() { re.logger.Info("", zap.Object("event", evt)) re.metrics.recordEvent(&evt) - if re.synccl != nil { - _ = re.synccl.SignalEvent(context.Background(), &Notification{GroupID: re.RunParams.TestGroupID, Scope: "test-case", EventType: "outcome-ok"}) + if re.syncClient != nil { + _ = re.syncClient.SignalEvent(context.Background(), &Notification{GroupID: re.RunParams.TestGroupID, Scope: "test-case", EventType: "outcome-ok"}) } } From ce097ee39a493d172bf51c583572525539e56942 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Mon, 28 Sep 2020 17:28:07 +0200 Subject: [PATCH 09/25] rename peek to notificaton --- peek/peek.go => notification/notification.go | 49 +++++++++++++++----- run/invoker.go | 3 +- runtime/notification.go | 2 - runtime/runenv.go | 12 ++--- runtime/runenv_events.go | 4 +- 5 files changed, 47 insertions(+), 23 deletions(-) rename peek/peek.go => notification/notification.go (65%) diff --git a/peek/peek.go b/notification/notification.go similarity index 65% rename from peek/peek.go rename to notification/notification.go index 8d53cb5..fd64e36 100644 --- a/peek/peek.go +++ b/notification/notification.go @@ -1,8 +1,10 @@ -package peek +package notification import ( "encoding/json" "fmt" + "os" + "strconv" "time" "github.com/go-redis/redis/v7" @@ -10,6 +12,11 @@ import ( "github.com/testground/sdk-go/sync" ) +const ( + EnvRedisHost = "REDIS_HOST" + EnvRedisPort = "REDIS_PORT" +) + var DefaultRedisOpts = redis.Options{ MinIdleConns: 2, // allow the pool to downsize to 0 conns. PoolSize: 5, // one for subscriptions, one for nonblocking operations. @@ -24,27 +31,46 @@ var DefaultRedisOpts = redis.Options{ MaxConnAge: 2 * time.Minute, } -func MonitorEvents(rp *runtime.RunParams, lastid string) (retlastid string, nots []*runtime.Notification) { - host := "testground-infra-redis-headless" - port := 6379 +var client *redis.Client + +func init() { + var ( + port = 6379 + host = os.Getenv(EnvRedisHost) + ) + + if portStr := os.Getenv(EnvRedisPort); portStr != "" { + var err error + port, err = strconv.Atoi(portStr) + if err != nil { + panic(err) + } + } + opts := DefaultRedisOpts opts.Addr = fmt.Sprintf("%s:%d", host, port) - client := redis.NewClient(&opts) + + client = redis.NewClient(&opts) +} + +func Fetch(rp *runtime.RunParams, lastId string) ([]*runtime.Notification, string, error) { + var notifications []*runtime.Notification + var newId string key := fmt.Sprintf("run:%s:plan:%s:case:%s", rp.TestRun, rp.TestPlan, rp.TestCase) args := new(redis.XReadArgs) - args.Streams = []string{key, lastid} + args.Streams = []string{key, lastId} args.Block = 1 * time.Second args.Count = 10000 streams, err := client.XRead(args).Result() if err != nil { if err == redis.Nil { - return lastid, nil + return nil, lastId, nil } - panic(err) + return nil, "", err } for _, xr := range streams { @@ -57,10 +83,11 @@ func MonitorEvents(rp *runtime.RunParams, lastid string) (retlastid string, nots panic(err) } - nots = append(nots, notification) + notifications = append(notifications, notification) - retlastid = msg.ID + newId = msg.ID } } - return + + return notifications, newId, nil } diff --git a/run/invoker.go b/run/invoker.go index 7f85d7e..d9413eb 100644 --- a/run/invoker.go +++ b/run/invoker.go @@ -151,8 +151,7 @@ func invoke(runenv *runtime.RunEnv, fn interface{}) { case InitializedTestCaseFn: ic := new(InitContext) ic.init(runenv) - //defer ic.close() - closer = ic.close + closer = ic.close // we want to close the InitContext after having calld RecordSuccess or RecordFailure errCh <- f(runenv, ic) default: msg := fmt.Sprintf("unexpected function passed to Invoke*; expected types: TestCaseFn, InitializedTestCaseFn; was: %T", f) diff --git a/runtime/notification.go b/runtime/notification.go index 9ddac94..e532cf6 100644 --- a/runtime/notification.go +++ b/runtime/notification.go @@ -1,8 +1,6 @@ package runtime type Notification struct { - //InstanceID string `json:"instance_id"` - //GlobalSeqNum string `json:"global_seq_num"` GroupID string `json:"group_id"` EventType string `json:"event_type"` // start, end, failure, crash, entry, exit for stages Scope string `json:"scope"` // test case, test case stage diff --git a/runtime/runenv.go b/runtime/runenv.go index ffe6a97..5d40776 100644 --- a/runtime/runenv.go +++ b/runtime/runenv.go @@ -31,9 +31,9 @@ var ( type RunEnv struct { RunParams - logger *zap.Logger - metrics *Metrics - syncClient SyncClient + logger *zap.Logger + metrics *Metrics + signalEventer SignalEventer wg gosync.WaitGroup closeCh chan struct{} @@ -72,12 +72,12 @@ func NewRunEnv(params RunParams) *RunEnv { return re } -type SyncClient interface { +type SignalEventer interface { SignalEvent(context.Context, interface{}) error } -func (re *RunEnv) AttachSyncClient(sc SyncClient) { - re.syncClient = sc +func (re *RunEnv) AttachSyncClient(se SignalEventer) { + re.signalEventer = se } // R returns a metrics object for results. diff --git a/runtime/runenv_events.go b/runtime/runenv_events.go index 022d04c..2f31dc2 100644 --- a/runtime/runenv_events.go +++ b/runtime/runenv_events.go @@ -122,8 +122,8 @@ func (re *RunEnv) RecordSuccess() { re.logger.Info("", zap.Object("event", evt)) re.metrics.recordEvent(&evt) - if re.syncClient != nil { - _ = re.syncClient.SignalEvent(context.Background(), &Notification{GroupID: re.RunParams.TestGroupID, Scope: "test-case", EventType: "outcome-ok"}) + if re.signalEventer != nil { + _ = re.signalEventer.SignalEvent(context.Background(), &Notification{GroupID: re.RunParams.TestGroupID, Scope: "test-case", EventType: "outcome-ok"}) } } From e962ea1651f704842ee66641fc5f373afaff47e6 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Wed, 30 Sep 2020 13:03:08 +0200 Subject: [PATCH 10/25] update notifications schema --- go.mod | 1 + go.sum | 2 + network/client.go | 4 +- notification/notification.go | 6 +-- runtime/notification.go | 71 ++++++++++++++++++++++++++++++++++-- runtime/runenv_events.go | 2 +- 6 files changed, 76 insertions(+), 10 deletions(-) diff --git a/go.mod b/go.mod index 6c87b3e..62e41dc 100644 --- a/go.mod +++ b/go.mod @@ -8,6 +8,7 @@ require ( github.com/go-redis/redis/v7 v7.4.0 github.com/hashicorp/go-multierror v1.1.0 github.com/influxdata/influxdb1-client v0.0.0-20200515024757-02f0bf5dbca3 + github.com/mitchellh/mapstructure v1.3.3 github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.7.1 github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 diff --git a/go.sum b/go.sum index e9e7e7e..44046ca 100644 --- a/go.sum +++ b/go.sum @@ -74,6 +74,8 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mitchellh/mapstructure v1.3.3 h1:SzB1nHZ2Xi+17FP0zVQBHIZqvwRN9408fJO8h+eeNA8= +github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= diff --git a/network/client.go b/network/client.go index acf63ba..5242645 100644 --- a/network/client.go +++ b/network/client.go @@ -34,7 +34,7 @@ func NewClient(syncClient sync.Client, runenv *runtime.RunEnv) *Client { // WaitNetworkInitialized waits for the sidecar to initialize the network, if // the sidecar is enabled. If not, it returns immediately. func (c *Client) WaitNetworkInitialized(ctx context.Context) error { - err := c.syncClient.SignalEvent(ctx, &runtime.Notification{GroupID: c.runenv.TestGroupID, Scope: "stage", EventType: "entry", StageName: "network-initialized"}) + err := c.syncClient.SignalEvent(ctx, runtime.NewStageNotification(c.runenv.TestGroupID, "network-initialized", "entry")) if err != nil { return err } @@ -48,7 +48,7 @@ func (c *Client) WaitNetworkInitialized(ctx context.Context) error { } c.runenv.RecordMessage(InitialisationSuccessful) - err = c.syncClient.SignalEvent(ctx, &runtime.Notification{GroupID: c.runenv.TestGroupID, Scope: "stage", EventType: "exit", StageName: "network-initialized"}) + err = c.syncClient.SignalEvent(ctx, runtime.NewStageNotification(c.runenv.TestGroupID, "network-initialized", "exit")) if err != nil { return err } diff --git a/notification/notification.go b/notification/notification.go index fd64e36..4ba8b4d 100644 --- a/notification/notification.go +++ b/notification/notification.go @@ -54,9 +54,6 @@ func init() { } func Fetch(rp *runtime.RunParams, lastId string) ([]*runtime.Notification, string, error) { - var notifications []*runtime.Notification - var newId string - key := fmt.Sprintf("run:%s:plan:%s:case:%s", rp.TestRun, rp.TestPlan, rp.TestCase) args := new(redis.XReadArgs) @@ -73,6 +70,9 @@ func Fetch(rp *runtime.RunParams, lastId string) ([]*runtime.Notification, strin return nil, "", err } + var newId string + var notifications []*runtime.Notification + for _, xr := range streams { for _, msg := range xr.Messages { payload := msg.Values[sync.RedisPayloadKey].(string) diff --git a/runtime/notification.go b/runtime/notification.go index e532cf6..d0c9e96 100644 --- a/runtime/notification.go +++ b/runtime/notification.go @@ -1,8 +1,71 @@ package runtime +import ( + "fmt" + + "github.com/mitchellh/mapstructure" +) + type Notification struct { - GroupID string `json:"group_id"` - EventType string `json:"event_type"` // start, end, failure, crash, entry, exit for stages - Scope string `json:"scope"` // test case, test case stage - StageName string `json:"stage_name"` + GroupID string `json:"group_id"` + EventType string `json:"event_type"` + Event interface{} `json:"event"` +} + +type StageEvent struct { + Name string `json:"name"` + Action string `json:"action"` // entry or exit +} + +type OutcomeEvent struct { + Outcome string `json:"outcome"` // ok +} + +func NewStageNotification(groupId, name, action string) *Notification { + return &Notification{ + GroupID: groupId, + EventType: "stage", + Event: &StageEvent{ + Name: name, + Action: action, + }, + } +} + +func NewOutcomeOKNotification(groupId string) *Notification { + return &Notification{ + GroupID: groupId, + EventType: "outcome", + Event: &OutcomeEvent{ + Outcome: "ok", + }, + } +} + +func (n *Notification) ParseEvent() error { + if n.EventType == "stage" { + r := &StageEvent{} + err := mapstructure.Decode(n.Event, r) + if err != nil { + return err + } + + n.Event = r + + return nil + } + + if n.EventType == "outcome" { + r := &OutcomeEvent{} + err := mapstructure.Decode(n.Event, r) + if err != nil { + return err + } + + n.Event = r + + return nil + } + + return fmt.Errorf("unknown type: %s", n.EventType) } diff --git a/runtime/runenv_events.go b/runtime/runenv_events.go index 2f31dc2..371d942 100644 --- a/runtime/runenv_events.go +++ b/runtime/runenv_events.go @@ -123,7 +123,7 @@ func (re *RunEnv) RecordSuccess() { re.metrics.recordEvent(&evt) if re.signalEventer != nil { - _ = re.signalEventer.SignalEvent(context.Background(), &Notification{GroupID: re.RunParams.TestGroupID, Scope: "test-case", EventType: "outcome-ok"}) + _ = re.signalEventer.SignalEvent(context.Background(), NewOutcomeOKNotification(re.RunParams.TestGroupID)) } } From d157f5b8c36956d4f43e402531a0030fdc8ac27b Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Mon, 5 Oct 2020 12:59:24 +0200 Subject: [PATCH 11/25] merge Notification with Events --- go.mod | 7 +- go.sum | 232 +++++++++++++++++++++++++++++++- network/client.go | 14 +- notification/notification.go | 93 ------------- runtime/metrics.go | 17 +-- runtime/notification.go | 71 ---------- runtime/runenv_events.go | 247 +++++++++++++++++++++++++++-------- runtime/runenv_test.go | 120 +++++++++-------- sync/client_watch.go | 74 +++++++++++ 9 files changed, 577 insertions(+), 298 deletions(-) delete mode 100644 notification/notification.go delete mode 100644 runtime/notification.go create mode 100644 sync/client_watch.go diff --git a/go.mod b/go.mod index 62e41dc..81de9d0 100644 --- a/go.mod +++ b/go.mod @@ -8,15 +8,10 @@ require ( github.com/go-redis/redis/v7 v7.4.0 github.com/hashicorp/go-multierror v1.1.0 github.com/influxdata/influxdb1-client v0.0.0-20200515024757-02f0bf5dbca3 - github.com/mitchellh/mapstructure v1.3.3 - github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.7.1 github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 github.com/stretchr/testify v1.5.1 + github.com/testground/testground v0.5.3 go.uber.org/zap v1.15.0 - golang.org/x/net v0.0.0-20191112182307-2180aed22343 // indirect golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a - golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae // indirect - golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f // indirect - google.golang.org/protobuf v1.25.0 // indirect ) diff --git a/go.sum b/go.sum index 44046ca..e3b9afa 100644 --- a/go.sum +++ b/go.sum @@ -1,42 +1,113 @@ +bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/Azure/go-autorest v11.1.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= +github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ= +github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/avast/retry-go v2.6.0+incompatible h1:FelcMrm7Bxacr1/RM8+/eqkDkmVN7tjlsy51dOzB3LI= github.com/avast/retry-go v2.6.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY= +github.com/aws/aws-sdk-go v1.28.9/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= +github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/continuity v0.0.0-20200413184840-d3ef23f19fbb/go.mod h1:Dq467ZllaHgAtVp4p1xUQWBrFXR9s/wyoTpG8zOJGkY= +github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= +github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= +github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgrijalva/jwt-go v0.0.0-20160705203006-01aeca54ebda/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v1.4.2-0.20200206084213-b5fc6ea92cde/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= +github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= +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/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/frankban/quicktest v1.9.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= +github.com/go-git/go-billy/v5 v5.0.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-git-fixtures/v4 v4.0.1/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw= +github.com/go-git/go-git/v5 v5.0.0/go.mod h1:oYD8y9kWsGINPFJoLdaScGCN6dlKg23blmClfZwtUVA= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +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.3.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-redis/redis/v7 v7.4.0 h1:7obg6wUoj05T0EpY0o8B59S9w5yeMWql7sw2kwNW1x4= github.com/go-redis/redis/v7 v7.4.0/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gobuffalo/here v0.6.0/go.mod h1:wAG085dHOYqUpf+Ap+WOdrPTp5IYcDAs/x7PLa8Y5fM= +github.com/gobuffalo/here v0.6.2/go.mod h1:D75Sq0p2BVHdgQu3vCRsXbg85rx943V19urJpqAVWjI= +github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= +github.com/gogo/protobuf v1.0.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= @@ -45,51 +116,117 @@ 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/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20160524151835-7d79101e329e/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= 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/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= github.com/hashicorp/go-multierror v1.1.0 h1:B9UzwGQJehnUY1yNrnwREHc3fGbC2xefo8g4TbElacI= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/influxdb1-client v0.0.0-20200515024757-02f0bf5dbca3 h1:k3/6a1Shi7GGCp9QpyYuXsMM6ncTOjCzOE9Fd6CDA+Q= github.com/influxdata/influxdb1-client v0.0.0-20200515024757-02f0bf5dbca3/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kubernetes/client-go v11.0.0+incompatible/go.mod h1:kszVi2i+FeqECZHhjpkV5h5zM0GnURfJv897YzgoAQ8= +github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/logrusorgru/aurora v0.0.0-20191017060258-dc85c304c434/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= +github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/markbates/pkger v0.15.1/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI= +github.com/mattn/go-zglob v0.0.1/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mitchellh/mapstructure v1.3.3 h1:SzB1nHZ2Xi+17FP0zVQBHIZqvwRN9408fJO8h+eeNA8= -github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mholt/archiver v3.1.1+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nwaples/rardecode v1.1.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= +github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= +github.com/otiai10/copy v1.0.2/go.mod h1:c7RpqBkwMom4bYTSkLSym4VSJz/XtncWRAj/J4PEIMY= +github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= +github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib 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/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= @@ -106,20 +243,52 @@ github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lN github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= 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/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/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= +github.com/testground/plan-templates/templates v0.0.0-20200429051153-b24fdc73e401/go.mod h1:MT3F6oeXhaO0bwhclY7dbOxKVfuDuWuO9YHy+TZvgNc= +github.com/testground/sdk-go v0.2.4/go.mod h1:3ewI3dydDseP7eCO1MHGh+67simvbkcUnguPYssFqiA= +github.com/testground/testground v0.5.3 h1:WSfB6njhk0IGyMKr7Ky4jBa2k1rct4Oen11bio1fHFI= +github.com/testground/testground v0.5.3/go.mod h1:o7jPX2o6B1HmK6UFvPfVcGypNjTZa4yUjfOVsQRtb5s= +github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= +github.com/ulikunitz/xz v0.5.7/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli/v2 v2.2.0/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= +github.com/vishvananda/netlink v1.0.0/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= +github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= +github.com/whilp/git-urls v0.0.0-20191001220047-6db9661140c0/go.mod h1:2rx5KE5FLD0HRfkkpyn8JwbVLBdhgeiOb2D2D9LLKM4= +github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A= @@ -128,9 +297,14 @@ go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEa go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.15.0 h1:ZZCA22JRF2gQE5FoNmhmrf7jeJJ2uhqDUNRYKm8dvmM= go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= +golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -138,42 +312,64 @@ golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-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-20190923162816-aa69164e4478/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-20191112182307-2180aed22343 h1:00ohfJ4K98s3m6BGUoBd8nyfp4Yl0GoIKvw5abItTjI= golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a h1:WXEvlFVvvGxCJLG6REjsT03iWnKLEWinaScsxF2Vm2o= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/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-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/time v0.0.0-20161028155119-f51c12702a4d/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -188,12 +384,17 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IV golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -204,22 +405,49 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/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/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= +gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5 h1:ymVxjfMaHvXD8RqPRmzHHsB3VvucivSkIAvJFDI5O3c= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +k8s.io/api v0.0.0-20190703205437-39734b2a72fe/go.mod h1:J5EZ0KSEjvyKOBy5BDHSF3zn82madLLWg7nUKaOHZKU= +k8s.io/api v0.17.0/go.mod h1:npsyOePkeP0CPwyGfXDHxvypiYMJxBWAMpQxCaJ4ZxI= +k8s.io/apimachinery v0.0.0-20190703205208-4cfb76a8bf76/go.mod h1:M2fZgZL9DbLfeJaPBCDqSqNsdsmLN+V29knYJnIXlMA= +k8s.io/apimachinery v0.17.0/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= +k8s.io/client-go v0.0.0-20190706005506-4ed54556a14a/go.mod h1:vn7Y34rpPc8EO7qSbsZ7JCxA3ujt/wnQozW3RfYdT/E= +k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.3.1/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= +k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= +k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= +k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= +k8s.io/utils v0.0.0-20190607212802-c55fbcfc754a/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= diff --git a/network/client.go b/network/client.go index 5242645..660380e 100644 --- a/network/client.go +++ b/network/client.go @@ -34,8 +34,11 @@ func NewClient(syncClient sync.Client, runenv *runtime.RunEnv) *Client { // WaitNetworkInitialized waits for the sidecar to initialize the network, if // the sidecar is enabled. If not, it returns immediately. func (c *Client) WaitNetworkInitialized(ctx context.Context) error { - err := c.syncClient.SignalEvent(ctx, runtime.NewStageNotification(c.runenv.TestGroupID, "network-initialized", "entry")) - if err != nil { + se := &runtime.Event{StageStartEvent: &runtime.StageStartEvent{ + Name: "network-initialized", + TestGroupID: c.runenv.TestGroupID, + }} + if err := c.syncClient.SignalEvent(ctx, se); err != nil { return err } @@ -48,8 +51,11 @@ func (c *Client) WaitNetworkInitialized(ctx context.Context) error { } c.runenv.RecordMessage(InitialisationSuccessful) - err = c.syncClient.SignalEvent(ctx, runtime.NewStageNotification(c.runenv.TestGroupID, "network-initialized", "exit")) - if err != nil { + ee := &runtime.Event{StageEndEvent: &runtime.StageEndEvent{ + Name: "network-initialized", + TestGroupID: c.runenv.TestGroupID, + }} + if err := c.syncClient.SignalEvent(ctx, ee); err != nil { return err } diff --git a/notification/notification.go b/notification/notification.go deleted file mode 100644 index 4ba8b4d..0000000 --- a/notification/notification.go +++ /dev/null @@ -1,93 +0,0 @@ -package notification - -import ( - "encoding/json" - "fmt" - "os" - "strconv" - "time" - - "github.com/go-redis/redis/v7" - "github.com/testground/sdk-go/runtime" - "github.com/testground/sdk-go/sync" -) - -const ( - EnvRedisHost = "REDIS_HOST" - EnvRedisPort = "REDIS_PORT" -) - -var DefaultRedisOpts = redis.Options{ - MinIdleConns: 2, // allow the pool to downsize to 0 conns. - PoolSize: 5, // one for subscriptions, one for nonblocking operations. - PoolTimeout: 3 * time.Minute, // amount of time a waiter will wait for a conn to become available. - MaxRetries: 30, - MinRetryBackoff: 1 * time.Second, - MaxRetryBackoff: 3 * time.Second, - DialTimeout: 10 * time.Second, - ReadTimeout: 10 * time.Second, - WriteTimeout: 10 * time.Second, - IdleCheckFrequency: 30 * time.Second, - MaxConnAge: 2 * time.Minute, -} - -var client *redis.Client - -func init() { - var ( - port = 6379 - host = os.Getenv(EnvRedisHost) - ) - - if portStr := os.Getenv(EnvRedisPort); portStr != "" { - var err error - port, err = strconv.Atoi(portStr) - if err != nil { - panic(err) - } - } - - opts := DefaultRedisOpts - opts.Addr = fmt.Sprintf("%s:%d", host, port) - - client = redis.NewClient(&opts) -} - -func Fetch(rp *runtime.RunParams, lastId string) ([]*runtime.Notification, string, error) { - key := fmt.Sprintf("run:%s:plan:%s:case:%s", rp.TestRun, rp.TestPlan, rp.TestCase) - - args := new(redis.XReadArgs) - args.Streams = []string{key, lastId} - args.Block = 1 * time.Second - args.Count = 10000 - - streams, err := client.XRead(args).Result() - if err != nil { - if err == redis.Nil { - return nil, lastId, nil - } - - return nil, "", err - } - - var newId string - var notifications []*runtime.Notification - - for _, xr := range streams { - for _, msg := range xr.Messages { - payload := msg.Values[sync.RedisPayloadKey].(string) - - notification := &runtime.Notification{} - err := json.Unmarshal([]byte(payload), notification) - if err != nil { - panic(err) - } - - notifications = append(notifications, notification) - - newId = msg.ID - } - } - - return notifications, newId, nil -} diff --git a/runtime/metrics.go b/runtime/metrics.go index d286c65..f70808c 100644 --- a/runtime/metrics.go +++ b/runtime/metrics.go @@ -191,16 +191,17 @@ func (m *Metrics) recordEvent(evt *Event) { tags[k] = v } - if evt.Outcome != "" { - tags["outcome"] = string(evt.Outcome) - } + //if evt.Outcome != "" { + //tags["outcome"] = string(evt.Outcome) + //} - fields := map[string]interface{}{ - "error": evt.Error, - } + //fields := map[string]interface{}{ + //"error": evt.Error, + //} - measurement := fmt.Sprintf("events.%s", string(evt.Type)) - p, err := client.NewPoint(measurement, tags, fields) + measurement := fmt.Sprintf("events.%s", evt.Type()) + //p, err := client.NewPoint(measurement, tags, fields) + p, err := client.NewPoint(measurement, tags, nil) if err != nil { m.re.RecordMessage("failed to create InfluxDB point: %s", err) } diff --git a/runtime/notification.go b/runtime/notification.go deleted file mode 100644 index d0c9e96..0000000 --- a/runtime/notification.go +++ /dev/null @@ -1,71 +0,0 @@ -package runtime - -import ( - "fmt" - - "github.com/mitchellh/mapstructure" -) - -type Notification struct { - GroupID string `json:"group_id"` - EventType string `json:"event_type"` - Event interface{} `json:"event"` -} - -type StageEvent struct { - Name string `json:"name"` - Action string `json:"action"` // entry or exit -} - -type OutcomeEvent struct { - Outcome string `json:"outcome"` // ok -} - -func NewStageNotification(groupId, name, action string) *Notification { - return &Notification{ - GroupID: groupId, - EventType: "stage", - Event: &StageEvent{ - Name: name, - Action: action, - }, - } -} - -func NewOutcomeOKNotification(groupId string) *Notification { - return &Notification{ - GroupID: groupId, - EventType: "outcome", - Event: &OutcomeEvent{ - Outcome: "ok", - }, - } -} - -func (n *Notification) ParseEvent() error { - if n.EventType == "stage" { - r := &StageEvent{} - err := mapstructure.Decode(n.Event, r) - if err != nil { - return err - } - - n.Event = r - - return nil - } - - if n.EventType == "outcome" { - r := &OutcomeEvent{} - err := mapstructure.Decode(n.Event, r) - if err != nil { - return err - } - - n.Event = r - - return nil - } - - return fmt.Errorf("unknown type: %s", n.EventType) -} diff --git a/runtime/runenv_events.go b/runtime/runenv_events.go index 371d942..67dc885 100644 --- a/runtime/runenv_events.go +++ b/runtime/runenv_events.go @@ -17,7 +17,7 @@ type ( const ( EventTypeStart = EventType("start") EventTypeMessage = EventType("message") - EventTypeFinish = EventType("finish") + EventTypeOutcome = EventType("outcome") EventOutcomeOK = EventOutcome("ok") EventOutcomeFailed = EventOutcome("failed") @@ -25,38 +25,180 @@ const ( ) type Event struct { - Type EventType `json:"type"` - Outcome EventOutcome `json:"outcome,omitempty"` - Error string `json:"error,omitempty"` - Stacktrace string `json:"stacktrace,omitempty"` - Message string `json:"message,omitempty"` - Runenv *RunParams `json:"runenv,omitempty"` + *StartEvent `json:"start_event"` + *MessageEvent `json:"message_event"` + *SuccessEvent `json:"success_event"` + *FailureEvent `json:"failure_event"` + *CrashEvent `json:"crash_event"` + *StageStartEvent `json:"stage_start_event"` + *StageEndEvent `json:"stage_end_event"` } -func (e Event) MarshalLogObject(oe zapcore.ObjectEncoder) error { - oe.AddString("type", string(e.Type)) - - if e.Outcome != "" { - oe.AddString("outcome", string(e.Outcome)) - } - if e.Error != "" { - oe.AddString("error", e.Error) - } - if e.Stacktrace != "" { - oe.AddString("stacktrace", e.Stacktrace) - } - if e.Message != "" { - oe.AddString("message", e.Message) - } - if e.Runenv != nil { - if err := oe.AddObject("runenv", e.Runenv); err != nil { - return err - } +func (e *Event) Type() string { + switch { + case e.StartEvent != nil: + return e.StartEvent.Type() + case e.MessageEvent != nil: + return e.MessageEvent.Type() + case e.SuccessEvent != nil: + return e.SuccessEvent.Type() + case e.FailureEvent != nil: + return e.FailureEvent.Type() + case e.CrashEvent != nil: + return e.CrashEvent.Type() + case e.StageStartEvent != nil: + return e.StageStartEvent.Type() + case e.StageEndEvent != nil: + return e.StageEndEvent.Type() + default: + panic("no such event") } +} + +type StartEvent struct { + Runenv *RunParams `json:"runenv"` +} + +func (StartEvent) Type() string { + return "StartEvent" +} + +func (s StartEvent) MarshalLogObject(oe zapcore.ObjectEncoder) error { + oe.AddString("type", s.Type()) + return oe.AddObject("runenv", s.Runenv) +} + +type MessageEvent struct { + Message string `json:"message"` +} + +func (MessageEvent) Type() string { + return "MessageEvent" +} + +func (m MessageEvent) MarshalLogObject(oe zapcore.ObjectEncoder) error { + oe.AddString("type", m.Type()) + oe.AddString("message", m.Message) + return nil +} + +type SuccessEvent struct { + TestGroupID string `json:"group"` +} + +func (SuccessEvent) Type() string { + return "SuccessEvent" +} + +func (s SuccessEvent) MarshalLogObject(oe zapcore.ObjectEncoder) error { + oe.AddString("type", s.Type()) + oe.AddString("group", s.TestGroupID) + return nil +} + +type FailureEvent struct { + Error string `json:"error"` +} + +func (FailureEvent) Type() string { + return "FailureEvent" +} + +func (f FailureEvent) MarshalLogObject(oe zapcore.ObjectEncoder) error { + oe.AddString("type", f.Type()) + oe.AddString("error", f.Error) + return nil +} +type CrashEvent struct { + Error string `json:"error"` + Stacktrace string `json:"stacktrace"` +} + +func (CrashEvent) Type() string { + return "CrashEvent" +} + +func (c CrashEvent) MarshalLogObject(oe zapcore.ObjectEncoder) error { + oe.AddString("type", c.Type()) + oe.AddString("error", c.Error) + oe.AddString("stacktrace", c.Stacktrace) return nil } +type StageStartEvent struct { + Name string `json:"name"` + TestGroupID string `json:"group"` +} + +func (StageStartEvent) Type() string { + return "StageStartEvent" +} + +func (s StageStartEvent) MarshalLogObject(oe zapcore.ObjectEncoder) error { + oe.AddString("type", s.Type()) + oe.AddString("name", s.Name) + oe.AddString("group", s.TestGroupID) + return nil +} + +type StageEndEvent struct { + Name string `json:"name"` + TestGroupID string `json:"group"` +} + +func (StageEndEvent) Type() string { + return "StageEndEvent" +} + +func (s StageEndEvent) MarshalLogObject(oe zapcore.ObjectEncoder) error { + oe.AddString("type", s.Type()) + oe.AddString("name", s.Name) + oe.AddString("group", s.TestGroupID) + return nil +} + +func (e Event) MarshalLogObject(oe zapcore.ObjectEncoder) error { + switch { + case e.StartEvent != nil: + return e.StartEvent.MarshalLogObject(oe) + case e.MessageEvent != nil: + return e.MessageEvent.MarshalLogObject(oe) + case e.SuccessEvent != nil: + return e.SuccessEvent.MarshalLogObject(oe) + case e.FailureEvent != nil: + return e.FailureEvent.MarshalLogObject(oe) + case e.CrashEvent != nil: + return e.CrashEvent.MarshalLogObject(oe) + case e.StageStartEvent != nil: + return e.StageStartEvent.MarshalLogObject(oe) + case e.StageEndEvent != nil: + return e.StageEndEvent.MarshalLogObject(oe) + default: + panic("no such event") + } + + //oe.AddString("type", string(e.Type)) + + //if e.Outcome != "" { + //oe.AddString("outcome", string(e.Outcome)) + //} + //if e.Error != "" { + //oe.AddString("error", e.Error) + //} + //if e.Stacktrace != "" { + //oe.AddString("stacktrace", e.Stacktrace) + //} + //if e.Message != "" { + //oe.AddString("message", e.Message) + //} + //if e.Runenv != nil { + //if err := oe.AddObject("runenv", e.Runenv); err != nil { + //return err + //} + //} +} + func (rp *RunParams) MarshalLogObject(oe zapcore.ObjectEncoder) error { oe.AddString("plan", rp.TestPlan) oe.AddString("case", rp.TestCase) @@ -96,58 +238,57 @@ func (re *RunEnv) RecordMessage(msg string, a ...interface{}) { if len(a) > 0 { msg = fmt.Sprintf(msg, a...) } - evt := Event{ - Type: EventTypeMessage, + e := &Event{MessageEvent: &MessageEvent{ Message: msg, - } - re.logger.Info("", zap.Object("event", evt)) + }} + re.logger.Info("", zap.Object("event", e)) } func (re *RunEnv) RecordStart() { - evt := Event{ - Type: EventTypeStart, + e := &Event{StartEvent: &StartEvent{ Runenv: &re.RunParams, - } + }} - re.logger.Info("", zap.Object("event", evt)) - re.metrics.recordEvent(&evt) + re.logger.Info("", zap.Object("event", e)) + re.metrics.recordEvent(e) } // RecordSuccess records that the calling instance succeeded. func (re *RunEnv) RecordSuccess() { - evt := Event{ - Type: EventTypeFinish, - Outcome: EventOutcomeOK, - } - re.logger.Info("", zap.Object("event", evt)) - re.metrics.recordEvent(&evt) + e := &Event{SuccessEvent: &SuccessEvent{TestGroupID: re.RunParams.TestGroupID}} + re.logger.Info("", zap.Object("event", e)) + re.metrics.recordEvent(e) if re.signalEventer != nil { - _ = re.signalEventer.SignalEvent(context.Background(), NewOutcomeOKNotification(re.RunParams.TestGroupID)) + _ = re.signalEventer.SignalEvent(context.Background(), e) } } // RecordFailure records that the calling instance failed with the supplied // error. func (re *RunEnv) RecordFailure(err error) { - evt := Event{ - Type: EventTypeFinish, - Outcome: EventOutcomeFailed, - Error: err.Error(), + e := &Event{FailureEvent: &FailureEvent{ + Error: err.Error(), + }} + re.logger.Info("", zap.Object("event", e)) + re.metrics.recordEvent(e) + + if re.signalEventer != nil { + _ = re.signalEventer.SignalEvent(context.Background(), e) } - re.logger.Info("", zap.Object("event", evt)) - re.metrics.recordEvent(&evt) } // RecordCrash records that the calling instance crashed/panicked with the // supplied error. func (re *RunEnv) RecordCrash(err interface{}) { - evt := Event{ - Type: EventTypeFinish, - Outcome: EventOutcomeCrashed, + e := &Event{CrashEvent: &CrashEvent{ Error: fmt.Sprintf("%s", err), Stacktrace: string(debug.Stack()), + }} + re.logger.Error("", zap.Object("event", e)) + re.metrics.recordEvent(e) + + if re.signalEventer != nil { + _ = re.signalEventer.SignalEvent(context.Background(), e) } - re.logger.Error("", zap.Object("event", evt)) - re.metrics.recordEvent(&evt) } diff --git a/runtime/runenv_test.go b/runtime/runenv_test.go index 197569b..7e63877 100644 --- a/runtime/runenv_test.go +++ b/runtime/runenv_test.go @@ -2,11 +2,9 @@ package runtime import ( "encoding/json" - "fmt" "os" "path/filepath" "reflect" - "strings" "testing" "time" @@ -76,65 +74,65 @@ func TestParseKeyValues(t *testing.T) { } } -func TestAllEvents(t *testing.T) { - re, cleanup := RandomTestRunEnv(t) - t.Cleanup(cleanup) - - re.RecordStart() - re.RecordFailure(fmt.Errorf("bang")) - re.RecordCrash(fmt.Errorf("terrible bang")) - re.RecordMessage("i have something to %s", "say") - re.RecordSuccess() - - if err := re.Close(); err != nil { - t.Fatal(err) - } - - file, err := os.OpenFile(re.TestOutputsPath+"/run.out", os.O_RDONLY, 0644) - if err != nil { - t.Fatal(err) - } - defer file.Close() - - require := require.New(t) - - var i int - for dec := json.NewDecoder(file); dec.More(); { - var m = struct { - Event Event `json:"event"` - }{} - if err := dec.Decode(&m); err != nil { - t.Fatal(err) - } - - switch evt := m.Event; i { - case 0: - require.Equal(EventTypeMessage, evt.Type) - require.Condition(func() bool { return strings.HasPrefix(evt.Message, "InfluxDB unavailable") }) - case 1: - require.Equal(EventTypeStart, evt.Type) - require.Equal(evt.Runenv.TestPlan, re.TestPlan) - require.Equal(evt.Runenv.TestCase, re.TestCase) - require.Equal(evt.Runenv.TestRun, re.TestRun) - require.Equal(evt.Runenv.TestGroupID, re.TestGroupID) - case 2: - require.Equal(EventTypeFinish, evt.Type) - require.Equal(EventOutcomeFailed, evt.Outcome) - require.Equal("bang", evt.Error) - case 3: - require.Equal(EventTypeFinish, evt.Type) - require.Equal(EventOutcomeCrashed, evt.Outcome) - require.Equal("terrible bang", evt.Error) - require.NotEmpty(evt.Stacktrace) - case 4: - require.Equal(EventTypeMessage, evt.Type) - case 5: - require.Equal(evt.Type, EventTypeFinish) - require.Equal(evt.Outcome, EventOutcomeOK) - } - i++ - } -} +//func TestAllEvents(t *testing.T) { +//re, cleanup := RandomTestRunEnv(t) +//t.Cleanup(cleanup) + +//re.RecordStart() +//re.RecordFailure(fmt.Errorf("bang")) +//re.RecordCrash(fmt.Errorf("terrible bang")) +//re.RecordMessage("i have something to %s", "say") +//re.RecordSuccess() + +//if err := re.Close(); err != nil { +//t.Fatal(err) +//} + +//file, err := os.OpenFile(re.TestOutputsPath+"/run.out", os.O_RDONLY, 0644) +//if err != nil { +//t.Fatal(err) +//} +//defer file.Close() + +//require := require.New(t) + +//var i int +//for dec := json.NewDecoder(file); dec.More(); { +//var m = struct { +//Event Event `json:"event"` +//}{} +//if err := dec.Decode(&m); err != nil { +//t.Fatal(err) +//} + +//switch evt := m.Event; i { +//case 0: +////require.Equal(EventTypeMessage, evt.Type) +//require.Condition(func() bool { return strings.HasPrefix(evt.Message, "InfluxDB unavailable") }) +//case 1: +////require.Equal(EventTypeStart, evt.Type) +//require.Equal(evt.Runenv.TestPlan, re.TestPlan) +//require.Equal(evt.Runenv.TestCase, re.TestCase) +//require.Equal(evt.Runenv.TestRun, re.TestRun) +//require.Equal(evt.Runenv.TestGroupID, re.TestGroupID) +//case 2: +////require.Equal(EventTypeFinish, evt.Type) +//require.Equal(EventOutcomeFailed, evt.Outcome) +//require.Equal("bang", evt.Error) +//case 3: +////require.Equal(EventTypeFinish, evt.Type) +//require.Equal(EventOutcomeCrashed, evt.Outcome) +//require.Equal("terrible bang", evt.Error) +//require.NotEmpty(evt.Stacktrace) +//case 4: +////require.Equal(EventTypeMessage, evt.Type) +//case 5: +////require.Equal(evt.Type, EventTypeFinish) +//require.Equal(evt.Outcome, EventOutcomeOK) +//} +//i++ +//} +//} func TestMetricsRecordedInFile(t *testing.T) { test := func(f func(*RunEnv) *MetricsApi, file string) func(t *testing.T) { diff --git a/sync/client_watch.go b/sync/client_watch.go new file mode 100644 index 0000000..53627bb --- /dev/null +++ b/sync/client_watch.go @@ -0,0 +1,74 @@ +package sync + +import ( + "context" + "encoding/json" + "fmt" + "time" + + "github.com/go-redis/redis/v7" + "github.com/testground/sdk-go/runtime" + "github.com/testground/testground/pkg/logging" + "go.uber.org/zap" +) + +type WatchClient struct { + ctx context.Context + rclient *redis.Client + log *zap.SugaredLogger +} + +func NewWatchClient(ctx context.Context) (*WatchClient, error) { + log := logging.S() + rclient, err := redisClient(ctx, log) + if err != nil { + return nil, fmt.Errorf("failed to create redis client: %w", err) + } + + return &WatchClient{ + ctx, + rclient, + log, + }, nil +} + +func (w *WatchClient) FetchAllEvents(rp *runtime.RunParams) ([]*runtime.Event, error) { + key := fmt.Sprintf("run:%s:plan:%s:case:%s", rp.TestRun, rp.TestPlan, rp.TestCase) + + var events []*runtime.Event + + id := "0" + for { + args := &redis.XReadArgs{} + args.Streams = []string{key, id} + args.Block = 1 * time.Second + args.Count = 10000 + + streams, err := w.rclient.XRead(args).Result() + if err != nil { + if err == redis.Nil { + break + } + + return nil, err + } + + for _, xr := range streams { + for _, msg := range xr.Messages { + payload := msg.Values[RedisPayloadKey].(string) + + ev := &runtime.Event{} + err := json.Unmarshal([]byte(payload), ev) + if err != nil { + panic(err) + } + + events = append(events, ev) + + id = msg.ID + } + } + } + + return events, nil +} From 777d5254841be9fc46d1709ada01f4ce2ec32ac6 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Mon, 5 Oct 2020 15:23:02 +0200 Subject: [PATCH 12/25] fix tests --- go.mod | 10 +- go.sum | 221 --------------------------------------- run/panic_test.go | 4 +- runtime/runenv_events.go | 70 +++---------- runtime/runenv_test.go | 119 ++++++++++----------- sync/client_watch.go | 4 +- 6 files changed, 86 insertions(+), 342 deletions(-) diff --git a/go.mod b/go.mod index 81de9d0..5de9a41 100644 --- a/go.mod +++ b/go.mod @@ -8,10 +8,18 @@ require ( github.com/go-redis/redis/v7 v7.4.0 github.com/hashicorp/go-multierror v1.1.0 github.com/influxdata/influxdb1-client v0.0.0-20200515024757-02f0bf5dbca3 + github.com/kr/text v0.2.0 // indirect + github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect + github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.7.1 github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 github.com/stretchr/testify v1.5.1 - github.com/testground/testground v0.5.3 go.uber.org/zap v1.15.0 + golang.org/x/net v0.0.0-20200301022130-244492dfa37a // indirect golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a + golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae // indirect + golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f // indirect + google.golang.org/protobuf v1.25.0 // indirect + gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect + gopkg.in/yaml.v2 v2.2.8 // indirect ) diff --git a/go.sum b/go.sum index e3b9afa..4756030 100644 --- a/go.sum +++ b/go.sum @@ -1,113 +1,43 @@ -bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= -github.com/Azure/go-autorest v11.1.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= -github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ= -github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= -github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/avast/retry-go v2.6.0+incompatible h1:FelcMrm7Bxacr1/RM8+/eqkDkmVN7tjlsy51dOzB3LI= github.com/avast/retry-go v2.6.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY= -github.com/aws/aws-sdk-go v1.28.9/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= -github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20200413184840-d3ef23f19fbb/go.mod h1:Dq467ZllaHgAtVp4p1xUQWBrFXR9s/wyoTpG8zOJGkY= -github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= -github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= -github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= -github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgrijalva/jwt-go v0.0.0-20160705203006-01aeca54ebda/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v1.4.2-0.20200206084213-b5fc6ea92cde/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= -github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= -github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= -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/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/frankban/quicktest v1.9.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= -github.com/go-git/go-billy/v5 v5.0.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-git-fixtures/v4 v4.0.1/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw= -github.com/go-git/go-git/v5 v5.0.0/go.mod h1:oYD8y9kWsGINPFJoLdaScGCN6dlKg23blmClfZwtUVA= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= -github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= -github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= -github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= -github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= -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.3.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-redis/redis/v7 v7.4.0 h1:7obg6wUoj05T0EpY0o8B59S9w5yeMWql7sw2kwNW1x4= github.com/go-redis/redis/v7 v7.4.0/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gobuffalo/here v0.6.0/go.mod h1:wAG085dHOYqUpf+Ap+WOdrPTp5IYcDAs/x7PLa8Y5fM= -github.com/gobuffalo/here v0.6.2/go.mod h1:D75Sq0p2BVHdgQu3vCRsXbg85rx943V19urJpqAVWjI= -github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= -github.com/gogo/protobuf v1.0.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= @@ -116,117 +46,53 @@ 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/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20160524151835-7d79101e329e/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= 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/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= github.com/hashicorp/go-multierror v1.1.0 h1:B9UzwGQJehnUY1yNrnwREHc3fGbC2xefo8g4TbElacI= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/influxdb1-client v0.0.0-20200515024757-02f0bf5dbca3 h1:k3/6a1Shi7GGCp9QpyYuXsMM6ncTOjCzOE9Fd6CDA+Q= github.com/influxdata/influxdb1-client v0.0.0-20200515024757-02f0bf5dbca3/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kubernetes/client-go v11.0.0+incompatible/go.mod h1:kszVi2i+FeqECZHhjpkV5h5zM0GnURfJv897YzgoAQ8= -github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/logrusorgru/aurora v0.0.0-20191017060258-dc85c304c434/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= -github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/markbates/pkger v0.15.1/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI= -github.com/mattn/go-zglob v0.0.1/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mholt/archiver v3.1.1+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nwaples/rardecode v1.1.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= -github.com/otiai10/copy v1.0.2/go.mod h1:c7RpqBkwMom4bYTSkLSym4VSJz/XtncWRAj/J4PEIMY= -github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= -github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= -github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib 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/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= @@ -243,52 +109,20 @@ github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lN github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= 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/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/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= -github.com/testground/plan-templates/templates v0.0.0-20200429051153-b24fdc73e401/go.mod h1:MT3F6oeXhaO0bwhclY7dbOxKVfuDuWuO9YHy+TZvgNc= -github.com/testground/sdk-go v0.2.4/go.mod h1:3ewI3dydDseP7eCO1MHGh+67simvbkcUnguPYssFqiA= -github.com/testground/testground v0.5.3 h1:WSfB6njhk0IGyMKr7Ky4jBa2k1rct4Oen11bio1fHFI= -github.com/testground/testground v0.5.3/go.mod h1:o7jPX2o6B1HmK6UFvPfVcGypNjTZa4yUjfOVsQRtb5s= -github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= -github.com/ulikunitz/xz v0.5.7/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli/v2 v2.2.0/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= -github.com/vishvananda/netlink v1.0.0/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= -github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= -github.com/whilp/git-urls v0.0.0-20191001220047-6db9661140c0/go.mod h1:2rx5KE5FLD0HRfkkpyn8JwbVLBdhgeiOb2D2D9LLKM4= -github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= -github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A= @@ -297,14 +131,9 @@ go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEa go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.15.0 h1:ZZCA22JRF2gQE5FoNmhmrf7jeJJ2uhqDUNRYKm8dvmM= go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -312,64 +141,42 @@ golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-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-20190923162816-aa69164e4478/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-20191112182307-2180aed22343 h1:00ohfJ4K98s3m6BGUoBd8nyfp4Yl0GoIKvw5abItTjI= -golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a h1:WXEvlFVvvGxCJLG6REjsT03iWnKLEWinaScsxF2Vm2o= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/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-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/time v0.0.0-20161028155119-f51c12702a4d/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -384,17 +191,12 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IV golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -405,7 +207,6 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -416,38 +217,16 @@ gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= -gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5 h1:ymVxjfMaHvXD8RqPRmzHHsB3VvucivSkIAvJFDI5O3c= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -k8s.io/api v0.0.0-20190703205437-39734b2a72fe/go.mod h1:J5EZ0KSEjvyKOBy5BDHSF3zn82madLLWg7nUKaOHZKU= -k8s.io/api v0.17.0/go.mod h1:npsyOePkeP0CPwyGfXDHxvypiYMJxBWAMpQxCaJ4ZxI= -k8s.io/apimachinery v0.0.0-20190703205208-4cfb76a8bf76/go.mod h1:M2fZgZL9DbLfeJaPBCDqSqNsdsmLN+V29knYJnIXlMA= -k8s.io/apimachinery v0.17.0/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= -k8s.io/client-go v0.0.0-20190706005506-4ed54556a14a/go.mod h1:vn7Y34rpPc8EO7qSbsZ7JCxA3ujt/wnQozW3RfYdT/E= -k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v0.3.1/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= -k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= -k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= -k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= -k8s.io/utils v0.0.0-20190607212802-c55fbcfc754a/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= -sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= diff --git a/run/panic_test.go b/run/panic_test.go index dfaaa8a..a1e9f18 100644 --- a/run/panic_test.go +++ b/run/panic_test.go @@ -44,7 +44,7 @@ func TestPanicFromMain(t *testing.T) { last = scanner.Text() } - if !strings.Contains(last, "\"outcome\":\"crashed\"") { + if !strings.Contains(last, "\"type\":\"CrashEvent\"") { t.Fatalf("expected crashed event; got: %s", last) } } @@ -68,7 +68,7 @@ func TestPanicFromChildGoroutine(t *testing.T) { last = scanner.Text() } - if !strings.Contains(last, "\"outcome\":\"crashed\"") { + if !strings.Contains(last, "\"type\":\"CrashEvent\"") { t.Fatalf("expected crashed event; got: %s", last) } } diff --git a/runtime/runenv_events.go b/runtime/runenv_events.go index 67dc885..da134d3 100644 --- a/runtime/runenv_events.go +++ b/runtime/runenv_events.go @@ -9,29 +9,14 @@ import ( "go.uber.org/zap/zapcore" ) -type ( - EventType string - EventOutcome string -) - -const ( - EventTypeStart = EventType("start") - EventTypeMessage = EventType("message") - EventTypeOutcome = EventType("outcome") - - EventOutcomeOK = EventOutcome("ok") - EventOutcomeFailed = EventOutcome("failed") - EventOutcomeCrashed = EventOutcome("crashed") -) - type Event struct { - *StartEvent `json:"start_event"` - *MessageEvent `json:"message_event"` - *SuccessEvent `json:"success_event"` - *FailureEvent `json:"failure_event"` - *CrashEvent `json:"crash_event"` - *StageStartEvent `json:"stage_start_event"` - *StageEndEvent `json:"stage_end_event"` + *StartEvent `json:"start_event,omitempty"` + *MessageEvent `json:"message_event,omitempty"` + *SuccessEvent `json:"success_event,omitempty"` + *FailureEvent `json:"failure_event,omitempty"` + *CrashEvent `json:"crash_event,omitempty"` + *StageStartEvent `json:"stage_start_event,omitempty"` + *StageEndEvent `json:"stage_end_event,omitempty"` } func (e *Event) Type() string { @@ -64,7 +49,6 @@ func (StartEvent) Type() string { } func (s StartEvent) MarshalLogObject(oe zapcore.ObjectEncoder) error { - oe.AddString("type", s.Type()) return oe.AddObject("runenv", s.Runenv) } @@ -77,7 +61,6 @@ func (MessageEvent) Type() string { } func (m MessageEvent) MarshalLogObject(oe zapcore.ObjectEncoder) error { - oe.AddString("type", m.Type()) oe.AddString("message", m.Message) return nil } @@ -91,7 +74,6 @@ func (SuccessEvent) Type() string { } func (s SuccessEvent) MarshalLogObject(oe zapcore.ObjectEncoder) error { - oe.AddString("type", s.Type()) oe.AddString("group", s.TestGroupID) return nil } @@ -105,7 +87,6 @@ func (FailureEvent) Type() string { } func (f FailureEvent) MarshalLogObject(oe zapcore.ObjectEncoder) error { - oe.AddString("type", f.Type()) oe.AddString("error", f.Error) return nil } @@ -120,7 +101,6 @@ func (CrashEvent) Type() string { } func (c CrashEvent) MarshalLogObject(oe zapcore.ObjectEncoder) error { - oe.AddString("type", c.Type()) oe.AddString("error", c.Error) oe.AddString("stacktrace", c.Stacktrace) return nil @@ -136,7 +116,6 @@ func (StageStartEvent) Type() string { } func (s StageStartEvent) MarshalLogObject(oe zapcore.ObjectEncoder) error { - oe.AddString("type", s.Type()) oe.AddString("name", s.Name) oe.AddString("group", s.TestGroupID) return nil @@ -152,7 +131,6 @@ func (StageEndEvent) Type() string { } func (s StageEndEvent) MarshalLogObject(oe zapcore.ObjectEncoder) error { - oe.AddString("type", s.Type()) oe.AddString("name", s.Name) oe.AddString("group", s.TestGroupID) return nil @@ -161,42 +139,22 @@ func (s StageEndEvent) MarshalLogObject(oe zapcore.ObjectEncoder) error { func (e Event) MarshalLogObject(oe zapcore.ObjectEncoder) error { switch { case e.StartEvent != nil: - return e.StartEvent.MarshalLogObject(oe) + return oe.AddObject("start_event", e.StartEvent) case e.MessageEvent != nil: - return e.MessageEvent.MarshalLogObject(oe) + return oe.AddObject("message_event", e.MessageEvent) case e.SuccessEvent != nil: - return e.SuccessEvent.MarshalLogObject(oe) + return oe.AddObject("success_event", e.SuccessEvent) case e.FailureEvent != nil: - return e.FailureEvent.MarshalLogObject(oe) + return oe.AddObject("failure_event", e.FailureEvent) case e.CrashEvent != nil: - return e.CrashEvent.MarshalLogObject(oe) + return oe.AddObject("crash_event", e.CrashEvent) case e.StageStartEvent != nil: - return e.StageStartEvent.MarshalLogObject(oe) + return oe.AddObject("stage_start_event", e.StageStartEvent) case e.StageEndEvent != nil: - return e.StageEndEvent.MarshalLogObject(oe) + return oe.AddObject("stage_end_event", e.StageEndEvent) default: panic("no such event") } - - //oe.AddString("type", string(e.Type)) - - //if e.Outcome != "" { - //oe.AddString("outcome", string(e.Outcome)) - //} - //if e.Error != "" { - //oe.AddString("error", e.Error) - //} - //if e.Stacktrace != "" { - //oe.AddString("stacktrace", e.Stacktrace) - //} - //if e.Message != "" { - //oe.AddString("message", e.Message) - //} - //if e.Runenv != nil { - //if err := oe.AddObject("runenv", e.Runenv); err != nil { - //return err - //} - //} } func (rp *RunParams) MarshalLogObject(oe zapcore.ObjectEncoder) error { diff --git a/runtime/runenv_test.go b/runtime/runenv_test.go index 7e63877..b3cf123 100644 --- a/runtime/runenv_test.go +++ b/runtime/runenv_test.go @@ -2,9 +2,11 @@ package runtime import ( "encoding/json" + "fmt" "os" "path/filepath" "reflect" + "strings" "testing" "time" @@ -74,65 +76,64 @@ func TestParseKeyValues(t *testing.T) { } } -//func TestAllEvents(t *testing.T) { -//re, cleanup := RandomTestRunEnv(t) -//t.Cleanup(cleanup) - -//re.RecordStart() -//re.RecordFailure(fmt.Errorf("bang")) -//re.RecordCrash(fmt.Errorf("terrible bang")) -//re.RecordMessage("i have something to %s", "say") -//re.RecordSuccess() - -//if err := re.Close(); err != nil { -//t.Fatal(err) -//} - -//file, err := os.OpenFile(re.TestOutputsPath+"/run.out", os.O_RDONLY, 0644) -//if err != nil { -//t.Fatal(err) -//} -//defer file.Close() - -//require := require.New(t) - -//var i int -//for dec := json.NewDecoder(file); dec.More(); { -//var m = struct { -//Event Event `json:"event"` -//}{} -//if err := dec.Decode(&m); err != nil { -//t.Fatal(err) -//} - -//switch evt := m.Event; i { -//case 0: -////require.Equal(EventTypeMessage, evt.Type) -//require.Condition(func() bool { return strings.HasPrefix(evt.Message, "InfluxDB unavailable") }) -//case 1: -////require.Equal(EventTypeStart, evt.Type) -//require.Equal(evt.Runenv.TestPlan, re.TestPlan) -//require.Equal(evt.Runenv.TestCase, re.TestCase) -//require.Equal(evt.Runenv.TestRun, re.TestRun) -//require.Equal(evt.Runenv.TestGroupID, re.TestGroupID) -//case 2: -////require.Equal(EventTypeFinish, evt.Type) -//require.Equal(EventOutcomeFailed, evt.Outcome) -//require.Equal("bang", evt.Error) -//case 3: -////require.Equal(EventTypeFinish, evt.Type) -//require.Equal(EventOutcomeCrashed, evt.Outcome) -//require.Equal("terrible bang", evt.Error) -//require.NotEmpty(evt.Stacktrace) -//case 4: -////require.Equal(EventTypeMessage, evt.Type) -//case 5: -////require.Equal(evt.Type, EventTypeFinish) -//require.Equal(evt.Outcome, EventOutcomeOK) -//} -//i++ -//} -//} +func TestAllEvents(t *testing.T) { + re, cleanup := RandomTestRunEnv(t) + t.Cleanup(cleanup) + + re.RecordStart() + re.RecordFailure(fmt.Errorf("bang")) + re.RecordCrash(fmt.Errorf("terrible bang")) + re.RecordMessage("i have something to %s", "say") + re.RecordSuccess() + + if err := re.Close(); err != nil { + t.Fatal(err) + } + + file, err := os.OpenFile(re.TestOutputsPath+"/run.out", os.O_RDONLY, 0644) + if err != nil { + t.Fatal(err) + } + defer file.Close() + + require := require.New(t) + + var i int + for dec := json.NewDecoder(file); dec.More(); { + var m = struct { + Event Event `json:"event"` + }{} + if err := dec.Decode(&m); err != nil { + t.Fatal(err) + } + + switch evt := m.Event; i { + case 0: + require.NotNil(evt.MessageEvent) + require.Condition(func() bool { return strings.HasPrefix(evt.Message, "InfluxDB unavailable") }) + case 1: + require.NotNil(evt.StartEvent) + require.Equal(evt.Runenv.TestPlan, re.TestPlan) + require.Equal(evt.Runenv.TestCase, re.TestCase) + require.Equal(evt.Runenv.TestRun, re.TestRun) + require.Equal(evt.Runenv.TestGroupID, re.TestGroupID) + case 2: + require.NotNil(evt.FailureEvent) + require.Equal("bang", evt.FailureEvent.Error) + case 3: + require.NotNil(evt.CrashEvent) + require.Equal("terrible bang", evt.CrashEvent.Error) + require.NotEmpty(evt.Stacktrace) + case 4: + require.NotNil(evt.MessageEvent) + require.Equal(evt.Type(), "MessageEvent") + require.Equal("i have something to say", evt.MessageEvent.Message) + case 5: + require.NotNil(evt.SuccessEvent) + } + i++ + } +} func TestMetricsRecordedInFile(t *testing.T) { test := func(f func(*RunEnv) *MetricsApi, file string) func(t *testing.T) { diff --git a/sync/client_watch.go b/sync/client_watch.go index 53627bb..7d7042f 100644 --- a/sync/client_watch.go +++ b/sync/client_watch.go @@ -8,7 +8,6 @@ import ( "github.com/go-redis/redis/v7" "github.com/testground/sdk-go/runtime" - "github.com/testground/testground/pkg/logging" "go.uber.org/zap" ) @@ -18,8 +17,7 @@ type WatchClient struct { log *zap.SugaredLogger } -func NewWatchClient(ctx context.Context) (*WatchClient, error) { - log := logging.S() +func NewWatchClient(ctx context.Context, log *zap.SugaredLogger) (*WatchClient, error) { rclient, err := redisClient(ctx, log) if err != nil { return nil, fmt.Errorf("failed to create redis client: %w", err) From 24c7ceb8154d5004cbf0349a3030307f9ba9bf8d Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Mon, 5 Oct 2020 15:42:36 +0200 Subject: [PATCH 13/25] no errors in influxdb --- runtime/metrics.go | 9 --------- 1 file changed, 9 deletions(-) diff --git a/runtime/metrics.go b/runtime/metrics.go index f70808c..6c40efe 100644 --- a/runtime/metrics.go +++ b/runtime/metrics.go @@ -191,16 +191,7 @@ func (m *Metrics) recordEvent(evt *Event) { tags[k] = v } - //if evt.Outcome != "" { - //tags["outcome"] = string(evt.Outcome) - //} - - //fields := map[string]interface{}{ - //"error": evt.Error, - //} - measurement := fmt.Sprintf("events.%s", evt.Type()) - //p, err := client.NewPoint(measurement, tags, fields) p, err := client.NewPoint(measurement, tags, nil) if err != nil { m.re.RecordMessage("failed to create InfluxDB point: %s", err) From cd6286c729b9a69fe572c58131ac5c934a62ceb4 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Mon, 5 Oct 2020 15:46:13 +0200 Subject: [PATCH 14/25] add group to crash and failure events --- runtime/runenv_events.go | 17 +++++++++-------- sync/client_watch.go | 8 +++++++- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/runtime/runenv_events.go b/runtime/runenv_events.go index da134d3..5fcfe8c 100644 --- a/runtime/runenv_events.go +++ b/runtime/runenv_events.go @@ -79,7 +79,8 @@ func (s SuccessEvent) MarshalLogObject(oe zapcore.ObjectEncoder) error { } type FailureEvent struct { - Error string `json:"error"` + TestGroupID string `json:"group"` + Error string `json:"error"` } func (FailureEvent) Type() string { @@ -92,8 +93,9 @@ func (f FailureEvent) MarshalLogObject(oe zapcore.ObjectEncoder) error { } type CrashEvent struct { - Error string `json:"error"` - Stacktrace string `json:"stacktrace"` + TestGroupID string `json:"group"` + Error string `json:"error"` + Stacktrace string `json:"stacktrace"` } func (CrashEvent) Type() string { @@ -225,9 +227,7 @@ func (re *RunEnv) RecordSuccess() { // RecordFailure records that the calling instance failed with the supplied // error. func (re *RunEnv) RecordFailure(err error) { - e := &Event{FailureEvent: &FailureEvent{ - Error: err.Error(), - }} + e := &Event{FailureEvent: &FailureEvent{TestGroupID: re.RunParams.TestGroupID, Error: err.Error()}} re.logger.Info("", zap.Object("event", e)) re.metrics.recordEvent(e) @@ -240,8 +240,9 @@ func (re *RunEnv) RecordFailure(err error) { // supplied error. func (re *RunEnv) RecordCrash(err interface{}) { e := &Event{CrashEvent: &CrashEvent{ - Error: fmt.Sprintf("%s", err), - Stacktrace: string(debug.Stack()), + TestGroupID: re.RunParams.TestGroupID, + Error: fmt.Sprintf("%s", err), + Stacktrace: string(debug.Stack()), }} re.logger.Error("", zap.Object("event", e)) re.metrics.recordEvent(e) diff --git a/sync/client_watch.go b/sync/client_watch.go index 7d7042f..071e0de 100644 --- a/sync/client_watch.go +++ b/sync/client_watch.go @@ -51,6 +51,7 @@ func (w *WatchClient) FetchAllEvents(rp *runtime.RunParams) ([]*runtime.Event, e return nil, err } + newId := id for _, xr := range streams { for _, msg := range xr.Messages { payload := msg.Values[RedisPayloadKey].(string) @@ -63,9 +64,14 @@ func (w *WatchClient) FetchAllEvents(rp *runtime.RunParams) ([]*runtime.Event, e events = append(events, ev) - id = msg.ID + newId = msg.ID } } + + // exit if the cursor hasn't changed + if newId == id { + break + } } return events, nil From a2fad0dd3dc97e9dfe4931f132597f1c8bf50829 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Mon, 5 Oct 2020 15:53:49 +0200 Subject: [PATCH 15/25] godoc --- run/panic_test.go | 4 ++-- runtime/runenv_events.go | 2 ++ sync/client_watch.go | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/run/panic_test.go b/run/panic_test.go index a1e9f18..65081ee 100644 --- a/run/panic_test.go +++ b/run/panic_test.go @@ -44,7 +44,7 @@ func TestPanicFromMain(t *testing.T) { last = scanner.Text() } - if !strings.Contains(last, "\"type\":\"CrashEvent\"") { + if !strings.Contains(last, "\"crash_event\"") { t.Fatalf("expected crashed event; got: %s", last) } } @@ -68,7 +68,7 @@ func TestPanicFromChildGoroutine(t *testing.T) { last = scanner.Text() } - if !strings.Contains(last, "\"type\":\"CrashEvent\"") { + if !strings.Contains(last, "\"crash_event\"") { t.Fatalf("expected crashed event; got: %s", last) } } diff --git a/runtime/runenv_events.go b/runtime/runenv_events.go index 5fcfe8c..ee486a8 100644 --- a/runtime/runenv_events.go +++ b/runtime/runenv_events.go @@ -88,6 +88,7 @@ func (FailureEvent) Type() string { } func (f FailureEvent) MarshalLogObject(oe zapcore.ObjectEncoder) error { + oe.AddString("group", f.TestGroupID) oe.AddString("error", f.Error) return nil } @@ -103,6 +104,7 @@ func (CrashEvent) Type() string { } func (c CrashEvent) MarshalLogObject(oe zapcore.ObjectEncoder) error { + oe.AddString("group", c.TestGroupID) oe.AddString("error", c.Error) oe.AddString("stacktrace", c.Stacktrace) return nil diff --git a/sync/client_watch.go b/sync/client_watch.go index 071e0de..07aa850 100644 --- a/sync/client_watch.go +++ b/sync/client_watch.go @@ -11,6 +11,8 @@ import ( "go.uber.org/zap" ) +// WatchClient is used by the Testground daemon to monitor all emitted events by the testplans, +// in particular the terminal events, such as SuccessEvent, FailureEvent and CrashEvent. type WatchClient struct { ctx context.Context rclient *redis.Client From 6fc40ca6786531717e37b228c28b55fd316438cf Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Tue, 6 Oct 2020 15:20:16 +0200 Subject: [PATCH 16/25] fixup --- sync/client_watch.go | 1 + 1 file changed, 1 insertion(+) diff --git a/sync/client_watch.go b/sync/client_watch.go index 07aa850..1d15063 100644 --- a/sync/client_watch.go +++ b/sync/client_watch.go @@ -74,6 +74,7 @@ func (w *WatchClient) FetchAllEvents(rp *runtime.RunParams) ([]*runtime.Event, e if newId == id { break } + id = newId } return events, nil From 5d2e641eea29c5b1b19979292ecd0bca00454738 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Tue, 13 Oct 2020 14:55:05 +0200 Subject: [PATCH 17/25] snake_case events name; fix InfluxDB fields and remove error; propagate panics --- run/invoker.go | 3 ++- run/panic.go | 11 +++++++++-- runtime/metrics.go | 11 ++++++++--- runtime/runenv_events.go | 12 ++++++------ 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/run/invoker.go b/run/invoker.go index d9413eb..170955b 100644 --- a/run/invoker.go +++ b/run/invoker.go @@ -169,7 +169,8 @@ func invoke(runenv *runtime.RunEnv, fn interface{}) { } case p := <-panicHandler: // propagate the panic. - panic(p) + runenv.RecordCrash(p.DebugStacktrace) + panic(p.RecoverObj) } } diff --git a/run/panic.go b/run/panic.go index 17333ab..188ff2a 100644 --- a/run/panic.go +++ b/run/panic.go @@ -1,8 +1,15 @@ package run +import "runtime/debug" + +type PanicPayload struct { + RecoverObj interface{} + DebugStacktrace string +} + // panicHandler is where the top-level main goroutine panic handler is // listening for panics. -var panicHandler = make(chan interface{}) +var panicHandler = make(chan PanicPayload) // HandlePanics should be called in a defer at the top of any goroutine that // the test plan spawns, so that panics from children goroutine are propagated @@ -13,5 +20,5 @@ func HandlePanics() { if obj == nil { return } - panicHandler <- obj + panicHandler <- PanicPayload{obj, string(debug.Stack())} } diff --git a/runtime/metrics.go b/runtime/metrics.go index 6c40efe..c2c3350 100644 --- a/runtime/metrics.go +++ b/runtime/metrics.go @@ -186,13 +186,18 @@ func (m *Metrics) recordEvent(evt *Event) { } // this map copy is terrible; the influxdb v2 SDK makes points mutable. - tags := make(map[string]string, len(m.tags)+1) + tags := make(map[string]string, len(m.tags)+2) for k, v := range m.tags { tags[k] = v } - measurement := fmt.Sprintf("events.%s", evt.Type()) - p, err := client.NewPoint(measurement, tags, nil) + fields := map[string]interface{}{ + "count": 1, + } + + tags["event_type"] = evt.Type() + + p, err := client.NewPoint("events", tags, fields) if err != nil { m.re.RecordMessage("failed to create InfluxDB point: %s", err) } diff --git a/runtime/runenv_events.go b/runtime/runenv_events.go index ee486a8..5c3490a 100644 --- a/runtime/runenv_events.go +++ b/runtime/runenv_events.go @@ -45,7 +45,7 @@ type StartEvent struct { } func (StartEvent) Type() string { - return "StartEvent" + return "start_event" } func (s StartEvent) MarshalLogObject(oe zapcore.ObjectEncoder) error { @@ -57,7 +57,7 @@ type MessageEvent struct { } func (MessageEvent) Type() string { - return "MessageEvent" + return "message_event" } func (m MessageEvent) MarshalLogObject(oe zapcore.ObjectEncoder) error { @@ -84,7 +84,7 @@ type FailureEvent struct { } func (FailureEvent) Type() string { - return "FailureEvent" + return "failure_event" } func (f FailureEvent) MarshalLogObject(oe zapcore.ObjectEncoder) error { @@ -100,7 +100,7 @@ type CrashEvent struct { } func (CrashEvent) Type() string { - return "CrashEvent" + return "crash_event" } func (c CrashEvent) MarshalLogObject(oe zapcore.ObjectEncoder) error { @@ -116,7 +116,7 @@ type StageStartEvent struct { } func (StageStartEvent) Type() string { - return "StageStartEvent" + return "stage_start_event" } func (s StageStartEvent) MarshalLogObject(oe zapcore.ObjectEncoder) error { @@ -131,7 +131,7 @@ type StageEndEvent struct { } func (StageEndEvent) Type() string { - return "StageEndEvent" + return "stage_end_event" } func (s StageEndEvent) MarshalLogObject(oe zapcore.ObjectEncoder) error { From 3ccc479337d97a6ece7207b5b3e66f87ab7449f4 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Mon, 5 Oct 2020 17:47:46 +0200 Subject: [PATCH 18/25] add subscribe for continuous fetching of events --- sync/client_watch.go | 74 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/sync/client_watch.go b/sync/client_watch.go index 1d15063..4054fd9 100644 --- a/sync/client_watch.go +++ b/sync/client_watch.go @@ -3,6 +3,7 @@ package sync import ( "context" "encoding/json" + "errors" "fmt" "time" @@ -33,6 +34,10 @@ func NewWatchClient(ctx context.Context, log *zap.SugaredLogger) (*WatchClient, } func (w *WatchClient) FetchAllEvents(rp *runtime.RunParams) ([]*runtime.Event, error) { + if w == nil { + return nil, errors.New("watch client not initialised, due to lack of redis") + } + key := fmt.Sprintf("run:%s:plan:%s:case:%s", rp.TestRun, rp.TestPlan, rp.TestCase) var events []*runtime.Event @@ -79,3 +84,72 @@ func (w *WatchClient) FetchAllEvents(rp *runtime.RunParams) ([]*runtime.Event, e return events, nil } + +func (w *WatchClient) SubscribeEvents(ctx context.Context, rp *runtime.RunParams) (chan *runtime.Event, error) { + if w == nil { + return nil, errors.New("watch client not initialised, due to lack of redis") + } + + key := fmt.Sprintf("run:%s:plan:%s:case:%s", rp.TestRun, rp.TestPlan, rp.TestCase) + + events := make(chan *runtime.Event) + + id := "0" + + go func() { + RegenerateConnection: + conn := w.rclient.Conn() + clientid, err := conn.ClientID().Result() + if err != nil { + w.log.Error("got error on ClientID call", "err", err) + time.Sleep(1 * time.Second) + goto RegenerateConnection + } + fmt.Println(clientid) + + for { + streamsc := make(chan []redis.XStream) + errc := make(chan error) + go func() { + args := &redis.XReadArgs{} + args.Streams = []string{key, id} + args.Block = 0 + args.Count = 10000 + + streams, err := conn.XRead(args).Result() + if err != nil { + errc <- err + } + streamsc <- streams + }() + + select { + case err := <-ctx.Done(): + w.log.Warn("got error from ctx.Done", "err", err) + close(streamsc) + return + case err := <-errc: + w.log.Warn("got error from errc", "err", err) + goto RegenerateConnection + case streams := <-streamsc: + for _, xr := range streams { + for _, msg := range xr.Messages { + payload := msg.Values[RedisPayloadKey].(string) + + ev := &runtime.Event{} + err := json.Unmarshal([]byte(payload), ev) + if err != nil { + panic(err) + } + + events <- ev + + id = msg.ID + } + } + } + } + }() + + return events, nil +} From 584cdc6b72bb4200b18db91fd19fbb58bbefd917 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Tue, 13 Oct 2020 14:58:47 +0200 Subject: [PATCH 19/25] fix modules --- go.mod | 11 +--------- go.sum | 64 +++++++--------------------------------------------------- 2 files changed, 8 insertions(+), 67 deletions(-) diff --git a/go.mod b/go.mod index 5de9a41..f6fb79b 100644 --- a/go.mod +++ b/go.mod @@ -8,18 +8,9 @@ require ( github.com/go-redis/redis/v7 v7.4.0 github.com/hashicorp/go-multierror v1.1.0 github.com/influxdata/influxdb1-client v0.0.0-20200515024757-02f0bf5dbca3 - github.com/kr/text v0.2.0 // indirect - github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect - github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.7.1 github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 github.com/stretchr/testify v1.5.1 go.uber.org/zap v1.15.0 - golang.org/x/net v0.0.0-20200301022130-244492dfa37a // indirect - golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a - golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae // indirect - golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f // indirect - google.golang.org/protobuf v1.25.0 // indirect - gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect - gopkg.in/yaml.v2 v2.2.8 // indirect + golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e ) diff --git a/go.sum b/go.sum index 4756030..d3e56a3 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,3 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -11,18 +10,13 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= @@ -33,8 +27,6 @@ github.com/go-redis/redis/v7 v7.4.0 h1:7obg6wUoj05T0EpY0o8B59S9w5yeMWql7sw2kwNW1 github.com/go-redis/redis/v7 v7.4.0/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -43,15 +35,12 @@ github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:x github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= @@ -73,8 +62,6 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -82,17 +69,14 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= @@ -101,7 +85,6 @@ github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNja github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= @@ -134,34 +117,23 @@ go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-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-20190923162816-aa69164e4478 h1:l5EDrHhldLYb3ZRHDUhXF7Om7MvYXnkV9/iQNo1lX6g= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a h1:WXEvlFVvvGxCJLG6REjsT03iWnKLEWinaScsxF2Vm2o= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -170,50 +142,32 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1 h1:ogLJMz+qpzav7lGMh10LMvAkM/fAoGlaiiHYiFYdm80= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/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/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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f h1:kDxGY2VmgABOe55qheT/TFqUMtcTHnomIPS1iv3G4Ms= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/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/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= @@ -224,9 +178,5 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5 h1:ymVxjfMaHvXD8RqPRmzHHsB3VvucivSkIAvJFDI5O3c= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= From 0ab5437d8f9a09cb0ad77fea48168f31a9dab959 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Tue, 13 Oct 2020 15:00:38 +0200 Subject: [PATCH 20/25] rename to signalEmitter --- runtime/runenv.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/runtime/runenv.go b/runtime/runenv.go index 5d40776..e7683d4 100644 --- a/runtime/runenv.go +++ b/runtime/runenv.go @@ -33,7 +33,7 @@ type RunEnv struct { logger *zap.Logger metrics *Metrics - signalEventer SignalEventer + signalEmitter SignalEmitter wg gosync.WaitGroup closeCh chan struct{} @@ -72,12 +72,12 @@ func NewRunEnv(params RunParams) *RunEnv { return re } -type SignalEventer interface { - SignalEvent(context.Context, interface{}) error +type SignalEmitter interface { + SignalEmitter(context.Context, interface{}) error } -func (re *RunEnv) AttachSyncClient(se SignalEventer) { - re.signalEventer = se +func (re *RunEnv) AttachSyncClient(se SignalEmitter) { + re.signalEmitter = se } // R returns a metrics object for results. From 00a74c0b51cd4194486597549e3933466a580b2d Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Tue, 13 Oct 2020 15:07:02 +0200 Subject: [PATCH 21/25] add NilSignalEmitter --- runtime/runenv.go | 9 ++++++++- runtime/runenv_events.go | 16 ++++++---------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/runtime/runenv.go b/runtime/runenv.go index e7683d4..824045e 100644 --- a/runtime/runenv.go +++ b/runtime/runenv.go @@ -63,6 +63,7 @@ func NewRunEnv(params RunParams) *RunEnv { re.structured.ch = make(chan *zap.Logger) re.unstructured.ch = make(chan *os.File) + re.signalEmitter = &NilSignalEmitter{} re.wg.Add(1) go re.manageAssets() @@ -73,7 +74,13 @@ func NewRunEnv(params RunParams) *RunEnv { } type SignalEmitter interface { - SignalEmitter(context.Context, interface{}) error + SignalEvent(context.Context, interface{}) error +} + +type NilSignalEmitter struct{} + +func (ne NilSignalEmitter) SignalEvent(ctx context.Context, event interface{}) error { + return nil } func (re *RunEnv) AttachSyncClient(se SignalEmitter) { diff --git a/runtime/runenv_events.go b/runtime/runenv_events.go index 5c3490a..27526eb 100644 --- a/runtime/runenv_events.go +++ b/runtime/runenv_events.go @@ -213,6 +213,8 @@ func (re *RunEnv) RecordStart() { re.logger.Info("", zap.Object("event", e)) re.metrics.recordEvent(e) + + _ = re.signalEmitter.SignalEvent(context.Background(), e) } // RecordSuccess records that the calling instance succeeded. @@ -221,21 +223,17 @@ func (re *RunEnv) RecordSuccess() { re.logger.Info("", zap.Object("event", e)) re.metrics.recordEvent(e) - if re.signalEventer != nil { - _ = re.signalEventer.SignalEvent(context.Background(), e) - } + _ = re.signalEmitter.SignalEvent(context.Background(), e) } // RecordFailure records that the calling instance failed with the supplied // error. func (re *RunEnv) RecordFailure(err error) { e := &Event{FailureEvent: &FailureEvent{TestGroupID: re.RunParams.TestGroupID, Error: err.Error()}} - re.logger.Info("", zap.Object("event", e)) + re.logger.Error("", zap.Object("event", e)) re.metrics.recordEvent(e) - if re.signalEventer != nil { - _ = re.signalEventer.SignalEvent(context.Background(), e) - } + _ = re.signalEmitter.SignalEvent(context.Background(), e) } // RecordCrash records that the calling instance crashed/panicked with the @@ -249,7 +247,5 @@ func (re *RunEnv) RecordCrash(err interface{}) { re.logger.Error("", zap.Object("event", e)) re.metrics.recordEvent(e) - if re.signalEventer != nil { - _ = re.signalEventer.SignalEvent(context.Background(), e) - } + _ = re.signalEmitter.SignalEvent(context.Background(), e) } From 9e99ddb8eb54e50fcb973a899635307fd3210919 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Tue, 13 Oct 2020 15:08:21 +0200 Subject: [PATCH 22/25] add :run_events key suffix --- sync/client_state.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sync/client_state.go b/sync/client_state.go index 60fc8ce..e793a24 100644 --- a/sync/client_state.go +++ b/sync/client_state.go @@ -85,7 +85,7 @@ func (c *DefaultClient) SignalEvent(ctx context.Context, event interface{}) (err return ErrNoRunParameters } - key := fmt.Sprintf("run:%s:plan:%s:case:%s", rp.TestRun, rp.TestPlan, rp.TestCase) + key := fmt.Sprintf("run:%s:plan:%s:case:%s:run_events", rp.TestRun, rp.TestPlan, rp.TestCase) c.log.Debugw("signal entry key", "key", key) ev, err := json.Marshal(event) From 52e075bf91b7c931a96d0551c1ea12af982ecb03 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Tue, 13 Oct 2020 15:13:13 +0200 Subject: [PATCH 23/25] change interface{} to *runtime.Event --- runtime/runenv.go | 4 ++-- runtime/runenv_test.go | 2 +- sync/client_inmem.go | 4 +++- sync/client_state.go | 3 ++- sync/interface.go | 4 +++- 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/runtime/runenv.go b/runtime/runenv.go index 824045e..9f02c33 100644 --- a/runtime/runenv.go +++ b/runtime/runenv.go @@ -74,12 +74,12 @@ func NewRunEnv(params RunParams) *RunEnv { } type SignalEmitter interface { - SignalEvent(context.Context, interface{}) error + SignalEvent(context.Context, *Event) error } type NilSignalEmitter struct{} -func (ne NilSignalEmitter) SignalEvent(ctx context.Context, event interface{}) error { +func (ne NilSignalEmitter) SignalEvent(ctx context.Context, event *Event) error { return nil } diff --git a/runtime/runenv_test.go b/runtime/runenv_test.go index b3cf123..9ec96fe 100644 --- a/runtime/runenv_test.go +++ b/runtime/runenv_test.go @@ -126,7 +126,7 @@ func TestAllEvents(t *testing.T) { require.NotEmpty(evt.Stacktrace) case 4: require.NotNil(evt.MessageEvent) - require.Equal(evt.Type(), "MessageEvent") + require.Equal(evt.Type(), "message_event") require.Equal("i have something to say", evt.MessageEvent.Message) case 5: require.NotNil(evt.SuccessEvent) diff --git a/sync/client_inmem.go b/sync/client_inmem.go index b81b450..f2e3240 100644 --- a/sync/client_inmem.go +++ b/sync/client_inmem.go @@ -4,6 +4,8 @@ import ( "context" "reflect" "sync" + + "github.com/testground/sdk-go/runtime" ) type inmemClient struct { @@ -119,7 +121,7 @@ func (i *inmemClient) SignalEntry(_ context.Context, state State) (after int64, return v, nil } -func (i *inmemClient) SignalEvent(_ context.Context, event interface{}) error { +func (i *inmemClient) SignalEvent(_ context.Context, event *runtime.Event) error { return nil } diff --git a/sync/client_state.go b/sync/client_state.go index e793a24..39fcff5 100644 --- a/sync/client_state.go +++ b/sync/client_state.go @@ -6,6 +6,7 @@ import ( "fmt" "github.com/go-redis/redis/v7" + "github.com/testground/sdk-go/runtime" ) // Barrier sets a barrier on the supplied State that fires when it reaches its @@ -78,7 +79,7 @@ func (c *DefaultClient) SignalEntry(ctx context.Context, state State) (after int return seq, err } -func (c *DefaultClient) SignalEvent(ctx context.Context, event interface{}) (err error) { +func (c *DefaultClient) SignalEvent(ctx context.Context, event *runtime.Event) (err error) { c.log.Debugw("inside signal entry") rp := c.extractor(ctx) if rp == nil { diff --git a/sync/interface.go b/sync/interface.go index 1f3f283..8291c37 100644 --- a/sync/interface.go +++ b/sync/interface.go @@ -3,6 +3,8 @@ package sync import ( "context" "io" + + "github.com/testground/sdk-go/runtime" ) type Client interface { @@ -26,5 +28,5 @@ type Client interface { MustPublishSubscribe(ctx context.Context, topic *Topic, payload interface{}, ch interface{}) (seq int64, sub *Subscription) MustSignalAndWait(ctx context.Context, state State, target int) (seq int64) - SignalEvent(context.Context, interface{}) error + SignalEvent(context.Context, *runtime.Event) error } From 18a66bdc085c7fb21b5e1327f79f4c3c0ad88839 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Tue, 13 Oct 2020 15:16:30 +0200 Subject: [PATCH 24/25] remove debug calls --- sync/client_state.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/sync/client_state.go b/sync/client_state.go index 39fcff5..54bf012 100644 --- a/sync/client_state.go +++ b/sync/client_state.go @@ -80,20 +80,17 @@ func (c *DefaultClient) SignalEntry(ctx context.Context, state State) (after int } func (c *DefaultClient) SignalEvent(ctx context.Context, event *runtime.Event) (err error) { - c.log.Debugw("inside signal entry") rp := c.extractor(ctx) if rp == nil { return ErrNoRunParameters } key := fmt.Sprintf("run:%s:plan:%s:case:%s:run_events", rp.TestRun, rp.TestPlan, rp.TestCase) - c.log.Debugw("signal entry key", "key", key) ev, err := json.Marshal(event) if err != nil { return err } - c.log.Debugw("signal event marshaled", "key", key) args := &redis.XAddArgs{ Stream: key, @@ -105,7 +102,6 @@ func (c *DefaultClient) SignalEvent(ctx context.Context, event *runtime.Event) ( if err != nil { return err } - c.log.Debugw("signal event xadded", "key", key) return nil } From e0d576dd6423b29fb2177a7c8d31df9a580faa6b Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Tue, 13 Oct 2020 15:18:57 +0200 Subject: [PATCH 25/25] use :run_events suffix in consumers --- sync/client_watch.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sync/client_watch.go b/sync/client_watch.go index 4054fd9..ebeb4d0 100644 --- a/sync/client_watch.go +++ b/sync/client_watch.go @@ -38,7 +38,7 @@ func (w *WatchClient) FetchAllEvents(rp *runtime.RunParams) ([]*runtime.Event, e return nil, errors.New("watch client not initialised, due to lack of redis") } - key := fmt.Sprintf("run:%s:plan:%s:case:%s", rp.TestRun, rp.TestPlan, rp.TestCase) + key := fmt.Sprintf("run:%s:plan:%s:case:%s:run_events", rp.TestRun, rp.TestPlan, rp.TestCase) var events []*runtime.Event @@ -90,7 +90,7 @@ func (w *WatchClient) SubscribeEvents(ctx context.Context, rp *runtime.RunParams return nil, errors.New("watch client not initialised, due to lack of redis") } - key := fmt.Sprintf("run:%s:plan:%s:case:%s", rp.TestRun, rp.TestPlan, rp.TestCase) + key := fmt.Sprintf("run:%s:plan:%s:case:%s:run_events", rp.TestRun, rp.TestPlan, rp.TestCase) events := make(chan *runtime.Event)