chore: added mq overview page analytics (#7128)

This commit is contained in:
SagarRajput-7 2025-02-17 14:56:11 +05:30 committed by GitHub
parent 8bfca9b564
commit e86c7c970a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 83 additions and 7 deletions

View File

@ -15,6 +15,7 @@ import {
Typography, Typography,
} from 'antd'; } from 'antd';
import { FilterDropdownProps } from 'antd/lib/table/interface'; import { FilterDropdownProps } from 'antd/lib/table/interface';
import logEvent from 'api/common/logEvent';
import { import {
getQueueOverview, getQueueOverview,
QueueOverviewResponse, QueueOverviewResponse,
@ -458,6 +459,7 @@ export default function CeleryOverviewTable({
const handleRowClick = (record: RowData): void => { const handleRowClick = (record: RowData): void => {
onRowClick(record); onRowClick(record);
logEvent('MQ Overview Page: Right Panel', { ...record });
}; };
const getFilteredData = useCallback( const getFilteredData = useCallback(
@ -481,6 +483,22 @@ export default function CeleryOverviewTable({
tableData, tableData,
]); ]);
const prevTableDataRef = useRef<string>();
useEffect(() => {
if (tableData.length > 0) {
const currentTableData = JSON.stringify(tableData);
if (currentTableData !== prevTableDataRef.current) {
logEvent(`MQ Overview Page: List rendered`, {
dataRender: tableData.length,
});
prevTableDataRef.current = currentTableData;
}
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [JSON.stringify(tableData)]);
return ( return (
<div className="celery-overview-table-container"> <div className="celery-overview-table-container">
<Input.Search <Input.Search

View File

@ -1,5 +1,6 @@
import { Color } from '@signozhq/design-tokens'; import { Color } from '@signozhq/design-tokens';
import { Card } from 'antd'; import { Card } from 'antd';
import logEvent from 'api/common/logEvent';
import { useGetGraphCustomSeries } from 'components/CeleryTask/useGetGraphCustomSeries'; import { useGetGraphCustomSeries } from 'components/CeleryTask/useGetGraphCustomSeries';
import { useNavigateToTraces } from 'components/CeleryTask/useNavigateToTraces'; import { useNavigateToTraces } from 'components/CeleryTask/useNavigateToTraces';
import { QueryParams } from 'constants/query'; import { QueryParams } from 'constants/query';
@ -9,7 +10,7 @@ import { Button } from 'container/MetricsApplication/Tabs/styles';
import { onGraphClickHandler } from 'container/MetricsApplication/Tabs/util'; import { onGraphClickHandler } from 'container/MetricsApplication/Tabs/util';
import useUrlQuery from 'hooks/useUrlQuery'; import useUrlQuery from 'hooks/useUrlQuery';
import { OnClickPluginOpts } from 'lib/uPlotLib/plugins/onClickPlugin'; import { OnClickPluginOpts } from 'lib/uPlotLib/plugins/onClickPlugin';
import { useCallback, useMemo, useState } from 'react'; import { useCallback, useEffect, useMemo, useState } from 'react';
import { useDispatch, useSelector } from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
import { useHistory, useLocation } from 'react-router-dom'; import { useHistory, useLocation } from 'react-router-dom';
import { UpdateTimeInterval } from 'store/actions'; import { UpdateTimeInterval } from 'store/actions';
@ -123,6 +124,26 @@ export default function OverviewRightPanelGraph({
}, },
}); });
const [requestRateStatus, setRequestRateStatus] = useState<boolean | null>(
null,
);
const [errorRateStatus, setErrorRateStatus] = useState<boolean | null>(null);
const [avgLatencyStatus, setAvgLatencyStatus] = useState<boolean | null>(null);
useEffect(() => {
if (
requestRateStatus !== null &&
errorRateStatus !== null &&
avgLatencyStatus !== null
) {
logEvent('MQ Overview Page: Right Drawer - graphs', {
requestRate: requestRateStatus,
errorRate: errorRateStatus,
avgLatency: avgLatencyStatus,
});
}
}, [requestRateStatus, errorRateStatus, avgLatencyStatus]);
return ( return (
<Card className="overview-right-panel-graph-card"> <Card className="overview-right-panel-graph-card">
<div className="request-rate-card"> <div className="request-rate-card">
@ -130,7 +151,9 @@ export default function OverviewRightPanelGraph({
type="default" type="default"
size="small" size="small"
id="Celery_request_rate_button" id="Celery_request_rate_button"
onClick={(): void => goToTraces(requestRateWidget)} onClick={(): void => {
goToTraces(requestRateWidget);
}}
> >
View Traces View Traces
</Button> </Button>
@ -140,6 +163,9 @@ export default function OverviewRightPanelGraph({
onDragSelect={onDragSelect} onDragSelect={onDragSelect}
onClickHandler={handleGraphClick('Celery_request_rate')} onClickHandler={handleGraphClick('Celery_request_rate')}
customSeries={getCustomSeries} customSeries={getCustomSeries}
dataAvailable={(isDataAvailable: boolean): void => {
setRequestRateStatus(isDataAvailable);
}}
/> />
</div> </div>
<div className="error-rate-card"> <div className="error-rate-card">
@ -157,6 +183,9 @@ export default function OverviewRightPanelGraph({
onDragSelect={onDragSelect} onDragSelect={onDragSelect}
onClickHandler={handleGraphClick('Celery_error_rate')} onClickHandler={handleGraphClick('Celery_error_rate')}
customSeries={getCustomSeries} customSeries={getCustomSeries}
dataAvailable={(isDataAvailable: boolean): void => {
setErrorRateStatus(isDataAvailable);
}}
/> />
</div> </div>
<div className="avg-latency-card"> <div className="avg-latency-card">
@ -173,6 +202,9 @@ export default function OverviewRightPanelGraph({
headerMenuList={[...ViewMenuAction]} headerMenuList={[...ViewMenuAction]}
onDragSelect={onDragSelect} onDragSelect={onDragSelect}
onClickHandler={handleGraphClick('Celery_avg_latency')} onClickHandler={handleGraphClick('Celery_avg_latency')}
dataAvailable={(isDataAvailable: boolean): void => {
setAvgLatencyStatus(isDataAvailable);
}}
/> />
</div> </div>
</Card> </Card>

View File

@ -2,6 +2,7 @@ import './ValueInfo.styles.scss';
import { FileSearchOutlined } from '@ant-design/icons'; import { FileSearchOutlined } from '@ant-design/icons';
import { Button, Card, Col, Row } from 'antd'; import { Button, Card, Col, Row } from 'antd';
import logEvent from 'api/common/logEvent';
import { useNavigateToTraces } from 'components/CeleryTask/useNavigateToTraces'; import { useNavigateToTraces } from 'components/CeleryTask/useNavigateToTraces';
import { ENTITY_VERSION_V4 } from 'constants/app'; import { ENTITY_VERSION_V4 } from 'constants/app';
import { PANEL_TYPES } from 'constants/queryBuilder'; import { PANEL_TYPES } from 'constants/queryBuilder';
@ -113,6 +114,9 @@ export default function ValueInfo({
return 'red'; return 'red';
}; };
const mqAnalyticsTitle =
'MQ Overview Page: Right drawer navigation to trace page';
return ( return (
<Card className="value-info-card"> <Card className="value-info-card">
<Row gutter={16}> <Row gutter={16}>
@ -133,7 +137,15 @@ export default function ValueInfo({
icon={<FileSearchOutlined />} icon={<FileSearchOutlined />}
className="trace-button" className="trace-button"
disabled={isLoading} disabled={isLoading}
onClick={(): void => navigateToTrace(filters ?? [])} onClick={(): void => {
logEvent(mqAnalyticsTitle, {
filters,
minTime,
maxTime,
source: 'request rate',
});
navigateToTrace(filters ?? []);
}}
> >
View Traces View Traces
</Button> </Button>
@ -155,7 +167,13 @@ export default function ValueInfo({
icon={<FileSearchOutlined />} icon={<FileSearchOutlined />}
className="trace-button" className="trace-button"
disabled={isLoading} disabled={isLoading}
onClick={(): void => onClick={(): void => {
logEvent(mqAnalyticsTitle, {
filters,
minTime,
maxTime,
source: 'error rate',
});
navigateToTrace([ navigateToTrace([
...(filters ?? []), ...(filters ?? []),
{ {
@ -171,8 +189,8 @@ export default function ValueInfo({
op: '=', op: '=',
value: 'true', value: 'true',
}, },
]) ]);
} }}
> >
View Traces View Traces
</Button> </Button>
@ -194,7 +212,15 @@ export default function ValueInfo({
icon={<FileSearchOutlined />} icon={<FileSearchOutlined />}
className="trace-button" className="trace-button"
disabled={isLoading} disabled={isLoading}
onClick={(): void => navigateToTrace(filters ?? [])} onClick={(): void => {
logEvent(mqAnalyticsTitle, {
filters,
minTime,
maxTime,
source: 'average latency',
});
navigateToTrace(filters ?? []);
}}
> >
View Traces View Traces
</Button> </Button>