1
0
Fork 0
telegraf/plugins/inputs/smartctl/smartctl_scan.go

47 lines
1 KiB
Go
Raw Normal View History

package smartctl
import (
"encoding/json"
"fmt"
"time"
"github.com/influxdata/telegraf/internal"
)
// This is here so we can override it during testing
var scanArgs = []string{"--json", "--scan-open"}
type scanDevice struct {
Name string
Type string
}
func (s *Smartctl) scan() ([]scanDevice, error) {
cmd := execCommand(s.Path, scanArgs...)
if s.UseSudo {
cmd = execCommand("sudo", append([]string{"-n", s.Path}, scanArgs...)...)
}
out, err := internal.CombinedOutputTimeout(cmd, time.Duration(s.Timeout))
if err != nil {
return nil, fmt.Errorf("error running smartctl with %s: %w", scanArgs, err)
}
var scan smartctlScanJSON
if err := json.Unmarshal(out, &scan); err != nil {
return nil, fmt.Errorf("error unmarshalling smartctl scan output: %w", err)
}
devices := make([]scanDevice, 0)
for _, device := range scan.Devices {
if s.deviceFilter.Match(device.Name) {
device := scanDevice{
Name: device.Name,
Type: device.Type,
}
devices = append(devices, device)
}
}
return devices, nil
}