/api/data now returns stale and server_time
This commit is contained in:
parent
a4ff3a87c1
commit
c9ffe85d54
28
main.go
28
main.go
|
|
@ -35,7 +35,7 @@ import (
|
||||||
//go:embed static
|
//go:embed static
|
||||||
var embeddedStaticFiles embed.FS
|
var embeddedStaticFiles embed.FS
|
||||||
|
|
||||||
const version = "1.0.2"
|
const version = "1.0.3"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
// Config structs
|
// Config structs
|
||||||
|
|
@ -467,6 +467,8 @@ type APIState struct {
|
||||||
ImbalancePercent float32 `json:"imbalance_percent"`
|
ImbalancePercent float32 `json:"imbalance_percent"`
|
||||||
BiasPercent float32 `json:"bias_percent"`
|
BiasPercent float32 `json:"bias_percent"`
|
||||||
LastUpdate string `json:"last_update"`
|
LastUpdate string `json:"last_update"`
|
||||||
|
ServerTime string `json:"server_time"`
|
||||||
|
Stale bool `json:"stale"`
|
||||||
DroppedSamples uint64 `json:"dropped_samples"`
|
DroppedSamples uint64 `json:"dropped_samples"`
|
||||||
DroppedEvents uint64 `json:"dropped_events"`
|
DroppedEvents uint64 `json:"dropped_events"`
|
||||||
}
|
}
|
||||||
|
|
@ -927,6 +929,18 @@ func getConfigSnapshot() Config {
|
||||||
return cfg
|
return cfg
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func staleThreshold() time.Duration {
|
||||||
|
pollMs := getConfigSnapshot().PLC.PollMs
|
||||||
|
if pollMs <= 0 {
|
||||||
|
pollMs = 500
|
||||||
|
}
|
||||||
|
staleMs := pollMs * 4
|
||||||
|
if staleMs < 2500 {
|
||||||
|
staleMs = 2500
|
||||||
|
}
|
||||||
|
return time.Duration(staleMs) * time.Millisecond
|
||||||
|
}
|
||||||
|
|
||||||
func hotReloadSectionsLocked(dst *Config, src Config) {
|
func hotReloadSectionsLocked(dst *Config, src Config) {
|
||||||
dst.Thresholds = src.Thresholds
|
dst.Thresholds = src.Thresholds
|
||||||
dst.Trend = src.Trend
|
dst.Trend = src.Trend
|
||||||
|
|
@ -1092,10 +1106,17 @@ func snapshotState() APIState {
|
||||||
state.RLock()
|
state.RLock()
|
||||||
defer state.RUnlock()
|
defer state.RUnlock()
|
||||||
|
|
||||||
|
now := time.Now()
|
||||||
lastUpdate := ""
|
lastUpdate := ""
|
||||||
if !state.LastUpdate.IsZero() {
|
if !state.LastUpdate.IsZero() {
|
||||||
lastUpdate = state.LastUpdate.Format(time.RFC3339Nano)
|
lastUpdate = state.LastUpdate.Format(time.RFC3339Nano)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
stale := false
|
||||||
|
if state.Connected && !state.LastUpdate.IsZero() {
|
||||||
|
stale = now.Sub(state.LastUpdate) > staleThreshold()
|
||||||
|
}
|
||||||
|
|
||||||
return APIState{
|
return APIState{
|
||||||
Connected: state.Connected,
|
Connected: state.Connected,
|
||||||
SilaL: state.SilaL,
|
SilaL: state.SilaL,
|
||||||
|
|
@ -1107,6 +1128,8 @@ func snapshotState() APIState {
|
||||||
ImbalancePercent: state.ImbalancePercent,
|
ImbalancePercent: state.ImbalancePercent,
|
||||||
BiasPercent: state.BiasPercent,
|
BiasPercent: state.BiasPercent,
|
||||||
LastUpdate: lastUpdate,
|
LastUpdate: lastUpdate,
|
||||||
|
ServerTime: now.Format(time.RFC3339Nano),
|
||||||
|
Stale: stale,
|
||||||
DroppedSamples: state.DroppedSamples,
|
DroppedSamples: state.DroppedSamples,
|
||||||
DroppedEvents: state.DroppedEvents,
|
DroppedEvents: state.DroppedEvents,
|
||||||
}
|
}
|
||||||
|
|
@ -2753,7 +2776,8 @@ func main() {
|
||||||
IdleTimeout: 60 * time.Second,
|
IdleTimeout: 60 * time.Second,
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Printf("Listening on http://localhost%s", cfg.Server.ListenAddr)
|
log.Printf("Listening address: %s", cfg.Server.ListenAddr)
|
||||||
|
log.Printf("Open locally: http://localhost%s", cfg.Server.ListenAddr)
|
||||||
log.Printf("License API: GET /api/license/status | GET /api/license/request | POST /api/license/activate")
|
log.Printf("License API: GET /api/license/status | GET /api/license/request | POST /api/license/activate")
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue