import { Color } from '@signozhq/design-tokens'; import { Card } from 'antd'; import logEvent from 'api/common/logEvent'; import { useGetGraphCustomSeries } from 'components/CeleryTask/useGetGraphCustomSeries'; import { useNavigateToTraces } from 'components/CeleryTask/useNavigateToTraces'; import { QueryParams } from 'constants/query'; import { ViewMenuAction } from 'container/GridCardLayout/config'; import GridCard from 'container/GridCardLayout/GridCard'; import { Button } from 'container/MetricsApplication/Tabs/styles'; import { onGraphClickHandler } from 'container/MetricsApplication/Tabs/util'; import useUrlQuery from 'hooks/useUrlQuery'; import { OnClickPluginOpts } from 'lib/uPlotLib/plugins/onClickPlugin'; import { useCallback, useEffect, useMemo, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { useHistory, useLocation } from 'react-router-dom'; import { UpdateTimeInterval } from 'store/actions'; import { AppState } from 'store/reducers'; import { Widgets } from 'types/api/dashboard/getAll'; import { BaseAutocompleteData } from 'types/api/queryBuilder/queryAutocompleteResponse'; import { TagFilterItem } from 'types/api/queryBuilder/queryBuilderData'; import { GlobalReducer } from 'types/reducer/globalTime'; import { celeryOverviewAvgLatencyGraphData, celeryOverviewErrorRateGraphData, celeryOverviewRequestRateGraphData, } from '../CeleryOverviewGraphUtils'; export default function OverviewRightPanelGraph({ groupByFilter, filters, }: { groupByFilter?: BaseAutocompleteData; filters?: TagFilterItem[]; }): JSX.Element { const history = useHistory(); const { pathname } = useLocation(); const dispatch = useDispatch(); const urlQuery = useUrlQuery(); 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, history, pathname, urlQuery], ); const { minTime, maxTime } = useSelector( (state) => state.globalTime, ); const requestRateWidget = useMemo( () => celeryOverviewRequestRateGraphData(minTime, maxTime, filters, groupByFilter), [minTime, maxTime, filters, groupByFilter], ); const errorRateWidget = useMemo( () => celeryOverviewErrorRateGraphData(minTime, maxTime, filters, groupByFilter), [minTime, maxTime, filters, groupByFilter], ); const avgLatencyWidget = useMemo( () => celeryOverviewAvgLatencyGraphData(minTime, maxTime, filters, groupByFilter), [minTime, maxTime, filters, groupByFilter], ); const [selectedTimeStamp, setSelectedTimeStamp] = useState(0); const handleSetTimeStamp = useCallback((selectTime: number) => { setSelectedTimeStamp(selectTime); }, []); const navigateToTraces = useNavigateToTraces(); const handleGraphClick = useCallback( (type: string): OnClickPluginOpts['onClick'] => ( xValue, yValue, mouseX, mouseY, ): Promise => onGraphClickHandler(handleSetTimeStamp)( xValue, yValue, mouseX, mouseY, type, ), [handleSetTimeStamp], ); const goToTraces = useCallback( (widget: Widgets) => { const { stepInterval } = widget?.query?.builder?.queryData?.[0] ?? {}; navigateToTraces( filters ?? [], selectedTimeStamp, selectedTimeStamp + (stepInterval ?? 60), ); }, [navigateToTraces, filters, selectedTimeStamp], ); const { getCustomSeries } = useGetGraphCustomSeries({ isDarkMode: false, drawStyle: 'bars', colorMapping: { True: Color.BG_CHERRY_500, False: Color.BG_FOREST_400, None: Color.BG_SLATE_200, 'Request Rate': Color.BG_ROBIN_500, }, }); const [requestRateStatus, setRequestRateStatus] = useState( null, ); const [errorRateStatus, setErrorRateStatus] = useState(null); const [avgLatencyStatus, setAvgLatencyStatus] = useState(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 (
{ setRequestRateStatus(isDataAvailable); }} />
{ setErrorRateStatus(isDataAvailable); }} />
{ setAvgLatencyStatus(isDataAvailable); }} />
); } OverviewRightPanelGraph.defaultProps = { groupByFilter: undefined, filters: undefined, };