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"
>