Skip to content

Commit 4e71f2b

Browse files
authored
launch, stop pcc min N-1 computation (#3389)
* launch, stop pcc min N-1 computation --------- Signed-off-by: SOUISSI Maissa (Externe) <[email protected]>
1 parent 548e235 commit 4e71f2b

File tree

13 files changed

+177
-12
lines changed

13 files changed

+177
-12
lines changed

package-lock.json

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

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"dependencies": {
1212
"@emotion/react": "^11.14.0",
1313
"@emotion/styled": "^11.14.1",
14-
"@gridsuite/commons-ui": "0.133.0",
14+
"@gridsuite/commons-ui": "0.134.0",
1515
"@hello-pangea/dnd": "^18.0.1",
1616
"@hookform/resolvers": "^4.1.3",
1717
"@mui/icons-material": "^5.18.0",

src/components/computing-status/use-all-computing-status.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
getDynamicSecurityAnalysisRunningStatus,
1111
getDynamicSimulationRunningStatus,
1212
getLoadFlowRunningStatus,
13+
getPccMinRunningStatus,
1314
getSecurityAnalysisRunningStatus,
1415
getSensitivityAnalysisRunningStatus,
1516
getShortCircuitAnalysisRunningStatus,
@@ -33,6 +34,7 @@ import { useOptionalServiceStatus } from '../../hooks/use-optional-service-statu
3334
import { fetchStateEstimationStatus } from '../../services/study/state-estimation';
3435
import { fetchDynamicSecurityAnalysisStatus } from '../../services/study/dynamic-security-analysis';
3536
import { NotificationType } from 'types/notification-types';
37+
import { fetchPccMinStatus } from 'services/study/pcc-min';
3638

3739
// status invalidations
3840
const loadFlowStatusInvalidations = [NotificationType.LOADFLOW_STATUS, NotificationType.LOADFLOW_FAILED];
@@ -65,6 +67,7 @@ const stateEstimationStatusInvalidations = [
6567
NotificationType.STATE_ESTIMATION_STATUS,
6668
NotificationType.STATE_ESTIMATION_FAILED,
6769
];
70+
const pccMinStatusInvalidations = [NotificationType.PCC_MIN_STATUS, NotificationType.PCC_MIN_FAILED];
6871

6972
// status completions
7073
const loadFlowStatusCompletions = [NotificationType.LOADFLOW_RESULT, NotificationType.LOADFLOW_FAILED];
@@ -97,6 +100,7 @@ const stateEstimationStatusCompletions = [
97100
NotificationType.STATE_ESTIMATION_RESULT,
98101
NotificationType.STATE_ESTIMATION_FAILED,
99102
];
103+
const pccMinStatusCompletions = [NotificationType.PCC_MIN_RESULT, NotificationType.PCC_MIN_FAILED];
100104

101105
// result invalidations
102106
export const loadflowResultInvalidations = [NotificationType.LOADFLOW_RESULT];
@@ -115,6 +119,7 @@ export const useAllComputingStatus = (studyUuid: UUID, currentNodeUuid: UUID, cu
115119
const voltageInitAvailability = useOptionalServiceStatus(OptionalServicesNames.VoltageInit);
116120
const shortCircuitAvailability = useOptionalServiceStatus(OptionalServicesNames.ShortCircuit);
117121
const stateEstimationAvailability = useOptionalServiceStatus(OptionalServicesNames.StateEstimation);
122+
const pccMinAvailability = useOptionalServiceStatus(OptionalServicesNames.PccMin);
118123

119124
useComputingStatus(
120125
studyUuid,
@@ -231,4 +236,17 @@ export const useAllComputingStatus = (studyUuid: UUID, currentNodeUuid: UUID, cu
231236
undefined,
232237
stateEstimationAvailability
233238
);
239+
240+
useComputingStatus(
241+
studyUuid,
242+
currentNodeUuid,
243+
currentRootNetworkUuid,
244+
fetchPccMinStatus,
245+
pccMinStatusInvalidations,
246+
pccMinStatusCompletions,
247+
getPccMinRunningStatus,
248+
ComputingType.PCC_MIN,
249+
undefined,
250+
pccMinAvailability
251+
);
234252
};

src/components/parameters-tabs.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ enum TAB_VALUES {
7171
dynamicSecurityAnalysisParamsTabValue = 'DYNAMIC_SECURITY_ANALYSIS',
7272
voltageInitParamsTabValue = 'VOLTAGE_INITIALIZATION',
7373
stateEstimationTabValue = 'STATE_ESTIMATION',
74+
pccMinTabValue = 'PCC_MIN',
7475
networkVisualizationsParams = 'networkVisualizationsParams',
7576
}
7677

src/components/run-button-container.jsx

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ import useComputationDebug from '../hooks/use-computation-debug';
4848
import { PaginationType } from 'types/custom-aggrid-types';
4949
import { usePaginationReset } from 'hooks/use-pagination-selector';
5050
import { useLogsPaginationResetByType } from './report-viewer/use-logs-pagination';
51+
import { startPccMin, stopPccMin } from 'services/study/pcc-min';
5152

5253
const checkDynamicSimulationParameters = (studyUuid) => {
5354
return fetchDynamicSimulationParameters(studyUuid).then((params) => {
@@ -94,6 +95,7 @@ export function RunButtonContainer({ studyUuid, currentNode, currentRootNetworkU
9495
);
9596
const voltageInitStatus = useSelector((state) => state.computingStatus[ComputingType.VOLTAGE_INITIALIZATION]);
9697
const stateEstimationStatus = useSelector((state) => state.computingStatus[ComputingType.STATE_ESTIMATION]);
98+
const pccMinStatus = useSelector((state) => state.computingStatus[ComputingType.PCC_MIN]);
9799

98100
const [showContingencyListSelector, setShowContingencyListSelector] = useState(false);
99101

@@ -120,6 +122,7 @@ export function RunButtonContainer({ studyUuid, currentNode, currentRootNetworkU
120122
const voltageInitAvailability = useOptionalServiceStatus(OptionalServicesNames.VoltageInit);
121123
const shortCircuitAvailability = useOptionalServiceStatus(OptionalServicesNames.ShortCircuit);
122124
const stateEstimationAvailability = useOptionalServiceStatus(OptionalServicesNames.StateEstimation);
125+
const pccMinAvailability = useOptionalServiceStatus(OptionalServicesNames.PccMin);
123126

124127
const resetSecurityAnalysisPagination = usePaginationReset(PaginationType.SecurityAnalysis);
125128
const resetSensitivityAnalysisPagination = usePaginationReset(PaginationType.SensitivityAnalysis);
@@ -489,6 +492,27 @@ export function RunButtonContainer({ studyUuid, currentNode, currentRootNetworkU
489492
);
490493
},
491494
},
495+
496+
[ComputingType.PCC_MIN]: {
497+
messageId: 'PccMin',
498+
startComputation() {
499+
startComputationAsync(
500+
ComputingType.PCC_MIN,
501+
null,
502+
() => {
503+
return startPccMin(studyUuid, currentNode?.id, currentRootNetworkUuid);
504+
},
505+
() => {},
506+
null,
507+
'startPccMinError'
508+
);
509+
},
510+
actionOnRunnable() {
511+
actionOnRunnables(ComputingType.PCC_MIN, () =>
512+
stopPccMin(studyUuid, currentNode?.id, currentRootNetworkUuid)
513+
);
514+
},
515+
},
492516
};
493517
}, [
494518
dispatch,
@@ -524,6 +548,8 @@ export function RunButtonContainer({ studyUuid, currentNode, currentRootNetworkU
524548
return voltageInitStatus;
525549
case ComputingType.STATE_ESTIMATION:
526550
return stateEstimationStatus;
551+
case ComputingType.PCC_MIN:
552+
return pccMinStatus;
527553
default:
528554
return null;
529555
}
@@ -538,6 +564,7 @@ export function RunButtonContainer({ studyUuid, currentNode, currentRootNetworkU
538564
dynamicSecurityAnalysisStatus,
539565
voltageInitStatus,
540566
stateEstimationStatus,
567+
pccMinStatus,
541568
]
542569
);
543570

@@ -561,16 +588,18 @@ export function RunButtonContainer({ studyUuid, currentNode, currentRootNetworkU
561588
...(stateEstimationAvailability === OptionalServicesStatus.Up && enableDeveloperMode
562589
? [ComputingType.STATE_ESTIMATION]
563590
: []),
591+
...(pccMinAvailability === OptionalServicesStatus.Up && enableDeveloperMode ? [ComputingType.PCC_MIN] : []),
564592
];
565593
}, [
566-
dynamicSimulationAvailability,
567-
dynamicSecurityAnalysisAvailability,
568594
securityAnalysisAvailability,
569595
sensitivityAnalysisUnavailability,
570596
shortCircuitAvailability,
597+
dynamicSimulationAvailability,
598+
enableDeveloperMode,
599+
dynamicSecurityAnalysisAvailability,
571600
voltageInitAvailability,
572601
stateEstimationAvailability,
573-
enableDeveloperMode,
602+
pccMinAvailability,
574603
]);
575604

576605
return (

src/components/study-container.jsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,12 @@ export function StudyContainer({ view, onChangeTab }) {
218218
messageTxt: errorMessage,
219219
});
220220
}
221+
if (updateTypeHeader === NotificationType.PCC_MIN_FAILED) {
222+
snackError({
223+
headerId: 'pccMinError',
224+
messageTxt: errorMessage,
225+
});
226+
}
221227
},
222228
[snackError, userName]
223229
);

src/components/utils/optional-services.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export enum OptionalServicesNames {
1313
ShortCircuit = 'ShortCircuit',
1414
VoltageInit = 'VoltageInit',
1515
StateEstimation = 'StateEstimation',
16+
PccMin = 'PccMin',
1617
}
1718
export enum OptionalServicesStatus {
1819
Up = 'UP',
@@ -40,6 +41,8 @@ const getOptionalServiceByServerName = (serverName: string): OptionalServicesNam
4041
return OptionalServicesNames.VoltageInit;
4142
case 'state-estimation-server':
4243
return OptionalServicesNames.StateEstimation;
44+
case 'pcc-min-server':
45+
return OptionalServicesNames.PccMin;
4346
default:
4447
return;
4548
}

src/components/utils/running-status.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,3 +133,16 @@ export function getStateEstimationRunningStatus(stateEstimationStatus: string |
133133
return RunningStatus.IDLE;
134134
}
135135
}
136+
137+
export function getPccMinRunningStatus(pccMinStatus: string | null): RunningStatus {
138+
switch (pccMinStatus) {
139+
case 'COMPLETED':
140+
return RunningStatus.SUCCEED;
141+
case 'RUNNING':
142+
return RunningStatus.RUNNING;
143+
case 'NOT_DONE':
144+
return RunningStatus.IDLE;
145+
default:
146+
return RunningStatus.IDLE;
147+
}
148+
}

src/redux/reducer.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,6 +446,7 @@ export interface ComputingStatus {
446446
[ComputingType.DYNAMIC_SECURITY_ANALYSIS]: RunningStatus;
447447
[ComputingType.VOLTAGE_INITIALIZATION]: RunningStatus;
448448
[ComputingType.STATE_ESTIMATION]: RunningStatus;
449+
[ComputingType.PCC_MIN]: RunningStatus;
449450
}
450451

451452
export interface LoadFlowStatusParameters {
@@ -669,6 +670,7 @@ const initialLogsFilterState: LogsFilterState = {
669670
[COMPUTING_AND_NETWORK_MODIFICATION_TYPE.DYNAMIC_SECURITY_ANALYSIS]: [],
670671
[COMPUTING_AND_NETWORK_MODIFICATION_TYPE.VOLTAGE_INITIALIZATION]: [],
671672
[COMPUTING_AND_NETWORK_MODIFICATION_TYPE.STATE_ESTIMATION]: [],
673+
[COMPUTING_AND_NETWORK_MODIFICATION_TYPE.PCC_MIN]: [],
672674
};
673675

674676
const initialLogsPaginationState: LogsPaginationState = {
@@ -682,6 +684,7 @@ const initialLogsPaginationState: LogsPaginationState = {
682684
[COMPUTING_AND_NETWORK_MODIFICATION_TYPE.DYNAMIC_SECURITY_ANALYSIS]: { ...DEFAULT_LOGS_PAGINATION },
683685
[COMPUTING_AND_NETWORK_MODIFICATION_TYPE.VOLTAGE_INITIALIZATION]: { ...DEFAULT_LOGS_PAGINATION },
684686
[COMPUTING_AND_NETWORK_MODIFICATION_TYPE.STATE_ESTIMATION]: { ...DEFAULT_LOGS_PAGINATION },
687+
[COMPUTING_AND_NETWORK_MODIFICATION_TYPE.PCC_MIN]: { ...DEFAULT_LOGS_PAGINATION },
685688
};
686689

687690
const emptySpreadsheetEquipmentsByNodes: SpreadsheetEquipmentsByNodes = {
@@ -815,6 +818,7 @@ const initialState: AppState = {
815818
[ComputingType.DYNAMIC_SECURITY_ANALYSIS]: RunningStatus.IDLE,
816819
[ComputingType.VOLTAGE_INITIALIZATION]: RunningStatus.IDLE,
817820
[ComputingType.STATE_ESTIMATION]: RunningStatus.IDLE,
821+
[ComputingType.PCC_MIN]: RunningStatus.IDLE,
818822
},
819823
computingStatusParameters: {
820824
[ComputingType.LOAD_FLOW]: null,

src/services/study/pcc-min.ts

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/**
2+
* Copyright (c) 2025, RTE (http://www.rte-france.com)
3+
* This Source Code Form is subject to the terms of the Mozilla Public
4+
* License, v. 2.0. If a copy of the MPL was not distributed with this
5+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
6+
*/
7+
8+
import { getStudyUrlWithNodeUuidAndRootNetworkUuid } from './index';
9+
import { backendFetch, backendFetchText } from '@gridsuite/commons-ui';
10+
import type { UUID } from 'node:crypto';
11+
12+
export function startPccMin(studyUuid: UUID, currentNodeUuid: UUID, currentRootNetworkUuid: UUID): Promise<Response> {
13+
console.info(
14+
`Running pcc min on ${studyUuid} on root network '${currentRootNetworkUuid}' and node ${currentNodeUuid} ...`
15+
);
16+
const url =
17+
getStudyUrlWithNodeUuidAndRootNetworkUuid(studyUuid, currentNodeUuid, currentRootNetworkUuid) + '/pcc-min/run';
18+
19+
console.debug(url);
20+
return backendFetch(url, { method: 'post' });
21+
}
22+
23+
export function stopPccMin(studyUuid: UUID, currentNodeUuid: UUID, currentRootNetworkUuid: UUID) {
24+
console.info(
25+
`Stopping pcc min on ${studyUuid} on root network '${currentRootNetworkUuid}' and node ${currentNodeUuid} ...`
26+
);
27+
const url = `${getStudyUrlWithNodeUuidAndRootNetworkUuid(
28+
studyUuid,
29+
currentNodeUuid,
30+
currentRootNetworkUuid
31+
)}/pcc-min/stop`;
32+
console.debug(url);
33+
return backendFetch(url, { method: 'put' });
34+
}
35+
36+
export function fetchPccMinStatus(studyUuid: UUID, currentNodeUuid: UUID, currentRootNetworkUuid: UUID) {
37+
console.info(
38+
`Fetching pcc min status on ${studyUuid} on root network '${currentRootNetworkUuid}' and node ${currentNodeUuid} ...`
39+
);
40+
const url = `${getStudyUrlWithNodeUuidAndRootNetworkUuid(
41+
studyUuid,
42+
currentNodeUuid,
43+
currentRootNetworkUuid
44+
)}/pcc-min/status`;
45+
console.debug(url);
46+
return backendFetchText(url);
47+
}

0 commit comments

Comments
 (0)