Skip to content

Commit aa101f3

Browse files
authored
feat: add debug mode for state-estimation (#930)
Signed-off-by: David BRAQUART <david.braquart@rte-france.com>
1 parent 899f9cd commit aa101f3

6 files changed

Lines changed: 45 additions & 7 deletions

File tree

src/main/java/org/gridsuite/study/server/controller/StudyController.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2403,9 +2403,10 @@ public ResponseEntity<String> exportFilters(
24032403
public ResponseEntity<Void> runStateEstimation(@Parameter(description = "studyUuid") @PathVariable("studyUuid") UUID studyUuid,
24042404
@PathVariable("rootNetworkUuid") UUID rootNetworkUuid,
24052405
@Parameter(description = "nodeUuid") @PathVariable("nodeUuid") UUID nodeUuid,
2406+
@RequestParam(name = "debug", required = false, defaultValue = "false") boolean debug,
24062407
@RequestHeader(HEADER_USER_ID) String userId) {
24072408
studyService.assertIsNodeNotReadOnly(nodeUuid);
2408-
studyService.runStateEstimation(studyUuid, nodeUuid, rootNetworkUuid, userId);
2409+
studyService.runStateEstimation(studyUuid, nodeUuid, rootNetworkUuid, userId, debug);
24092410
return ResponseEntity.ok().build();
24102411
}
24112412

src/main/java/org/gridsuite/study/server/service/ConsumerService.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -906,6 +906,11 @@ public Consumer<Message<String>> consumeStateEstimationResult() {
906906
return message -> consumeCalculationResult(message, STATE_ESTIMATION);
907907
}
908908

909+
@Bean
910+
public Consumer<Message<String>> consumeStateEstimationDebug() {
911+
return message -> consumeCalculationDebug(message, STATE_ESTIMATION);
912+
}
913+
909914
@Bean
910915
public Consumer<Message<String>> consumeStateEstimationStopped() {
911916
return message -> consumeCalculationStopped(message, STATE_ESTIMATION);

src/main/java/org/gridsuite/study/server/service/StateEstimationService.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public String getStateEstimationResult(UUID resultUuid) {
7474
return restTemplate.getForObject(stateEstimationServerServerBaseUri + path, String.class);
7575
}
7676

77-
public UUID runStateEstimation(UUID networkUuid, String variantId, UUID parametersUuid, ReportInfos reportInfos, String receiver, String userId) {
77+
public UUID runStateEstimation(UUID networkUuid, String variantId, UUID parametersUuid, ReportInfos reportInfos, String receiver, String userId, boolean debug) {
7878
var uriComponentsBuilder = UriComponentsBuilder
7979
.fromPath(DELIMITER + STATE_ESTIMATION_API_VERSION + "/networks/{networkUuid}/run-and-save")
8080
.queryParam("reportUuid", reportInfos.reportUuid().toString())
@@ -86,6 +86,9 @@ public UUID runStateEstimation(UUID networkUuid, String variantId, UUID paramete
8686
if (!StringUtils.isBlank(variantId)) {
8787
uriComponentsBuilder.queryParam(QUERY_PARAM_VARIANT_ID, variantId);
8888
}
89+
if (debug) {
90+
uriComponentsBuilder.queryParam(QUERY_PARAM_DEBUG, true);
91+
}
8992
var path = uriComponentsBuilder.queryParam(QUERY_PARAM_RECEIVER, receiver).buildAndExpand(networkUuid).toUriString();
9093

9194
HttpHeaders headers = new HttpHeaders();

src/main/java/org/gridsuite/study/server/service/StudyService.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3574,11 +3574,11 @@ public String exportFilters(UUID rootNetworkUuid, List<UUID> filtersUuid, UUID n
35743574
}
35753575

35763576
@Transactional
3577-
public UUID runStateEstimation(@NonNull UUID studyUuid, @NonNull UUID nodeUuid, @NonNull UUID rootNetworkUuid, String userId) {
3577+
public UUID runStateEstimation(@NonNull UUID studyUuid, @NonNull UUID nodeUuid, @NonNull UUID rootNetworkUuid, String userId, boolean debug) {
35783578
StudyEntity studyEntity = getStudy(studyUuid);
35793579
networkModificationTreeService.blockNode(rootNetworkUuid, nodeUuid);
35803580

3581-
return handleStateEstimationRequest(studyEntity, nodeUuid, rootNetworkUuid, userId);
3581+
return handleStateEstimationRequest(studyEntity, nodeUuid, rootNetworkUuid, userId, debug);
35823582
}
35833583

35843584
@Transactional
@@ -3589,7 +3589,7 @@ public UUID runPccMin(@NonNull UUID studyUuid, @NonNull UUID nodeUuid, @NonNull
35893589
return handlePccMinRequest(studyEntity, nodeUuid, rootNetworkUuid, userId);
35903590
}
35913591

3592-
private UUID handleStateEstimationRequest(StudyEntity studyEntity, UUID nodeUuid, UUID rootNetworkUuid, String userId) {
3592+
private UUID handleStateEstimationRequest(StudyEntity studyEntity, UUID nodeUuid, UUID rootNetworkUuid, String userId, boolean debug) {
35933593
UUID networkUuid = rootNetworkService.getNetworkUuid(rootNetworkUuid);
35943594
String variantId = networkModificationTreeService.getVariantId(nodeUuid, rootNetworkUuid);
35953595
UUID reportUuid = networkModificationTreeService.getComputationReports(nodeUuid, rootNetworkUuid).getOrDefault(STATE_ESTIMATION.name(), UUID.randomUUID());
@@ -3606,7 +3606,7 @@ private UUID handleStateEstimationRequest(StudyEntity studyEntity, UUID nodeUuid
36063606
stateEstimationService.deleteStateEstimationResults(List.of(prevResultUuid));
36073607
}
36083608

3609-
UUID result = stateEstimationService.runStateEstimation(networkUuid, variantId, studyEntity.getStateEstimationParametersUuid(), new ReportInfos(reportUuid, nodeUuid), receiver, userId);
3609+
UUID result = stateEstimationService.runStateEstimation(networkUuid, variantId, studyEntity.getStateEstimationParametersUuid(), new ReportInfos(reportUuid, nodeUuid), receiver, userId, debug);
36103610
updateComputationResultUuid(nodeUuid, rootNetworkUuid, result, STATE_ESTIMATION);
36113611
notificationService.emitStudyChanged(studyEntity.getId(), nodeUuid, rootNetworkUuid, NotificationService.UPDATE_TYPE_STATE_ESTIMATION_STATUS);
36123612
return result;

src/main/resources/config/application.yaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ spring:
1515
consumeShortCircuitAnalysisDebug;consumeShortCircuitAnalysisResult;consumeShortCircuitAnalysisStopped;consumeShortCircuitAnalysisFailed;consumeShortCircuitAnalysisCancelFailed;\
1616
consumeVoltageInitDebug;consumeVoltageInitResult;consumeVoltageInitStopped;consumeVoltageInitFailed;consumeVoltageInitCancelFailed;\
1717
consumeLoadFlowResult;consumeLoadFlowStopped;consumeLoadFlowFailed;consumeLoadFlowCancelFailed;\
18-
consumeStateEstimationResult;consumeStateEstimationStopped;consumeStateEstimationFailed;\
18+
consumeStateEstimationResult;consumeStateEstimationDebug;consumeStateEstimationStopped;consumeStateEstimationFailed;\
1919
consumePccMinResult;consumePccMinStopped;consumePccMinFailed;\
2020
consumeNetworkExportFinished"
2121
stream:
@@ -147,6 +147,9 @@ spring:
147147
consumeStateEstimationResult-in-0:
148148
destination: ${powsybl-ws.rabbitmq.destination.prefix:}stateestimation.result
149149
group: studyStateEstimationResultGroup
150+
consumeStateEstimationDebug-in-0:
151+
destination: ${powsybl-ws.rabbitmq.destination.prefix:}stateestimation.debug
152+
group: studyStateEstimationDebugGroup
150153
consumeStateEstimationStopped-in-0:
151154
destination: ${powsybl-ws.rabbitmq.destination.prefix:}stateestimation.stopped
152155
group: studyStateEstimationStoppedGroup

src/test/java/org/gridsuite/study/server/StateEstimationTest.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,9 @@ public MockResponse dispatch(RecordedRequest request) {
182182
if (path.matches("/v1/networks/" + NETWORK_UUID_STRING + "/run-and-save\\?reportUuid=.*&reporterId=.*&reportType=StateEstimation&variantId=" + VARIANT_ID + "&receiver=.*")) {
183183
// estim with success
184184
return new MockResponse(200, Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE), estimResultUuidStr);
185+
} else if (path.matches("/v1/networks/" + NETWORK_UUID_STRING + "/run-and-save\\?reportUuid=.*&reporterId=.*&reportType=StateEstimation&variantId=" + VARIANT_ID + "&debug=true&receiver=.*")) {
186+
// debug estim with success
187+
return new MockResponse(200, Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE), estimResultUuidStr);
185188
} else if (path.matches("/v1/networks/" + NETWORK_UUID_STRING + "/run-and-save\\?reportUuid=.*&reporterId=.*&reportType=StateEstimation&variantId=" + VARIANT_ID_2 + "&receiver=.*")) {
186189
// estim with failure
187190
input.send(MessageBuilder.withPayload("")
@@ -452,4 +455,27 @@ private void createOrUpdateParametersAndDoChecks(UUID studyNameUserIdUuid, Strin
452455
Message<byte[]> message = output.receive(TIMEOUT, STUDY_UPDATE_DESTINATION);
453456
assertEquals(UPDATE_TYPE_COMPUTATION_PARAMETERS, message.getHeaders().get(NotificationService.HEADER_UPDATE_TYPE));
454457
}
458+
459+
@Test
460+
void testDebugComputation(final MockWebServer server) throws Exception {
461+
StudyNodeIds ids = createStudyAndNode(VARIANT_ID, "node 1", null);
462+
mockMvc.perform(post(STATE_ESTIMATION_URL_BASE + "run", ids.studyId, ids.rootNetworkUuid, ids.nodeId)
463+
.param("debug", "true")
464+
.header("userId", "userId"))
465+
.andExpect(status().isOk());
466+
consumeEstimResult(ids, STATE_ESTIMATION_RESULT_UUID);
467+
assertTrue(TestUtils.getRequestsDone(1, server).stream().anyMatch(r -> r.matches("/v1/networks/" + NETWORK_UUID_STRING + "/run-and-save\\?reportUuid=.*&reporterId=.*&reportType=StateEstimation&variantId=" + VARIANT_ID + "&debug=true&receiver=.*")));
468+
469+
// get estim result
470+
MvcResult mvcResult = mockMvc.perform(get(STATE_ESTIMATION_URL_BASE + "result", ids.studyId, ids.rootNetworkUuid, ids.nodeId)).andExpectAll(
471+
status().isOk()).andReturn();
472+
assertEquals(TestUtils.resourceToString("/estim-result.json"), mvcResult.getResponse().getContentAsString());
473+
assertTrue(TestUtils.getRequestsDone(1, server).stream().anyMatch(r -> r.matches("/v1/results/" + STATE_ESTIMATION_RESULT_UUID)));
474+
475+
// get estim status
476+
mockMvc.perform(get(STATE_ESTIMATION_URL_BASE + "status", ids.studyId, ids.rootNetworkUuid, ids.nodeId)).andExpectAll(
477+
status().isOk(),
478+
content().string(ESTIM_STATUS_JSON));
479+
assertTrue(TestUtils.getRequestsDone(1, server).stream().anyMatch(r -> r.matches("/v1/results/" + STATE_ESTIMATION_RESULT_UUID + "/status")));
480+
}
455481
}

0 commit comments

Comments
 (0)