diff --git a/collector/pkg/detect/devices_solaris.go b/collector/pkg/detect/devices_solaris.go new file mode 100644 index 0000000..ebe8e88 --- /dev/null +++ b/collector/pkg/detect/devices_solaris.go @@ -0,0 +1,51 @@ +package detect + +import ( + "github.com/analogj/scrutiny/collector/pkg/common/shell" + "github.com/analogj/scrutiny/collector/pkg/models" + "github.com/jaypipes/ghw" + "strings" +) + +func DevicePrefix() string { + return "/dev/" +} + +func (d *Detect) Start() ([]models.Device, error) { + d.Shell = shell.Create() + // call the base/common functionality to get a list of devices + detectedDevices, err := d.SmartctlScan() + if err != nil { + return nil, err + } + + //inflate device info for detected devices. + for ndx, _ := range detectedDevices { + d.SmartCtlInfo(&detectedDevices[ndx]) //ignore errors. + } + + return detectedDevices, nil +} + +//WWN values NVMe and SCSI +func (d *Detect) wwnFallback(detectedDevice *models.Device) { + block, err := ghw.Block() + if err == nil { + for _, disk := range block.Disks { + if disk.Name == detectedDevice.DeviceName && strings.ToLower(disk.WWN) != "unknown" { + d.Logger.Debugf("Found matching block device. WWN: %s", disk.WWN) + detectedDevice.WWN = disk.WWN + break + } + } + } + + //no WWN found, or could not open Block devices. Either way, fallback to serial number + if len(detectedDevice.WWN) == 0 { + d.Logger.Debugf("WWN is empty, falling back to serial number: %s", detectedDevice.SerialNumber) + detectedDevice.WWN = detectedDevice.SerialNumber + } + + //wwn must always be lowercase. + detectedDevice.WWN = strings.ToLower(detectedDevice.WWN) +}