smart.go: switch to simpler ReadGenericAttributes() api
...to get the device temperature. This API abstracts differences between different device interfaces (SATA vs NVMe vs ...)
This commit is contained in:
parent
31f071ba7f
commit
93fe0cab2e
@ -11,9 +11,6 @@ import (
|
||||
"github.com/shirou/gopsutil/host"
|
||||
)
|
||||
|
||||
// offset for converting temperature from Kelvins to Celsius (273.15)
|
||||
const kelvinOffset = 273
|
||||
|
||||
var smDevices map[string]smart.Device
|
||||
|
||||
func init() {
|
||||
@ -70,31 +67,12 @@ func getTemps(temps map[string]int) map[string]error {
|
||||
}
|
||||
|
||||
for name, dev := range smDevices {
|
||||
switch sm := dev.(type) {
|
||||
case *smart.SataDevice:
|
||||
data, err := sm.ReadSMARTData()
|
||||
if err != nil {
|
||||
log.Printf("error getting smart data for %s: %s", name, err)
|
||||
continue
|
||||
}
|
||||
if attr, ok := data.Attrs[194]; ok {
|
||||
val, _, _, _, err := attr.ParseAsTemperature()
|
||||
if err != nil {
|
||||
log.Printf("error parsing temperature smart data for %s: %s", name, err)
|
||||
continue
|
||||
}
|
||||
temps[name] = val
|
||||
}
|
||||
case *smart.NVMeDevice:
|
||||
data, err := sm.ReadSMART()
|
||||
if err != nil {
|
||||
log.Printf("error getting smart data for %s: %s", name, err)
|
||||
continue
|
||||
}
|
||||
// nvme reports the temperature in Kelvins
|
||||
temps[name] = int(data.Temperature) - kelvinOffset
|
||||
default:
|
||||
attr, err := dev.ReadGenericAttributes()
|
||||
if err != nil {
|
||||
log.Printf("error getting smart data for %s: %s", name, err)
|
||||
continue
|
||||
}
|
||||
temps[name] = int(attr.Temperature)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
5
go.mod
5
go.mod
@ -4,7 +4,7 @@ require (
|
||||
github.com/BurntSushi/toml v1.1.0 // indirect
|
||||
github.com/VictoriaMetrics/metrics v1.18.1
|
||||
github.com/VividCortex/ewma v1.2.0
|
||||
github.com/anatol/smart.go v0.0.0-20220615232124-64dea241c3bb
|
||||
github.com/anatol/smart.go v0.0.0-20220917195147-c0b00d90f8cc
|
||||
github.com/cloudfoundry-attic/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21
|
||||
github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 // indirect
|
||||
github.com/distatus/battery v0.10.0
|
||||
@ -18,9 +18,8 @@ require (
|
||||
github.com/onsi/gomega v1.10.4 // indirect
|
||||
github.com/shibukawa/configdir v0.0.0-20170330084843-e180dbdc8da0
|
||||
github.com/shirou/gopsutil v3.20.12+incompatible
|
||||
github.com/stretchr/testify v1.7.2
|
||||
github.com/stretchr/testify v1.8.0
|
||||
github.com/xxxserxxx/lingo/v2 v2.0.1
|
||||
golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d // indirect
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
|
||||
)
|
||||
|
||||
|
9
go.sum
9
go.sum
@ -20,6 +20,10 @@ github.com/anatol/smart.go v0.0.0-20220608000525-80bf85256c1c h1:+8vjVFVRMVHj7oW
|
||||
github.com/anatol/smart.go v0.0.0-20220608000525-80bf85256c1c/go.mod h1:F486dIGdTbYMmAj8dtlVbjQasL8WS7lhnijBk4wJmKQ=
|
||||
github.com/anatol/smart.go v0.0.0-20220615232124-64dea241c3bb h1:cKi4b86dLoZulJet0/ubN9oFea1eBHZj7bNK8icQamM=
|
||||
github.com/anatol/smart.go v0.0.0-20220615232124-64dea241c3bb/go.mod h1:F486dIGdTbYMmAj8dtlVbjQasL8WS7lhnijBk4wJmKQ=
|
||||
github.com/anatol/smart.go v0.0.0-20220822162331-dfd542946993 h1:bUUNet+OAyiDUN78ffh3zydHpCMFg+7eAe72zwAoqPU=
|
||||
github.com/anatol/smart.go v0.0.0-20220822162331-dfd542946993/go.mod h1:F486dIGdTbYMmAj8dtlVbjQasL8WS7lhnijBk4wJmKQ=
|
||||
github.com/anatol/smart.go v0.0.0-20220917195147-c0b00d90f8cc h1:UH+K+oojIu7jWqJrmPXCb33A/ZIfCLBIorj3KQGJxgs=
|
||||
github.com/anatol/smart.go v0.0.0-20220917195147-c0b00d90f8cc/go.mod h1:H/rz4ePNwdNiEdxv+NRWuqONKHe2N5n7rCQftsmStNE=
|
||||
github.com/anatol/vmtest v0.0.0-20211215032353-afd7b1dd38ef/go.mod h1:JiDFhD1zjgMx9ONsHhhucGwMvCLrJMl/yu/l5qP4XFw=
|
||||
github.com/anatol/vmtest v0.0.0-20220413190228-7a42f1f6d7b8/go.mod h1:oPm5wWoqTSkeoPe1Q3sPryTK8o24Jcbwh8dKOiiIobk=
|
||||
github.com/cloudfoundry-attic/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 h1:Yg2hDs4b13Evkpj42FU2idX2cVXVFqQSheXYKM86Qsk=
|
||||
@ -112,6 +116,7 @@ github.com/shirou/gopsutil v3.20.12+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMT
|
||||
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
|
||||
github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
|
||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
@ -119,6 +124,7 @@ github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMT
|
||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.2 h1:4jaiDzPyXQvSd7D0EjG45355tLlV3VOECpq10pLC+8s=
|
||||
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
|
||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||
github.com/tmc/scp v0.0.0-20170824174625-f7b48647feef/go.mod h1:WLFStEdnJXpjK8kd4qKLwQKX/1vrDzp5BcDyiZJBHJM=
|
||||
github.com/valyala/fastrand v1.0.0 h1:LUKT9aKer2dVQNUi3waewTbKV+7H17kvWFNKs2ObdkI=
|
||||
github.com/valyala/fastrand v1.0.0/go.mod h1:HWqCzkrkg6QXT8V2EXWvXCoow7vLwOFN002oeRzjapQ=
|
||||
@ -136,6 +142,7 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||
@ -168,6 +175,8 @@ golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBc
|
||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d h1:Zu/JngovGLVi6t2J3nmAf3AoTDwuzw85YZ3b9o4yU7s=
|
||||
golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220915200043-7b5979e65e41 h1:ohgcoMbSofXygzo6AD2I1kz3BFmW1QArPYTtwEM3UXc=
|
||||
golang.org/x/sys v0.0.0-20220915200043-7b5979e65e41/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||
|
Loading…
x
Reference in New Issue
Block a user