83 lines
1.6 KiB
Go
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() {
|
|
}
|