Files
iotlcm/worker-svr/internal/fullsync/supply/validation.go

28 lines
1.1 KiB
Go

package supply
// Valid checks only telemetry. Callers must degrade invalid observations without
// rejecting the business run or its archive.
func (s Snapshot) Valid() bool {
if s.SchemaVersion != 1 || s.ResolutionMS != 1000 || s.Summary.Targets < 0 || s.Summary.Valid < 0 || s.Summary.Valid > s.Summary.Targets || s.Summary.Confirmed < 0 || s.Summary.Confirmed > s.Summary.Targets || s.Summary.Unknown < 0 || s.Summary.Unknown > s.Summary.Targets || s.Summary.TotalMS < 0 || s.Summary.LongestMS < 0 || s.Summary.UnknownMS < 0 || s.Summary.UnconfirmedMS < 0 || s.Summary.ConsumerMS < 0 {
return false
}
seen := make(map[string]bool, len(s.Channels))
for _, c := range s.Channels {
if c.Key == "" || seen[c.Key] || c.ValidSamples < 0 || c.MissingSamples < 0 || c.UnknownMS < 0 {
return false
}
seen[c.Key] = true
for _, w := range []Wait{c.Startup, c.Confirmed, c.Unconfirmed, c.Consumer} {
if w.Count < 0 || w.TotalMS < 0 || w.LongestMS < 0 || w.LongestMS > w.TotalMS {
return false
}
}
for _, v := range c.Stages {
if v < 0 {
return false
}
}
}
return len(s.Channels) <= s.Summary.Targets
}