From 24262f7c8c48ac9619ff38d1575b589d95ac7597 Mon Sep 17 00:00:00 2001 From: Jason Kulatunga Date: Fri, 18 Sep 2020 21:37:32 -0600 Subject: [PATCH] pass deviceType when running smartctl data collection (for megaraid type disks). Make DevicePrefix a public function available outside the detect module. if device type is detected as "ata" or "scsi", dont pass in via -d parameter, can cause issues with missing data. --- collector/pkg/collector/metrics.go | 14 +++++++++++--- collector/pkg/detect/detect.go | 9 +++++---- collector/pkg/detect/devices_darwin.go | 4 ++-- collector/pkg/detect/devices_linux.go | 2 +- collector/pkg/detect/devices_windows.go | 2 +- .../backend/pkg/web/testdata/scrutiny_test.db | Bin 176128 -> 0 bytes 6 files changed, 20 insertions(+), 11 deletions(-) delete mode 100644 webapp/backend/pkg/web/testdata/scrutiny_test.db 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 15f10fd60c24ad923dd4b44e59029387ed851cc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176128 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