2021-10-20 09:24:55 +05:30
|
|
|
import { Col } from 'antd';
|
2024-07-16 14:18:59 +05:30
|
|
|
import logEvent from 'api/common/logEvent';
|
2024-03-04 10:15:43 +05:30
|
|
|
import { ENTITY_VERSION_V4 } from 'constants/app';
|
2024-08-20 17:45:22 +05:30
|
|
|
import { QueryParams } from 'constants/query';
|
2023-07-28 21:54:36 +05:30
|
|
|
import { PANEL_TYPES } from 'constants/queryBuilder';
|
2023-10-08 23:21:17 +05:30
|
|
|
import Graph from 'container/GridCardLayout/GridCard';
|
2022-12-06 16:52:20 +05:30
|
|
|
import {
|
|
|
|
|
databaseCallsAvgDuration,
|
|
|
|
|
databaseCallsRPS,
|
|
|
|
|
} from 'container/MetricsApplication/MetricsPageQueries/DBCallQueries';
|
2023-03-29 14:45:58 +05:30
|
|
|
import useResourceAttribute from 'hooks/useResourceAttribute';
|
2023-02-08 12:41:55 +05:30
|
|
|
import {
|
|
|
|
|
convertRawQueriesToTraceSelectedTags,
|
|
|
|
|
resourceAttributesToTagFilterItems,
|
2023-03-29 14:45:58 +05:30
|
|
|
} from 'hooks/useResourceAttribute/utils';
|
2024-08-20 17:45:22 +05:30
|
|
|
import useUrlQuery from 'hooks/useUrlQuery';
|
|
|
|
|
import history from 'lib/history';
|
|
|
|
|
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
|
|
|
import { useDispatch } from 'react-redux';
|
|
|
|
|
import { useLocation, useParams } from 'react-router-dom';
|
|
|
|
|
import { UpdateTimeInterval } from 'store/actions';
|
2023-05-10 19:40:27 +03:00
|
|
|
import { TagFilterItem } from 'types/api/queryBuilder/queryBuilderData';
|
|
|
|
|
import { EQueryType } from 'types/common/dashboard';
|
2023-06-16 13:38:39 +03:00
|
|
|
import { v4 as uuid } from 'uuid';
|
2021-10-20 09:24:55 +05:30
|
|
|
|
2023-12-01 16:42:19 +05:30
|
|
|
import { GraphTitle, MENU_ITEMS, SERVICE_CHART_ID } from '../constant';
|
2023-06-28 15:19:52 +05:30
|
|
|
import { getWidgetQueryBuilder } from '../MetricsApplication.factory';
|
2023-07-18 08:55:01 +05:30
|
|
|
import { Card, GraphContainer, Row } from '../styles';
|
2023-02-08 12:41:55 +05:30
|
|
|
import { Button } from './styles';
|
2023-07-18 08:55:01 +05:30
|
|
|
import { IServiceName } from './types';
|
2023-02-08 12:41:55 +05:30
|
|
|
import {
|
|
|
|
|
dbSystemTags,
|
2023-03-29 18:31:59 +05:30
|
|
|
handleNonInQueryRange,
|
2023-02-08 12:41:55 +05:30
|
|
|
onGraphClickHandler,
|
|
|
|
|
onViewTracePopupClick,
|
2024-06-15 13:53:56 +05:30
|
|
|
useGetAPMToTracesQueries,
|
2023-02-08 12:41:55 +05:30
|
|
|
} from './util';
|
2021-10-20 09:24:55 +05:30
|
|
|
|
2023-06-28 15:19:52 +05:30
|
|
|
function DBCall(): JSX.Element {
|
2024-03-08 00:08:12 +05:30
|
|
|
const { servicename: encodedServiceName } = useParams<IServiceName>();
|
|
|
|
|
|
|
|
|
|
const servicename = decodeURIComponent(encodedServiceName);
|
2023-02-08 12:41:55 +05:30
|
|
|
const [selectedTimeStamp, setSelectedTimeStamp] = useState<number>(0);
|
2023-03-29 14:45:58 +05:30
|
|
|
const { queries } = useResourceAttribute();
|
2024-08-20 17:45:22 +05:30
|
|
|
const urlQuery = useUrlQuery();
|
|
|
|
|
const { pathname } = useLocation();
|
|
|
|
|
const dispatch = useDispatch();
|
|
|
|
|
|
|
|
|
|
const onDragSelect = useCallback(
|
|
|
|
|
(start: number, end: number) => {
|
|
|
|
|
const startTimestamp = Math.trunc(start);
|
|
|
|
|
const endTimestamp = Math.trunc(end);
|
|
|
|
|
|
|
|
|
|
urlQuery.set(QueryParams.startTime, startTimestamp.toString());
|
|
|
|
|
urlQuery.set(QueryParams.endTime, endTimestamp.toString());
|
|
|
|
|
const generatedUrl = `${pathname}?${urlQuery.toString()}`;
|
|
|
|
|
history.push(generatedUrl);
|
|
|
|
|
|
|
|
|
|
if (startTimestamp !== endTimestamp) {
|
|
|
|
|
dispatch(UpdateTimeInterval('custom', [startTimestamp, endTimestamp]));
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
[dispatch, pathname, urlQuery],
|
|
|
|
|
);
|
2023-03-29 18:31:59 +05:30
|
|
|
|
2023-05-10 19:40:27 +03:00
|
|
|
const tagFilterItems: TagFilterItem[] = useMemo(
|
2023-03-29 18:31:59 +05:30
|
|
|
() =>
|
|
|
|
|
handleNonInQueryRange(resourceAttributesToTagFilterItems(queries)) || [],
|
2023-03-29 14:45:58 +05:30
|
|
|
[queries],
|
2022-12-06 16:52:20 +05:30
|
|
|
);
|
2023-03-29 18:31:59 +05:30
|
|
|
|
2023-02-08 12:41:55 +05:30
|
|
|
const selectedTraceTags: string = useMemo(
|
|
|
|
|
() =>
|
|
|
|
|
JSON.stringify(
|
2023-03-29 14:45:58 +05:30
|
|
|
convertRawQueriesToTraceSelectedTags(queries).concat(...dbSystemTags) || [],
|
2023-02-08 12:41:55 +05:30
|
|
|
),
|
2023-03-29 14:45:58 +05:30
|
|
|
[queries],
|
2023-02-08 12:41:55 +05:30
|
|
|
);
|
2023-03-29 14:45:58 +05:30
|
|
|
|
2022-12-06 16:52:20 +05:30
|
|
|
const legend = '{{db_system}}';
|
|
|
|
|
|
2023-01-16 18:05:13 +05:30
|
|
|
const databaseCallsRPSWidget = useMemo(
|
|
|
|
|
() =>
|
2023-07-28 21:54:36 +05:30
|
|
|
getWidgetQueryBuilder({
|
|
|
|
|
query: {
|
2023-07-18 08:55:01 +05:30
|
|
|
queryType: EQueryType.QUERY_BUILDER,
|
|
|
|
|
promql: [],
|
|
|
|
|
builder: databaseCallsRPS({
|
|
|
|
|
servicename,
|
|
|
|
|
legend,
|
|
|
|
|
tagFilterItems,
|
|
|
|
|
}),
|
|
|
|
|
clickhouse_sql: [],
|
|
|
|
|
id: uuid(),
|
|
|
|
|
},
|
2023-07-28 21:54:36 +05:30
|
|
|
title: GraphTitle.DATABASE_CALLS_RPS,
|
|
|
|
|
panelTypes: PANEL_TYPES.TIME_SERIES,
|
2023-10-08 23:21:17 +05:30
|
|
|
yAxisUnit: 'reqps',
|
2023-12-01 16:42:19 +05:30
|
|
|
id: SERVICE_CHART_ID.dbCallsRPS,
|
2024-04-02 16:40:41 +05:30
|
|
|
fillSpans: false,
|
2023-07-28 21:54:36 +05:30
|
|
|
}),
|
2023-06-28 15:19:52 +05:30
|
|
|
[servicename, tagFilterItems],
|
2023-01-16 18:05:13 +05:30
|
|
|
);
|
|
|
|
|
const databaseCallsAverageDurationWidget = useMemo(
|
|
|
|
|
() =>
|
2023-07-28 21:54:36 +05:30
|
|
|
getWidgetQueryBuilder({
|
|
|
|
|
query: {
|
2023-07-18 08:55:01 +05:30
|
|
|
queryType: EQueryType.QUERY_BUILDER,
|
|
|
|
|
promql: [],
|
|
|
|
|
builder: databaseCallsAvgDuration({
|
|
|
|
|
servicename,
|
|
|
|
|
tagFilterItems,
|
|
|
|
|
}),
|
|
|
|
|
clickhouse_sql: [],
|
|
|
|
|
id: uuid(),
|
|
|
|
|
},
|
2023-07-28 21:54:36 +05:30
|
|
|
title: GraphTitle.DATABASE_CALLS_AVG_DURATION,
|
|
|
|
|
panelTypes: PANEL_TYPES.TIME_SERIES,
|
2023-10-08 23:21:17 +05:30
|
|
|
yAxisUnit: 'ms',
|
2024-04-02 16:40:41 +05:30
|
|
|
id: GraphTitle.DATABASE_CALLS_AVG_DURATION,
|
|
|
|
|
fillSpans: true,
|
2023-07-28 21:54:36 +05:30
|
|
|
}),
|
2023-06-28 15:19:52 +05:30
|
|
|
[servicename, tagFilterItems],
|
2023-01-16 18:05:13 +05:30
|
|
|
);
|
|
|
|
|
|
2024-07-16 14:18:59 +05:30
|
|
|
const logEventCalledRef = useRef(false);
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
if (!logEventCalledRef.current) {
|
|
|
|
|
const selectedEnvironments = queries.find(
|
|
|
|
|
(val) => val.tagKey === 'resource_deployment_environment',
|
|
|
|
|
)?.tagValue;
|
|
|
|
|
|
|
|
|
|
logEvent('APM: Service detail page visited', {
|
|
|
|
|
selectedEnvironments,
|
2024-07-18 13:54:05 +05:30
|
|
|
resourceAttributeUsed: !!queries?.length,
|
2024-07-16 14:18:59 +05:30
|
|
|
section: 'dbMetrics',
|
|
|
|
|
});
|
|
|
|
|
logEventCalledRef.current = true;
|
|
|
|
|
}
|
|
|
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
|
|
|
}, []);
|
|
|
|
|
|
2024-06-15 13:53:56 +05:30
|
|
|
const apmToTraceQuery = useGetAPMToTracesQueries({
|
|
|
|
|
servicename,
|
|
|
|
|
isDBCall: true,
|
|
|
|
|
});
|
|
|
|
|
|
2021-10-20 09:24:55 +05:30
|
|
|
return (
|
2022-03-22 12:10:31 +05:30
|
|
|
<Row gutter={24}>
|
|
|
|
|
<Col span={12}>
|
2023-02-08 12:41:55 +05:30
|
|
|
<Button
|
|
|
|
|
type="default"
|
|
|
|
|
size="small"
|
|
|
|
|
id="database_call_rps_button"
|
2023-02-20 19:12:54 +05:30
|
|
|
onClick={onViewTracePopupClick({
|
2023-02-08 12:41:55 +05:30
|
|
|
servicename,
|
|
|
|
|
selectedTraceTags,
|
2023-02-20 19:12:54 +05:30
|
|
|
timestamp: selectedTimeStamp,
|
2024-06-15 13:53:56 +05:30
|
|
|
apmToTraceQuery,
|
2023-02-20 19:12:54 +05:30
|
|
|
})}
|
2023-02-08 12:41:55 +05:30
|
|
|
>
|
|
|
|
|
View Traces
|
|
|
|
|
</Button>
|
2023-11-14 18:06:17 +05:30
|
|
|
<Card data-testid="database_call_rps">
|
2022-03-22 12:10:31 +05:30
|
|
|
<GraphContainer>
|
2023-07-18 08:55:01 +05:30
|
|
|
<Graph
|
2023-01-16 18:05:13 +05:30
|
|
|
widget={databaseCallsRPSWidget}
|
2023-11-15 15:33:45 +05:30
|
|
|
onClickHandler={(xValue, yValue, mouseX, mouseY): void => {
|
2023-02-08 12:41:55 +05:30
|
|
|
onGraphClickHandler(setSelectedTimeStamp)(
|
2023-11-15 15:33:45 +05:30
|
|
|
xValue,
|
|
|
|
|
yValue,
|
|
|
|
|
mouseX,
|
|
|
|
|
mouseY,
|
2023-02-08 12:41:55 +05:30
|
|
|
'database_call_rps',
|
|
|
|
|
);
|
|
|
|
|
}}
|
2024-08-20 17:45:22 +05:30
|
|
|
onDragSelect={onDragSelect}
|
2024-03-04 10:15:43 +05:30
|
|
|
version={ENTITY_VERSION_V4}
|
2022-03-22 12:10:31 +05:30
|
|
|
/>
|
|
|
|
|
</GraphContainer>
|
|
|
|
|
</Card>
|
|
|
|
|
</Col>
|
2021-10-20 09:24:55 +05:30
|
|
|
|
2022-03-22 12:10:31 +05:30
|
|
|
<Col span={12}>
|
2023-02-08 12:41:55 +05:30
|
|
|
<Button
|
|
|
|
|
type="default"
|
|
|
|
|
size="small"
|
|
|
|
|
id="database_call_avg_duration_button"
|
2023-02-20 19:12:54 +05:30
|
|
|
onClick={onViewTracePopupClick({
|
2023-02-08 12:41:55 +05:30
|
|
|
servicename,
|
|
|
|
|
selectedTraceTags,
|
2023-02-20 19:12:54 +05:30
|
|
|
timestamp: selectedTimeStamp,
|
2024-06-15 13:53:56 +05:30
|
|
|
apmToTraceQuery,
|
2023-02-20 19:12:54 +05:30
|
|
|
})}
|
2023-02-08 12:41:55 +05:30
|
|
|
>
|
|
|
|
|
View Traces
|
|
|
|
|
</Button>
|
2023-10-08 23:21:17 +05:30
|
|
|
|
2023-11-14 18:06:17 +05:30
|
|
|
<Card data-testid="database_call_avg_duration">
|
2022-03-22 12:10:31 +05:30
|
|
|
<GraphContainer>
|
2023-07-18 08:55:01 +05:30
|
|
|
<Graph
|
2023-01-16 18:05:13 +05:30
|
|
|
widget={databaseCallsAverageDurationWidget}
|
2023-11-13 13:54:31 +05:30
|
|
|
headerMenuList={MENU_ITEMS}
|
2023-11-15 15:33:45 +05:30
|
|
|
onClickHandler={(xValue, yValue, mouseX, mouseY): void => {
|
2023-02-08 12:41:55 +05:30
|
|
|
onGraphClickHandler(setSelectedTimeStamp)(
|
2023-11-15 15:33:45 +05:30
|
|
|
xValue,
|
|
|
|
|
yValue,
|
|
|
|
|
mouseX,
|
|
|
|
|
mouseY,
|
2023-02-08 12:41:55 +05:30
|
|
|
'database_call_avg_duration',
|
|
|
|
|
);
|
|
|
|
|
}}
|
2024-08-20 17:45:22 +05:30
|
|
|
onDragSelect={onDragSelect}
|
2024-03-04 10:15:43 +05:30
|
|
|
version={ENTITY_VERSION_V4}
|
2022-03-22 12:10:31 +05:30
|
|
|
/>
|
|
|
|
|
</GraphContainer>
|
|
|
|
|
</Card>
|
|
|
|
|
</Col>
|
|
|
|
|
</Row>
|
2021-10-20 09:24:55 +05:30
|
|
|
);
|
2022-03-22 12:10:31 +05:30
|
|
|
}
|
2021-10-20 09:24:55 +05:30
|
|
|
|
|
|
|
|
export default DBCall;
|