feat(go): expose bridge batch pressure metrics

This commit is contained in:
lingniu
2026-07-03 18:58:37 +08:00
parent 16ee09180c
commit 018015f9de
6 changed files with 97 additions and 0 deletions

View File

@@ -91,6 +91,49 @@ func TestBridgeBatchRecordsMetrics(t *testing.T) {
}
}
func TestBridgeBatchExposesPendingAndDurationMetrics(t *testing.T) {
env := envelope.FrameEnvelope{Protocol: envelope.ProtocolGB32960, VIN: "VIN001", MessageID: "0x02"}
payload, err := json.Marshal(env)
if err != nil {
t.Fatal(err)
}
registry := metrics.NewRegistry()
writer := &recordingBridgeWriter{
onWrite: func() {
text := registry.Render()
for _, want := range []string{
`vehicle_bridge_batch_pending_messages 2`,
`vehicle_bridge_batch_pending_kafka_messages 2`,
} {
if !strings.Contains(text, want) {
t.Fatalf("pending bridge metric missing %s during write:\n%s", want, text)
}
}
},
}
err = bridgeBatch(context.Background(), registry, writer, []bridgeMessage{
{subject: "vehicle.raw.go.gb32960.v1", data: payload, ack: func() error { return nil }},
{subject: "vehicle.raw.go.gb32960.v1", data: payload, ack: func() error { return nil }},
}, map[string]string{"vehicle.raw.go.gb32960.v1": "vehicle.raw.go.gb32960.v1"})
if err != nil {
t.Fatalf("bridgeBatch() error = %v", err)
}
text := registry.Render()
for _, want := range []string{
`vehicle_bridge_batch_pending_messages 0`,
`vehicle_bridge_batch_pending_kafka_messages 0`,
`vehicle_bridge_batch_duration_ms_histogram_bucket{le="+Inf",status="ok"} 1`,
`vehicle_bridge_batch_duration_ms_histogram_count{status="ok"} 1`,
`vehicle_bridge_batch_duration_ms_histogram_sum{status="ok"}`,
} {
if !strings.Contains(text, want) {
t.Fatalf("bridge batch metric missing %s:\n%s", want, text)
}
}
}
func TestRecordNATSConsumerInfoMetrics(t *testing.T) {
registry := metrics.NewRegistry()
cfg := config{NATSStream: "VEHICLE_INGEST", NATSDurable: "vehicle-kafka-bridge"}
@@ -148,9 +191,13 @@ func TestLoadConfigIncludesUnifiedOnlyWhenExplicitlyConfigured(t *testing.T) {
type recordingBridgeWriter struct {
messages []kafka.Message
err error
onWrite func()
}
func (w *recordingBridgeWriter) WriteMessages(_ context.Context, messages ...kafka.Message) error {
if w.onWrite != nil {
w.onWrite()
}
if w.err != nil {
return w.err
}