Skip to content

Commit 96a9c2f

Browse files
committed
feat: [PROD-14182] get all runners after workspace selection and update runner parameters
1 parent 4f15566 commit 96a9c2f

File tree

15 files changed

+263
-7
lines changed

15 files changed

+263
-7
lines changed

public/locales/en/translation.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -532,9 +532,11 @@
532532
"datasetNotUpdated": "Dataset hasn't been updated",
533533
"datasetNotRefreshed": "A problem occurred during dataset refresh",
534534
"datasetRefreshError": "A problem occurred during refresh of the dataset {{datasetId}}",
535+
"getAllRunnersError": "Unexpected error while loading runners",
535536
"runnerNotCreated": "Runner hasn't been created",
536537
"runnerFileNotUploaded": "Runner file {runnerFile} hasn't been uploaded",
537538
"runnerStopError": "Could not stop runner {{runnerId}}",
539+
"runnerUpdateError": "Runner hasn't been updated",
538540
"datasetSecurityNotUpdated": "Dataset {{datasetId}} permissions have not been updated",
539541
"runnerNotUpdated": "Runner hasn't been updated",
540542
"twingraphNotCreated": "A problem occurred during twingraph creation",

public/locales/fr/translation.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -532,9 +532,11 @@
532532
"datasetNotUpdated": "Le dataset n'a pas pu être mis à jour",
533533
"datasetNotRefreshed": "Une erreur est survenue pendant la mise à jour du dataset",
534534
"datasetRefreshError": "Une erreur est survenue pendant la mise à jour du dataset {{datasetId}}",
535+
"getAllRunnersError": "Une erreur est survenue lors de la récupération des runners.",
535536
"runnerNotCreated": "Le runner n'a pas pu être crée",
536537
"runnerFileNotUploaded": "Echec de l'envoi du fichier de runner {{runnerFile}}",
537538
"runnerStopError": "Impossible d'arrêter le runner {{runnerId}}",
539+
"runnerUpdateError": "Les paramètres du runner n'ont pas pu être mis à jour",
538540
"datasetSecurityNotUpdated": "Les permissions du dataset {{datasetId}} n'ont pas pu être modifiées",
539541
"runnerNotUpdated": "Le runner n'a pas pu être mis à jour",
540542
"twingraphNotCreated": "Une erreur est survenue pendant la creation du twingraph",

src/services/config/FunctionalConstants.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,6 @@ export const TWINGRAPH_QUERY_RETRY_DELAY = 500; // Delay between retrying when a
2020

2121
// Type of logs to download for a scenario run (SIMPLE_LOGS or CUMULATED_LOGS)
2222
export const SCENARIO_RUN_LOG_TYPE = 'CUMULATED_LOGS';
23+
24+
// Size of a page of runners returned by back-end
25+
export const RUNNERS_PAGE_COUNT = 5000;

src/state/commons/RunnerConstants.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,9 @@
44
export const RUNNER_ACTIONS_KEY = {
55
TRIGGER_SAGA_CREATE_RUNNER: 'TRIGGER_SAGA_CREATE_RUNNER',
66
TRIGGER_SAGA_STOP_RUNNER: 'TRIGGER_SAGA_STOP_RUNNER',
7+
TRIGGER_SAGA_GET_RUNNERS: 'TRIGGER_SAGA_GET_RUNNERS',
8+
SET_ETL_RUNNERS: 'SET_ETL_RUNNERS',
9+
TRIGGER_SAGA_UPDATE_RUNNER: 'TRIGGER_SAGA_UPDATE_RUNNER',
10+
ADD_ETL_RUNNER: 'ADD_ETL_RUNNER',
11+
UPDATE_ETL_RUNNER: 'UPDATE_ETL_RUNNER',
712
};

src/state/dispatchers/runner/RunnerDispatcher.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,12 @@ export const dispatchStopRunner = (organizationId, workspaceId, datasetId) => ({
1515
workspaceId,
1616
datasetId,
1717
});
18+
19+
export const dispatchUpdateRunner = (organizationId, workspaceId, runnerId, datasetId, runnerPatch) => ({
20+
type: RUNNER_ACTIONS_KEY.TRIGGER_SAGA_UPDATE_RUNNER,
21+
organizationId,
22+
workspaceId,
23+
runnerId,
24+
datasetId,
25+
runnerPatch,
26+
});

