From 64dfafaa1ead16042104240e6ad07f84e876a74b Mon Sep 17 00:00:00 2001 From: xingchen <1098756313@qq.com> Date: Fri, 25 Sep 2026 11:57:14 +0800 Subject: [PATCH] feat: add audit/window.go --- audit/window.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 audit/window.go diff --git a/audit/window.go b/audit/window.go new file mode 100644 index 0000000..2709686 --- /dev/null +++ b/audit/window.go @@ -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" +}