diff --git a/collector/pkg/collector/metrics.go b/collector/pkg/collector/metrics.go index 10b8348..8643a23 100644 --- a/collector/pkg/collector/metrics.go +++ b/collector/pkg/collector/metrics.go @@ -10,6 +10,7 @@ import ( "github.com/analogj/scrutiny/collector/pkg/models" "github.com/sirupsen/logrus" "net/url" + "os" "os/exec" "strings" "sync" @@ -75,7 +76,7 @@ func (mc *MetricsCollector) Run() error { for _, device := range deviceRespWrapper.Data { // execute collection in parallel go-routines wg.Add(1) - go mc.Collect(&wg, device.WWN, device.DeviceName) + go mc.Collect(&wg, device.WWN, device.DeviceName, device.DeviceType) } mc.logger.Infoln("Main: Waiting for workers to finish") @@ -97,11 +98,18 @@ func (mc *MetricsCollector) Validate() error { return nil } -func (mc *MetricsCollector) Collect(wg *sync.WaitGroup, deviceWWN string, deviceName string) { +func (mc *MetricsCollector) Collect(wg *sync.WaitGroup, deviceWWN string, deviceName string, deviceType string) { defer wg.Done() mc.logger.Infof("Collecting smartctl results for %s\n", deviceName) - result, err := common.ExecCmd("smartctl", []string{"-a", "-j", fmt.Sprintf("/dev/%s", deviceName)}, "", nil) + args := []string{"-a", "-j"} + //only include the device type if its a non-standard one. In some cases ata drives are detected as scsi in docker, and metadata is lost. + if len(deviceType) > 0 && deviceType != "scsi" && deviceType != "ata" { + args = append(args, "-d", deviceType) + } + args = append(args, fmt.Sprintf("%s%s", detect.DevicePrefix(), deviceName)) + + result, err := common.ExecCmd("smartctl", args, "", os.Environ()) resultBytes := []byte(result) if err != nil { if exitError, ok := err.(*exec.ExitError); ok { diff --git a/collector/pkg/detect/detect.go b/collector/pkg/detect/detect.go index 2735218..5899adb 100644 --- a/collector/pkg/detect/detect.go +++ b/collector/pkg/detect/detect.go @@ -44,7 +44,7 @@ func (d *Detect) smartctlScan() ([]models.Device, error) { for _, detectedDevice := range detectedDeviceConns.Devices { detectedDevices = append(detectedDevices, models.Device{ DeviceType: detectedDevice.Type, - DeviceName: strings.TrimPrefix(detectedDevice.Name, d.devicePrefix()), + DeviceName: strings.TrimPrefix(detectedDevice.Name, DevicePrefix()), }) } @@ -58,10 +58,11 @@ func (d *Detect) smartctlScan() ([]models.Device, error) { func (d *Detect) smartCtlInfo(device *models.Device) error { args := []string{"--info", "-j"} - if len(device.DeviceType) > 0 { + //only include the device type if its a non-standard one. In some cases ata drives are detected as scsi in docker, and metadata is lost. + if len(device.DeviceType) > 0 && device.DeviceType != "scsi" && device.DeviceType != "ata" { args = append(args, "-d", device.DeviceType) } - args = append(args, fmt.Sprintf("%s%s", d.devicePrefix(), device.DeviceName)) + args = append(args, fmt.Sprintf("%s%s", DevicePrefix(), device.DeviceName)) availableDeviceInfoJson, err := common.ExecCmd("smartctl", args, "", os.Environ()) if err != nil { @@ -78,8 +79,8 @@ func (d *Detect) smartCtlInfo(device *models.Device) error { //DeviceType and DeviceName are already populated. //WWN - device.ModelName = availableDeviceInfo.ModelName //InterfaceType: + device.ModelName = availableDeviceInfo.ModelName device.InterfaceSpeed = availableDeviceInfo.InterfaceSpeed.Current.String device.SerialNumber = availableDeviceInfo.SerialNumber device.Firmware = availableDeviceInfo.FirmwareVersion diff --git a/collector/pkg/detect/devices_darwin.go b/collector/pkg/detect/devices_darwin.go index ee37c8d..4e55693 100644 --- a/collector/pkg/detect/devices_darwin.go +++ b/collector/pkg/detect/devices_darwin.go @@ -6,7 +6,7 @@ import ( "strings" ) -func (d *Detect) devicePrefix() string { +func DevicePrefix() string { return "/dev/" } @@ -69,7 +69,7 @@ func (d *Detect) findMissingDevices(detectedDevices []models.Device) ([]models.D //check if device is already detected. alreadyDetected := false - diskName := strings.TrimPrefix(disk.Name, d.devicePrefix()) + diskName := strings.TrimPrefix(disk.Name, DevicePrefix()) for _, detectedDevice := range detectedDevices { if detectedDevice.DeviceName == diskName { diff --git a/collector/pkg/detect/devices_linux.go b/collector/pkg/detect/devices_linux.go index 1ea1971..6a97623 100644 --- a/collector/pkg/detect/devices_linux.go +++ b/collector/pkg/detect/devices_linux.go @@ -5,7 +5,7 @@ import ( "github.com/jaypipes/ghw" ) -func (d *Detect) devicePrefix() string { +func DevicePrefix() string { return "/dev/" } diff --git a/collector/pkg/detect/devices_windows.go b/collector/pkg/detect/devices_windows.go index 54b8519..3346842 100644 --- a/collector/pkg/detect/devices_windows.go +++ b/collector/pkg/detect/devices_windows.go @@ -1,6 +1,6 @@ package detect -func (d *Detect) devicePrefix() string { +func DevicePrefix() string { return "" } diff --git a/webapp/backend/pkg/web/testdata/scrutiny_test.db b/webapp/backend/pkg/web/testdata/scrutiny_test.db deleted file mode 100644 index 15f10fd..0000000 Binary files a/webapp/backend/pkg/web/testdata/scrutiny_test.db and /dev/null differ