diff --git a/ui/src/features/common/analysis-modal/transforms.test.ts b/ui/src/features/common/analysis-modal/transforms.test.ts index e3750a498f..5326e74ebc 100644 --- a/ui/src/features/common/analysis-modal/transforms.test.ts +++ b/ui/src/features/common/analysis-modal/transforms.test.ts @@ -24,7 +24,8 @@ import { metricStatusLabel, metricSubstatus, printableCloudWatchQuery, - printableDatadogQuery + printableDatadogQuery, + transformMeasurements } from './transforms'; import { AnalysisStatus, FunctionalStatus } from './types'; @@ -559,4 +560,19 @@ describe('analysis modal transforms', () => { tableValue: { latency: null, cpuUsage: null } }); }); + + test('transformMeasurements() with a plain, non-JSON string measurement value', () => { + expect(transformMeasurements([], [{ value: 'kargo' }])).toEqual({ + chartable: false, + min: 0, + max: null, + measurements: [ + { + value: 'kargo', + chartValue: undefined, + tableValue: 'kargo' + } + ] + }); + }); }); diff --git a/ui/src/features/common/analysis-modal/transforms.ts b/ui/src/features/common/analysis-modal/transforms.ts index 046ef4f86e..72953d15c6 100644 --- a/ui/src/features/common/analysis-modal/transforms.ts +++ b/ui/src/features/common/analysis-modal/transforms.ts @@ -783,7 +783,17 @@ const transformMeasurementValue = ( }; } - const parsedValue = JSON.parse(value); + let parsedValue; + try { + parsedValue = JSON.parse(value); + } catch { + // providers such as web can return a plain, non-JSON string (e.g. "ok") -- + // display it as-is rather than failing to render the measurement + return { + canChart: false, + tableValue: value + }; + } // single number measurement value if (isFiniteNumber(parsedValue)) {