Skip to content

Commit 956c0ff

Browse files
committed
Address review comments
Signed-off-by: Siddhant Deshmukh <[email protected]>
1 parent 7336988 commit 956c0ff

File tree

8 files changed

+95
-65
lines changed

8 files changed

+95
-65
lines changed

common/constants.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
export const TIMESTAMP = 'Timestamp';
77
export const TYPE = 'Type';
8-
export const QUERY_HASHCODE = 'Query Hashcode';
8+
export const QUERY_GROUP_HASHCODE = 'Query Hashcode';
99
export const QUERY_COUNT = 'Query Count';
1010
export const LATENCY = 'Latency';
1111
export const CPU_TIME = 'CPU Time';
@@ -15,3 +15,6 @@ export const SEARCH_TYPE = 'Search type';
1515
export const NODE_ID = 'Coordinator node ID';
1616
export const TOTAL_SHARDS = 'Total shards';
1717
export const GROUP_BY = 'Group by';
18+
export const AVERAGE_LATENCY = 'Average Latency';
19+
export const AVERAGE_CPU_TIME = 'Average CPU Time';
20+
export const AVERAGE_MEMORY_USAGE = 'Average Memory Usage';

public/components/app.test.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import { render } from '@testing-library/react';
88
import { coreMock } from '../../../../src/core/public/mocks';
99
import { MemoryRouter as Router } from 'react-router-dom';
1010
import { QueryInsightsDashboardsApp } from './app';
11-
import '@testing-library/jest-dom/extend-expect';
1211

