feat: add audit/window.go
This commit is contained in:
23
audit/window.go
Normal file
23
audit/window.go
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
package audit
|
||||||
|
|
||||||
|
type Window struct {
|
||||||
|
Last uint16
|
||||||
|
HasLast bool
|
||||||
|
Summary Summary
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *Window) Observe(sequence uint16) string {
|
||||||
|
if !w.HasLast {
|
||||||
|
w.Last, w.HasLast = sequence, true
|
||||||
|
w.Summary.Accepted++
|
||||||
|
w.Summary.Latest = sequence
|
||||||
|
return "accepted"
|
||||||
|
}
|
||||||
|
delta := uint16(sequence - w.Last)
|
||||||
|
if delta == 0 { w.Summary.Duplicate++; return "duplicate" }
|
||||||
|
if delta > 32767 { w.Summary.Reordered++; return "reordered" }
|
||||||
|
if delta > 1 { w.Summary.Lost += uint64(delta - 1) }
|
||||||
|
w.Last, w.Summary.Latest = sequence, sequence
|
||||||
|
w.Summary.Accepted++
|
||||||
|
return "accepted"
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user