Skip to content
Merged
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
82 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
06116e6
Load mei module and start LMS service
punam20 Jul 22, 2025
5e356c6
Fix lint error
punam20 Jul 22, 2025
d5ecd8c
Updated code based on review comments
punam20 Jul 22, 2025
2833ef1
Fis review comments
punam20 Jul 22, 2025
1f62f62
unmask lms service
punam20 Jul 22, 2025
22268ca
Fix minor issues
Rashika-Rajaraman Jul 23, 2025
c09b02e
Add test files
Rashika-Rajaraman Jul 23, 2025
1cd7c98
Merge branch 'grpc-implementation' into mei_lms_changes
punam20 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
01ba5f8
Merge branch 'grpc-implementation' into mei_lms_changes
punam20 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
38bdddd
Merge branch 'grpc-implementation' into mei_lms_changes
punam20 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
55b4ee2
Merge branch 'grpc-implementation' into mei_lms_changes
punam20 Jul 23, 2025
a3fb878
Merge branch 'grpc-implementation' into mei_lms_changes
punam20 Jul 23, 2025
2bbf051
Add license header
Rashika-Rajaraman Jul 24, 2025
3eb5754
Add more logs
Rashika-Rajaraman Jul 24, 2025
7913a74
fix sudoer and DM manager connection issue
vthiruveedula Jul 24, 2025
d31fa28
Merge branch 'grpc-implementation' into mei_lms_changes
punam20 Jul 24, 2025
e560ec3
Fix bug
Rashika-Rajaraman Jul 24, 2025
821d057
Merge branch 'grpc-implementation' into mei_lms_changes
punam20 Jul 24, 2025
207814d
Fix access token issue
punam20 Jul 24, 2025
8ec0377
Enable lms only once
punam20 Jul 25, 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
ec21da7
Merge branch 'grpc-implementation' into mei_lms_changes
punam20 Jul 25, 2025
3103b94
Fix AMT Status
Rashika-Rajaraman Jul 25, 2025
2c5bd08
Merge branch 'grpc-implementation' into mei_lms_changes
punam20 Jul 25, 2025
d4762fd
Adding rpsAddress changes
punam20 Jul 25, 2025
1a92656
fix for review comments
punam20 Jul 25, 2025
bb00344
Fix review comments
Rashika-Rajaraman Jul 28, 2025
90f06cd
Merge branch 'grpc-implementation' into mei_lms_changes
punam20 Jul 28, 2025
21eff5a
Update PMA version
Rashika-Rajaraman Jul 28, 2025
f0225ef
Merge branch 'grpc-implementation' into mei_lms_changes
punam20 Jul 28, 2025
bfd2078
Fix lint issues
Rashika-Rajaraman Jul 28, 2025
27424fa
Fix .gitleaksignore file
Rashika-Rajaraman Jul 28, 2025
619c004
Merge branch 'grpc-implementation' into mei_lms_changes
punam20 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
9ab6e5a
Merge branch 'grpc-implementation' into mei_lms_changes
punam20 Jul 29, 2025
ed53be9
Add rule in .semgrepignore file
Rashika-Rajaraman Jul 29, 2025
fe85f67
Merge branch 'grpc-implementation' into mei_lms_changes
punam20 Jul 29, 2025
e5eb023
Merge branch 'main' into grpc-implementation
Rashika-Rajaraman Jul 29, 2025
96fb585
Merge branch 'grpc-implementation' into mei_lms_changes
punam20 Jul 29, 2025
1f3085c
Merge branch 'main' into grpc-implementation
Rashika-Rajaraman Jul 29, 2025
b9c8beb
Add debug logs
Rashika-Rajaraman Jul 29, 2025
6a170d2
Merge branch 'grpc-implementation' into mei_lms_changes
punam20 Jul 29, 2025
acd2c0b
Add FIXME comment
Rashika-Rajaraman Jul 29, 2025
cb43a23
Merge branch 'main' into grpc-implementation
Rashika-Rajaraman Jul 30, 2025
ab23369
Remove .semgrepignore file
Rashika-Rajaraman Jul 30, 2025
e59412a
Merge branch 'grpc-implementation' into mei_lms_changes
punam20 Jul 30, 2025
0291ae7
Merge branch 'main' into mei_lms_changes
punam20 Jul 30, 2025
792f3b9
fix indentation
punam20 Jul 30, 2025
840f558
Update version and cleanup code
Rashika-Rajaraman Jul 30, 2025
b347f8c
Changing rpc path to /usr/bin/rpc
punam20 Jul 30, 2025
6028107
Bump NA version
punam20 Jul 30, 2025
a394701
Update en manifest file with NA and PMA version
punam20 Jul 30, 2025
4290c4d
Bump EN manifest tag
punam20 Jul 30, 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 @@ -17,15 +17,23 @@ import (
"time"

"github.com/cenkalti/backoff/v4"
"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"
"github.com/open-edge-platform/edge-node-agents/platform-manageability-agent/internal/utils"
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 +107,101 @@ 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)

hostID, err := utils.GetSystemUUID()
if err != nil {
log.Fatalf("Failed to retrieve system UUID with an error: %v", err)
}
var (
wg sync.WaitGroup

amtStatusCheckInterval = confs.Manageability.HeartbeatInterval
lastAMTStatusCheckTimestamp int64
isAMTEnabled int32
)
wg.Add(1)
go func() {
defer wg.Done()
amtStatusTicker := time.NewTicker(amtStatusCheckInterval)
defer amtStatusTicker.Stop()

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

var (
activationCheckInterval = confs.Manageability.HeartbeatInterval
lastActivationCheckTimestamp int64
)
wg.Add(1)
go func() {
defer wg.Done()
activationTicker := time.NewTicker(activationCheckInterval)
defer activationTicker.Stop()

op := func() error {
if atomic.LoadInt32(&isAMTEnabled) == 0 {
log.Info("Skipping activation check because AMT is not enabled")
return nil
}
err = dmMgrClient.RetrieveActivationDetails(ctx, hostID, 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 +261,29 @@ func main() {
log.Infof("Platform Manageability Agent finished")
}

func enableService(action, service string) error {
allowedActions := map[string]bool{"enable": true, "start": true}
allowedServices := map[string]bool{"lms.service": true}

if !allowedActions[action] || !allowedServices[service] {
return fmt.Errorf("invalid service details")
}

output, err := utils.ExecuteWithRetries("sudo", []string{"systemctl", action, service})
if err != nil {
return fmt.Errorf("failed to %s %s: %v, output: %s", action, service, err, output)
}
return nil
}

func loadModule(module string) error {
output, err := utils.ExecuteWithRetries("sudo", []string{"modprobe", module})
if err != nil {
return fmt.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 +309,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