diff --git a/internal/collectors/battery.go b/internal/collectors/battery.go index 9f1676b..f3c6691 100644 --- a/internal/collectors/battery.go +++ b/internal/collectors/battery.go @@ -1 +1,62 @@ package collectors + +import ( + "bufio" + "log" + "os" + "strconv" +) + +func batteryCapacity() (capacity int) { + const filename string = "/sys/class/power_supply/BAT0/capacity" + var rawCapacity string + + file, err := os.Open(filename) + if err != nil { + log.Fatal(err) + } + defer file.Close() + + scanner := bufio.NewScanner(file) + + if scanner.Scan() { + rawCapacity = scanner.Text() + } + + if err := scanner.Err(); err != nil { + log.Fatal(err) + } + capacity, err = strconv.Atoi(rawCapacity) + if err != nil { + log.Fatal(err) + } + return capacity +} + +func batteryStatus() (status string) { + const filename string = "/sys/class/power_supply/BAT0/status" + + file, err := os.Open(filename) + if err != nil { + log.Fatal(err) + } + defer file.Close() + + scanner := bufio.NewScanner(file) + + if scanner.Scan() { + status = scanner.Text() + } + + if err := scanner.Err(); err != nil { + log.Fatal(err) + } + return status +} + +func batteryInfo() (capacity int, status string) { + const statusFile string = "/sys/class/power_supply/BAT0/status" + capacity = batteryCapacity() + status = batteryStatus() + return capacity, status +} diff --git a/internal/collectors/collector.go b/internal/collectors/collector.go index 20447d7..02ae269 100644 --- a/internal/collectors/collector.go +++ b/internal/collectors/collector.go @@ -17,6 +17,7 @@ type StatusInfo struct { func Collect() (*StatusInfo, error) { year, month, day, hour, minute, second := datetime() cpuLoad1, cpuLoad5, cpuLoad15 := cpuLoad() + capacity, status := batteryInfo() return &StatusInfo{ CPULoad1: cpuLoad1, CPULoad5: cpuLoad5, @@ -27,7 +28,7 @@ func Collect() (*StatusInfo, error) { Hour: hour, Minute: minute, Second: second, - BatteryPercent: 100, - BatteryStatus: "Charging", + BatteryPercent: capacity, + BatteryStatus: status, }, nil } diff --git a/internal/output/stdout.go b/internal/output/stdout.go index 4398099..459075f 100644 --- a/internal/output/stdout.go +++ b/internal/output/stdout.go @@ -7,7 +7,9 @@ import ( func Print(c *collectors.StatusInfo) { fmt.Printf( - "LOAD: %.2f %.2f %.2f | %d-%02d-%02d %02d:%02d\n", + "BAT: %d%% (%s) | LOAD: %.2f %.2f %.2f | %d-%02d-%02d %02d:%02d\n", + c.BatteryPercent, + c.BatteryStatus, c.CPULoad1, c.CPULoad5, c.CPULoad15,