diff --git a/metrics.go b/metrics.go index 3b773eb..a0a2f37 100644 --- a/metrics.go +++ b/metrics.go @@ -151,6 +151,17 @@ var ( }, nil, ) + metricDeviceState = prometheus.NewDesc( + "smartctl_device_state", + "Device state (0=active, 1=standby, 2=sleep, 3=dst, 4=offline, 5=sct)", + []string{ + "device", + "model_family", + "model_name", + "serial_number", + }, + nil, + ) metricDeviceStatistics = prometheus.NewDesc( "smartctl_device_statistics", "Device statistics", diff --git a/smartctl.go b/smartctl.go index 0f800c7..3a0a409 100644 --- a/smartctl.go +++ b/smartctl.go @@ -49,6 +49,7 @@ func (smart *SMARTctl) Collect() { smart.mineRotationRate() smart.mineTemperatures() smart.minePowerCycleCount() + smart.mineDeviceSCTStatus() smart.mineDeviceStatistics() smart.mineDeviceStatus() } @@ -231,6 +232,21 @@ func (smart *SMARTctl) minePowerCycleCount() { ) } +func (smart *SMARTctl) mineDeviceSCTStatus() { + status := smart.json.Get("ata_sct_status") + if status.Exists() { + smart.ch <- prometheus.MustNewConstMetric( + metricDeviceState, + prometheus.GaugeValue, + status.Get("device_state").Float(), + smart.device.device, + smart.device.family, + smart.device.model, + smart.device.serial, + ) + } +} + func (smart *SMARTctl) mineDeviceStatistics() { for _, page := range smart.json.Get("ata_device_statistics.pages").Array() { table := strings.TrimSpace(page.Get("name").String())