provide a mechanism to specify the absolute path to the smartctl binary used by metrics collector.
- fixes #304
This commit is contained in:
@@ -98,10 +98,10 @@ func (mc *MetricsCollector) Run() error {
|
|||||||
|
|
||||||
func (mc *MetricsCollector) Validate() error {
|
func (mc *MetricsCollector) Validate() error {
|
||||||
mc.logger.Infoln("Verifying required tools")
|
mc.logger.Infoln("Verifying required tools")
|
||||||
_, lookErr := exec.LookPath("smartctl")
|
_, lookErr := exec.LookPath(mc.config.GetString("commands.metrics_smartctl_bin"))
|
||||||
|
|
||||||
if lookErr != nil {
|
if lookErr != nil {
|
||||||
return errors.DependencyMissingError("smartctl is missing")
|
return errors.DependencyMissingError(fmt.Sprintf("%s binary is missing", mc.config.GetString("commands.metrics_smartctl_bin")))
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -124,7 +124,7 @@ func (mc *MetricsCollector) Collect(deviceWWN string, deviceName string, deviceT
|
|||||||
}
|
}
|
||||||
args = append(args, fullDeviceName)
|
args = append(args, fullDeviceName)
|
||||||
|
|
||||||
result, err := mc.shell.Command(mc.logger, "smartctl", args, "", os.Environ())
|
result, err := mc.shell.Command(mc.logger, mc.config.GetString("commands.metrics_smartctl_bin"), args, "", os.Environ())
|
||||||
resultBytes := []byte(result)
|
resultBytes := []byte(result)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if exitError, ok := err.(*exec.ExitError); ok {
|
if exitError, ok := err.(*exec.ExitError); ok {
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ func (c *configuration) Init() error {
|
|||||||
|
|
||||||
c.SetDefault("api.endpoint", "http://localhost:8080")
|
c.SetDefault("api.endpoint", "http://localhost:8080")
|
||||||
|
|
||||||
|
c.SetDefault("commands.metrics_smartctl_bin", "smartctl")
|
||||||
c.SetDefault("commands.metrics_scan_args", "--scan --json")
|
c.SetDefault("commands.metrics_scan_args", "--scan --json")
|
||||||
c.SetDefault("commands.metrics_info_args", "--info --json")
|
c.SetDefault("commands.metrics_info_args", "--info --json")
|
||||||
c.SetDefault("commands.metrics_smart_args", "--xall --json")
|
c.SetDefault("commands.metrics_smart_args", "--xall --json")
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ type Detect struct {
|
|||||||
func (d *Detect) SmartctlScan() ([]models.Device, error) {
|
func (d *Detect) SmartctlScan() ([]models.Device, error) {
|
||||||
//we use smartctl to detect all the drives available.
|
//we use smartctl to detect all the drives available.
|
||||||
args := strings.Split(d.Config.GetString("commands.metrics_scan_args"), " ")
|
args := strings.Split(d.Config.GetString("commands.metrics_scan_args"), " ")
|
||||||
detectedDeviceConnJson, err := d.Shell.Command(d.Logger, "smartctl", args, "", os.Environ())
|
detectedDeviceConnJson, err := d.Shell.Command(d.Logger, d.Config.GetString("commands.metrics_smartctl_bin"), args, "", os.Environ())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
d.Logger.Errorf("Error scanning for devices: %v", err)
|
d.Logger.Errorf("Error scanning for devices: %v", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -60,7 +60,7 @@ func (d *Detect) SmartCtlInfo(device *models.Device) error {
|
|||||||
}
|
}
|
||||||
args = append(args, fullDeviceName)
|
args = append(args, fullDeviceName)
|
||||||
|
|
||||||
availableDeviceInfoJson, err := d.Shell.Command(d.Logger, "smartctl", args, "", os.Environ())
|
availableDeviceInfoJson, err := d.Shell.Command(d.Logger, d.Config.GetString("commands.metrics_smartctl_bin"), args, "", os.Environ())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
d.Logger.Errorf("Could not retrieve device information for %s: %v", device.DeviceName, err)
|
d.Logger.Errorf("Could not retrieve device information for %s: %v", device.DeviceName, err)
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ devices:
|
|||||||
|
|
||||||
# example to show how to override the smartctl command args globally
|
# example to show how to override the smartctl command args globally
|
||||||
#commands:
|
#commands:
|
||||||
|
# metrics_smartctl_bin: 'smartctl' # change to provide custom `smartctl` binary path, eg. `/usr/sbin/smartctl`
|
||||||
# metrics_scan_args: '--scan --json' # used to detect devices
|
# metrics_scan_args: '--scan --json' # used to detect devices
|
||||||
# metrics_info_args: '--info --json' # used to determine device unique ID & register device with Scrutiny
|
# metrics_info_args: '--info --json' # used to determine device unique ID & register device with Scrutiny
|
||||||
# metrics_smart_args: '--xall --json' # used to retrieve smart data for each device.
|
# metrics_smart_args: '--xall --json' # used to retrieve smart data for each device.
|
||||||
|
|||||||
Reference in New Issue
Block a user