2025-02-11 10:24:57 +01:00

83 lines
1.6 KiB
Go

package tsmq
import (
"log"
"time"
"strconv"
"encoding/json"
"tsm/config"
"tsm/mqtt"
"github.com/beevik/ntp"
)
type variable_t struct {
Label string `json:"label"`
Variable string `json:"variable"`
Value string `json:"value"`
Unit string `json:"unit"`
Status string `json:"status"`
}
type message_t struct {
Device string `json:"device"`
Label string `json:"label"`
Variables map[string]variable_t `json:"variables"`
}
func Start() {
for {
for _, server := range config.Config.Servers {
log.Println("Polling server " + server.Name)
message := message_t {
Device: server.Name,
Label: server.Label,
Variables: make(map[string]variable_t),
}
status := "Ok"
rootdisp := 0.0
stratum := 0
resp, err := ntp.Query(server.Name)
if err != nil {
status = "Error"
} else {
rootdisp = resp.RootDispersion.Seconds() * 1000
stratum = int(resp.Stratum)
}
message.Variables["rootdisp"] = variable_t {
Label: "rootdisp",
Variable: "",
Value: strconv.FormatFloat(rootdisp, 'f', 4, 64),
Unit: "ms",
Status: status,
}
message.Variables["stratum"] = variable_t {
Label: "stratum",
Variable: "",
Value: strconv.Itoa(stratum),
Unit: "ms",
Status: status,
}
j, err := json.Marshal(message)
if err != nil {
log.Printf("Unable to marshal message, it is lost: %s, %v", message, err)
} else {
mqtt.Publish(j)
}
}
time.Sleep(time.Duration(config.Config.Interval) * time.Second)
}
}
func Stop() {
}