/
disk.go
38 lines (33 loc) · 881 Bytes
/
disk.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// +build linux windows darwin,cgo
package hw
import (
"strings"
gosigar "github.com/cloudfoundry/gosigar"
"github.com/spacemonkeygo/monkit/v3"
)
func Disk() monkit.StatSource {
return monkit.StatSourceFunc(func(cb func(key monkit.SeriesKey, field string, val float64)) {
var fslist gosigar.FileSystemList
err := fslist.Get()
if err != nil {
logger.Debuge(err)
return
}
for _, fs := range fslist.List {
if !strings.HasPrefix(fs.DevName, "/") {
continue
}
var fsu gosigar.FileSystemUsage
err = fsu.Get(fs.DirName)
if err != nil {
logger.Debuge(err)
continue
}
monkit.StatSourceFromStruct(monkit.NewSeriesKey("disk"), &fsu).Stats(
func(key monkit.SeriesKey, field string, val float64) {
cb(key.WithTag("device", fs.DevName), field, val)
})
}
})
}
func init() { registrations = append(registrations, Disk()) }