@@ -94,17 +94,34 @@ func main() {
94
94
level .Info (logger ).Log ("msg" , "Starting smartctl_exporter" , "version" , version .Info ())
95
95
level .Info (logger ).Log ("msg" , "Build context" , "build_context" , version .BuildContext ())
96
96
97
+ // Scan the host devices
98
+ json := readSMARTctlDevices (logger )
99
+ scanDevices := json .Get ("devices" ).Array ()
100
+ scanDevicesSet := make (map [string ]bool )
101
+ var scanDeviceNames []string
102
+ for _ , d := range scanDevices {
103
+ deviceName := d .Get ("name" ).String ()
104
+ level .Debug (logger ).Log ("msg" , "Found device" , "name" , deviceName )
105
+ scanDevicesSet [deviceName ] = true
106
+ scanDeviceNames = append (scanDeviceNames , deviceName )
107
+ }
108
+
109
+ // Read the configuration and verify that it is available
97
110
devices := * smartctlDevices
111
+ var readDeviceNames []string
112
+ for _ , device := range devices {
113
+ if _ , ok := scanDevicesSet [device ]; ok {
114
+ readDeviceNames = append (readDeviceNames , device )
115
+ } else {
116
+ level .Warn (logger ).Log ("msg" , "Device unavailable" , "name" , device )
117
+ }
118
+ }
98
119
99
- if len (devices ) == 0 {
120
+ if len (readDeviceNames ) > 0 {
121
+ devices = readDeviceNames
122
+ } else {
100
123
level .Info (logger ).Log ("msg" , "No devices specified, trying to load them automatically" )
101
- json := readSMARTctlDevices (logger )
102
- scannedDevices := json .Get ("devices" ).Array ()
103
- for _ , d := range scannedDevices {
104
- device := d .Get ("name" ).String ()
105
- level .Info (logger ).Log ("msg" , "Found device" , "device" , device )
106
- devices = append (devices , device )
107
- }
124
+ devices = scanDeviceNames
108
125
}
109
126
110
127
if len (devices ) == 0 {
0 commit comments