This is an automated email from the ASF dual-hosted git repository.

lizhimins pushed a commit to branch rocketmq-studio
in repository https://gitbox.apache.org/repos/asf/rocketmq-dashboard.git


The following commit(s) were added to refs/heads/rocketmq-studio by this push:
     new f998690c2 fix(metrics): exclude blank scalar samples from diagnostics 
(#6434)
f998690c2 is described below

commit f998690c2a8af337c12b8bfa8edb513c48078177
Author: Loyal-Young <[email protected]>
AuthorDate: Thu Oct 15 18:10:19 2026 +0800

    fix(metrics): exclude blank scalar samples from diagnostics (#6434)
---
 web/src/utils/metricsExplorerDiagnostics.test.ts | 57 ++++++++++++++++++++++++
 web/src/utils/metricsExplorerDiagnostics.ts      |  2 +-
 2 files changed, 58 insertions(+), 1 deletion(-)

diff --git a/web/src/utils/metricsExplorerDiagnostics.test.ts 
b/web/src/utils/metricsExplorerDiagnostics.test.ts
index 3488ddc42..90936ec67 100644
--- a/web/src/utils/metricsExplorerDiagnostics.test.ts
+++ b/web/src/utils/metricsExplorerDiagnostics.test.ts
@@ -91,6 +91,63 @@ const createHistoryEntry = (
   });
 
 describe('metrics explorer diagnostics', () => {
+  it('doesNotInventZeroMeasurementsForBlankScalarSamplesTest', () => {
+    const data: MetricData = {
+      resultType: 'matrix',
+      warnings: [],
+      series: [
+        {
+          labels: { instance: 'broker-a' },
+          histograms: [],
+          values: [
+            { timestamp: 1, value: '0' },
+            { timestamp: 2, value: ' -1.25e2 ' },
+            { timestamp: 3, value: '' },
+            { timestamp: 4, value: ' \t\n ' },
+          ],
+        },
+      ],
+    };
+    expect(
+      toMetricSeriesSamples(data.series[0]).samples.map(({ timestamp, value }) 
=> ({
+        timestamp,
+        value,
+      })),
+    ).toEqual([
+      { timestamp: 1, value: 0 },
+      { timestamp: 2, value: -125 },
+    ]);
+    expect(summarizeMetricData(data)).toMatchObject({
+      sampleCount: 2,
+      scalarSampleCount: 2,
+      latestTimestamp: 2,
+    });
+    expect(buildMetricSeriesDetailRows(data, metric)[0]).toMatchObject({
+      sampleCount: 2,
+      latestTimestamp: 2,
+      latestValue: -125,
+    });
+    expect(
+      buildMetricCsvRows(data, metric, { profileName: 'test', sourceName: 
'test' }).map(
+        (row) => row.value,
+      ),
+    ).toEqual([0, -125]);
+  });
+
+  it('keepsABlankOnlyScalarSeriesUnavailableTest', () => {
+    const data: MetricData = {
+      resultType: 'matrix',
+      warnings: [],
+      series: [{ labels: {}, histograms: [], values: [{ timestamp: 1, value: ' 
' }] }],
+    };
+    expect(toMetricSeriesSamples(data.series[0]).samples).toEqual([]);
+    expect(summarizeMetricData(data)).toMatchObject({ visibleSeriesCount: 0, 
sampleCount: 0 });
+    expect(buildMetricSeriesDetailRows(data, 
metric)[0].latestValue).toBeUndefined();
+    expect(buildMetricCsvRows(data, metric, { profileName: 'test', sourceName: 
'test' })).toEqual(
+      [],
+    );
+  });
+
   it('preserves both sample kinds in a mixed Prometheus matrix series', () => {
     const data: MetricData = {
       resultType: 'matrix',
diff --git a/web/src/utils/metricsExplorerDiagnostics.ts 
b/web/src/utils/metricsExplorerDiagnostics.ts
index d8b18ffce..7dafacd1e 100644
--- a/web/src/utils/metricsExplorerDiagnostics.ts
+++ b/web/src/utils/metricsExplorerDiagnostics.ts
@@ -179,7 +179,7 @@ const toScalarSamples = (series: MetricSeries): 
NumericMetricSample[] =>
   sortMetricSamples(
     series.values.map((sample, index) => ({
       timestamp: sample.timestamp,
-      value: Number(sample.value),
+      value: finiteNumber(sample.value) ?? Number.NaN,
       kind: 'scalar',
       index,
     })),

Reply via email to