diff --git a/common/utils/MetricUtils.ts b/common/utils/MetricUtils.ts index 88b2c11..1132826 100644 --- a/common/utils/MetricUtils.ts +++ b/common/utils/MetricUtils.ts @@ -14,11 +14,18 @@ export function calculateMetric( defaultMsg: string = 'N/A' ): string { if (value !== undefined && count !== undefined) { - return `${(value / count / factor).toFixed(2)} ${unit}`; + return `${calculateMetricNumber(value, count, factor).toFixed(2)} ${unit}`; } return defaultMsg; } +export function calculateMetricNumber(value?: number, count?: number, factor: number = 1): number { + if (value !== undefined && count !== undefined && count !== 0 && factor !== 0) { + return value / count / factor; + } + return 0; +} + export function getTimeUnitFromAbbreviation(timeUnit: string): string { for (const [key, value] of Object.entries(TIME_UNIT_ABBREVIATION)) { if (value === timeUnit) { diff --git a/public/components/__snapshots__/app.test.tsx.snap b/public/components/__snapshots__/app.test.tsx.snap index d0b40c5..c4b70b7 100644 --- a/public/components/__snapshots__/app.test.tsx.snap +++ b/public/components/__snapshots__/app.test.tsx.snap @@ -570,7 +570,7 @@ exports[` spec renders the component 1`] = ` aria-live="polite" aria-sort="none" class="euiTableHeaderCell" - data-test-subj="tableHeaderCell_measurements_4" + data-test-subj="tableHeaderCell_measurements.latency_4" role="columnheader" scope="col" > @@ -595,7 +595,7 @@ exports[` spec renders the component 1`] = ` aria-live="polite" aria-sort="none" class="euiTableHeaderCell" - data-test-subj="tableHeaderCell_measurements_5" + data-test-subj="tableHeaderCell_measurements.cpu_5" role="columnheader" scope="col" > @@ -620,7 +620,7 @@ exports[` spec renders the component 1`] = ` aria-live="polite" aria-sort="none" class="euiTableHeaderCell" - data-test-subj="tableHeaderCell_measurements_6" + data-test-subj="tableHeaderCell_measurements.memory_6" role="columnheader" scope="col" > diff --git a/public/pages/QueryInsights/QueryInsights.tsx b/public/pages/QueryInsights/QueryInsights.tsx index 816bc5d..9fb3a3e 100644 --- a/public/pages/QueryInsights/QueryInsights.tsx +++ b/public/pages/QueryInsights/QueryInsights.tsx @@ -23,13 +23,16 @@ import { TOTAL_SHARDS, TYPE, } from '../../../common/constants'; -import { calculateMetric } from '../../../common/utils/MetricUtils'; +import { calculateMetric, calculateMetricNumber } from '../../../common/utils/MetricUtils'; import { parseDateString } from '../../../common/utils/DateUtils'; import { QueryInsightsDataSourceMenu } from '../../components/DataSourcePicker'; import { QueryInsightsDashboardsPluginStartDependencies } from '../../types'; const TIMESTAMP_FIELD = 'timestamp'; const MEASUREMENTS_FIELD = 'measurements'; +const LATENCY_FIELD = 'measurements.latency'; +const CPU_FIELD = 'measurements.cpu'; +const MEMORY_FIELD = 'measurements.memory'; const INDICES_FIELD = 'indices'; const SEARCH_TYPE_FIELD = 'search_type'; const NODE_ID_FIELD = 'node_id'; @@ -174,48 +177,51 @@ const QueryInsights = ({ truncateText: true, }, { - field: MEASUREMENTS_FIELD, + field: LATENCY_FIELD, name: LATENCY, - render: (measurements: SearchQueryRecord['measurements']) => { - return calculateMetric( - measurements?.latency?.number, - measurements?.latency?.count, - 'ms', - 1, - METRIC_DEFAULT_MSG + render: (latency: SearchQueryRecord['measurements']['latency']) => { + return calculateMetric(latency?.number, latency?.count, 'ms', 1, METRIC_DEFAULT_MSG); + }, + sortable: (query: SearchQueryRecord) => { + return calculateMetricNumber( + query.measurements?.latency?.number, + query.measurements?.latency?.count ); }, - sortable: true, truncateText: true, }, { - field: MEASUREMENTS_FIELD, + field: CPU_FIELD, name: CPU_TIME, - render: (measurements: SearchQueryRecord['measurements']) => { + render: (cpu: SearchQueryRecord['measurements']['cpu']) => { return calculateMetric( - measurements?.cpu?.number, - measurements?.cpu?.count, + cpu?.number, + cpu?.count, 'ms', 1000000, // Divide by 1,000,000 for CPU time METRIC_DEFAULT_MSG ); }, - sortable: true, + sortable: (query: SearchQueryRecord) => { + return calculateMetricNumber( + query.measurements?.cpu?.number, + query.measurements?.cpu?.count + ); + }, truncateText: true, }, { - field: MEASUREMENTS_FIELD, + field: MEMORY_FIELD, name: MEMORY_USAGE, - render: (measurements: SearchQueryRecord['measurements']) => { - return calculateMetric( - measurements?.memory?.number, - measurements?.memory?.count, - 'B', - 1, - METRIC_DEFAULT_MSG + render: (memory: SearchQueryRecord['measurements']['memory']) => { + return calculateMetric(memory?.number, memory?.count, 'B', 1, METRIC_DEFAULT_MSG); + }, + sortable: (query: SearchQueryRecord) => { + return calculateMetricNumber( + query.measurements?.memory?.number, + query.measurements?.memory?.count ); }, - sortable: true, truncateText: true, }, { @@ -379,6 +385,9 @@ const QueryInsights = ({ defaultFields: [ TIMESTAMP_FIELD, MEASUREMENTS_FIELD, + LATENCY_FIELD, + CPU_FIELD, + MEMORY_FIELD, INDICES_FIELD, SEARCH_TYPE_FIELD, NODE_ID_FIELD, diff --git a/public/pages/QueryInsights/__snapshots__/QueryInsights.test.tsx.snap b/public/pages/QueryInsights/__snapshots__/QueryInsights.test.tsx.snap index a310a4b..d59b253 100644 --- a/public/pages/QueryInsights/__snapshots__/QueryInsights.test.tsx.snap +++ b/public/pages/QueryInsights/__snapshots__/QueryInsights.test.tsx.snap @@ -527,7 +527,7 @@ exports[`QueryInsights Component renders the table with the correct columns and aria-live="polite" aria-sort="none" class="euiTableHeaderCell" - data-test-subj="tableHeaderCell_measurements_4" + data-test-subj="tableHeaderCell_measurements.latency_4" role="columnheader" scope="col" > @@ -552,7 +552,7 @@ exports[`QueryInsights Component renders the table with the correct columns and aria-live="polite" aria-sort="none" class="euiTableHeaderCell" - data-test-subj="tableHeaderCell_measurements_5" + data-test-subj="tableHeaderCell_measurements.cpu_5" role="columnheader" scope="col" > @@ -577,7 +577,7 @@ exports[`QueryInsights Component renders the table with the correct columns and aria-live="polite" aria-sort="none" class="euiTableHeaderCell" - data-test-subj="tableHeaderCell_measurements_6" + data-test-subj="tableHeaderCell_measurements.memory_6" role="columnheader" scope="col" >