diff --git a/src/containers/Tenant/Query/ExecuteResult/ExecuteResult.tsx b/src/containers/Tenant/Query/ExecuteResult/ExecuteResult.tsx
index 24174ae32..87326f0a0 100644
--- a/src/containers/Tenant/Query/ExecuteResult/ExecuteResult.tsx
+++ b/src/containers/Tenant/Query/ExecuteResult/ExecuteResult.tsx
@@ -270,7 +270,9 @@ export function ExecuteResult({
) : null}
- {data?.traceId ? : null}
+ {data?.traceId ? (
+
+ ) : null}
{renderClipboardButton()}
diff --git a/src/containers/Tenant/Query/ExecuteResult/TraceButton.tsx b/src/containers/Tenant/Query/ExecuteResult/TraceButton.tsx
index e07042390..32449207f 100644
--- a/src/containers/Tenant/Query/ExecuteResult/TraceButton.tsx
+++ b/src/containers/Tenant/Query/ExecuteResult/TraceButton.tsx
@@ -5,45 +5,40 @@ import {Button} from '@gravity-ui/uikit';
import {useClusterBaseInfo} from '../../../../store/reducers/cluster/cluster';
import {traceApi} from '../../../../store/reducers/trace';
-import {SECOND_IN_MS} from '../../../../utils/constants';
-import {useDelayed} from '../../../../utils/hooks/useDelayed';
import {replaceParams} from '../utils/replaceParams';
import i18n from './i18n';
-const TIME_BEFORE_CHECK = 15 * SECOND_IN_MS;
-
interface TraceUrlButtonProps {
traceId: string;
+ isTraceReady?: true;
}
-export function TraceButton({traceId}: TraceUrlButtonProps) {
+export function TraceButton({traceId, isTraceReady}: TraceUrlButtonProps) {
const {traceCheck, traceView} = useClusterBaseInfo();
const checkTraceUrl = traceCheck?.url ? replaceParams(traceCheck.url, {traceId}) : '';
const traceUrl = traceView?.url ? replaceParams(traceView.url, {traceId}) : '';
- // We won't get any trace data at first 15 seconds for sure
- const [readyToFetch, resetDelay] = useDelayed(TIME_BEFORE_CHECK);
+ const [checkTrace, {isLoading, isUninitialized}] = traceApi.useCheckTraceMutation();
React.useEffect(() => {
- resetDelay();
- }, [traceId, resetDelay]);
+ let checkTraceMutation: {abort: () => void} | null;
+ if (checkTraceUrl && !isTraceReady) {
+ checkTraceMutation = checkTrace({url: checkTraceUrl});
+ }
- const {isFetching} = traceApi.useCheckTraceQuery(
- {url: checkTraceUrl},
- {skip: !checkTraceUrl || !readyToFetch},
- );
+ return () => checkTraceMutation?.abort();
+ }, [checkTrace, checkTraceUrl, isTraceReady]);
- if (!traceUrl) {
+ if (!traceUrl || (isUninitialized && !isTraceReady)) {
return null;
}
- const loading = !readyToFetch || isFetching;
return (