Skip to content

Commit 91c4480

Browse files
update otel libs from v0.13.0 -> v0.20.0 (#5757)
What is the problem being solved? Part of #5756, adding opentelemetry trace information to skaffold commands. Updating out libs to the latest otel version adds additional useful functionality for tracing. Why is this the best approach? This approach uses go mod (updated via "go get <pkg>") and minor API changes to our otel API usage for the update. What other approaches did you consider? N/A What side effects will this approach have? There shouldn't be any side effects w/ this approach, the changes to otel's API were renaming/moving things (packages, functions, etc.). The only option removed was stdout Quantile aggregation (stdout.WithQuantiles) but I do not think this will have side effects. See open-telemetry/opentelemetry-go@49f699d#diff-2b283a7fb9f9b66e31a2b51a9ae9cad3599650a633f02fea9a956c4f6a714c6c What future work remains to be done? N/A
1 parent 108694a commit 91c4480

File tree

4 files changed

+84
-75
lines changed

4 files changed

+84
-75
lines changed

go.mod

+9-7
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ require (
1616
cloud.google.com/go v0.72.0
1717
cloud.google.com/go/storage v1.10.0
1818
github.com/AlecAivazis/survey/v2 v2.2.7
19-
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.13.0
19+
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.20.0
2020
github.com/aws/aws-sdk-go v1.36.30 // indirect
2121
github.com/blang/semver v3.5.1+incompatible
2222
github.com/bmatcuk/doublestar v1.2.4
@@ -36,7 +36,7 @@ require (
3636
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b
3737
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e
3838
github.com/golang/protobuf v1.4.3
39-
github.com/google/go-cmp v0.5.4
39+
github.com/google/go-cmp v0.5.5
4040
github.com/google/go-containerregistry v0.4.1-0.20210128200529-19c2b639fab1
4141
github.com/google/go-containerregistry/pkg/authn/k8schain v0.0.0-20210216200643-d81088d9983e // indirect
4242
github.com/google/go-github v17.0.0+incompatible
@@ -57,20 +57,22 @@ require (
5757
github.com/opencontainers/go-digest v1.0.0
5858
github.com/opencontainers/image-spec v1.0.1
5959
github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4
60-
github.com/pkg/errors v0.9.1 // indirect
60+
github.com/pkg/errors v0.9.1
6161
github.com/rakyll/statik v0.1.7
6262
github.com/rjeczalik/notify v0.9.3-0.20201210012515-e2a77dcc14cf
6363
github.com/russross/blackfriday/v2 v2.0.1
6464
github.com/segmentio/textio v1.2.0
6565
github.com/sirupsen/logrus v1.8.1
6666
github.com/spf13/cobra v1.1.3
6767
github.com/spf13/pflag v1.0.5
68-
github.com/stretchr/testify v1.7.0 // indirect
6968
github.com/tektoncd/pipeline v0.5.1-0.20190731183258-9d7e37e85bf8
7069
github.com/xeipuuv/gojsonschema v1.2.0
71-
go.opentelemetry.io/otel v0.13.0
72-
go.opentelemetry.io/otel/exporters/stdout v0.13.0
73-
go.opentelemetry.io/otel/sdk v0.13.0
70+
go.opentelemetry.io/otel v0.20.0
71+
go.opentelemetry.io/otel/exporters/stdout v0.20.0
72+
go.opentelemetry.io/otel/metric v0.20.0
73+
go.opentelemetry.io/otel/sdk v0.20.0
74+
go.opentelemetry.io/otel/sdk/metric v0.20.0
75+
go.opentelemetry.io/otel/trace v0.20.0
7476
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 // indirect
7577
golang.org/x/mod v0.4.1
7678
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 // indirect

go.sum

+20-11
Original file line numberDiff line numberDiff line change
@@ -125,15 +125,13 @@ github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBp
125125
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
126126
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
127127
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
128-
github.com/DataDog/sketches-go v0.0.1 h1:RtG+76WKgZuz6FIaGsjoPePmadDBkuD/KC6+ZWu78b8=
129-
github.com/DataDog/sketches-go v0.0.1/go.mod h1:Q5DbzQ+3AkgGwymQO7aZFNP7ns2lZKGtvRBzRXfdi60=
130128
github.com/Djarvur/go-err113 v0.0.0-20200410182137-af658d038157/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs=
131129
github.com/Djarvur/go-err113 v0.1.0/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs=
132130
github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae/go.mod h1:mjwGPas4yKduTyubHvD1Atl9r1rUq8DfVy+gkVvZ+oo=
133131
github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534/go.mod h1:iroGtC8B3tQiqtds1l+mgk/BBOrxbqjH+eUfFQYRc14=
134132
github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20200415212048-7901bc822317/go.mod h1:DF8FZRxMHMGv/vP2lQP6h+dYzzjpuRn24VeRiYn3qjQ=
135-
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.13.0 h1:RbaN+/fPE1Rv/ZC/Z1vcD/qsd4XyYmzlTRqIPXnCAE0=
136-
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.13.0/go.mod h1:8MmJ2gqHtCH9fdAkpsnSYPdgn47SXsBodhYk6JfzA3M=
133+
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.20.0 h1:H4Hs0jLf0IcQ96dgx3gPFRke2zyjrzpYMecVsrWKrAc=
134+
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.20.0/go.mod h1:3DfYfW/GJ2p+Yd1vGImcFO1jKaqvZmAMMIdWk8BJsjw=
137135
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
138136
github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd h1:sjQovDkwrZp8u+gxLtPgKGjk5hCxuy2hrRejBTA9xFU=
139137
github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E=
@@ -644,8 +642,9 @@ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
644642
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
645643
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
646644
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
647-
github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M=
648645
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
646+
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
647+
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
649648
github.com/google/go-containerregistry v0.0.0-20191010200024-a3d713f9b7f8/go.mod h1:KyKXa9ciM8+lgMXwOVsXi7UxGrsf9mM61Mzs+xKUrKE=
650649
github.com/google/go-containerregistry v0.1.2/go.mod h1:GPivBPgdAyd2SU+vf6EpsgOtWDuPqjW0hJZt4rNdTZ4=
651650
github.com/google/go-containerregistry v0.2.1/go.mod h1:Ts3Wioz1r5ayWx8sS6vLcWltWcM1aqFjd/eVrkFhrWM=
@@ -1336,12 +1335,22 @@ go.opencensus.io v0.22.4-0.20200608061201-1901b56b9515/go.mod h1:yxeiOL68Rb0Xd1d
13361335
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
13371336
go.opencensus.io v0.22.5 h1:dntmOdLpSpHlVqbW5Eay97DelsZHe+55D+xC6i0dDS0=
13381337
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
1339-
go.opentelemetry.io/otel v0.13.0 h1:2isEnyzjjJZq6r2EKMsFj4TxiQiexsM04AVhwbR/oBA=
1340-
go.opentelemetry.io/otel v0.13.0/go.mod h1:dlSNewoRYikTkotEnxdmuBHgzT+k/idJSfDv/FxEnOY=
1341-
go.opentelemetry.io/otel/exporters/stdout v0.13.0 h1:A+XiGIPQbGoJoBOJfKAKnZyiUSjSWvL3XWETUvtom5k=
1342-
go.opentelemetry.io/otel/exporters/stdout v0.13.0/go.mod h1:JJt8RpNY6K+ft9ir3iKpceCvT/rhzJXEExGrWFCbv1o=
1343-
go.opentelemetry.io/otel/sdk v0.13.0 h1:4VCfpKamZ8GtnepXxMRurSpHpMKkcxhtO33z1S4rGDQ=
1344-
go.opentelemetry.io/otel/sdk v0.13.0/go.mod h1:dKvLH8Uu8LcEPlSAUsfW7kMGaJBhk/1NYvpPZ6wIMbU=
1338+
go.opentelemetry.io/otel v0.20.0 h1:eaP0Fqu7SXHwvjiqDq83zImeehOHX8doTvU9AwXON8g=
1339+
go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo=
1340+
go.opentelemetry.io/otel/exporters/stdout v0.20.0 h1:NXKkOWV7Np9myYrQE0wqRS3SbwzbupHu07rDONKubMo=
1341+
go.opentelemetry.io/otel/exporters/stdout v0.20.0/go.mod h1:t9LUU3JvYlmoPA61abhvsXxKh58xdyi3nMtI6JiR8v0=
1342+
go.opentelemetry.io/otel/metric v0.20.0 h1:4kzhXFP+btKm4jwxpjIqjs41A7MakRFUS86bqLHTIw8=
1343+
go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU=
1344+
go.opentelemetry.io/otel/oteltest v0.20.0 h1:HiITxCawalo5vQzdHfKeZurV8x7ljcqAgiWzF6Vaeaw=
1345+
go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw=
1346+
go.opentelemetry.io/otel/sdk v0.20.0 h1:JsxtGXd06J8jrnya7fdI/U/MR6yXA5DtbZy+qoHQlr8=
1347+
go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc=
1348+
go.opentelemetry.io/otel/sdk/export/metric v0.20.0 h1:c5VRjxCXdQlx1HjzwGdQHzZaVI82b5EbBgOu2ljD92g=
1349+
go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE=
1350+
go.opentelemetry.io/otel/sdk/metric v0.20.0 h1:7ao1wpzHRVKf0OQ7GIxiQJA6X7DLX9o14gmVon7mMK8=
1351+
go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE=
1352+
go.opentelemetry.io/otel/trace v0.20.0 h1:1DL6EXUdcg95gukhuRRvLDO/4X5THh/5dIV52lqtnbw=
1353+
go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw=
13451354
go.starlark.net v0.0.0-20190528202925-30ae18b8564f/go.mod h1:c1/X6cHgvdXj6pUlmWKMkuqRnW4K8x2vwt6JAaaircg=
13461355
go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o=
13471356
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=

pkg/skaffold/instrumentation/export.go

+41-40
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,12 @@ import (
3131
"github.com/mitchellh/go-homedir"
3232
"github.com/rakyll/statik/fs"
3333
"github.com/sirupsen/logrus"
34-
"go.opentelemetry.io/otel/api/global"
35-
"go.opentelemetry.io/otel/api/metric"
34+
"go.opentelemetry.io/otel"
35+
"go.opentelemetry.io/otel/attribute"
3636
"go.opentelemetry.io/otel/exporters/stdout"
37-
"go.opentelemetry.io/otel/label"
38-
"go.opentelemetry.io/otel/sdk/metric/controller/push"
37+
"go.opentelemetry.io/otel/metric"
38+
"go.opentelemetry.io/otel/metric/global"
39+
"go.opentelemetry.io/otel/sdk/metric/controller/basic"
3940
"google.golang.org/api/option"
4041

4142
"github.com/GoogleContainerTools/skaffold/cmd/skaffold/app/cmd/statik"
@@ -90,11 +91,11 @@ func exportMetrics(ctx context.Context, filename string, meter skaffoldMeter) er
9091
}
9192

9293
start := time.Now()
93-
p.Start()
94+
p.Start(ctx)
9495
for _, m := range meters {
9596
createMetrics(ctx, m)
9697
}
97-
p.Stop()
98+
p.Stop(ctx)
9899
logrus.Debugf("metrics uploading complete in %s", time.Since(start).String())
99100

100101
if fileExists {
@@ -103,7 +104,7 @@ func exportMetrics(ctx context.Context, filename string, meter skaffoldMeter) er
103104
return nil
104105
}
105106

106-
func initCloudMonitoringExporterMetrics() (*push.Controller, error) {
107+
func initCloudMonitoringExporterMetrics() (*basic.Controller, error) {
107108
statikFS, err := statik.FS()
108109
if err != nil {
109110
return nil, err
@@ -127,7 +128,7 @@ func initCloudMonitoringExporterMetrics() (*push.Controller, error) {
127128
return fmt.Sprintf("custom.googleapis.com/skaffold/%s", desc.Name())
128129
}
129130

130-
global.SetErrorHandler(errHandler{})
131+
otel.SetErrorHandler(errHandler{})
131132
return mexporter.InstallNewPipeline(
132133
[]mexporter.Option{
133134
mexporter.WithProjectID(c.ProjectID),
@@ -140,14 +141,14 @@ func initCloudMonitoringExporterMetrics() (*push.Controller, error) {
140141
)
141142
}
142143

143-
func devStdOutExporter() (*push.Controller, error) {
144+
func devStdOutExporter() (*basic.Controller, error) {
144145
// export metrics to std out if local env is set.
145146
if _, ok := os.LookupEnv("SKAFFOLD_EXPORT_TO_STDOUT"); ok {
146-
return stdout.InstallNewPipeline([]stdout.Option{
147-
stdout.WithQuantiles([]float64{0.5}),
147+
_, controller, err := stdout.InstallNewPipeline([]stdout.Option{
148148
stdout.WithPrettyPrint(),
149149
stdout.WithWriter(os.Stdout),
150150
}, nil)
151+
return controller, err
151152
}
152153
return nil, nil
153154
}
@@ -157,25 +158,25 @@ func createMetrics(ctx context.Context, meter skaffoldMeter) {
157158
// A metric is uniquely identified by the metric name and the labels and corresponding values
158159
// This random number is used as a label to differentiate the metrics per user so if two users
159160
// run `skaffold build` at the same time they will both have their metrics recorded
160-
randLabel := label.String("randomizer", strconv.Itoa(rand.Intn(75000)))
161+
randLabel := attribute.String("randomizer", strconv.Itoa(rand.Intn(75000)))
161162

162163
m := global.Meter("skaffold")
163164

164165
// cloud monitoring only supports string type labels
165-
labels := []label.KeyValue{
166-
label.String("version", meter.Version),
167-
label.String("os", meter.OS),
168-
label.String("arch", meter.Arch),
169-
label.String("command", meter.Command),
170-
label.String("error", meter.ErrorCode.String()),
171-
label.String("platform_type", meter.PlatformType),
172-
label.String("config_count", strconv.Itoa(meter.ConfigCount)),
166+
labels := []attribute.KeyValue{
167+
attribute.String("version", meter.Version),
168+
attribute.String("os", meter.OS),
169+
attribute.String("arch", meter.Arch),
170+
attribute.String("command", meter.Command),
171+
attribute.String("error", meter.ErrorCode.String()),
172+
attribute.String("platform_type", meter.PlatformType),
173+
attribute.String("config_count", strconv.Itoa(meter.ConfigCount)),
173174
}
174-
sharedLabels := []label.KeyValue{
175+
sharedLabels := []attribute.KeyValue{
175176
randLabel,
176177
}
177178
if _, ok := allowedUsers[meter.User]; ok {
178-
sharedLabels = append(sharedLabels, label.String("user", meter.User))
179+
sharedLabels = append(sharedLabels, attribute.String("user", meter.User))
179180
}
180181
labels = append(labels, sharedLabels...)
181182

@@ -201,24 +202,24 @@ func createMetrics(ctx context.Context, meter skaffoldMeter) {
201202
}
202203
}
203204

204-
func flagMetrics(ctx context.Context, meter skaffoldMeter, m metric.Meter, randLabel label.KeyValue) {
205+
func flagMetrics(ctx context.Context, meter skaffoldMeter, m metric.Meter, randLabel attribute.KeyValue) {
205206
flagCounter := metric.Must(m).NewInt64ValueRecorder("flags", metric.WithDescription("Tracks usage of enum flags"))
206207
for k, v := range meter.EnumFlags {
207-
labels := []label.KeyValue{
208-
label.String("flag_name", k),
209-
label.String("flag_value", v),
210-
label.String("command", meter.Command),
211-
label.String("error", meter.ErrorCode.String()),
208+
labels := []attribute.KeyValue{
209+
attribute.String("flag_name", k),
210+
attribute.String("flag_value", v),
211+
attribute.String("command", meter.Command),
212+
attribute.String("error", meter.ErrorCode.String()),
212213
randLabel,
213214
}
214215
flagCounter.Record(ctx, 1, labels...)
215216
}
216217
}
217218

218-
func commandMetrics(ctx context.Context, meter skaffoldMeter, m metric.Meter, labels ...label.KeyValue) {
219+
func commandMetrics(ctx context.Context, meter skaffoldMeter, m metric.Meter, labels ...attribute.KeyValue) {
219220
commandCounter := metric.Must(m).NewInt64ValueRecorder(meter.Command,
220221
metric.WithDescription(fmt.Sprintf("Number of times %s is used", meter.Command)))
221-
labels = append(labels, label.String("error", meter.ErrorCode.String()))
222+
labels = append(labels, attribute.String("error", meter.ErrorCode.String()))
222223
commandCounter.Record(ctx, 1, labels...)
223224

224225
if meter.Command == "dev" || meter.Command == "debug" {
@@ -238,42 +239,42 @@ func commandMetrics(ctx context.Context, meter skaffoldMeter, m metric.Meter, la
238239
for errorCode, count := range errorCounts {
239240
iterationCounter.Record(ctx, int64(count),
240241
append(labels,
241-
label.String("intent", intention),
242-
label.String("error", errorCode.String()),
242+
attribute.String("intent", intention),
243+
attribute.String("error", errorCode.String()),
243244
)...)
244245
}
245246
}
246247
}
247248
}
248249

249-
func deployerMetrics(ctx context.Context, meter skaffoldMeter, m metric.Meter, labels ...label.KeyValue) {
250+
func deployerMetrics(ctx context.Context, meter skaffoldMeter, m metric.Meter, labels ...attribute.KeyValue) {
250251
deployerCounter := metric.Must(m).NewInt64ValueRecorder("deployer", metric.WithDescription("Deployers used"))
251252
for _, deployer := range meter.Deployers {
252-
deployerCounter.Record(ctx, 1, append(labels, label.String("deployer", deployer))...)
253+
deployerCounter.Record(ctx, 1, append(labels, attribute.String("deployer", deployer))...)
253254
}
254255
if meter.HelmReleasesCount > 0 {
255256
multiReleasesCounter := metric.Must(m).NewInt64ValueRecorder("helmReleases", metric.WithDescription("Multiple helm releases used"))
256-
multiReleasesCounter.Record(ctx, 1, append(labels, label.Int("count", meter.HelmReleasesCount))...)
257+
multiReleasesCounter.Record(ctx, 1, append(labels, attribute.Int("count", meter.HelmReleasesCount))...)
257258
}
258259
}
259260

260-
func builderMetrics(ctx context.Context, meter skaffoldMeter, m metric.Meter, labels ...label.KeyValue) {
261+
func builderMetrics(ctx context.Context, meter skaffoldMeter, m metric.Meter, labels ...attribute.KeyValue) {
261262
builderCounter := metric.Must(m).NewInt64ValueRecorder("builders", metric.WithDescription("Builders used"))
262263
artifactCounter := metric.Must(m).NewInt64ValueRecorder("artifacts", metric.WithDescription("Number of artifacts used"))
263264
dependenciesCounter := metric.Must(m).NewInt64ValueRecorder("artifact-dependencies", metric.WithDescription("Number of artifacts with dependencies"))
264265
for builder, count := range meter.Builders {
265-
bLabel := label.String("builder", builder)
266+
bLabel := attribute.String("builder", builder)
266267
builderCounter.Record(ctx, 1, append(labels, bLabel)...)
267268
artifactCounter.Record(ctx, int64(count), append(labels, bLabel)...)
268269
dependenciesCounter.Record(ctx, int64(meter.BuildDependencies[builder]), append(labels, bLabel)...)
269270
}
270271
}
271272

272-
func errorMetrics(ctx context.Context, meter skaffoldMeter, m metric.Meter, labels ...label.KeyValue) {
273+
func errorMetrics(ctx context.Context, meter skaffoldMeter, m metric.Meter, labels ...attribute.KeyValue) {
273274
errCounter := metric.Must(m).NewInt64ValueRecorder("errors", metric.WithDescription("Skaffold errors"))
274-
errCounter.Record(ctx, 1, append(labels, label.String("error", meter.ErrorCode.String()))...)
275+
errCounter.Record(ctx, 1, append(labels, attribute.String("error", meter.ErrorCode.String()))...)
275276

276-
labels = append(labels, label.String("command", meter.Command))
277+
labels = append(labels, attribute.String("command", meter.Command))
277278

278279
switch meter.ErrorCode {
279280
case proto.StatusCode_UNKNOWN_ERROR:

pkg/skaffold/instrumentation/export_test.go

+14-17
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import (
2828
"time"
2929

3030
"go.opentelemetry.io/otel/exporters/stdout"
31-
"go.opentelemetry.io/otel/sdk/metric/controller/push"
31+
"go.opentelemetry.io/otel/sdk/metric/controller/basic"
3232

3333
"github.com/GoogleContainerTools/skaffold/cmd/skaffold/app/cmd/statik"
3434
"github.com/GoogleContainerTools/skaffold/proto/v1"
@@ -162,12 +162,12 @@ func TestExportMetrics(t *testing.T) {
162162
if err != nil {
163163
t.Error(err)
164164
}
165-
t.Override(&initExporter, func() (*push.Controller, error) {
166-
return stdout.InstallNewPipeline([]stdout.Option{
167-
stdout.WithQuantiles([]float64{0.5}),
165+
t.Override(&initExporter, func() (*basic.Controller, error) {
166+
_, controller, err := stdout.InstallNewPipeline([]stdout.Option{
168167
stdout.WithPrettyPrint(),
169168
stdout.WithWriter(tmpFile),
170169
}, nil)
170+
return controller, err
171171
})
172172
}
173173
if len(test.savedMetrics) > 0 {
@@ -320,12 +320,12 @@ func TestUserMetricReported(t *testing.T) {
320320
if err != nil {
321321
t.Error(err)
322322
}
323-
t.Override(&initExporter, func() (*push.Controller, error) {
324-
return stdout.InstallNewPipeline([]stdout.Option{
325-
stdout.WithQuantiles([]float64{0.5}),
323+
t.Override(&initExporter, func() (*basic.Controller, error) {
324+
_, controller, err := stdout.InstallNewPipeline([]stdout.Option{
326325
stdout.WithPrettyPrint(),
327326
stdout.WithWriter(tmpFile),
328327
}, nil)
328+
return controller, err
329329
})
330330

331331
_ = exportMetrics(context.Background(), tmp.Path(filename), test.meter)
@@ -459,15 +459,12 @@ func checkUser(t *testutil.T, user string, b []byte) {
459459

460460
// Derived from go.opentelemetry.io/otel/exporters/stdout/metric.go
461461
type line struct {
462-
Name string `json:"Name"`
463-
Count interface{} `json:"Count,omitempty"`
464-
Quantiles []quantile `json:"Quantiles,omitempty"`
465-
Labels map[string]string
466-
}
467-
468-
type quantile struct {
469-
Quantile interface{} `json:"Quantile"`
470-
Value interface{} `json:"Value"`
462+
Name string `json:"Name"`
463+
Min interface{} `json:"Min,omitempty"`
464+
Max interface{} `json:"Max,omitempty"`
465+
Sum interface{} `json:"Sum,omitempty"`
466+
Count interface{} `json:"Count,omitempty"`
467+
Labels map[string]string
471468
}
472469

473470
func (l *line) initLine() {
@@ -484,5 +481,5 @@ func (l *line) initLine() {
484481
}
485482

486483
func (l *line) value() interface{} {
487-
return l.Quantiles[0].Value
484+
return l.Max
488485
}

0 commit comments

Comments
 (0)