1312
describe('<QueryInsightsDashboardsApp /> spec', () => {
1413
it('renders the component', () => {

public/pages/QueryDetails/Components/QuerySummary.tsx

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
TIMESTAMP,
1717
TOTAL_SHARDS,
1818
} from '../../../../common/constants';
19+
import { calculateMetric } from '../../Utils/MetricUtils';
1920

2021
// Panel component for displaying query detail values
2122
const PanelItem = ({ label, value }: { label: string; value: string | number }) => (
@@ -46,23 +47,25 @@ const QuerySummary = ({ query }: { query: SearchQueryRecord }) => {
4647
<PanelItem
4748
label={LATENCY}
4849
value={
49-
measurements.latency?.number !== undefined && measurements.latency?.count !== undefined
50-
? `${(measurements.latency.number / measurements.latency.count).toFixed(2)} ms`
51-
: 'N/A'
50+
calculateMetric(measurements.latency?.number, measurements.latency?.count) === 'N/A'
51+
? 'N/A'
52+
: `${calculateMetric(measurements.latency?.number, measurements.latency?.count)} ms`
5253
}
5354
/>
5455
<PanelItem
5556
label={CPU_TIME}
5657
value={
57-
measurements.cpu?.number !== undefined && measurements.cpu?.count !== undefined
58-
? `${(measurements.cpu.number / measurements.cpu.count / 1000000).toFixed(2)} ms`
59-
: 'N/A'
58+
calculateMetric(measurements.cpu?.number, measurements.cpu?.count, 1000000) === 'N/A'
59+
? 'N/A'
60+
: `${calculateMetric(measurements.cpu?.number, measurements.cpu?.count, 1000000)} ms`
6061
}
6162
/>
6263
<PanelItem
6364
label={MEMORY_USAGE}
6465
value={
65-
measurements.memory?.number !== undefined ? `${measurements.memory.number} B` : 'N/A'
66+
calculateMetric(measurements.memory?.number, measurements.memory?.count) === 'N/A'
67+
? 'N/A'
68+
: `${calculateMetric(measurements.memory?.number, measurements.memory?.count)} B`
6669
}
6770
/>
6871
<PanelItem label={INDICES} value={indices.toString()} />

public/pages/QueryGroupDetails/Components/QueryGroupAggregateSummary.test.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ describe('QueryGroupAggregateSummary', () => {
2424

2525
expect(screen.getByText('Aggregate summary for 8 queries')).toBeInTheDocument();
2626
expect(screen.getByText('Query Hashcode')).toBeInTheDocument();
27-
expect(screen.getByText('Latency')).toBeInTheDocument();
28-
expect(screen.getByText('CPU Time')).toBeInTheDocument();
29-
expect(screen.getByText('Memory Usage')).toBeInTheDocument();
27+
expect(screen.getByText('Average Latency')).toBeInTheDocument();
28+
expect(screen.getByText('Average CPU Time')).toBeInTheDocument();
29+
expect(screen.getByText('Average Memory Usage')).toBeInTheDocument();
3030
expect(screen.getByText('Group by')).toBeInTheDocument();
3131
});
3232

@@ -65,7 +65,7 @@ describe('QueryGroupAggregateSummary', () => {
6565
</MemoryRouter>
6666
);
6767

68-
const memoryUsage = '132224 B';
68+
const memoryUsage = '16528.00 B';
6969
expect(screen.getByText(memoryUsage)).toBeInTheDocument();
7070
});
7171

public/pages/QueryGroupDetails/Components/QueryGroupAggregateSummary.tsx

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@
66
import React from 'react';
77
import { EuiFlexGrid, EuiFlexItem, EuiHorizontalRule, EuiPanel, EuiText } from '@elastic/eui';
88
import {
9-
CPU_TIME,
9+
AVERAGE_CPU_TIME,
10+
AVERAGE_LATENCY,
11+
AVERAGE_MEMORY_USAGE,
1012
GROUP_BY,
11-
LATENCY,
12-
MEMORY_USAGE,
13-
QUERY_HASHCODE,
13+
QUERY_GROUP_HASHCODE,
1414
} from '../../../../common/constants';
15+
import { calculateMetric } from '../../Utils/MetricUtils';
1516

1617
// Panel component for displaying query group detail values
1718
const PanelItem = ({ label, value }: { label: string; value: string | number }) => (
@@ -24,7 +25,7 @@ const PanelItem = ({ label, value }: { label: string; value: string | number })
2425
);
2526

2627
export const QueryGroupAggregateSummary = ({ query }: { query: any }) => {
27-
const { measurements, query_hashcode: queryHashcode, group_by: groupBy } = query;
28+
const { measurements, query_hashcode: queryGroupHashcode, group_by: groupBy } = query;
2829
const queryCount =
2930
measurements.latency?.count || measurements.cpu?.count || measurements.memory?.count || 1;
3031
return (
@@ -36,27 +37,33 @@ export const QueryGroupAggregateSummary = ({ query }: { query: any }) => {
3637
</EuiText>
3738
<EuiHorizontalRule margin="m" />
3839
<EuiFlexGrid columns={4}>
39-
<PanelItem label={QUERY_HASHCODE} value={queryHashcode} />
40+
<PanelItem label={QUERY_GROUP_HASHCODE} value={queryGroupHashcode} />
4041
<PanelItem
41-
label={LATENCY}
42+
label={AVERAGE_LATENCY}
4243
value={
43-
measurements.latency?.number !== undefined && measurements.latency?.count !== undefined
44-
? `${(measurements.latency.number / measurements.latency.count).toFixed(2)} ms`
45-
: 'N/A'
44+
calculateMetric(measurements.latency?.number, measurements.latency?.count, 1) === 'N/A'
45+
? 'N/A'
46+
: `${calculateMetric(
47+
measurements.latency?.number,
48+
measurements.latency?.count,
49+
1
50+
)} ms`
4651
}
4752
/>
4853
<PanelItem
49-
label={CPU_TIME}
54+
label={AVERAGE_CPU_TIME}
5055
value={
51-
measurements.cpu?.number !== undefined && measurements.cpu?.count !== undefined
52-
? `${(measurements.cpu.number / measurements.cpu.count / 1000000).toFixed(2)} ms`
53-
: 'N/A'
56+
calculateMetric(measurements.cpu?.number, measurements.cpu?.count, 1000000) === 'N/A'
57+
? 'N/A'
58+
: `${calculateMetric(measurements.cpu?.number, measurements.cpu?.count, 1000000)} ms`
5459
}
5560
/>
5661
<PanelItem
57-
label={MEMORY_USAGE}
62+
label={AVERAGE_MEMORY_USAGE}
5863
value={
59-
measurements.memory?.number !== undefined ? `${measurements.memory.number} B` : 'N/A'
64+
calculateMetric(measurements.memory?.number, measurements.memory?.count, 1) === 'N/A'
65+
? 'N/A'
66+
: `${calculateMetric(measurements.memory?.number, measurements.memory?.count, 1)} B`
6067
}
6168
/>
6269
<PanelItem label={GROUP_BY} value={groupBy !== undefined ? `${groupBy}` : 'N/A'} />

public/pages/QueryInsights/QueryInsights.tsx

Lines changed: 37 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,13 @@ import {
1717
MEMORY_USAGE,
1818
NODE_ID,
1919
QUERY_COUNT,
20-
QUERY_HASHCODE,
20+
QUERY_GROUP_HASHCODE,
2121
SEARCH_TYPE,
2222
TIMESTAMP,
2323
TOTAL_SHARDS,
2424
TYPE,
2525
} from '../../../common/constants';
26+
import { calculateMetric } from '../Utils/MetricUtils';
2627

2728
const TIMESTAMP_FIELD = 'timestamp';
2829
const MEASUREMENTS_FIELD = 'measurements';
@@ -75,8 +76,8 @@ const QueryInsights = ({
7576

7677
const cols: Array<EuiBasicTableColumn<any>> = [
7778
{
78-
name: QUERY_HASHCODE,
79-
render: (query: any) => {
79+
name: QUERY_GROUP_HASHCODE,
80+
render: (query: SearchQueryRecord) => {
8081
return (
8182
<span>
8283
<EuiLink
@@ -88,17 +89,18 @@ const QueryInsights = ({
8889
history.push(route);
8990
}}
9091
>
91-
{query.query_hashcode || '-'}
92+
{query.query_group_hashcode || '-'}{' '}
93+
{/* TODO: Remove fallback '-' once query_id is available - #159 */}
9294
</EuiLink>
9395
</span>
9496
);
9597
},
96-
sortable: (query) => query.query_hashcode || '-',
98+
sortable: (query: SearchQueryRecord) => query.query_group_hashcode || '-',
9799
truncateText: true,
98100
},
99101
{
100102
name: TYPE,
101-
render: (query: any) => {
103+
render: (query: SearchQueryRecord) => {
102104
return (
103105
<span>
104106
<EuiLink
@@ -121,14 +123,14 @@ const QueryInsights = ({
121123
{
122124
field: MEASUREMENTS_FIELD,
123125
name: QUERY_COUNT,
124-
render: (measurements: any) =>
126+
render: (measurements: SearchQueryRecord['measurements']) =>
125127
`${
126128
measurements?.latency?.count ||
127129
measurements?.cpu?.count ||
128130
measurements?.memory?.count ||
129131
1
130132
}`,
131-
sortable: (measurements: any) => {
133+
sortable: (measurements: SearchQueryRecord['measurements']) => {
132134
return Number(
133135
measurements?.latency?.count ||
134136
measurements?.cpu?.count ||
@@ -141,7 +143,7 @@ const QueryInsights = ({
141143
{
142144
// Make into flyout instead?
143145
name: TIMESTAMP,
144-
render: (query: any) => {
146+
render: (query: SearchQueryRecord) => {
145147
const isQuery = query.group_by === 'NONE';
146148
const linkContent = isQuery ? convertTime(query.timestamp) : '-';
147149
const onClickHandler = () => history.push(`/query-details/${hash(query)}`);
@@ -158,13 +160,13 @@ const QueryInsights = ({
158160
{
159161
field: MEASUREMENTS_FIELD,
160162
name: LATENCY,
161-
render: (measurements: any) => {
162-
const latencyValue = measurements?.latency?.number;
163-
const latencyCount = measurements?.latency?.count;
164-
const result =
165-
latencyValue !== undefined && latencyCount !== undefined
166-
? (latencyValue / latencyCount).toFixed(2)
167-
: METRIC_DEFAULT_MSG;
163+
render: (measurements: SearchQueryRecord['measurements']) => {
164+
const result = calculateMetric(
165+
measurements?.latency?.number,
166+
measurements?.latency?.count,
167+
1,
168+
METRIC_DEFAULT_MSG
169+
);
168170
return `${result} ms`;
169171
},
170172
sortable: true,
@@ -173,13 +175,13 @@ const QueryInsights = ({
173175
{
174176
field: MEASUREMENTS_FIELD,
175177
name: CPU_TIME,
176-
render: (measurements: any) => {
177-
const cpuValue = measurements?.cpu?.number;
178-
const cpuCount = measurements?.cpu?.count;
179-
const result =
180-
cpuValue !== undefined && cpuCount !== undefined
181-
? (cpuValue / cpuCount / 1000000).toFixed(2)
182-
: METRIC_DEFAULT_MSG;
178+
render: (measurements: SearchQueryRecord['measurements']) => {
179+
const result = calculateMetric(
180+
measurements?.cpu?.number,
181+
measurements?.cpu?.count,
182+
1000000, // Divide by 1,000,000 for CPU time
183+
METRIC_DEFAULT_MSG
184+
);
183185
return `${result} ms`;
184186
},
185187
sortable: true,
@@ -188,13 +190,13 @@ const QueryInsights = ({
188190
{
189191
field: MEASUREMENTS_FIELD,
190192
name: MEMORY_USAGE,
191-
render: (measurements: any) => {
192-
const memoryValue = measurements?.memory?.number;
193-
const memoryCount = measurements?.memory?.count;
194-
const result =
195-
memoryValue !== undefined && memoryCount !== undefined
196-
? (memoryValue / memoryCount).toFixed(2)
197-
: METRIC_DEFAULT_MSG;
193+
render: (measurements: SearchQueryRecord['measurements']) => {
194+
const result = calculateMetric(
195+
measurements?.memory?.number,
196+
measurements?.memory?.count,
197+
1,
198+
METRIC_DEFAULT_MSG
199+
);
198200
return `${result} B`;
199201
},
200202
sortable: true,
@@ -203,7 +205,7 @@ const QueryInsights = ({
203205
{
204206
field: INDICES_FIELD,
205207
name: INDICES,
206-
render: (indices: string[], query: any) => {
208+
render: (indices: string[], query: SearchQueryRecord) => {
207209
const isSimilarity = query.group_by === 'SIMILARITY';
208210
return isSimilarity ? '-' : Array.from(new Set(indices.flat())).join(', ');
209211
},
@@ -213,7 +215,7 @@ const QueryInsights = ({
213215
{
214216
field: SEARCH_TYPE_FIELD,
215217
name: SEARCH_TYPE,
216-
render: (searchType: string, query: any) => {
218+
render: (searchType: string, query: SearchQueryRecord) => {
217219
const isSimilarity = query.group_by === 'SIMILARITY';
218220
return isSimilarity ? '-' : searchType.replaceAll('_', ' ');
219221
},
@@ -223,7 +225,7 @@ const QueryInsights = ({
223225
{
224226
field: NODE_ID_FIELD,
225227
name: NODE_ID,
226-
render: (nodeId: string, query: any) => {
228+
render: (nodeId: string, query: SearchQueryRecord) => {
227229
const isSimilarity = query.group_by === 'SIMILARITY';
228230
return isSimilarity ? '-' : nodeId;
229231
},
@@ -233,7 +235,7 @@ const QueryInsights = ({
233235
{
234236
field: TOTAL_SHARDS_FIELD,
235237
name: TOTAL_SHARDS,
236-
render: (totalShards: number, query: any) => {
238+
render: (totalShards: number, query: SearchQueryRecord) => {
237239
const isSimilarity = query.group_by === 'SIMILARITY';
238240
return isSimilarity ? '-' : totalShards;
239241
},
@@ -354,7 +356,7 @@ const QueryInsights = ({
354356
],
355357
}}
356358
allowNeutralSort={false}
357-
itemId={(query) => `${query.query_hashcode}-${query.timestamp}`}
359+
itemId={(query) => `${query.query_group_hashcode}-${query.timestamp}`}
358360
/>
359361
);
360362
};

public/pages/Utils/MetricUtils.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/*
2+
* Copyright OpenSearch Contributors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
export function calculateMetric(
7+
value?: number,
8+
count?: number,
9+
factor: number = 1,
10+
defaultMsg: string = 'N/A'
11+
): string {
12+
if (value !== undefined && count !== undefined) {
13+
return (value / count / factor).toFixed(2);
14+
}
15+
return defaultMsg;
16+
}

types/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export interface SearchQueryRecord {
2020
indices: string[];
2121
phase_latency_map: PhaseLatencyMap;
2222
task_resource_usages: Task[];
23-
query_hashcode: string;
23+
query_group_hashcode: string;
2424
group_by: string;
2525
}
2626

0 commit comments

Comments
 (0)