src/state/hooks/RunnerHooks.js

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
// Copyright (c) Cosmo Tech.
22
// Licensed under the MIT license.
33
import { useCallback } from 'react';
4-
import { useDispatch } from 'react-redux';
5-
import { dispatchCreateRunner, dispatchStopRunner } from '../dispatchers/runner/RunnerDispatcher';
4+
import { useDispatch, useSelector } from 'react-redux';
5+
import { dispatchCreateRunner, dispatchStopRunner, dispatchUpdateRunner } from '../dispatchers/runner/RunnerDispatcher';
66
import { useOrganizationId } from './OrganizationHooks';
77
import { useWorkspaceId } from './WorkspaceHooks';
88

@@ -25,3 +25,18 @@ export const useStopRunner = () => {
2525
[dispatch, organizationId, workspaceId]
2626
);
2727
};
28+
29+
export const useGetETLRunners = () => {
30+
return useSelector((state) => state.runner.etlRunners);
31+
};
32+
33+
export const useUpdateRunner = () => {
34+
const organizationId = useOrganizationId();
35+
const workspaceId = useWorkspaceId();
36+
const dispatch = useDispatch();
37+
return useCallback(
38+
(runnerId, datasetId, runnerPatch) =>
39+
dispatch(dispatchUpdateRunner(organizationId, workspaceId, runnerId, datasetId, runnerPatch)),
40+
[dispatch, organizationId, workspaceId]
41+
);
42+
};

src/state/reducers/rootReducer.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { datasetsReducer } from './dataset/DatasetsReducer';
88
import { datasetTwingraphQueriesResultsReducer } from './datasetTwingraphQueriesResults/DatasetTwingraphQueriesResultsReducer';
99
import { organizationReducer } from './organization/OrganizationReducer';
1010
import { powerBiReducer } from './powerbi/PowerBIReducer';
11+
import { runnerReducer } from './runner/RunnerReducer';
1112
import { scenarioReducer } from './scenario/ScenarioReducer';
1213
import { scenarioRunReducer } from './scenariorun/ScenarioRunReducer';
1314
import { solutionReducer } from './solution/SolutionReducer';
@@ -24,6 +25,7 @@ const rootReducer = combineReducers({
2425
organization: organizationReducer,
2526
solution: solutionReducer,
2627
powerBI: powerBiReducer,
28+
runner: runnerReducer,
2729
});
2830

2931
export default rootReducer;
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// Copyright (c) Cosmo Tech.
2+
// Licensed under the MIT license.
3+
import { createReducer } from '@reduxjs/toolkit';
4+
import { RUNNER_ACTIONS_KEY } from '../../commons/RunnerConstants';
5+
6+
const initialState = {
7+
etlRunners: [],
8+
};
9+
10+
export const runnerReducer = createReducer(initialState, (builder) => {
11+
builder
12+
.addCase(RUNNER_ACTIONS_KEY.SET_ETL_RUNNERS, (state, action) => {
13+
state.etlRunners = action.data;
14+
})
15+
.addCase(RUNNER_ACTIONS_KEY.UPDATE_ETL_RUNNER, (state, action) => {
16+
const runnerId = action.runnerId;
17+
const runner = action.runner;
18+
if (runner)
19+
state.etlRunners = state.etlRunners?.map((runnerData) => {
20+
if (runnerData.id === runnerId) {
21+
return { ...runnerData, ...runner };
22+
}
23+
return runnerData;
24+
});
25+
})
26+
.addCase(RUNNER_ACTIONS_KEY.ADD_ETL_RUNNER, (state, action) => {
27+
const runner = action.runner;
28+
state.etlRunners.push(runner);
29+
});
30+
});

