47 lines
949 B
Go
47 lines
949 B
Go
|
package hardware
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
|
||
|
"github.com/anatol/smart.go"
|
||
|
)
|
||
|
|
||
|
type HardDrive struct {
|
||
|
Name string
|
||
|
Transport string
|
||
|
Size string
|
||
|
Model string
|
||
|
Serial string
|
||
|
Type string
|
||
|
Temperature int
|
||
|
}
|
||
|
|
||
|
// Fetch the temperature of the device, optinally update the reference object
|
||
|
func (h *HardDrive) GetTemperature(updateTemp bool) int {
|
||
|
// Fetch the device by name
|
||
|
disk, err := smart.Open("/dev/" + h.Name)
|
||
|
if err != nil {
|
||
|
fmt.Printf("Failed to open device %s: %s\n", h.Name, err)
|
||
|
return -1
|
||
|
}
|
||
|
defer disk.Close()
|
||
|
|
||
|
// Fetch SMART data
|
||
|
smartInfo, err := disk.ReadGenericAttributes()
|
||
|
if err != nil {
|
||
|
fmt.Printf("Failed to get SMART data for %s: %s\n", h.Name, err)
|
||
|
return -1
|
||
|
}
|
||
|
|
||
|
// Parse the temperature
|
||
|
temperature := int(smartInfo.Temperature)
|
||
|
|
||
|
// Optionally update the reference object's temperature
|
||
|
if updateTemp {
|
||
|
h.Temperature = temperature
|
||
|
}
|
||
|
|
||
|
// Return the found value
|
||
|
return temperature
|
||
|
}
|