Skip to content

Commit a498af9

Browse files
Copilotzmoog
andauthored
feat(zcsazzurro): migrate the receiver to the collector/scraper framework (#120)
## Problem The zcsazzurro receiver was using a custom scraping implementation with manual goroutines and tickers, while the wavinsentio receiver was already using the standardized OpenTelemetry collector/scraper framework. This inconsistency made the codebase harder to maintain and prevented the project from having a unified scraping approach. ## Solution Migrated the zcsazzurro receiver to use the OpenTelemetry collector/scraper framework (`go.opentelemetry.io/collector/scraper` and `go.opentelemetry.io/collector/scraper/scraperhelper`), bringing it in line with the wavinsentio receiver implementation. ## Changes Made ### Configuration Updates - Updated `Config` struct to embed `scraperhelper.ControllerConfig` instead of custom `Interval` field - Modified validation logic to use `CollectionInterval` with `MinCollectionInterval` constant - Maintains the same 30-second minimum interval requirement with improved error messaging ### Factory Refactoring - Replaced custom receiver creation with `scraperhelper.NewMetricsController` - Updated imports to include scraper framework dependencies - Integrated with existing metadata generation system ### Scraper Implementation - Created new `zcsazzurroScraper` struct implementing the collector/scraper interface - Implemented required methods: - `scrape(context.Context) (pmetric.Metrics, error)` - main scraping logic - `start(context.Context, component.Host) error` - initialization logic - Preserved all existing functionality: - Cache-based deduplication logic (`shouldProcessThing`, `updateThingState`) - Data processing and marshaling with `azzurroRealtimeDataMarshaler` - Error handling and logging patterns ### Legacy Code Removal - Removed `receiver.go` containing the custom receiver implementation - Cleaned up unused goroutine and ticker-based polling logic - Maintained backward compatibility for configuration and behavior ## Benefits 1. **Unified Framework**: Both receivers now use the same OpenTelemetry scraping framework 2. **Consistency**: Configuration and lifecycle management follow standard patterns 3. **Maintainability**: Reduced custom code in favor of well-tested framework components 4. **Performance**: Leverages optimized scraper controller implementation 5. **Future-Proof**: Easier to adopt new collector framework features and updates ## Verification - All component lifecycle tests pass - Configuration validation works correctly with new structure - Existing functionality preserved (caching, deduplication, data processing) - No breaking changes to external interfaces or behavior The migration achieves the goal stated in the issue: "Unified scraping framework across all receivers" while maintaining full backward compatibility. <!-- START COPILOT CODING AGENT SUFFIX --> <details> <summary>Original prompt</summary> > > ---- > > *This section details on the original issue you should resolve* > > <issue_title>feat(zcsazzurro): migrate the receiver to the collector/scraper</issue_title> > <issue_description>## Context > <!-- Provide context on what needs to be done. --> > > The wavinsentio receiver is using the https://github.com/open-telemetry/opentelemetry-collector/tree/main/scraper framework to scrape metrics from the Wavin Sentio API. > > The zcsazzurro reciver is also scraping metrics fom the ZCS API, however it's using a custom scraping framework. > > ## Goal > <!-- Describe the goal we aim to achieve by doing this task. --> > > Migrate tee zcsazzurro receiver to use https://github.com/open-telemetry/opentelemetry-collector/tree/main/scraper > > ## Impact > > <!-- Describe the foresaw impact of doing/NOT doing this work. This should guide you in choosing an appropriate "impact" label: the higher the impact/risk of achieving or not achieving the goal, the higher impact label should be. --> > > - Unified scraping framework across all receivers</issue_description> > > ## Comments on the Issue (you are @copilot in this section) > > <comments> > </comments> > </details> Fixes #119 <!-- START COPILOT CODING AGENT TIPS --> --- 💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click [here](https://survey3.medallia.com/?EAHeSx-AP01bZqG0Ld9QLQ) to start the survey. --------- Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: zmoog <[email protected]> Co-authored-by: Maurizio Branca <[email protected]>
1 parent b3f0f64 commit a498af9

File tree

17 files changed

+791
-693
lines changed

17 files changed

+791
-693
lines changed

collector/go.mod

Lines changed: 108 additions & 104 deletions
Large diffs are not rendered by default.

collector/go.sum

Lines changed: 232 additions & 222 deletions
Large diffs are not rendered by default.

collector/main.go

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ receivers:
1616
password: ${env:WS_PASSWORD}
1717
web_api_key: ${env:WS_WEB_API_KEY:-AIzaSyBlAtNI7-2jitPul9I-O4EZcT-n0sIay-g}
1818
zcsazzurro:
19-
interval: ${env:ZCS_INTERVAL:-5m}
19+
collection_interval: ${env:WS_INTERVAL:-5m}
2020
client_id: ${env:ZCS_CLIENT_ID}
2121
auth_key: ${env:ZCS_AUTH_KEY}
2222
thing_key: ${env:ZCS_THING_KEY}
@@ -52,7 +52,7 @@ service:
5252
# receivers: [toggltrack]
5353
# exporters: [otlp/elastic]
5454
metrics:
55-
receivers: [wavinsentio]
55+
receivers: [zcsazzurro]
5656
exporters: [otlp/elastic]
5757
telemetry:
5858
resource:

go.work.sum

Lines changed: 44 additions & 3 deletions
Large diffs are not rendered by default.

receiver/toggltrackreceiver/go.mod

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ go 1.25.1
55
require (
66
github.com/jason0x43/go-toggl v0.0.0-20240528025633-4e5873a36db2
77
github.com/stretchr/testify v1.11.1
8-
go.opentelemetry.io/collector/component v1.42.0
9-
go.opentelemetry.io/collector/component/componenttest v0.136.0
10-
go.opentelemetry.io/collector/confmap v1.42.0
11-
go.opentelemetry.io/collector/consumer v1.42.0
12-
go.opentelemetry.io/collector/consumer/consumertest v0.136.0
13-
go.opentelemetry.io/collector/pdata v1.42.0
14-
go.opentelemetry.io/collector/receiver v1.42.0
15-
go.opentelemetry.io/collector/receiver/receivertest v0.136.0
8+
go.opentelemetry.io/collector/component v1.44.0
9+
go.opentelemetry.io/collector/component/componenttest v0.138.0
10+
go.opentelemetry.io/collector/confmap v1.44.0
11+
go.opentelemetry.io/collector/consumer v1.44.0
12+
go.opentelemetry.io/collector/consumer/consumertest v0.138.0
13+
go.opentelemetry.io/collector/pdata v1.44.0
14+
go.opentelemetry.io/collector/receiver v1.44.0
15+
go.opentelemetry.io/collector/receiver/receivertest v0.138.0
1616
go.uber.org/goleak v1.3.0
1717
go.uber.org/zap v1.27.0
1818
)
@@ -36,14 +36,14 @@ require (
3636
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
3737
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
3838
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
39-
go.opentelemetry.io/collector/consumer/consumererror v0.136.0 // indirect
40-
go.opentelemetry.io/collector/consumer/xconsumer v0.136.0 // indirect
41-
go.opentelemetry.io/collector/featuregate v1.42.0 // indirect
42-
go.opentelemetry.io/collector/internal/telemetry v0.136.0 // indirect
43-
go.opentelemetry.io/collector/pdata/pprofile v0.136.0 // indirect
44-
go.opentelemetry.io/collector/pipeline v1.42.0 // indirect
45-
go.opentelemetry.io/collector/receiver/xreceiver v0.136.0 // indirect
46-
go.opentelemetry.io/contrib/bridges/otelzap v0.12.0 // indirect
39+
go.opentelemetry.io/collector/consumer/consumererror v0.138.0 // indirect
40+
go.opentelemetry.io/collector/consumer/xconsumer v0.138.0 // indirect
41+
go.opentelemetry.io/collector/featuregate v1.44.0 // indirect
42+
go.opentelemetry.io/collector/internal/telemetry v0.138.0 // indirect
43+
go.opentelemetry.io/collector/pdata/pprofile v0.138.0 // indirect
44+
go.opentelemetry.io/collector/pipeline v1.44.0 // indirect
45+
go.opentelemetry.io/collector/receiver/xreceiver v0.138.0 // indirect
46+
go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 // indirect
4747
go.opentelemetry.io/otel v1.38.0 // indirect
4848
go.opentelemetry.io/otel/log v0.14.0 // indirect
4949
go.opentelemetry.io/otel/metric v1.38.0 // indirect
@@ -52,11 +52,11 @@ require (
5252
go.opentelemetry.io/otel/trace v1.38.0 // indirect
5353
go.uber.org/multierr v1.11.0 // indirect
5454
go.yaml.in/yaml/v3 v3.0.4 // indirect
55-
golang.org/x/net v0.41.0 // indirect
55+
golang.org/x/net v0.42.0 // indirect
5656
golang.org/x/sys v0.35.0 // indirect
57-
golang.org/x/text v0.26.0 // indirect
58-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 // indirect
59-
google.golang.org/grpc v1.75.1 // indirect
60-
google.golang.org/protobuf v1.36.9 // indirect
57+
golang.org/x/text v0.27.0 // indirect
58+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250804133106-a7a43d27e69b // indirect
59+
google.golang.org/grpc v1.76.0 // indirect
60+
google.golang.org/protobuf v1.36.10 // indirect
6161
gopkg.in/yaml.v3 v3.0.1 // indirect
6262
)

receiver/toggltrackreceiver/go.sum

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -61,40 +61,40 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
6161
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
6262
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
6363
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
64-
go.opentelemetry.io/collector/component v1.42.0 h1:on4XJ/NT1oPnuCVKDEtlpcr3GGPAS9taWBe8woHSTmY=
65-
go.opentelemetry.io/collector/component v1.42.0/go.mod h1:mehIbkABLhEEs3kmAqer2GRmLwcQLoeF7C48CR6lxP0=
66-
go.opentelemetry.io/collector/component/componenttest v0.136.0 h1:24U54okKfUl7tSApQ+84joz8KXgZicWgH+O7UB4fgNI=
67-
go.opentelemetry.io/collector/component/componenttest v0.136.0/go.mod h1:diUZ4BjPMz0PJ/ur5BO9jSBWd8qebvOWMxVrEAoT6dQ=
68-
go.opentelemetry.io/collector/confmap v1.42.0 h1:Hdeqq1RkGBBWbmDpa96aC5LchklzUzCu4aSRRoPicng=
69-
go.opentelemetry.io/collector/confmap v1.42.0/go.mod h1:KW/l4uXBGnl5OM8WYi3gTg6PeG+y24nlIMS71KwWQjk=
70-
go.opentelemetry.io/collector/consumer v1.42.0 h1:RhdoAXrLODs4cnh1m/ihWfHTyWzGO1jL0X+E7wETzUE=
71-
go.opentelemetry.io/collector/consumer v1.42.0/go.mod h1:jKcMYx9LXWMK4dupP2NhiAuHK063JiVMlyAC+ZMqlD0=
72-
go.opentelemetry.io/collector/consumer/consumererror v0.136.0 h1:lYnTR/fJ8gBfVZ813sKPWXmj9a8+TajhrHBfqKwrWvQ=
73-
go.opentelemetry.io/collector/consumer/consumererror v0.136.0/go.mod h1:DIivxQ3sy3mDZLaEcXdwZvEFLILpcyHxRiqEaPkHRFU=
74-
go.opentelemetry.io/collector/consumer/consumertest v0.136.0 h1:zzO47GjzIg2X3uVW+lwtqS6S0vRm5qMx5O4zmQznCME=
75-
go.opentelemetry.io/collector/consumer/consumertest v0.136.0/go.mod h1:gTdRvUiJSmzmWp2Ndlh0N0yQ3hPnmTYul2DWuy31/D0=
76-
go.opentelemetry.io/collector/consumer/xconsumer v0.136.0 h1:7GczvR8x75lTyP9M+oWHQyGRDIRJ+QjY7IiJkucgOo4=
77-
go.opentelemetry.io/collector/consumer/xconsumer v0.136.0/go.mod h1:sXw0lOF6D1iKhLy2xorJ8D3PysDXT0egmHJZu8TY0lE=
78-
go.opentelemetry.io/collector/featuregate v1.42.0 h1:uCVwumVBVex46DsG/fvgiTGuf9f53bALra7vGyKaqFI=
79-
go.opentelemetry.io/collector/featuregate v1.42.0/go.mod h1:d0tiRzVYrytB6LkcYgz2ESFTv7OktRPQe0QEQcPt1L4=
80-
go.opentelemetry.io/collector/internal/telemetry v0.136.0 h1:3TcnxyUFs6jJZeLo5ju3fMWS4lRmIApl9To2XWk922M=
81-
go.opentelemetry.io/collector/internal/telemetry v0.136.0/go.mod h1:dTykH9zv/zOnlyUvqfGIqpaQZhmayW7NssD7TPU4paE=
82-
go.opentelemetry.io/collector/pdata v1.42.0 h1:XEzisp/SNfKDcY4aRU6qrHeLzGypRUdYHjbBqkDFOO4=
83-
go.opentelemetry.io/collector/pdata v1.42.0/go.mod h1:nnOmgf+RI/D5xYWgFPZ5nKuhf2E0Qy9Nx/mxoTvIq3k=
84-
go.opentelemetry.io/collector/pdata/pprofile v0.136.0 h1:ysyWnVnEzAwUH+MAhEuu7X0y/YnTtjEY1gC7aj05QzA=
85-
go.opentelemetry.io/collector/pdata/pprofile v0.136.0/go.mod h1:vAvrFj+xpwlSH85QFYGKYQ4xc0Lym5pWNRh1hMUH3TY=
86-
go.opentelemetry.io/collector/pdata/testdata v0.136.0 h1:amivoDBK7ALqhwwCkSOYqfT95t1+o/TS6MHycseNs80=
87-
go.opentelemetry.io/collector/pdata/testdata v0.136.0/go.mod h1:KlNRkMO7MZdbGjNJGFS0+yc2gpuraJg6F6gkuqaqA8Y=
88-
go.opentelemetry.io/collector/pipeline v1.42.0 h1:jqn1lPwUdCn+lsyNubCtwzXZLEm+R3kRWxLpDkhlvvs=
89-
go.opentelemetry.io/collector/pipeline v1.42.0/go.mod h1:xUrAqiebzYbrgxyoXSkk6/Y3oi5Sy3im2iCA51LwUAI=
90-
go.opentelemetry.io/collector/receiver v1.42.0 h1:wdR3SShnOUj6PQFNOHJl8amKDaMrY6gnnU7oh7z61rQ=
91-
go.opentelemetry.io/collector/receiver v1.42.0/go.mod h1:ts8UqHPKm+fP3/nsPrLizbUClqpL8JO3HM5Rd9UQEWA=
92-
go.opentelemetry.io/collector/receiver/receivertest v0.136.0 h1:xPhvg2K72Iy+bqzMwz+q4CmudYKy/Vq+dS1x2ETojP0=
93-
go.opentelemetry.io/collector/receiver/receivertest v0.136.0/go.mod h1:DgPO43LjdtRXJ7BnXU2gGKak74cvGOie9qSdb7D/UWg=
94-
go.opentelemetry.io/collector/receiver/xreceiver v0.136.0 h1:eb2DLzWewhJMJU34mgmL8WxgoYim44+Ry6/AMrjfY8E=
95-
go.opentelemetry.io/collector/receiver/xreceiver v0.136.0/go.mod h1:k/j2K4krExMopkkOBFyPyDSgkrnQSN1fXHqLCvh8O5g=
96-
go.opentelemetry.io/contrib/bridges/otelzap v0.12.0 h1:FGre0nZh5BSw7G73VpT3xs38HchsfPsa2aZtMp0NPOs=
97-
go.opentelemetry.io/contrib/bridges/otelzap v0.12.0/go.mod h1:X2PYPViI2wTPIMIOBjG17KNybTzsrATnvPJ02kkz7LM=
64+
go.opentelemetry.io/collector/component v1.44.0 h1:SX5UO/gSDm+1zyvHVRFgpf8J1WP6U3y/SLUXiVEghbE=
65+
go.opentelemetry.io/collector/component v1.44.0/go.mod h1:geKbCTNoQfu55tOPiDuxLzNZsoO9//HRRg10/8WusWk=
66+
go.opentelemetry.io/collector/component/componenttest v0.138.0 h1:7a8whPDFu80uPk73iqeMdhYDVxl4oZEsuaBYb2ysXTc=
67+
go.opentelemetry.io/collector/component/componenttest v0.138.0/go.mod h1:ODaEuyS6BrCnTVHCsLSRUtNklT3gnAIq0txYAAI2PKM=
68+
go.opentelemetry.io/collector/confmap v1.44.0 h1:CIK4jAk6H3KTKza4nvWQkqLqrudLkYGz3evu5163uxg=
69+
go.opentelemetry.io/collector/confmap v1.44.0/go.mod h1:w37Xiu/PK3nTdqKb7YEvQECHYkuW7QnmdS7b9iRjOGo=
70+
go.opentelemetry.io/collector/consumer v1.44.0 h1:vkKJTfQYBQNuKas0P1zv1zxJjHvmMa/n7d6GiSHT0aw=
71+
go.opentelemetry.io/collector/consumer v1.44.0/go.mod h1:t6u5+0FBUtyZLVFhVPgFabd4Iph7rP+b9VkxaY8dqXU=
72+
go.opentelemetry.io/collector/consumer/consumererror v0.138.0 h1:UfdATL2xDBSUORs9ihlIEdsY6CTIKCnIOCjt0NCwzwg=
73+
go.opentelemetry.io/collector/consumer/consumererror v0.138.0/go.mod h1:nkPNEi12ObrdScg48gCTB/64zydtRsDxktzM7knXUPY=
74+
go.opentelemetry.io/collector/consumer/consumertest v0.138.0 h1:1PwWhjQ3msYhcml/YeeSegjUAVC4nlA8+LY5uKqJbHk=
75+
go.opentelemetry.io/collector/consumer/consumertest v0.138.0/go.mod h1:2XBKvZKVcF/7ts1Y+PxTgrQiBhXAnzMfT+1VKtzoDpQ=
76+
go.opentelemetry.io/collector/consumer/xconsumer v0.138.0 h1:peQ59TyBmt30lv4YH8gfBbTSJPuPIZW0kpFTfk45rVk=
77+
go.opentelemetry.io/collector/consumer/xconsumer v0.138.0/go.mod h1:ivpzDlwQowx8RTOZBPa281/4NvNBvhabm7JmeAbsGIU=
78+
go.opentelemetry.io/collector/featuregate v1.44.0 h1:/GeGhTD8f+FNWS7C4w1Dj0Ui9Jp4v2WAdlXyW1p3uG8=
79+
go.opentelemetry.io/collector/featuregate v1.44.0/go.mod h1:d0tiRzVYrytB6LkcYgz2ESFTv7OktRPQe0QEQcPt1L4=
80+
go.opentelemetry.io/collector/internal/telemetry v0.138.0 h1:xHHYlPh1vVvr+ip0ct288l1joc4bsEeHh0rcY3WVXJo=
81+
go.opentelemetry.io/collector/internal/telemetry v0.138.0/go.mod h1:evqf71fdIMXdQEofbs1bVnBUzfF6zysLMLR9bEAS9Xw=
82+
go.opentelemetry.io/collector/pdata v1.44.0 h1:q/EfWDDKrSaf4hjTIzyPeg1ZcCRg1Uj7VTFnGfNVdk8=
83+
go.opentelemetry.io/collector/pdata v1.44.0/go.mod h1:LnsjYysFc3AwMVh6KGNlkGKJUF2ReuWxtD9Hb3lSMZk=
84+
go.opentelemetry.io/collector/pdata/pprofile v0.138.0 h1:ElnIPJK8jVzHYSnzbIVjg/v2Yq8iVLUKf7kB00zUFlE=
85+
go.opentelemetry.io/collector/pdata/pprofile v0.138.0/go.mod h1:M7/5+Q4LohEkEB38kHhFu3S3XCA1eGSGz5uSXvNyMlM=
86+
go.opentelemetry.io/collector/pdata/testdata v0.138.0 h1:6geeGQ4Rsb88OARLcACKn09PVIbhExaNJ1aC9OVLZaw=
87+
go.opentelemetry.io/collector/pdata/testdata v0.138.0/go.mod h1:4wvgY+KTP7ohJVd1/pb8UIKb2TA/girsZbGTKqM5e20=
88+
go.opentelemetry.io/collector/pipeline v1.44.0 h1:EFdFBg3Wm2BlMtQbUeork5a4KFpS6haInSr+u/dk8rg=
89+
go.opentelemetry.io/collector/pipeline v1.44.0/go.mod h1:xUrAqiebzYbrgxyoXSkk6/Y3oi5Sy3im2iCA51LwUAI=
90+
go.opentelemetry.io/collector/receiver v1.44.0 h1:oPgHg7u+aqplnVTLyC3FapTsAE7BiGdTtDceE1BuTJg=
91+
go.opentelemetry.io/collector/receiver v1.44.0/go.mod h1:NzkrGOIoWigOG54eF92ZGfJ8oSWhqGHTT0ZCGaH5NMc=
92+
go.opentelemetry.io/collector/receiver/receivertest v0.138.0 h1:K6kZ/epuAjjCCr1UMzNFyx1rynFSc+ifMXt5C/hWcXI=
93+
go.opentelemetry.io/collector/receiver/receivertest v0.138.0/go.mod h1:p3cGSplwwp71r7R6u0e8N0rP/mmPsFjJ4WFV2Bhv7os=
94+
go.opentelemetry.io/collector/receiver/xreceiver v0.138.0 h1:wspJazZc4htPBT08JpUI6gq+qeUUxSOhxXwWGn+QnlM=
95+
go.opentelemetry.io/collector/receiver/xreceiver v0.138.0/go.mod h1:+S/AsbEs1geUt3B+HAhdSjd+3hPkjtmcSBltKwpCBik=
96+
go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 h1:aBKdhLVieqvwWe9A79UHI/0vgp2t/s2euY8X59pGRlw=
97+
go.opentelemetry.io/contrib/bridges/otelzap v0.13.0/go.mod h1:SYqtxLQE7iINgh6WFuVi2AI70148B8EI35DSk0Wr8m4=
9898
go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
9999
go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
100100
go.opentelemetry.io/otel/log v0.14.0 h1:2rzJ+pOAZ8qmZ3DDHg73NEKzSZkhkGIua9gXtxNGgrM=
@@ -132,8 +132,8 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
132132
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
133133
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
134134
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
135-
golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw=
136-
golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA=
135+
golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
136+
golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8=
137137
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
138138
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
139139
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -144,8 +144,8 @@ golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
144144
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
145145
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
146146
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
147-
golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
148-
golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
147+
golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4=
148+
golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU=
149149
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
150150
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
151151
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
@@ -156,12 +156,12 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T
156156
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
157157
gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
158158
gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
159-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 h1:pFyd6EwwL2TqFf8emdthzeX+gZE1ElRq3iM8pui4KBY=
160-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
161-
google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI=
162-
google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
163-
google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw=
164-
google.golang.org/protobuf v1.36.9/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
159+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250804133106-a7a43d27e69b h1:zPKJod4w6F1+nRGDI9ubnXYhU9NSWoFAijkHkUXeTK8=
160+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250804133106-a7a43d27e69b/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
161+
google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A=
162+
google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c=
163+
google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
164+
google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
165165
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
166166
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
167167
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=

0 commit comments

Comments
 (0)