src/state/sagas/runner/CreateRunner/CreateRunner.js

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,17 @@ function* uploadFileParameter(parameter, organizationId, workspaceId) {
3535
const newConnector = DatasetsUtils.buildAzureStorageConnector(connectorId, storageFilePath);
3636

3737
const updatedDatasetPart = { ...datasetPart, connector: newConnector };
38-
yield call(Api.Datasets.updateDataset, organizationId, datasetId, updatedDatasetPart);
38+
const { data: updatedDataset } = yield call(
39+
Api.Datasets.updateDataset,
40+
organizationId,
41+
datasetId,
42+
updatedDatasetPart
43+
);
3944
yield call(Api.Workspaces.uploadWorkspaceFile, organizationId, workspaceId, file, true, storageFilePath);
40-
45+
yield put({
46+
type: DATASET_ACTIONS_KEY.ADD_DATASET,
47+
...updatedDataset,
48+
});
4149
return datasetId;
4250
} catch (error) {
4351
console.error(error);
@@ -94,8 +102,17 @@ export function* createRunner(action) {
94102
if (runner.datasetList != null) datasetList = datasetList.concat(runner.datasetList);
95103

96104
const patchedRunner = { runTemplateId: runner.runTemplateId, datasetList };
97-
yield call(Api.Runners.updateRunner, organizationId, workspaceId, runnerId, patchedRunner);
98-
105+
const { data: updatedRunner } = yield call(
106+
Api.Runners.updateRunner,
107+
organizationId,
108+
workspaceId,
109+
runnerId,
110+
patchedRunner
111+
);
112+
yield put({
113+
type: RUNNER_ACTIONS_KEY.ADD_ETL_RUNNER,
114+
runner: { ...updatedRunner, parametersValues: ApiUtils.formatParametersFromApi(updatedRunner.parametersValues) },
115+
});
99116
yield put({ type: DATASET_ACTIONS_KEY.TRIGGER_SAGA_REFRESH_DATASET, organizationId, datasetId });
100117
} catch (error) {
101118
console.error(error);
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// Copyright (c) Cosmo Tech.
2+
// Licensed under the MIT license.
3+
import { t } from 'i18next';
4+
import { takeEvery, call, put, select } from 'redux-saga/effects';
5+
import { Api } from '../../../../services/config/Api';
6+
import { RUNNERS_PAGE_COUNT } from '../../../../services/config/FunctionalConstants';
7+
import { ApiUtils } from '../../../../utils';
8+
import { RUNNER_ACTIONS_KEY } from '../../../commons/RunnerConstants';
9+
import { dispatchSetApplicationErrorMessage } from '../../../dispatchers/app/ApplicationDispatcher';
10+
11+
const getDatasets = (state) => state?.dataset.list?.data;
12+
const getCurrentWorkspace = (state) => state?.workspace?.current?.data;
13+
14+
export function* getAllRunners(organizationId) {
15+
const datasets = yield select(getDatasets);
16+
const selectedWorkspace = yield select(getCurrentWorkspace);
17+
18+
try {
19+
const { data: runnersList } = yield call(
20+
Api.Runners.listRunners,
21+
organizationId,
22+
selectedWorkspace?.id,
23+
0,
24+
RUNNERS_PAGE_COUNT
25+
);
26+
const etlAssociatedRunnersIds = datasets
27+
.filter(
28+
(dataset) =>
29+
dataset.main === true &&
30+
dataset.sourceType === 'ETL' &&
31+
selectedWorkspace?.linkedDatasetIdList?.includes(dataset.id)
32+
)
33+
.map((dataset) => dataset.source?.name);
34+
35+
const etlAssociatedRunners = runnersList.filter((runner) => etlAssociatedRunnersIds.includes(runner.id));
36+
etlAssociatedRunners.forEach((runner) => {
37+
runner.parametersValues = ApiUtils.formatParametersFromApi(runner.parametersValues);
38+
});
39+
yield put({
40+
type: RUNNER_ACTIONS_KEY.SET_ETL_RUNNERS,
41+
data: etlAssociatedRunners,
42+
});
43+
} catch (error) {
44+
console.error(error);
45+
yield put(
46+
dispatchSetApplicationErrorMessage(
47+
error,
48+
t('commoncomponents.banner.getAllRunnersError', 'Unexpected error while loading runners')
49+
)
50+
);
51+
}
52+
}
53+
54+
function* getAllRunnersData() {
55+
yield takeEvery(RUNNER_ACTIONS_KEY.TRIGGER_SAGA_GET_RUNNERS, getAllRunners);
56+
}
57+
export default getAllRunnersData;

0 commit comments

Comments
 (0)