56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package utils
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/fiskerinc/cloud-services/pkg/logger"
|
|
"github.com/rs/zerolog"
|
|
)
|
|
|
|
var (
|
|
outOfOrderSignalMap = make(map[string]uint)
|
|
outOfOrderVINMap = make(map[string]uint)
|
|
outOfOrderCount uint = 0
|
|
outOfOrderLogDelay = time.Hour
|
|
outOfOrderTime = time.Now().UTC()
|
|
)
|
|
|
|
// This function is for aggregating and logging out of order incoming messages
|
|
func LogOutOfOrderMsg(signal string, VIN string) {
|
|
_, ok := outOfOrderSignalMap[signal]
|
|
if !ok {
|
|
outOfOrderSignalMap[signal] = 0
|
|
}
|
|
outOfOrderSignalMap[signal] += 1
|
|
|
|
_, ok = outOfOrderVINMap[VIN]
|
|
if !ok {
|
|
outOfOrderVINMap[VIN] = 0
|
|
}
|
|
outOfOrderVINMap[VIN] += 1
|
|
outOfOrderCount += 1
|
|
|
|
if time.Since(outOfOrderTime) > outOfOrderLogDelay {
|
|
|
|
signalDict := zerolog.Dict()
|
|
for k, v := range outOfOrderSignalMap {
|
|
signalDict.Uint(k, v)
|
|
}
|
|
vinDict := zerolog.Dict()
|
|
for k, v := range outOfOrderVINMap {
|
|
vinDict.Uint(k, v)
|
|
}
|
|
|
|
logger.Warn().Dict(
|
|
"Signals", signalDict,
|
|
).Dict(
|
|
"VINs", vinDict,
|
|
).Msgf("Received Out of Order Data! %d out-of-order messages", outOfOrderCount)
|
|
|
|
outOfOrderCount = 0
|
|
outOfOrderTime = time.Now().UTC()
|
|
clear(outOfOrderSignalMap)
|
|
clear(outOfOrderVINMap)
|
|
}
|
|
}
|