Commit 657679e

Karn Wong <[email protected]>
2025-09-29 13:16:19
feat(getSmart): add sata
1 parent 8a69149
Changed files (1)
internal
internal/get/smart.go
@@ -10,28 +10,48 @@ import (
 	"github.com/shirou/gopsutil/v4/disk"
 )
 
+func nvmeSmart(device string) error {
+	var err error
+	dev, err := smart.OpenNVMe(device)
+	if err != nil {
+		return err
+	} else {
+		sm, err := dev.ReadSMART()
+		if err != nil {
+			return err
+		}
+		fmt.Printf("%s: %v\n", color.Green("Percent Used"), sm.PercentUsed)
+
+		return nil
+	}
+}
+
+func sataSmart(device string) error {
+	var err error
+	dev, err := smart.OpenSata(device)
+	if err != nil {
+		return err
+	} else {
+		sm, err := dev.ReadSMARTData()
+		if err != nil {
+			return err
+		}
+		fmt.Printf("%s: %v\n", color.Green("Media Wearout Indicator"), sm.Attrs[230].Current)
+
+		return nil
+	}
+}
+
 func Smart() {
 	if runtime.GOOS == "linux" {
 		device := getRootDiskVolume()
 
-		isNvme := true
-		dev, err := smart.OpenNVMe(device)
+		err := nvmeSmart(device)
 		if err != nil {
-			log.Fatal().Err(err).Msgf("Failed to open %s device. You probaby have to run as sudo", device)
-		}
-		defer func(dev smart.Device) {
-			err = dev.Close()
-			if err != nil {
-				log.Fatal().Err(err).Msgf("Failed to close %s device", device)
-			}
-		}(dev)
-
-		if isNvme {
-			sm, err := dev.ReadSMART()
+			err = sataSmart(device)
 			if err != nil {
-				log.Fatal().Msg("Failed to read SMART info")
+				log.Error().Err(err).Msg("Unrecognized device type. It's not NVME or SATA, or you didn't run as sudo")
 			}
-			fmt.Printf("%s: %v\n", color.Green("Percent Used"), sm.PercentUsed)
 		}
 	} else {
 		log.Error().Msgf("%s is not supported\n", runtime.GOOS)