Skip to content

Commit a8d3a53

Browse files
committed
[UI]: Refresh button does not refresh run logs, metrics, or events #3476
1 parent 733a17c commit a8d3a53

File tree

11 files changed

+84
-11
lines changed

11 files changed

+84
-11
lines changed

frontend/package-lock.json

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frontend/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@
119119
"rc-tooltip": "^5.2.2",
120120
"react": "^18.3.1",
121121
"react-avatar": "^5.0.3",
122+
"react-bus": "^4.0.1",
122123
"react-dom": "^18.3.1",
123124
"react-helmet": "^6.1.0",
124125
"react-hook-form": "^7.53.0",

frontend/src/index.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import React from 'react';
2+
import { Provider as BusProvider } from 'react-bus';
23
import { createRoot } from 'react-dom/client';
34
import { Provider } from 'react-redux';
45
import { RouterProvider } from 'react-router-dom';
@@ -36,7 +37,9 @@ if (container) {
3637
root.render(
3738
<React.StrictMode>
3839
<Provider store={store}>
39-
<RouterProvider router={router} />
40+
<BusProvider>
41+
<RouterProvider router={router} />
42+
</BusProvider>
4043
</Provider>
4144
</React.StrictMode>,
4245
);

frontend/src/pages/Runs/Details/Events/List/index.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import React from 'react';
2+
import { useListener } from 'react-bus';
23
import { useTranslation } from 'react-i18next';
34
import { useNavigate, useParams } from 'react-router-dom';
45
import Button from '@cloudscape-design/components/button';
@@ -12,13 +13,15 @@ import { useLazyGetAllEventsQuery } from 'services/events';
1213

1314
import { useColumnsDefinitions } from 'pages/Events/List/hooks/useColumnDefinitions';
1415

16+
import { RUN_DETAILS_REFRESH_LIST_EVENT } from '../../constants';
17+
1518
export const EventsList = () => {
1619
const { t } = useTranslation();
1720
const params = useParams();
1821
const paramRunId = params.runId ?? '';
1922
const navigate = useNavigate();
2023

21-
const { data, isLoading, isLoadingMore } = useInfiniteScroll<IEvent, TEventListRequestParams>({
24+
const { data, isLoading, isLoadingMore, refreshList } = useInfiniteScroll<IEvent, TEventListRequestParams>({
2225
useLazyQuery: useLazyGetAllEventsQuery,
2326
args: { limit: DEFAULT_TABLE_PAGE_SIZE, within_runs: [paramRunId] },
2427

@@ -28,6 +31,8 @@ export const EventsList = () => {
2831
}),
2932
});
3033

34+
useListener(RUN_DETAILS_REFRESH_LIST_EVENT, refreshList);
35+
3136
const { items, collectionProps } = useCollection<IEvent>(data, {
3237
selection: {},
3338
});

frontend/src/pages/Runs/Details/Inspect/index.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
import React, { useEffect, useMemo } from 'react';
2+
import { useListener } from 'react-bus';
23
import { useTranslation } from 'react-i18next';
34
import { useParams } from 'react-router-dom';
45

56
import { CodeEditor, Container, Header, Loader } from 'components';
67

78
import { useGetRunQuery } from 'services/run';
89

10+
import { RUN_DETAILS_REFRESH_LIST_EVENT } from '../constants';
11+
912
interface AceEditorElement extends HTMLElement {
1013
env?: {
1114
editor?: {
@@ -20,11 +23,17 @@ export const RunInspect = () => {
2023
const paramProjectName = params.projectName ?? '';
2124
const paramRunId = params.runId ?? '';
2225

23-
const { data: runData, isLoading } = useGetRunQuery({
26+
const {
27+
data: runData,
28+
isLoading,
29+
refetch,
30+
} = useGetRunQuery({
2431
project_name: paramProjectName,
2532
id: paramRunId,
2633
});
2734

35+
useListener(RUN_DETAILS_REFRESH_LIST_EVENT, refetch);
36+
2837
const jsonContent = useMemo(() => {
2938
if (!runData) return '';
3039
return JSON.stringify(runData, null, 2);

frontend/src/pages/Runs/Details/Jobs/Metrics/index.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import React, { useEffect, useMemo } from 'react';
2+
import { useListener } from 'react-bus';
23
import { useTranslation } from 'react-i18next';
34
import { useParams } from 'react-router-dom';
45

@@ -7,6 +8,7 @@ import { Box, ColumnLayout, Container, Header, LineChart } from 'components';
78
import { riseRouterException } from 'libs';
89
import { useGetRunQuery } from 'services/run';
910

11+
import { RUN_DETAILS_REFRESH_LIST_EVENT } from '../../constants';
1012
import { bytesFormatter, formatPercent, formatTime } from './helpers';
1113
import { useMetricsData } from './useMetricsData';
1214

@@ -32,14 +34,23 @@ export const JobMetrics: React.FC = () => {
3234
return runData.jobs.find((job) => job.job_spec.job_name === paramJobName) ?? null;
3335
}, [runData]);
3436

35-
const { cpuChartProps, memoryChartProps, eachGPUChartProps, eachGPUMemoryChartProps, isLoading } = useMetricsData({
37+
const {
38+
cpuChartProps,
39+
memoryChartProps,
40+
eachGPUChartProps,
41+
eachGPUMemoryChartProps,
42+
isLoading,
43+
refetch: refetchMetrics,
44+
} = useMetricsData({
3645
project_name: paramProjectName,
3746
run_name: runData?.run_spec.run_name ?? '',
3847
run_id: runData?.id ?? '',
3948
job_num: jobData?.job_spec.job_num ?? 0,
4049
limit: 1000,
4150
});
4251

52+
useListener(RUN_DETAILS_REFRESH_LIST_EVENT, refetchMetrics);
53+
4354
const statusType = isLoading || isLoadingRun ? 'loading' : 'finished';
4455

4556
useEffect(() => {

frontend/src/pages/Runs/Details/Jobs/Metrics/useMetricsData.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@ import {
1515
import { bytesFormatter, getChartProps } from './helpers';
1616

1717
export const useMetricsData = (params: TJobMetricsRequestParams) => {
18-
const { data: metricsData, isLoading } = useGetMetricsQuery(params, {
18+
const {
19+
data: metricsData,
20+
isLoading,
21+
refetch,
22+
} = useGetMetricsQuery(params, {
1923
skip: !params.run_name,
2024
});
2125

@@ -76,5 +80,5 @@ export const useMetricsData = (params: TJobMetricsRequestParams) => {
7680
});
7781
}, [metricsData]);
7882

79-
return { cpuChartProps, eachGPUChartProps, memoryChartProps, eachGPUMemoryChartProps, isLoading };
83+
return { cpuChartProps, eachGPUChartProps, memoryChartProps, eachGPUMemoryChartProps, isLoading, refetch };
8084
};

frontend/src/pages/Runs/Details/Logs/index.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';
2+
import { useListener } from 'react-bus';
23
import { useTranslation } from 'react-i18next';
34
import { useParams } from 'react-router-dom';
45
import classNames from 'classnames';
@@ -10,6 +11,7 @@ import { useLazyGetProjectLogsQuery } from 'services/project';
1011
import { useGetRunQuery } from 'services/run';
1112

1213
import { LogRow } from './components/LogRow';
14+
import { RUN_DETAILS_REFRESH_LIST_EVENT } from '../constants';
1315
import { decodeLogs, getJobSubmissionId } from './helpers';
1416

1517
import { IProps } from './types';
@@ -116,6 +118,10 @@ export const Logs: React.FC<IProps> = ({ className, projectName, runName, jobSub
116118
getLogItems();
117119
}, []);
118120

121+
const refreshLogs = useCallback(() => getLogItems(), []);
122+
123+
useListener(RUN_DETAILS_REFRESH_LIST_EVENT, refreshLogs);
124+
119125
useLayoutEffect(() => {
120126
if (logsForView.length && logsForView.length <= LIMIT_LOG_ROWS) {
121127
scrollToBottom();

frontend/src/pages/Runs/Details/RunDetails/index.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import React from 'react';
2+
import { useListener } from 'react-bus';
23
import { useTranslation } from 'react-i18next';
34
import { useParams } from 'react-router-dom';
45
import { format } from 'date-fns';
@@ -28,9 +29,9 @@ import {
2829
getRunListItemRegion,
2930
getRunListItemResources,
3031
getRunListItemSchedule,
31-
getRunListItemServiceUrl,
3232
getRunListItemSpotLabelKey,
3333
} from '../../List/helpers';
34+
import { RUN_DETAILS_REFRESH_LIST_EVENT } from '../constants';
3435
import { EventsList } from '../Events/List';
3536
import { JobList } from '../Jobs/List';
3637
import { ConnectToRunWithDevEnvConfiguration } from './ConnectToRunWithDevEnvConfiguration';
@@ -42,11 +43,17 @@ export const RunDetails = () => {
4243
const paramProjectName = params.projectName ?? '';
4344
const paramRunId = params.runId ?? '';
4445

45-
const { data: runData, isLoading: isLoadingRun } = useGetRunQuery({
46+
const {
47+
data: runData,
48+
isLoading: isLoadingRun,
49+
refetch,
50+
} = useGetRunQuery({
4651
project_name: paramProjectName,
4752
id: paramRunId,
4853
});
4954

55+
useListener(RUN_DETAILS_REFRESH_LIST_EVENT, refetch);
56+
5057
const schedule = runData ? getRunListItemSchedule(runData) : null;
5158
const nextTriggeredAt = runData ? runData.next_triggered_at : null;
5259

frontend/src/pages/Runs/Details/constants.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,5 @@ export enum CodeTab {
55
Events = 'events',
66
Inspect = 'inspect',
77
}
8+
9+
export const RUN_DETAILS_REFRESH_LIST_EVENT = 'RUN_DETAILS_REFRESH_LIST_EVENT';

0 commit comments

Comments
 (0)