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,
})),