package main import ( "encoding/csv" "fmt" "log" "os" "runtime" "strconv" "strings" "time" ) func readTemp() string { temperatureFilePath := "/sys/class/hwmon/hwmon6/temp1_input" f, err := os.ReadFile(temperatureFilePath) if err != nil { log.Fatal(err) } //defer f.Close() tempFloat, err := strconv.ParseFloat(strings.Fields(string(f))[0], 32) if err != nil { log.Fatal(err) } tempFloat = tempFloat / 1000 return string(fmt.Sprintf("%f", tempFloat)) } func writeCsv(temp string, load string) { // Input: temp, load // Result: write data to CSV file t := time.Now() timestamp := t.Unix() targetFile := "lin_temp_mon.csv" fmt.Println(temp, load, timestamp) targetArr := []string{strconv.FormatInt(timestamp, 10), load, temp} f, err := os.OpenFile(targetFile, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644) if err != nil { log.Fatal("Error: ", err) return } w := csv.NewWriter(f) err = w.Write(targetArr) if err != nil { log.Fatal("Error: ", err) return } w.Flush() f.Close() } func getPerCPU() string { loadavgFile := "/proc/loadavg" nproc := float64(runtime.NumCPU()) loadAvgRaw, err := os.ReadFile(loadavgFile) if err != nil { log.Fatal(err) } //defer loadAvgRaw.Close() loadAvgCur, err := strconv.ParseFloat(strings.Fields(string(loadAvgRaw))[0], 32) loadPerCpu := loadAvgCur / nproc return string(fmt.Sprintf("%f", loadPerCpu)) } func main() { // Timestamp, LA, Temp writeCsv(readTemp(), getPerCPU()) }