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.
This commit is contained in:
Jason Kulatunga
2020-09-20 17:37:43 -06:00
parent 66122778a3
commit 24262f7c8c
6 changed files with 20 additions and 11 deletions
+5 -4
View File
@@ -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
+2 -2
View File
@@ -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 {
+1 -1
View File
@@ -5,7 +5,7 @@ import (
"github.com/jaypipes/ghw"
)
func (d *Detect) devicePrefix() string {
func DevicePrefix() string {
return "/dev/"
}
+1 -1
View File
@@ -1,6 +1,6 @@
package detect
func (d *Detect) devicePrefix() string {
func DevicePrefix() string {
return ""
}