Skip to content

Enable gRPC communication with dm-manager and implement APIs #170

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 46 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 11 commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
2d1b94d
Implement GRPC Connection
Rashika-Rajaraman Jul 17, 2025
4a7c255
Add API implementation
Rashika-Rajaraman Jul 18, 2025
30746f4
Fix review comments
Rashika-Rajaraman Jul 18, 2025
0b2cb72
Fix review comments
Rashika-Rajaraman Jul 18, 2025
c1c300d
Add ticker for periodic activation check
Rashika-Rajaraman Jul 18, 2025
b03045a
Fix review comments
Rashika-Rajaraman Jul 21, 2025
b8de271
Rebase main
Rashika-Rajaraman Jul 21, 2025
02bf4fc
Send activation results back to dm-manager
Rashika-Rajaraman Jul 21, 2025
d6359cb
Add license check
Rashika-Rajaraman Jul 21, 2025
7ab4d1d
Load mei_me kernel module
punam20 Jul 21, 2025
a206fd1
Enable LMS service
punam20 Jul 21, 2025
8d2a9ad
Merge branch 'main' into grpc-implementation
Rashika-Rajaraman Jul 22, 2025
f96818e
Fix review comments
Rashika-Rajaraman Jul 22, 2025
d289ff6
Fix review comments
Rashika-Rajaraman Jul 22, 2025
22268ca
Fix minor issues
Rashika-Rajaraman Jul 23, 2025
c09b02e
Add test files
Rashika-Rajaraman Jul 23, 2025
1fd0ee7
Fix lint issues
Rashika-Rajaraman Jul 23, 2025
adef6c9
Rename cert files
Rashika-Rajaraman Jul 23, 2025
fc2dcb9
Fix vulnerability issue
Rashika-Rajaraman Jul 23, 2025
afeb2d3
Fix vulnerability issue
Rashika-Rajaraman Jul 23, 2025
9f76f4c
Add .gitleaksignore for test certificates
Rashika-Rajaraman Jul 23, 2025
4b2517c
Fix review comment
Rashika-Rajaraman Jul 23, 2025
1778bb5
Merge branch 'main' into grpc-implementation
punam20 Jul 23, 2025
07e06b8
Fix commands
Rashika-Rajaraman Jul 23, 2025
cbcf693
Fix commands
Rashika-Rajaraman Jul 23, 2025
ac2e720
Merge branch 'main' into grpc-implementation
punam20 Jul 23, 2025
2bbf051
Add license header
Rashika-Rajaraman Jul 24, 2025
3eb5754
Add more logs
Rashika-Rajaraman Jul 24, 2025
e560ec3
Fix bug
Rashika-Rajaraman Jul 24, 2025
602b6a9
Change AMT status report to be called once
Rashika-Rajaraman Jul 25, 2025
dcc9b55
Handle grpc status code
Rashika-Rajaraman Jul 25, 2025
e32dbd4
Merge branch 'main' into grpc-implementation
Rashika-Rajaraman Jul 25, 2025
3103b94
Fix AMT Status
Rashika-Rajaraman Jul 25, 2025
bb00344
Fix review comments
Rashika-Rajaraman Jul 28, 2025
21eff5a
Update PMA version
Rashika-Rajaraman Jul 28, 2025
bfd2078
Fix lint issues
Rashika-Rajaraman Jul 28, 2025
27424fa
Fix .gitleaksignore file
Rashika-Rajaraman Jul 28, 2025
31a3a1d
Add .semgrepignore file
Rashika-Rajaraman Jul 29, 2025
4edd809
Add specific rule
Rashika-Rajaraman Jul 29, 2025
cb56054
Change the .semgrepignore format
Rashika-Rajaraman Jul 29, 2025
0fe4f9a
Try various semgrepignore formats
Rashika-Rajaraman Jul 29, 2025
ed53be9
Add rule in .semgrepignore file
Rashika-Rajaraman Jul 29, 2025
e5eb023
Merge branch 'main' into grpc-implementation
Rashika-Rajaraman Jul 29, 2025
1f3085c
Merge branch 'main' into grpc-implementation
Rashika-Rajaraman Jul 29, 2025
b9c8beb
Add debug logs
Rashika-Rajaraman Jul 29, 2025
acd2c0b
Add FIXME comment
Rashika-Rajaraman Jul 29, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,22 +10,31 @@ import (
"flag"
"fmt"
"os"
"os/exec"
"os/signal"
"sync"
"sync/atomic"
"syscall"
"time"

"github.com/cenkalti/backoff/v4"
"github.com/labstack/gommon/log"
"github.com/sirupsen/logrus"

"github.com/open-edge-platform/edge-node-agents/common/pkg/metrics"
"github.com/open-edge-platform/edge-node-agents/common/pkg/status"
auth "github.com/open-edge-platform/edge-node-agents/common/pkg/utils"
"github.com/open-edge-platform/edge-node-agents/platform-manageability-agent/info"
"github.com/open-edge-platform/edge-node-agents/platform-manageability-agent/internal/comms"
"github.com/open-edge-platform/edge-node-agents/platform-manageability-agent/internal/config"
"github.com/open-edge-platform/edge-node-agents/platform-manageability-agent/internal/logger"
"github.com/sirupsen/logrus"
pb "github.com/open-edge-platform/infra-external/dm-manager/pkg/api/dm-manager"
)

