75 lines
1.2 KiB
Go
75 lines
1.2 KiB
Go
|
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()
|
||
|
}
|