From 932b386c69c34145ac941c9b0b1885e32ecdd941 Mon Sep 17 00:00:00 2001 From: lingniu Date: Wed, 1 Jul 2026 13:40:25 +0800 Subject: [PATCH] fix: use frame protocol for metrics timing --- .../ingest/observability/IngestMetrics.java | 2 +- .../observability/IngestMetricsTest.java | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/modules/core/observability/src/main/java/com/lingniu/ingest/observability/IngestMetrics.java b/modules/core/observability/src/main/java/com/lingniu/ingest/observability/IngestMetrics.java index 8769c1c0..c9fa09b9 100644 --- a/modules/core/observability/src/main/java/com/lingniu/ingest/observability/IngestMetrics.java +++ b/modules/core/observability/src/main/java/com/lingniu/ingest/observability/IngestMetrics.java @@ -63,7 +63,7 @@ public class IngestMetrics implements IngestInterceptor, Ordered { Timer.Sample s = ctx.attr(ATTR_TIMER_SAMPLE); if (s != null) { - stopTimer(ctx, event.source() == null ? "unknown" : event.source().name()); + stopTimer(ctx, protocolTag(ctx)); } } diff --git a/modules/core/observability/src/test/java/com/lingniu/ingest/observability/IngestMetricsTest.java b/modules/core/observability/src/test/java/com/lingniu/ingest/observability/IngestMetricsTest.java index 85003585..cb44aa7d 100644 --- a/modules/core/observability/src/test/java/com/lingniu/ingest/observability/IngestMetricsTest.java +++ b/modules/core/observability/src/test/java/com/lingniu/ingest/observability/IngestMetricsTest.java @@ -1,6 +1,7 @@ package com.lingniu.ingest.observability; import com.lingniu.ingest.api.ProtocolId; +import com.lingniu.ingest.api.event.VehicleEvent; import com.lingniu.ingest.api.pipeline.IngestContext; import com.lingniu.ingest.api.pipeline.RawFrame; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; @@ -41,6 +42,28 @@ class IngestMetricsTest { .isEqualTo(1); } + @Test + void recordsFrameDurationAgainstTheFrameProtocolCapturedInBefore() { + SimpleMeterRegistry registry = new SimpleMeterRegistry(); + IngestMetrics metrics = new IngestMetrics(registry); + IngestContext context = new IngestContext("trace-4"); + + metrics.before(frame(ProtocolId.JT808), context); + metrics.after(new VehicleEvent.Heartbeat( + "event-1", + "VIN001", + ProtocolId.UNKNOWN, + Instant.parse("2026-07-01T00:00:01Z"), + Instant.parse("2026-07-01T00:00:02Z"), + "trace-4", + Map.of()), context); + + assertThat(registry.timer("ingest_frame_duration_seconds", "protocol", "JT808").count()) + .isEqualTo(1); + assertThat(registry.find("ingest_frame_duration_seconds").tag("protocol", "unknown").timer()) + .isNull(); + } + @Test void countsErrorsAsUnknownWhenThereIsNoFrameProtocolContext() { SimpleMeterRegistry registry = new SimpleMeterRegistry();