const AGENT_NAME = "platform-manageability-agent"
const (
AGENT_NAME = "platform-manageability-agent"
MAX_RETRIES = 3
)

func main() {
if len(os.Args) == 2 && os.Args[1] == "version" {
Expand Down Expand Up @@ -99,8 +108,95 @@ func main() {

log.Info("Platform Manageability Agent started successfully")

tlsConfig, err := auth.GetAuthConfig(auth.GetAuthContext(ctx, confs.AccessTokenPath), nil)
if err != nil {
log.Fatalf("TLS configuration creation failed! Error: %v", err)
}

dmMgrClient := comms.ConnectToDMManager(auth.GetAuthContext(ctx, confs.AccessTokenPath), confs.Manageability.ServiceURL, tlsConfig)

var (
wg sync.WaitGroup

isAMTEnabled = false
amtStatusCheckInterval = 30 * time.Second // TODO: Make this configurable.
lastAMTStatusCheckTimestamp int64
)
go func() {
defer wg.Done()
amtStatusTicker := time.NewTicker(amtStatusCheckInterval)
defer amtStatusTicker.Stop()

op := func() error {
status, err := dmMgrClient.ReportAMTStatus(ctx)
if err != nil || status == pb.AMTStatus_DISABLED {
log.Errorf("Failed to report AMT status: %v", err)
isAMTEnabled = false
return err
}
log.Info("Successfully reported AMT status")
isAMTEnabled = true
if err := loadModule("mei_me"); err != nil {
log.Errorf("Error while loading module:", err)
} else {
log.Info("Module mei_me loaded successfully")
}
service := "lms.service"
for _, action := range []string{"enable", "start"} {
log.Info("%sing %s...\n", action, service)
if err := enableService(action, service); err != nil {
log.Errorf("Error while enabling service:", err)
}
}
return nil
}
for {
select {
case <-ctx.Done():
return
case <-amtStatusTicker.C:
amtStatusTicker.Stop()
updateWithRetry(ctx, log, op, &lastAMTStatusCheckTimestamp)
}
amtStatusTicker.Reset(amtStatusCheckInterval)
}
}()

var (
lastActivationCheckTimestamp int64
activationCheckInterval = 30 * time.Second // TODO: Make this configurable.
)
go func() {
defer wg.Done()
activationTicker := time.NewTicker(activationCheckInterval)
defer activationTicker.Stop()

op := func() error {
if !isAMTEnabled {
log.Info("Skipping activation check because AMT is not enabled")
return nil
}
err = dmMgrClient.RetrieveActivationDetails(ctx, confs)
if err != nil {
log.Errorf("Failed to retrieve activation details: %v", err)
return err
}
log.Info("Successfully retrieved activation details")
return nil
}
for {
select {
case <-ctx.Done():
return
case <-activationTicker.C:
activationTicker.Stop()
updateWithRetry(ctx, log, op, &lastActivationCheckTimestamp)
}
activationTicker.Reset(activationCheckInterval)
}
}()

// Main agent loop using context-aware ticker
var wg sync.WaitGroup
var lastUpdateTimestamp int64
ticker := time.NewTicker(30 * time.Second)
defer ticker.Stop()
Expand Down Expand Up @@ -160,6 +256,24 @@ func main() {
log.Infof("Platform Manageability Agent finished")
}

func enableService(action, service string) error {
cmd := exec.Command("sudo", "systemctl", action, service)
output, err := cmd.CombinedOutput()
if err != nil {
return log.Errorf("failed to %s %s: %v, output: %s", action, service, err, output)
}
return nil
}

func loadModule(module string) error {
cmd := exec.Command("sudo", "modprobe", module)
output, err := cmd.CombinedOutput()
if err != nil {
return log.Errorf("failed to load module %s: %v, output: %s", module, err, output)
}
return nil
}

func initStatusClientAndTicker(ctx context.Context, cancel context.CancelFunc, log *logrus.Entry, statusServer string) (*status.StatusClient, time.Duration) {
statusClient, err := status.InitClient(statusServer)
if err != nil {
Expand All @@ -185,3 +299,12 @@ func initStatusClientAndTicker(ctx context.Context, cancel context.CancelFunc, l

return statusClient, interval
}

func updateWithRetry(ctx context.Context, log *logrus.Entry, op func() error, lastUpdateTimestamp *int64) {
err := backoff.Retry(op, backoff.WithMaxRetries(backoff.WithContext(backoff.NewExponentialBackOff(), ctx), MAX_RETRIES))
if err != nil {
log.Errorf("Retry error: %v", err)
} else {
atomic.StoreInt64(lastUpdateTimestamp, time.Now().Unix())
}
}
27 changes: 16 additions & 11 deletions platform-manageability-agent/go.mod
Original file line number Diff line number Diff line change
@@ -1,48 +1,53 @@
module github.com/open-edge-platform/edge-node-agents/platform-manageability-agent

go 1.24.1
go 1.24.4

toolchain go1.24.5

require (
github.com/cenkalti/backoff/v4 v4.3.0
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2
github.com/open-edge-platform/edge-node-agents/common v1.7.1
github.com/open-edge-platform/infra-external/dm-manager v0.2.2
github.com/sirupsen/logrus v1.9.3
github.com/stretchr/testify v1.10.0
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.62.0
google.golang.org/grpc v1.73.0
gopkg.in/yaml.v3 v3.0.1
)

require (
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.6-20250603165357-b52ab10f4468.1 // indirect
cloud.google.com/go/compute/metadata v0.6.0 // indirect
github.com/cenkalti/backoff/v5 v5.0.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/ebitengine/purego v0.8.4 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/ebitengine/purego v0.8.3 // indirect
github.com/go-logr/logr v1.4.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.3.0 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect
github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect
github.com/shirou/gopsutil/v4 v4.25.5 // indirect
github.com/shirou/gopsutil/v4 v4.25.4 // indirect
github.com/tklauser/go-sysconf v0.3.15 // indirect
github.com/tklauser/numcpus v0.10.0 // indirect
github.com/yusufpapurcu/wmi v1.2.4 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/contrib/instrumentation/host v0.62.0 // indirect
go.opentelemetry.io/contrib/instrumentation/host v0.61.0 // indirect
go.opentelemetry.io/otel v1.37.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.37.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.36.0 // indirect
go.opentelemetry.io/otel/metric v1.37.0 // indirect
go.opentelemetry.io/otel/sdk v1.37.0 // indirect
go.opentelemetry.io/otel/sdk/metric v1.37.0 // indirect
go.opentelemetry.io/otel/trace v1.37.0 // indirect
go.opentelemetry.io/proto/otlp v1.7.0 // indirect
go.opentelemetry.io/proto/otlp v1.6.0 // indirect
golang.org/x/net v0.41.0 // indirect
golang.org/x/oauth2 v0.30.0 // indirect
golang.org/x/sys v0.33.0 // indirect
golang.org/x/text v0.26.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20250519155744-55703ea1f237 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 // indirect
google.golang.org/grpc v1.73.0 // indirect
google.golang.org/protobuf v1.36.6 // indirect
)
48 changes: 26 additions & 22 deletions platform-manageability-agent/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@ github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyY
github.com/cenkalti/backoff/v5 v5.0.2 h1:rIfFVxEf1QsI7E1ZHfp/B4DF/6QBAUhmgkxc0H7Zss8=
github.com/cenkalti/backoff/v5 v5.0.2/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=
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/ebitengine/purego v0.8.4 h1:CF7LEKg5FFOsASUj0+QwaXf8Ht6TlFxg09+S9wz0omw=
github.com/ebitengine/purego v0.8.4/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/ebitengine/purego v0.8.3 h1:K+0AjQp63JEZTEMZiwsI9g0+hAMNohwUOtY0RPGexmc=
github.com/ebitengine/purego v0.8.3/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
Expand All @@ -19,16 +20,16 @@ github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1 h1:X5VWvz21y3gzm9Nw/kaUeku/1+uBhcekkmy4IkffJww=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1/go.mod h1:Zanoh4+gvIgluNqcfMVTJueD4wSS5hT7zTt4Mrutd90=
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2 h1:sGm2vDRFUrQJO/Veii4h4zG2vvqG6uWNkBHSTqXOZk0=
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2/go.mod h1:wd1YpapPLivG6nQgbf7ZkG1hhSOXDhhn4MLTknx2aAc=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
Expand All @@ -37,21 +38,20 @@ github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35 h1:PpXWgLPs+Fqr32
github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg=
github.com/open-edge-platform/edge-node-agents/common v1.7.1 h1:6BrEqf5w9rTk3a4XBuWyAuFnGr0/NW5+8mxjZyA4lfs=
github.com/open-edge-platform/edge-node-agents/common v1.7.1/go.mod h1:MbjzFRp5qIY7MxhN2vfC0CE4d/xGwPgfzcBS6ABsHX4=
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/open-edge-platform/infra-external/dm-manager v0.2.2 h1:hy7/jTqzgrVPcyeo+QH+pVX44iffN+HoxCT2Z0lxFzw=
github.com/open-edge-platform/infra-external/dm-manager v0.2.2/go.mod h1:9PoYl/Z+994IeWTD1D4WGdFc/Feje9afT3iw3FBbqiQ=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU=
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
github.com/shirou/gopsutil/v4 v4.25.5 h1:rtd9piuSMGeU8g1RMXjZs9y9luK5BwtnG7dZaQUJAsc=
github.com/shirou/gopsutil/v4 v4.25.5/go.mod h1:PfybzyydfZcN+JMMjkF6Zb8Mq1A/VcogFFg7hj50W9c=
github.com/shirou/gopsutil/v4 v4.25.4 h1:cdtFO363VEOOFrUCjZRh4XVJkb548lyF0q0uTeMqYPw=
github.com/shirou/gopsutil/v4 v4.25.4/go.mod h1:xbuxyoZj+UsgnZrENu3lQivsngRR5BdjbJwf2fv4szA=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
Expand All @@ -63,12 +63,14 @@ github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo
github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
go.opentelemetry.io/contrib/instrumentation/host v0.62.0 h1:hAVkLihKCrIkiX/cUvY0qn6yi0uMdr1/zWpb7lEjdYY=
go.opentelemetry.io/contrib/instrumentation/host v0.62.0/go.mod h1:GiuKDIEAJPhz+D9gApgUxthEVmwC29T73Eg158qBT2g=
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.62.0 h1:rbRJ8BBoVMsQShESYZ0FkvcITu8X8QNwJogcLUmDNNw=
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.62.0/go.mod h1:ru6KHrNtNHxM4nD/vd6QrLVWgKhxPYgblq4VAtNawTQ=
go.opentelemetry.io/contrib/instrumentation/host v0.61.0 h1:apz8f6hish67DFuDuBr0erPSmTVO3aN7CPNICiF57o8=
go.opentelemetry.io/contrib/instrumentation/host v0.61.0/go.mod h1:VarXUWiLWgYcG91MOYm0UxZs+ScJeQ181C6PpQ6w1vg=
go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ=
go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I=
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.37.0 h1:zG8GlgXCJQd5BU98C0hZnBbElszTmUgCNCfYneaDL0A=
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.37.0/go.mod h1:hOfBCz8kv/wuq73Mx2H2QnWokh/kHZxkh6SNF2bdKtw=
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.36.0 h1:zwdo1gS2eH26Rg+CoqVQpEK1h8gvt5qyU5Kk5Bixvow=
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.36.0/go.mod h1:rUKCPscaRWWcqGT6HnEmYrK+YNe5+Sw64xgQTOJ5b30=
go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE=
go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E=
go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI=
Expand All @@ -77,8 +79,10 @@ go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFh
go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps=
go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4=
go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0=
go.opentelemetry.io/proto/otlp v1.7.0 h1:jX1VolD6nHuFzOYso2E73H85i92Mv8JQYk0K9vz09os=
go.opentelemetry.io/proto/otlp v1.7.0/go.mod h1:fSKjH6YJ7HDlwzltzyMj036AJ3ejJLCgCSHGj4efDDo=
go.opentelemetry.io/proto/otlp v1.6.0 h1:jQjP+AQyTf+Fe7OKj/MfkDrmK4MNVtw2NpXsf9fefDI=
go.opentelemetry.io/proto/otlp v1.6.0/go.mod h1:cicgGehlFuNdgZkcALOCh3VE6K/u2tAjzlRhDwmVpZc=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw=
golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA=
golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
Expand All @@ -91,8 +95,8 @@ golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822 h1:oWVWY3NzT7KJppx2UKhKmzPq4SRe0LdCijVRwvGeikY=
google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822/go.mod h1:h3c4v36UTKzUiuaOKQ6gr3S+0hovBtUrXzTG/i3+XEc=
google.golang.org/genproto/googleapis/api v0.0.0-20250519155744-55703ea1f237 h1:Kog3KlB4xevJlAcbbbzPfRG0+X9fdoGM+UBRKVz6Wr0=
google.golang.org/genproto/googleapis/api v0.0.0-20250519155744-55703ea1f237/go.mod h1:ezi0AVyMKDWy5xAncvjLWH7UcLBB5n7y2fQ8MzjJcto=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 h1:fc6jSaCT0vBduLYZHYrBBNY4dsWuvgyff9noRNDdBeE=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
google.golang.org/grpc v1.73.0 h1:VIWSmpI2MegBtTuFt5/JWy2oXxtjJ/e89Z70ImfD2ok=
Expand Down
Loading
Loading