Skip to content

Commit 4198669

Browse files
gouthamveinkel
authored andcommitted
Add experimental support for OTLP Exporter
Currently blocked on open-telemetry/opentelemetry-go-contrib#5281 Signed-off-by: Goutham <[email protected]>
1 parent ad1c927 commit 4198669

File tree

4 files changed

+112
-6
lines changed

4 files changed

+112
-6
lines changed

README.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,9 @@ It also supports an interactive mode which allows to select and delete disks in
3939
go install github.com/grafana/unused/cmd/unused@latest
4040
```
4141

42-
### `unused-exporter` Prometheus exporter
42+
### `unused-exporter` Prometheus / OTEL exporter
4343
Web server exposing Prometheus metrics about each providers count of unused disks.
44+
4445
It exposes the following metrics:
4546

4647
| Metric | Description |
@@ -61,3 +62,13 @@ Information about each unused disk is currently logged to stdout given that it c
6162
```
6263
go install github.com/grafana/unused/cmd/unused-exporter@latest
6364
```
65+
66+
#### EXPERIMENTAL: OpenTelemetry exporter
67+
This exporter also supports exporting metrics to an OpenTelemetry Collector.
68+
69+
To enable this feature, set the `OTEL_EXPORTER_OTLP_ENDPOINT` environment variable to the address of the OpenTelemetry Collector. However, the OTEL SDK doesn't set an `instance` label yet, and we recommend manually setting the `service.instance.id` attribute to a unique value for each instance of the exporter.
70+
71+
For example:
72+
```
73+
OTEL_EXPORTER_OTLP_ENDPOINT=localhost:4317 OTEL_RESOURCE_ATTRIBUTES="service.instance.id=<value-of-instance-label>" unused-exporter -gcp.project=my-gcp-project -aws.profile=my-aws-profile -azure.sub=my-azure-sub
74+
```

cmd/unused-exporter/main.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ import (
1818
"time"
1919

2020
"github.com/grafana/unused/cmd/internal"
21+
"go.opentelemetry.io/contrib/exporters/autoexport"
22+
"go.opentelemetry.io/otel"
23+
otelmetric "go.opentelemetry.io/otel/sdk/metric"
2124
)
2225

2326
func main() {
@@ -56,9 +59,38 @@ func realMain(ctx context.Context, cfg config) error {
5659
return fmt.Errorf("registering exporter: %w", err)
5760
}
5861

62+
if err := setupOTLPExport(cfg.Logger); err != nil {
63+
return fmt.Errorf("setting up OTLP exporter: %w", err)
64+
}
65+
5966
if err := runWebServer(ctx, cfg); err != nil {
6067
return fmt.Errorf("running web server: %w", err)
6168
}
6269

6370
return nil
6471
}
72+
73+
func setupOTLPExport(logger *slog.Logger) error {
74+
if os.Getenv("OTEL_EXPORTER_OTLP_ENDPOINT") == "" && os.Getenv("OTEL_EXPORTER_OTLP_METRICS_ENDPOINT") == "" {
75+
logger.Debug("OTLP exporter is not enabled")
76+
return nil
77+
}
78+
os.Setenv("OTEL_METRICS_PRODUCERS", "prometheus")
79+
80+
otel.SetErrorHandler(otel.ErrorHandlerFunc(func(cause error) {
81+
logger.Error("OTLP exporter error", "err", cause)
82+
}))
83+
84+
if os.Getenv("OTEL_SERVICE_NAME") == "" {
85+
os.Setenv("OTEL_SERVICE_NAME", "unused_exporter")
86+
}
87+
88+
reader, err := autoexport.NewMetricReader(context.Background())
89+
if err != nil {
90+
return err
91+
}
92+
93+
otelmetric.NewMeterProvider(otelmetric.WithReader(reader))
94+
95+
return nil
96+
}

go.mod

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ require (
1616
github.com/charmbracelet/bubbletea v1.3.5
1717
github.com/charmbracelet/lipgloss v1.1.0
1818
github.com/evertras/bubble-table v0.17.1
19+
github.com/google/uuid v1.6.0
1920
github.com/prometheus/client_golang v1.22.0
2021
google.golang.org/api v0.231.0
2122
)
@@ -27,6 +28,12 @@ require (
2728
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1 // indirect
2829
github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect
2930
github.com/AzureAD/microsoft-authentication-library-for-go v1.4.1 // indirect
31+
go.opentelemetry.io/contrib/exporters/autoexport v0.0.0-00010101000000-000000000000
32+
go.opentelemetry.io/otel v1.35.0
33+
go.opentelemetry.io/otel/sdk/metric v1.35.0
34+
)
35+
36+
require (
3037
github.com/atotto/clipboard v0.1.4 // indirect
3138
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 // indirect
3239
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 // indirect
@@ -39,6 +46,7 @@ require (
3946
github.com/aws/aws-sdk-go-v2/service/sts v1.33.19 // indirect
4047
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
4148
github.com/beorn7/perks v1.0.1 // indirect
49+
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
4250
github.com/cespare/xxhash/v2 v2.3.0 // indirect
4351
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect
4452
github.com/charmbracelet/x/ansi v0.8.0 // indirect
@@ -50,9 +58,9 @@ require (
5058
github.com/go-logr/stdr v1.2.2 // indirect
5159
github.com/golang-jwt/jwt/v5 v5.2.1 // indirect
5260
github.com/google/s2a-go v0.1.9 // indirect
53-
github.com/google/uuid v1.6.0 // indirect
5461
github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect
5562
github.com/googleapis/gax-go/v2 v2.14.1 // indirect
63+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect
5664
github.com/kylelemons/godebug v1.1.0 // indirect
5765
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
5866
github.com/mattn/go-isatty v0.0.20 // indirect
@@ -71,17 +79,30 @@ require (
7179
github.com/sahilm/fuzzy v0.1.1 // indirect
7280
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
7381
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
82+
go.opentelemetry.io/contrib/bridges/prometheus v0.50.0 // indirect
7483
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 // indirect
75-
go.opentelemetry.io/otel v1.35.0 // indirect
84+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.26.0 // indirect
85+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.26.0 // indirect
86+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0 // indirect
87+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0 // indirect
88+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.26.0 // indirect
89+
go.opentelemetry.io/otel/exporters/prometheus v0.48.0 // indirect
90+
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.26.0 // indirect
91+
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.26.0 // indirect
7692
go.opentelemetry.io/otel/metric v1.35.0 // indirect
93+
go.opentelemetry.io/otel/sdk v1.35.0 // indirect
7794
go.opentelemetry.io/otel/trace v1.35.0 // indirect
95+
go.opentelemetry.io/proto/otlp v1.2.0 // indirect
7896
golang.org/x/crypto v0.37.0 // indirect
7997
golang.org/x/net v0.39.0 // indirect
8098
golang.org/x/oauth2 v0.29.0 // indirect
8199
golang.org/x/sync v0.13.0 // indirect
82100
golang.org/x/sys v0.32.0 // indirect
83101
golang.org/x/text v0.24.0 // indirect
84-
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
102+
google.golang.org/genproto/googleapis/api v0.0.0-20250218202821-56aae31c358a // indirect
103+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250425173222-7b384671a197 // indirect
85104
google.golang.org/grpc v1.72.0 // indirect
86105
google.golang.org/protobuf v1.36.6 // indirect
87106
)
107+
108+
replace go.opentelemetry.io/contrib/exporters/autoexport => github.com/gouthamve/opentelemetry-go-contrib/exporters/autoexport v0.0.0-20240430090043-7c327f4ec2e6

go.sum

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ github.com/aymanbagabas/go-udiff v0.2.0 h1:TK0fH4MteXUDspT88n8CKzvK0X9O2xu9yQjWp
5858
github.com/aymanbagabas/go-udiff v0.2.0/go.mod h1:RE4Ex0qsGkTAJoQdQQCA0uG+nAzJO/pI/QwceO5fgrA=
5959
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
6060
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
61+
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
62+
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
6163
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
6264
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
6365
github.com/charmbracelet/bubbles v0.21.0 h1:9TdC97SdRVg/1aaXNVWfFH3nnLAwOXr8Fn6u6mfQdFs=
@@ -91,6 +93,8 @@ github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
9193
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
9294
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
9395
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
96+
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
97+
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
9498
github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk=
9599
github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
96100
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
@@ -105,6 +109,12 @@ github.com/googleapis/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU
105109
github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA=
106110
github.com/googleapis/gax-go/v2 v2.14.1 h1:hb0FFeiPaQskmvakKu5EbCbpntQn48jyHuvrkurSS/Q=
107111
github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA=
112+
github.com/gouthamve/opentelemetry-go-contrib/exporters/autoexport v0.0.0-20240430090043-7c327f4ec2e6 h1:eu7tIItEG/FnxiXi+IBixxPmBSFO3dkrbjUSlmcSDbs=
113+
github.com/gouthamve/opentelemetry-go-contrib/exporters/autoexport v0.0.0-20240430090043-7c327f4ec2e6/go.mod h1:O/1oI1e+nssvFvl5p2oY0HF0ueCo/u1qtlZDHE2EzEM=
114+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 h1:/c3QmbOGMGTOumP2iT/rCwB7b0QDGLKzqOmktBjT+Is=
115+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1/go.mod h1:5SN9VR2LTsRFsrEC6FHgRbTWrTHu6tqPeKxEQv15giM=
116+
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
117+
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
108118
github.com/keybase/go-keychain v0.0.0-20231219164618-57a3676c3af6 h1:IsMZxCuZqKuao2vNdfD82fjjgPLfyHLpR41Z88viRWs=
109119
github.com/keybase/go-keychain v0.0.0-20231219164618-57a3676c3af6/go.mod h1:3VeWNIJaW+O5xpRQbPp0Ybqu1vJd/pm7s2F473HRrkw=
110120
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
@@ -120,6 +130,10 @@ github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+Ei
120130
github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
121131
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
122132
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
133+
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
134+
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
135+
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
136+
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
123137
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI=
124138
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo=
125139
github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA=
@@ -156,10 +170,30 @@ github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavM
156170
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
157171
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
158172
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
173+
go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
174+
go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
175+
go.opentelemetry.io/contrib/bridges/prometheus v0.50.0 h1:akXN45Sg2oS2NOb2xBL0LKeq/oSyEIvc8CC/7XLaB+4=
176+
go.opentelemetry.io/contrib/bridges/prometheus v0.50.0/go.mod h1:uoFuIBjQ9kWtUv4KbRNq0ExS9BQoWxHrr63JWX/EMb8=
159177
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 h1:sbiXRNDSWJOTobXh5HyQKjq6wUC5tNybqjIqDpAY4CU=
160178
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0/go.mod h1:69uWxva0WgAA/4bu2Yy70SLDBwZXuQ6PbBpbsa5iZrQ=
161179
go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ=
162180
go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y=
181+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.26.0 h1:+hm+I+KigBy3M24/h1p/NHkUx/evbLH0PNcjpMyCHc4=
182+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.26.0/go.mod h1:NjC8142mLvvNT6biDpaMjyz78kyEHIwAJlSX0N9P5KI=
183+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.26.0 h1:HGZWGmCVRCVyAs2GQaiHQPbDHo+ObFWeUEOd+zDnp64=
184+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.26.0/go.mod h1:SaH+v38LSCHddyk7RGlU9uZyQoRrKao6IBnJw6Kbn+c=
185+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0 h1:1u/AyyOqAWzy+SkPxDpahCNZParHV8Vid1RnI2clyDE=
186+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0/go.mod h1:z46paqbJ9l7c9fIPCXTqTGwhQZ5XoTIsfeFYWboizjs=
187+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0 h1:Waw9Wfpo/IXzOI8bCB7DIk+0JZcqqsyn1JFnAc+iam8=
188+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0/go.mod h1:wnJIG4fOqyynOnnQF/eQb4/16VlX2EJAHhHgqIqWfAo=
189+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.26.0 h1:1wp/gyxsuYtuE/JFxsQRtcCDtMrO2qMvlfXALU5wkzI=
190+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.26.0/go.mod h1:gbTHmghkGgqxMomVQQMur1Nba4M0MQ8AYThXDUjsJ38=
191+
go.opentelemetry.io/otel/exporters/prometheus v0.48.0 h1:sBQe3VNGUjY9IKWQC6z2lNqa5iGbDSxhs60ABwK4y0s=
192+
go.opentelemetry.io/otel/exporters/prometheus v0.48.0/go.mod h1:DtrbMzoZWwQHyrQmCfLam5DZbnmorsGbOtTbYHycU5o=
193+
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.26.0 h1:5fnmgteaar1VcAA69huatudPduNFz7guRtCmfZCooZI=
194+
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.26.0/go.mod h1:lsPccfZiz1cb1AhBPmicWM2E4F1VynFXEvD8SEBS4TM=
195+
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.26.0 h1:0W5o9SzoR15ocYHEQfvfipzcNog1lBxOLfnex91Hk6s=
196+
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.26.0/go.mod h1:zVZ8nz+VSggWmnh6tTsJqXQ7rU4xLwRtna1M4x5jq58=
163197
go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M=
164198
go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE=
165199
go.opentelemetry.io/otel/sdk v1.35.0 h1:iPctf8iprVySXSKJffSS79eOjl9pvxV9ZqOWT0QejKY=
@@ -168,6 +202,12 @@ go.opentelemetry.io/otel/sdk/metric v1.35.0 h1:1RriWBmCKgkeHEhM7a2uMjMUfP7MsOF5J
168202
go.opentelemetry.io/otel/sdk/metric v1.35.0/go.mod h1:is6XYCUMpcKi+ZsOvfluY5YstFnhW0BidkR+gL+qN+w=
169203
go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs=
170204
go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc=
205+
go.opentelemetry.io/proto/otlp v1.2.0 h1:pVeZGk7nXDC9O2hncA6nHldxEjm6LByfA2aN8IOkz94=
206+
go.opentelemetry.io/proto/otlp v1.2.0/go.mod h1:gGpR8txAl5M03pDhMC79G6SdqNV26naRm/KDsgaHD8A=
207+
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
208+
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
209+
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
210+
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
171211
golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE=
172212
golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc=
173213
golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561 h1:MDc5xs78ZrZr3HMQugiXOAkSZtfTpbJLDr/lwfgO53E=
@@ -187,8 +227,10 @@ golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0=
187227
golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU=
188228
google.golang.org/api v0.231.0 h1:LbUD5FUl0C4qwia2bjXhCMH65yz1MLPzA/0OYEsYY7Q=
189229
google.golang.org/api v0.231.0/go.mod h1:H52180fPI/QQlUc0F4xWfGZILdv09GCWKt2bcsn164A=
190-
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A=
191-
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU=
230+
google.golang.org/genproto/googleapis/api v0.0.0-20250218202821-56aae31c358a h1:nwKuGPlUAt+aR+pcrkfFRrTU1BVrSmYyYMxYbUIVHr0=
231+
google.golang.org/genproto/googleapis/api v0.0.0-20250218202821-56aae31c358a/go.mod h1:3kWAYMk1I75K4vykHtKt2ycnOgpA6974V7bREqbsenU=
232+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250425173222-7b384671a197 h1:29cjnHVylHwTzH66WfFZqgSQgnxzvWE+jvBwpZCLRxY=
233+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250425173222-7b384671a197/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
192234
google.golang.org/grpc v1.72.0 h1:S7UkcVa60b5AAQTaO6ZKamFp1zMZSU0fGDK2WZLbBnM=
193235
google.golang.org/grpc v1.72.0/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
194236
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=

0 commit comments

Comments
 (0)