Skip to content

Commit 619f936

Browse files
authored
feat: add fe polling and disable websocket (#3151)
1 parent 467019d commit 619f936

File tree

7 files changed

+20
-57
lines changed

7 files changed

+20
-57
lines changed

web/src/gateways/WebSocket.gateway.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ function getWebSocketURL() {
172172
}
173173

174174
const webSocketGateway = WebSocketGateway({url: getWebSocketURL()});
175-
webSocketGateway.connect();
175+
// Disable websocket connection for now
176+
// webSocketGateway.connect();
176177

177178
export default webSocketGateway;

web/src/models/TestSuiteRun.model.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ type TestSuiteRun = Model<
1212
}
1313
>;
1414

15+
export function isRunStateFinished(state: string) {
16+
return ['FINISHED', 'FAILED'].includes(state);
17+
}
18+
1519
const TestSuiteRun = ({
1620
id = 0,
1721
createdAt = '',

web/src/providers/TestRun/TestRun.provider.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ const POLLING_INTERVAL = 5000;
3737
const TestRunProvider = ({children, testId, runId = 0}: IProps) => {
3838
const [pollingInterval, setPollingInterval] = useState<number | undefined>(POLLING_INTERVAL);
3939
const {data: run, isError} = useGetRunByIdQuery({testId, runId}, {skip: !runId, pollingInterval});
40-
const {data: runEvents = []} = useGetRunEventsQuery({testId, runId}, {skip: !runId});
40+
const {data: runEvents = []} = useGetRunEventsQuery({testId, runId}, {skip: !runId, pollingInterval});
4141
const [stopRunAction, {isLoading: isLoadingStop}] = useStopRunMutation();
4242

4343
const stopRun = useCallback(async () => {

web/src/providers/TestSuiteRun/TestSuite.provider.tsx

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import {createContext, useContext, useMemo} from 'react';
1+
import {createContext, useContext, useEffect, useMemo, useState} from 'react';
22
import TracetestAPI from 'redux/apis/Tracetest';
3-
import TestSuiteRun from 'models/TestSuiteRun.model';
3+
import TestSuiteRun, {isRunStateFinished} from 'models/TestSuiteRun.model';
44
import TestSuiteProvider from '../TestSuite/TestSuite.provider';
55

66
const {useGetTestSuiteRunByIdQuery} = TracetestAPI.instance;
@@ -21,10 +21,18 @@ interface IProps {
2121

2222
export const useTestSuiteRun = () => useContext(Context);
2323

24+
const POLLING_INTERVAL = 5000;
25+
2426
const TestSuiteRunProvider = ({children, testSuiteId, runId}: IProps) => {
25-
const {data: run} = useGetTestSuiteRunByIdQuery({testSuiteId, runId});
27+
const [pollingInterval, setPollingInterval] = useState<number | undefined>(POLLING_INTERVAL);
28+
const {data: run} = useGetTestSuiteRunByIdQuery({testSuiteId, runId}, {pollingInterval});
2629
const value = useMemo<IContext>(() => ({run: run!}), [run]);
2730

31+
useEffect(() => {
32+
const shouldStopPolling = run?.state && isRunStateFinished(run.state);
33+
setPollingInterval(shouldStopPolling ? undefined : POLLING_INTERVAL);
34+
}, [run?.state]);
35+
2836
return run ? (
2937
<TestSuiteProvider testSuiteId={testSuiteId} version={run.version}>
3038
<Context.Provider value={value}>{children}</Context.Provider>

web/src/redux/apis/Tracetest/endpoints/Setting.endpoint.ts

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
import {HTTP_METHOD} from 'constants/Common.constants';
22
import {TracetestApiTags} from 'constants/Test.constants';
3-
import Config, {TRawConfig, TRawLiveConfig} from 'models/Config.model';
3+
import Config, {TRawConfig} from 'models/Config.model';
44
import Demo, {TRawDemo} from 'models/Demo.model';
55
import Linter, {TRawLinter} from 'models/Linter.model';
66
import Polling, {TRawPolling} from 'models/Polling.model';
77
import TestRunner, {TRawTestRunnerResource} from 'models/TestRunner.model';
8-
import WebSocketService, {IListenerFunction} from 'services/WebSocket.service';
98
import {ResourceType, TDraftResource, TListResponse} from 'types/Settings.types';
10-
import { TTestApiEndpointBuilder } from '../Tracetest.api';
9+
import {TTestApiEndpointBuilder} from '../Tracetest.api';
1110

1211
export const settingsEndpoints = (builder: TTestApiEndpointBuilder) => ({
1312
getConfig: builder.query<Config, unknown>({
@@ -20,17 +19,6 @@ export const settingsEndpoints = (builder: TTestApiEndpointBuilder) => ({
2019
}),
2120
providesTags: () => [{type: TracetestApiTags.SETTING, id: ResourceType.ConfigType}],
2221
transformResponse: (rawConfig: TRawConfig) => Config(rawConfig),
23-
async onCacheEntryAdded(arg, {cacheDataLoaded, cacheEntryRemoved, updateCachedData}) {
24-
const listener: IListenerFunction<TRawLiveConfig> = data => {
25-
updateCachedData(() => Config.FromLiveUpdate(data.event));
26-
};
27-
await WebSocketService.initWebSocketSubscription({
28-
listener,
29-
resource: '/app/config/update',
30-
waitToCleanSubscription: cacheEntryRemoved,
31-
waitToInitSubscription: cacheDataLoaded,
32-
});
33-
},
3422
}),
3523
getPolling: builder.query<Polling, unknown>({
3624
query: () => ({

web/src/redux/apis/Tracetest/endpoints/TestRun.endpoint.ts

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import Test from 'models/Test.model';
99
import TestRun, {TRawTestRun} from 'models/TestRun.model';
1010
import TestRunEvent, {TRawTestRunEvent} from 'models/TestRunEvent.model';
1111
import {TRawTestSpecs} from 'models/TestSpecs.model';
12-
import WebSocketService, {IListenerFunction} from 'services/WebSocket.service';
1312
import {TTestApiEndpointBuilder} from '../Tracetest.api';
1413

1514
function getTotalCountFromHeaders(meta: any) {
@@ -46,17 +45,6 @@ export const testRunEndpoints = (builder: TTestApiEndpointBuilder) => ({
4645
query: ({testId, runId}) => `/tests/${testId}/run/${runId}`,
4746
providesTags: result => (result ? [{type: TracetestApiTags.TEST_RUN, id: result?.id}] : []),
4847
transformResponse: (rawTestResult: TRawTestRun) => TestRun(rawTestResult),
49-
async onCacheEntryAdded(arg, {cacheDataLoaded, cacheEntryRemoved, updateCachedData}) {
50-
const listener: IListenerFunction<TRawTestRun> = data => {
51-
updateCachedData(() => TestRun(data.event));
52-
};
53-
await WebSocketService.initWebSocketSubscription({
54-
listener,
55-
resource: `test/${arg.testId}/run/${arg.runId}`,
56-
waitToCleanSubscription: cacheEntryRemoved,
57-
waitToInitSubscription: cacheDataLoaded,
58-
});
59-
},
6048
}),
6149
reRun: builder.mutation<TestRun, {testId: string; runId: number}>({
6250
query: ({testId, runId}) => ({
@@ -108,18 +96,5 @@ export const testRunEndpoints = (builder: TTestApiEndpointBuilder) => ({
10896
query: ({runId, testId}) => `/tests/${testId}/run/${runId}/events`,
10997
providesTags: [{type: TracetestApiTags.TEST_RUN, id: 'EVENTS'}],
11098
transformResponse: (rawTestRunEvent: TRawTestRunEvent[]) => rawTestRunEvent.map(event => TestRunEvent(event)),
111-
async onCacheEntryAdded(arg, {cacheDataLoaded, cacheEntryRemoved, updateCachedData}) {
112-
const listener: IListenerFunction<TRawTestRunEvent> = data => {
113-
updateCachedData(draft => {
114-
draft.push(TestRunEvent(data.event));
115-
});
116-
};
117-
await WebSocketService.initWebSocketSubscription({
118-
listener,
119-
resource: `test/${arg.testId}/run/${arg.runId}/event`,
120-
waitToCleanSubscription: cacheEntryRemoved,
121-
waitToInitSubscription: cacheDataLoaded,
122-
});
123-
},
12499
}),
125100
});

web/src/redux/apis/Tracetest/endpoints/TestSuiteRun.endpoint.ts

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import {PaginationResponse} from 'hooks/usePagination';
44
import {TVariableSetValue} from 'models/VariableSet.model';
55
import RunError from 'models/RunError.model';
66
import TestSuiteRun, {TRawTestSuiteRunResourceRun} from 'models/TestSuiteRun.model';
7-
import WebSocketService, {IListenerFunction} from 'services/WebSocket.service';
87
import {getTotalCountFromHeaders} from 'utils/Common';
98
import {TTestApiEndpointBuilder} from '../Tracetest.api';
109

@@ -45,18 +44,6 @@ export const testSuiteRunEndpoints = (builder: TTestApiEndpointBuilder) => ({
4544
query: ({testSuiteId, runId}) => `/testsuites/${testSuiteId}/run/${runId}`,
4645
providesTags: result => [{type: TracetestApiTags.TESTSUITE_RUN, id: result?.id}],
4746
transformResponse: (raw: TRawTestSuiteRunResourceRun) => TestSuiteRun(raw),
48-
async onCacheEntryAdded(arg, {cacheDataLoaded, cacheEntryRemoved, updateCachedData}) {
49-
const listener: IListenerFunction<TRawTestSuiteRunResourceRun> = data => {
50-
updateCachedData(() => TestSuiteRun(data.event));
51-
};
52-
53-
await WebSocketService.initWebSocketSubscription({
54-
listener,
55-
resource: `testsuites/${arg.testSuiteId}/run/${arg.runId}`,
56-
waitToCleanSubscription: cacheEntryRemoved,
57-
waitToInitSubscription: cacheDataLoaded,
58-
});
59-
},
6047
}),
6148

6249
deleteTestSuiteRunById: builder.mutation<TestSuiteRun, {testSuiteId: string; runId: number}>({

0 commit comments

Comments
 (0)