statman/main.go

75 lines
1.2 KiB
Go
Raw Normal View History

2024-10-15 17:48:40 +00:00
package main
import (
"log"
"os"
"os/exec"
"strings"
"sync"
"time"
)
const (
step int64 = 100
spacer string = " "
)
var (
stop bool = false
statusList []string
)
func statusRoutine(script Script, statusListIndex int, wg *sync.WaitGroup) {
defer wg.Done()
for !stop {
cmd := exec.Command(script.Filepath, script.Args...)
stdout, err := cmd.Output()
if err != nil {
log.Println(err)
} else {
statusList[statusListIndex] = strings.Trim(string(stdout), "\n")
}
time.Sleep(time.Duration(script.Frequency) * time.Millisecond)
}
}
func statusCache(wg *sync.WaitGroup) {
defer wg.Done()
for !stop {
output := ""
for _, status := range statusList {
output += status + spacer
}
// log.Println(output)
err := os.WriteFile("/home/xoy/.cache/statman.out", []byte(output), 0666)
if err != nil {
log.Fatal(err)
}
time.Sleep(10 * time.Millisecond)
}
}
func main() {
var wg sync.WaitGroup
err, config := LoadConfig()
if err != nil {
log.Fatal(err)
}
statusList = make([]string, len(config.Scripts))
wg.Add(len(config.Scripts) + 1)
for i, script := range config.Scripts {
go statusRoutine(script, i, &wg)
}
go statusCache(&wg)
wg.Wait()
}