Skip to content

fix: query activities banner visibility #2572

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 15, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 29 additions & 5 deletions src/components/QueriesActivityBar/QueriesActivityBar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {cn} from '../../utils/cn';
import {useAutoRefreshInterval} from '../../utils/hooks';
import type {TimeFrame} from '../../utils/timeframes';
import {chartApi} from '../MetricChart/reducer';
import type {ChartDataStatus} from '../MetricChart/types';

import {QueriesActivityCharts} from './QueriesActivityCharts';
import i18n from './i18n';
Expand All @@ -33,14 +34,33 @@ export function QueriesActivityBar({tenantName}: QueriesActivityBarProps) {
const [expanded, setExpanded] = React.useState(false);
const [queriesTimeFrame] = React.useState<TimeFrame>('1h');
const [latenciesTimeFrame] = React.useState<TimeFrame>('1h');
const [isActivityBarHidden, setIsActivityBarHidden] = React.useState<boolean>(true);

// Refetch data only if activity bar successfully loaded
const shouldRefresh = isActivityBarHidden ? 0 : autoRefreshInterval;

/**
* Activity bar should be hidden, if charts are not enabled:
* 1. GraphShard is not enabled
* 2. ydb version does not have /viewer/json/render endpoint (400, 404, CORS error, etc.)
*
* If at least one chart successfully loaded, activity bar should be shown
* @link https://github.com/ydb-platform/ydb-embedded-ui/issues/659
* @todo disable only for specific errors ('GraphShard is not enabled') after ydb-stable-24 is generally used
*/
const handleChartDataStatusChange = React.useCallback((chartStatus: ChartDataStatus) => {
if (chartStatus === 'success') {
setIsActivityBarHidden(false);
}
}, []);

// Fetch running queries
const {data: runningQueriesData} = topQueriesApi.useGetRunningQueriesQuery(
{
database: tenantName,
filters: {},
},
{pollingInterval: autoRefreshInterval},
{pollingInterval: shouldRefresh},
);

// Fetch queries per second data for header metrics
Expand All @@ -51,7 +71,7 @@ export function QueriesActivityBar({tenantName}: QueriesActivityBarProps) {
timeFrame: queriesTimeFrame,
maxDataPoints: 30,
},
{pollingInterval: autoRefreshInterval},
{pollingInterval: shouldRefresh},
);

// Fetch latency data for header metrics
Expand All @@ -62,7 +82,7 @@ export function QueriesActivityBar({tenantName}: QueriesActivityBarProps) {
timeFrame: latenciesTimeFrame,
maxDataPoints: 30,
},
{pollingInterval: autoRefreshInterval},
{pollingInterval: shouldRefresh},
);

const runningQueriesCount = runningQueriesData?.resultSets?.[0]?.result?.length || 0;
Expand Down Expand Up @@ -109,7 +129,7 @@ export function QueriesActivityBar({tenantName}: QueriesActivityBarProps) {
};

return (
<div className={b({expanded})}>
<div className={b({expanded})} style={{display: isActivityBarHidden ? 'none' : undefined}}>
<Disclosure expanded={expanded} onUpdate={setExpanded} className={b('disclosure')}>
<Disclosure.Summary>
{(props) => (
Expand Down Expand Up @@ -204,7 +224,11 @@ export function QueriesActivityBar({tenantName}: QueriesActivityBarProps) {
</div>
) : null}
</Disclosure>
<QueriesActivityCharts tenantName={tenantName} expanded={expanded} />
<QueriesActivityCharts
tenantName={tenantName}
expanded={expanded}
onChartDataStatusChange={handleChartDataStatusChange}
/>
</div>
);
}
31 changes: 19 additions & 12 deletions src/components/QueriesActivityBar/QueriesActivityCharts.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,16 @@ const b = cn('queries-activity-bar');
interface QueriesActivityChartsProps {
tenantName: string;
expanded: boolean;
onChartDataStatusChange?: (status: ChartDataStatus) => void;
}

const ACTIVITY_CHART_HEIGHT = 292;

export function QueriesActivityCharts({tenantName, expanded}: QueriesActivityChartsProps) {
export function QueriesActivityCharts({
tenantName,
expanded,
onChartDataStatusChange,
}: QueriesActivityChartsProps) {
const [autoRefreshInterval] = useAutoRefreshInterval();
const [queriesTimeFrame, setQueriesTimeFrame] = React.useState<TimeFrame>('1h');
const [latenciesTimeFrame, setLatenciesTimeFrame] = React.useState<TimeFrame>('1h');
Expand All @@ -44,11 +49,16 @@ export function QueriesActivityCharts({tenantName, expanded}: QueriesActivityCha
// Refetch data only if charts have successfully loaded at least once
const shouldRefresh = hasChartsLoaded ? autoRefreshInterval : 0;

const handleChartDataStatusChange = React.useCallback((status: ChartDataStatus) => {
if (status === 'success') {
setHasChartsLoaded(true);
}
}, []);
const handleChartDataStatusChange = React.useCallback(
(status: ChartDataStatus) => {
if (status === 'success') {
setHasChartsLoaded(true);
}
// Also call parent callback if provided
onChartDataStatusChange?.(status);
},
[onChartDataStatusChange],
);

const handleQueriesTimeFrameChange = React.useCallback((newTimeFrame: TimeFrame) => {
setQueriesTimeFrame(newTimeFrame);
Expand Down Expand Up @@ -92,12 +102,9 @@ export function QueriesActivityCharts({tenantName, expanded}: QueriesActivityCha
// fails when the chart is not immediately visible during mounting.

// TODO: Remove this workaround once the upstream issue is fixed
if (!expanded) {
return null;
}

return (
<div className={b('charts')}>
<div className={b('charts')} style={{display: expanded ? undefined : 'none'}}>
<div className={b('chart-container')}>
<MetricChart
database={tenantName}
Expand All @@ -107,7 +114,7 @@ export function QueriesActivityCharts({tenantName, expanded}: QueriesActivityCha
height={ACTIVITY_CHART_HEIGHT}
chartOptions={queriesChartConfig.options}
onChartDataStatusChange={handleChartDataStatusChange}
isChartVisible={hasChartsLoaded}
isChartVisible={hasChartsLoaded && expanded}
noBorder={true}
fullWidth={true}
renderChartToolbar={renderQueriesChartToolbar}
Expand All @@ -123,7 +130,7 @@ export function QueriesActivityCharts({tenantName, expanded}: QueriesActivityCha
height={ACTIVITY_CHART_HEIGHT}
chartOptions={latenciesChartConfig.options}
onChartDataStatusChange={handleChartDataStatusChange}
isChartVisible={hasChartsLoaded}
isChartVisible={hasChartsLoaded && expanded}
noBorder={true}
fullWidth={true}
renderChartToolbar={renderLatenciesChartToolbar}
Expand Down
Loading