Skip to content

Commit b5fa1ef

Browse files
authored
Add storage metrics (#158)
1 parent ec16d98 commit b5fa1ef

File tree

11 files changed

+3631
-22
lines changed

11 files changed

+3631
-22
lines changed

.github/workflows/test.yml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
name: Test
2+
3+
on:
4+
pull_request:
5+
branches: [main]
6+
7+
jobs:
8+
test:
9+
runs-on: ubuntu-latest
10+
steps:
11+
- name: Checkout
12+
uses: actions/checkout@v4
13+
14+
- name: Set up Go
15+
uses: actions/setup-go@v5
16+
with:
17+
go-version: stable
18+
19+
- name: Run unit tests
20+
run: make test
21+
22+
- name: Run integration tests
23+
run: make test-it

app/services/metrics/metrics.go

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"hostlink/internal/crypto"
1515
"hostlink/internal/networkmetrics"
1616
"hostlink/internal/pgmetrics"
17+
"hostlink/internal/storagemetrics"
1718
"hostlink/internal/sysmetrics"
1819
)
1920

@@ -26,13 +27,14 @@ type Pusher interface {
2627
}
2728

2829
type metricspusher struct {
29-
apiserver apiserver.MetricsOperations
30-
agentstate agentstate.Operations
31-
metricscollector pgmetrics.Collector
32-
syscollector sysmetrics.Collector
33-
netcollector networkmetrics.Collector
34-
crypto crypto.Service
35-
privateKeyPath string
30+
apiserver apiserver.MetricsOperations
31+
agentstate agentstate.Operations
32+
metricscollector pgmetrics.Collector
33+
syscollector sysmetrics.Collector
34+
netcollector networkmetrics.Collector
35+
storagecollector storagemetrics.Collector
36+
crypto crypto.Service
37+
privateKeyPath string
3638
}
3739

3840
func NewWithConf() (*metricspusher, error) {
@@ -51,6 +53,7 @@ func NewWithConf() (*metricspusher, error) {
5153
metricscollector: pgmetrics.New(),
5254
syscollector: sysmetrics.New(),
5355
netcollector: networkmetrics.New(),
56+
storagecollector: storagemetrics.New(),
5457
crypto: crypto.NewService(),
5558
privateKeyPath: appconf.AgentPrivateKeyPath(),
5659
}, nil
@@ -67,6 +70,7 @@ func NewWithDependencies(
6770
pgcollector pgmetrics.Collector,
6871
syscollector sysmetrics.Collector,
6972
netcollector networkmetrics.Collector,
73+
storagecollector storagemetrics.Collector,
7074
crypto crypto.Service,
7175
privateKeyPath string,
7276
) *metricspusher {
@@ -76,6 +80,7 @@ func NewWithDependencies(
7680
metricscollector: pgcollector,
7781
syscollector: syscollector,
7882
netcollector: netcollector,
83+
storagecollector: storagecollector,
7984
crypto: crypto,
8085
privateKeyPath: privateKeyPath,
8186
}
@@ -157,6 +162,24 @@ func (mp *metricspusher) Push(cred credential.Credential) error {
157162
})
158163
}
159164

165+
storageMetrics, err := mp.storagecollector.Collect(ctx)
166+
if err != nil {
167+
collectionErrors = append(collectionErrors, fmt.Errorf("storage metrics: %w", err))
168+
} else {
169+
for _, sm := range storageMetrics {
170+
metricSets = append(metricSets, domainmetrics.MetricSet{
171+
Type: domainmetrics.MetricTypeStorage,
172+
Attributes: map[string]any{
173+
"mount_point": sm.Attributes.MountPoint,
174+
"device": sm.Attributes.Device,
175+
"filesystem_type": sm.Attributes.FilesystemType,
176+
"is_read_only": sm.Attributes.IsReadOnly,
177+
},
178+
Metrics: sm.Metrics,
179+
})
180+
}
181+
}
182+
160183
if len(metricSets) == 0 {
161184
return fmt.Errorf("all metrics collection failed: %v", collectionErrors)
162185
}

0 commit comments

Comments
 (0)