69 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
package hddtemp
 | 
						|
 | 
						|
import (
 | 
						|
	"bytes"
 | 
						|
	"io"
 | 
						|
	"net"
 | 
						|
	"strconv"
 | 
						|
	"strings"
 | 
						|
)
 | 
						|
 | 
						|
type Disk struct {
 | 
						|
	DeviceName  string
 | 
						|
	Model       string
 | 
						|
	Temperature int32
 | 
						|
	Unit        string
 | 
						|
	Status      string
 | 
						|
}
 | 
						|
 | 
						|
type hddtemp struct {
 | 
						|
}
 | 
						|
 | 
						|
func New() *hddtemp {
 | 
						|
	return &hddtemp{}
 | 
						|
}
 | 
						|
 | 
						|
func (h *hddtemp) Fetch(address string) ([]Disk, error) {
 | 
						|
	var (
 | 
						|
		err    error
 | 
						|
		conn   net.Conn
 | 
						|
		buffer bytes.Buffer
 | 
						|
		disks  []Disk
 | 
						|
	)
 | 
						|
 | 
						|
	if conn, err = net.Dial("tcp", address); err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	if _, err = io.Copy(&buffer, conn); err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	fields := strings.Split(buffer.String(), "|")
 | 
						|
 | 
						|
	for index := 0; index < len(fields)/5; index++ {
 | 
						|
		status := ""
 | 
						|
		offset := index * 5
 | 
						|
		device := fields[offset+1]
 | 
						|
		device = device[strings.LastIndex(device, "/")+1:]
 | 
						|
 | 
						|
		temperatureField := fields[offset+3]
 | 
						|
		temperature, err := strconv.ParseInt(temperatureField, 10, 32)
 | 
						|
 | 
						|
		if err != nil {
 | 
						|
			temperature = 0
 | 
						|
			status = temperatureField
 | 
						|
		}
 | 
						|
 | 
						|
		disks = append(disks, Disk{
 | 
						|
			DeviceName:  device,
 | 
						|
			Model:       fields[offset+2],
 | 
						|
			Temperature: int32(temperature),
 | 
						|
			Unit:        fields[offset+4],
 | 
						|
			Status:      status,
 | 
						|
		})
 | 
						|
	}
 | 
						|
 | 
						|
	return disks, nil
 | 
						|
}
 |