incorporate observer interface into components

This commit is contained in:
Jay
2026-05-19 21:20:00 -04:00
parent ce0b13e914
commit 30e9881dae
7 changed files with 118 additions and 78 deletions
+19
View File
@@ -0,0 +1,19 @@
// Package observer defines the contract for collecting peer-level statistics.
package observer
// Observer is the interface through which add-ons report statistics.
// Add-ons should call Record() with a peer ID and a typed event when
// significant events occur. The event parameter is expected to be a
// domain-specific struct defined in the add-on's package.
type Observer interface {
// Record reports a statistic event for a given peer.
// The event parameter contains the domain-specific details.
Record(peerID string, event any)
}
// NullObserver is a null implementation of Observer that does nothing.
// It is used when no actual statistics collector is wired in.
type NullObserver struct{}
// Record implements Observer for NullObserver, doing nothing.
func (NullObserver) Record(_ string, _ any) {}
+17
View File
@@ -0,0 +1,17 @@
package observer
import (
"testing"
)
func TestNullObserver(t *testing.T) {
// Test that NullObserver implements the Observer interface
var _ Observer = NullObserver{}
// Test that calling Record doesn't panic or crash
sink := NullObserver{}
sink.Record("peer1", "test event")
sink.Record("", nil)
// Test that it's a no-op (no assertions needed since it does nothing)
}