Track consecutive same vs different sequence numbers
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
53
main.go
53
main.go
@@ -33,11 +33,13 @@ type App struct {
|
|||||||
sacnTargets map[uint16][]*net.UDPAddr
|
sacnTargets map[uint16][]*net.UDPAddr
|
||||||
debug bool
|
debug bool
|
||||||
|
|
||||||
inputMu sync.Mutex
|
inputMu sync.Mutex
|
||||||
inputBySrc map[string]uint64
|
inputBySrc map[string]uint64
|
||||||
inputByUniv map[string]uint64
|
inputByUniv map[string]uint64
|
||||||
inputByName map[string]uint64
|
inputByName map[string]uint64
|
||||||
inputSeqCounts map[string]map[uint8]uint64
|
inputLastSeq map[string]uint8
|
||||||
|
inputSeqSame map[string]uint64
|
||||||
|
inputSeqDiff map[string]uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@@ -153,11 +155,13 @@ func main() {
|
|||||||
engine: engine,
|
engine: engine,
|
||||||
artTargets: artTargets,
|
artTargets: artTargets,
|
||||||
sacnTargets: sacnTargets,
|
sacnTargets: sacnTargets,
|
||||||
debug: *debug,
|
debug: *debug,
|
||||||
inputBySrc: map[string]uint64{},
|
inputBySrc: map[string]uint64{},
|
||||||
inputByUniv: map[string]uint64{},
|
inputByUniv: map[string]uint64{},
|
||||||
inputByName: map[string]uint64{},
|
inputByName: map[string]uint64{},
|
||||||
inputSeqCounts: map[string]map[uint8]uint64{},
|
inputLastSeq: map[string]uint8{},
|
||||||
|
inputSeqSame: map[string]uint64{},
|
||||||
|
inputSeqDiff: map[string]uint64{},
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create ArtNet receiver if enabled
|
// Create ArtNet receiver if enabled
|
||||||
@@ -287,10 +291,14 @@ func (a *App) HandleSACN(src *net.UDPAddr, pkt *sacn.DataPacket) {
|
|||||||
a.inputBySrc[src.IP.String()]++
|
a.inputBySrc[src.IP.String()]++
|
||||||
a.inputByUniv[univKey]++
|
a.inputByUniv[univKey]++
|
||||||
a.inputByName[pkt.SourceName]++
|
a.inputByName[pkt.SourceName]++
|
||||||
if a.inputSeqCounts[univKey] == nil {
|
if lastSeq, ok := a.inputLastSeq[univKey]; ok {
|
||||||
a.inputSeqCounts[univKey] = map[uint8]uint64{}
|
if pkt.Sequence == lastSeq {
|
||||||
|
a.inputSeqSame[univKey]++
|
||||||
|
} else {
|
||||||
|
a.inputSeqDiff[univKey]++
|
||||||
|
}
|
||||||
}
|
}
|
||||||
a.inputSeqCounts[univKey][pkt.Sequence]++
|
a.inputLastSeq[univKey] = pkt.Sequence
|
||||||
a.inputMu.Unlock()
|
a.inputMu.Unlock()
|
||||||
|
|
||||||
u := config.Universe{Protocol: config.ProtocolSACN, Number: pkt.Universe}
|
u := config.Universe{Protocol: config.ProtocolSACN, Number: pkt.Universe}
|
||||||
@@ -356,11 +364,13 @@ func (a *App) printStats() {
|
|||||||
inputBySrc := a.inputBySrc
|
inputBySrc := a.inputBySrc
|
||||||
inputByUniv := a.inputByUniv
|
inputByUniv := a.inputByUniv
|
||||||
inputByName := a.inputByName
|
inputByName := a.inputByName
|
||||||
inputSeqCounts := a.inputSeqCounts
|
inputSeqSame := a.inputSeqSame
|
||||||
|
inputSeqDiff := a.inputSeqDiff
|
||||||
a.inputBySrc = map[string]uint64{}
|
a.inputBySrc = map[string]uint64{}
|
||||||
a.inputByUniv = map[string]uint64{}
|
a.inputByUniv = map[string]uint64{}
|
||||||
a.inputByName = map[string]uint64{}
|
a.inputByName = map[string]uint64{}
|
||||||
a.inputSeqCounts = map[string]map[uint8]uint64{}
|
a.inputSeqSame = map[string]uint64{}
|
||||||
|
a.inputSeqDiff = map[string]uint64{}
|
||||||
a.inputMu.Unlock()
|
a.inputMu.Unlock()
|
||||||
|
|
||||||
if len(inputBySrc) > 0 {
|
if len(inputBySrc) > 0 {
|
||||||
@@ -378,18 +388,11 @@ func (a *App) printStats() {
|
|||||||
if len(inputByUniv) > 0 {
|
if len(inputByUniv) > 0 {
|
||||||
log.Printf("[stats] input by universe (last 10s):")
|
log.Printf("[stats] input by universe (last 10s):")
|
||||||
for univ, count := range inputByUniv {
|
for univ, count := range inputByUniv {
|
||||||
log.Printf("[stats] %s: %d packets", univ, count)
|
same := inputSeqSame[univ]
|
||||||
|
diff := inputSeqDiff[univ]
|
||||||
|
log.Printf("[stats] %s: %d packets (seq same=%d diff=%d)", univ, count, same, diff)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for univ, seqs := range inputSeqCounts {
|
|
||||||
var duplicates uint64
|
|
||||||
for _, count := range seqs {
|
|
||||||
if count > 1 {
|
|
||||||
duplicates += count - 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
log.Printf("[stats] %s: %d unique seqs, %d duplicates", univ, len(seqs), duplicates)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(a.cfg.Mappings) == 0 {
|
if len(a.cfg.Mappings) == 0 {
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user