Skip to content

Commit 5c768dd

Browse files
authored
Short Circuit debug mode (#820)
Signed-off-by: Thang PHAM <[email protected]>
1 parent a1d389b commit 5c768dd

File tree

6 files changed

+39
-17
lines changed

6 files changed

+39
-17
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -793,9 +793,10 @@ public ResponseEntity<Void> runShortCircuit(
793793
@PathVariable("rootNetworkUuid") UUID rootNetworkUuid,
794794
@PathVariable("nodeUuid") UUID nodeUuid,
795795
@RequestParam(value = "busId", required = false) Optional<String> busId,
796+
@RequestParam(name = "debug", required = false, defaultValue = "false") boolean debug,
796797
@RequestHeader(HEADER_USER_ID) String userId) {
797798
studyService.assertIsNodeNotReadOnly(nodeUuid);
798-
studyService.runShortCircuit(studyUuid, nodeUuid, rootNetworkUuid, busId, userId);
799+
studyService.runShortCircuit(studyUuid, nodeUuid, rootNetworkUuid, busId, debug, userId);
799800
return ResponseEntity.ok().build();
800801
}
801802

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,10 @@
3434

3535
import java.net.URLDecoder;
3636
import java.nio.charset.StandardCharsets;
37-
import java.util.*;
37+
import java.util.HashMap;
38+
import java.util.Map;
39+
import java.util.Optional;
40+
import java.util.UUID;
3841
import java.util.concurrent.TimeUnit;
3942
import java.util.function.Consumer;
4043

@@ -795,6 +798,11 @@ public Consumer<Message<String>> consumeLoadFlowFailed() {
795798
return message -> consumeCalculationFailed(message, LOAD_FLOW);
796799
}
797800

801+
@Bean
802+
public Consumer<Message<String>> consumeShortCircuitAnalysisDebug() {
803+
return message -> consumeCalculationDebug(message, SHORT_CIRCUIT);
804+
}
805+
798806
@Bean
799807
public Consumer<Message<String>> consumeShortCircuitAnalysisResult() {
800808
return message -> {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2503,7 +2503,7 @@ public UUID runSensitivityAnalysis(UUID studyUuid, UUID nodeUuid, UUID rootNetwo
25032503
}
25042504

25052505
@Transactional
2506-
public UUID runShortCircuit(UUID studyUuid, UUID nodeUuid, UUID rootNetworkUuid, Optional<String> busId, String userId) {
2506+
public UUID runShortCircuit(UUID studyUuid, UUID nodeUuid, UUID rootNetworkUuid, Optional<String> busId, boolean debug, String userId) {
25072507
ComputationType computationType = busId.isEmpty() ? SHORT_CIRCUIT : SHORT_CIRCUIT_ONE_BUS;
25082508
UUID shortCircuitResultUuid = rootNetworkNodeInfoService.getComputationResultUuid(nodeUuid, rootNetworkUuid, computationType);
25092509
if (shortCircuitResultUuid != null) {
@@ -2514,7 +2514,7 @@ public UUID runShortCircuit(UUID studyUuid, UUID nodeUuid, UUID rootNetworkUuid,
25142514
UUID networkUuid = rootNetworkService.getNetworkUuid(rootNetworkUuid);
25152515
String variantId = networkModificationTreeService.getVariantId(nodeUuid, rootNetworkUuid);
25162516
networkModificationTreeService.updateComputationReportUuid(nodeUuid, rootNetworkUuid, computationType, scReportUuid);
2517-
final UUID result = shortCircuitService.runShortCircuit(nodeUuid, rootNetworkUuid, networkUuid, variantId, busId.orElse(null), parametersUuid, scReportUuid, userId);
2517+
final UUID result = shortCircuitService.runShortCircuit(rootNetworkUuid, new VariantInfos(networkUuid, variantId), busId.orElse(null), parametersUuid, new ReportInfos(scReportUuid, nodeUuid), userId, debug);
25182518
updateComputationResultUuid(nodeUuid, rootNetworkUuid, result, computationType);
25192519
notificationService.emitStudyChanged(studyUuid, nodeUuid, rootNetworkUuid,
25202520
busId.isEmpty() ? NotificationService.UPDATE_TYPE_SHORT_CIRCUIT_STATUS : NotificationService.UPDATE_TYPE_ONE_BUS_SHORT_CIRCUIT_STATUS);

src/main/java/org/gridsuite/study/server/service/shortcircuit/ShortCircuitService.java

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
import org.gridsuite.study.server.RemoteServicesProperties;
1616
import org.gridsuite.study.server.StudyException;
1717
import org.gridsuite.study.server.dto.NodeReceiver;
18+
import org.gridsuite.study.server.dto.ReportInfos;
1819
import org.gridsuite.study.server.dto.ShortCircuitStatus;
20+
import org.gridsuite.study.server.dto.VariantInfos;
1921
import org.gridsuite.study.server.service.StudyService;
2022
import org.gridsuite.study.server.service.common.AbstractComputationService;
2123
import org.springframework.beans.factory.annotation.Autowired;
@@ -38,7 +40,8 @@
3840

3941
import static org.gridsuite.study.server.StudyConstants.*;
4042
import static org.gridsuite.study.server.StudyException.Type.*;
41-
import static org.gridsuite.study.server.utils.StudyUtils.*;
43+
import static org.gridsuite.study.server.utils.StudyUtils.addPageableToQueryParams;
44+
import static org.gridsuite.study.server.utils.StudyUtils.handleHttpError;
4245

4346
/**
4447
* @author Etienne Homer <etienne.homer at rte-france.com>
@@ -66,20 +69,20 @@ public ShortCircuitService(RemoteServicesProperties remoteServicesProperties,
6669
this.objectMapper = objectMapper;
6770
}
6871

69-
public UUID runShortCircuit(UUID nodeUuid, UUID rootNetworkUuid, UUID networkUuid, String variantId, String busId, Optional<UUID> parametersUuid, UUID reportUuid, String userId) {
72+
public UUID runShortCircuit(UUID rootNetworkUuid, VariantInfos variantInfos, String busId, Optional<UUID> parametersUuid, ReportInfos reportInfos, String userId, boolean debug) {
7073

7174
String receiver;
7275
try {
73-
receiver = URLEncoder.encode(objectMapper.writeValueAsString(new NodeReceiver(nodeUuid, rootNetworkUuid)), StandardCharsets.UTF_8);
76+
receiver = URLEncoder.encode(objectMapper.writeValueAsString(new NodeReceiver(reportInfos.nodeUuid(), rootNetworkUuid)), StandardCharsets.UTF_8);
7477
} catch (JsonProcessingException e) {
7578
throw new UncheckedIOException(e);
7679
}
7780

7881
var uriComponentsBuilder = UriComponentsBuilder
7982
.fromPath(DELIMITER + SHORT_CIRCUIT_API_VERSION + "/networks/{networkUuid}/run-and-save")
8083
.queryParam(QUERY_PARAM_RECEIVER, receiver)
81-
.queryParam("reportUuid", reportUuid.toString())
82-
.queryParam("reporterId", nodeUuid.toString())
84+
.queryParam("reportUuid", reportInfos.reportUuid().toString())
85+
.queryParam("reporterId", reportInfos.nodeUuid().toString())
8386
.queryParam("reportType", StringUtils.isBlank(busId) ? StudyService.ReportType.SHORT_CIRCUIT.reportKey :
8487
StudyService.ReportType.SHORT_CIRCUIT_ONE_BUS.reportKey)
8588
.queryParamIfPresent("parametersUuid", parametersUuid);
@@ -88,10 +91,15 @@ public UUID runShortCircuit(UUID nodeUuid, UUID rootNetworkUuid, UUID networkUui
8891
uriComponentsBuilder.queryParam("busId", busId);
8992
}
9093

91-
if (!StringUtils.isBlank(variantId)) {
92-
uriComponentsBuilder.queryParam(QUERY_PARAM_VARIANT_ID, variantId);
94+
if (!StringUtils.isBlank(variantInfos.getVariantId())) {
95+
uriComponentsBuilder.queryParam(QUERY_PARAM_VARIANT_ID, variantInfos.getVariantId());
96+
}
97+
98+
if (debug) {
99+
uriComponentsBuilder.queryParam(QUERY_PARAM_DEBUG, true);
93100
}
94-
var path = uriComponentsBuilder.buildAndExpand(networkUuid).toUriString();
101+
102+
var path = uriComponentsBuilder.buildAndExpand(variantInfos.getNetworkUuid()).toUriString();
95103

96104
HttpHeaders headers = new HttpHeaders();
97105
headers.set(HEADER_USER_ID, userId);

src/main/resources/config/application.yaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ spring:
1111
consumeBuildResult;consumeBuildStopped;consumeBuildFailed;\
1212
consumeCaseImportSucceeded;consumeCaseImportFailed;\
1313
consumeSensitivityAnalysisResult;consumeSensitivityAnalysisStopped;consumeSensitivityAnalysisFailed;consumeSensitivityAnalysisCancelFailed;\
14-
consumeShortCircuitAnalysisResult;consumeShortCircuitAnalysisStopped;consumeShortCircuitAnalysisFailed;consumeShortCircuitAnalysisCancelFailed;\
14+
consumeShortCircuitAnalysisDebug;consumeShortCircuitAnalysisResult;consumeShortCircuitAnalysisStopped;consumeShortCircuitAnalysisFailed;consumeShortCircuitAnalysisCancelFailed;\
1515
consumeVoltageInitDebug;consumeVoltageInitResult;consumeVoltageInitStopped;consumeVoltageInitFailed;consumeVoltageInitCancelFailed;\
1616
consumeLoadFlowResult;consumeLoadFlowStopped;consumeLoadFlowFailed;consumeLoadFlowCancelFailed;\
1717
consumeNonEvacuatedEnergyResult;consumeNonEvacuatedEnergyStopped;consumeNonEvacuatedEnergyFailed;consumeNonEvacuatedEnergyCancelFailed;\
@@ -109,6 +109,9 @@ spring:
109109
consumeNonEvacuatedEnergyCancelFailed-in-0:
110110
destination: ${powsybl-ws.rabbitmq.destination.prefix:}nonEvacuatedEnergy.cancelfailed
111111
group: studyNonEvacuatedEnergyCancelFailedGroup
112+
consumeShortCircuitAnalysisDebug-in-0:
113+
destination: ${powsybl-ws.rabbitmq.destination.prefix:}shortcircuitanalysis.debug
114+
group: studyShortCircuitAnalysisDebugGroup
112115
consumeShortCircuitAnalysisResult-in-0:
113116
destination: ${powsybl-ws.rabbitmq.destination.prefix:}shortcircuitanalysis.result
114117
group: studyShortCircuitAnalysisResultGroup

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
import static org.gridsuite.study.server.utils.TestUtils.getBinaryAsBuffer;
6565
import static org.junit.jupiter.api.Assertions.*;
6666
import static org.mockito.ArgumentMatchers.any;
67+
import static org.mockito.ArgumentMatchers.anyBoolean;
6768
import static org.mockito.Mockito.doAnswer;
6869
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
6970
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
@@ -202,7 +203,7 @@ public MockResponse dispatch(RecordedRequest request) {
202203
.setHeader("busId", "BUS_TEST_ID")
203204
.build(), shortCircuitAnalysisResultDestination);
204205
return new MockResponse(200, Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE), shortCircuitAnalysisResultUuidStr);
205-
} else if (path.matches("/v1/networks/" + NETWORK_UUID_STRING + "/run-and-save\\?receiver=.*&reportUuid=.*&reporterId=.*&variantId=" + VARIANT_ID_2)) {
206+
} else if (path.matches("/v1/networks/" + NETWORK_UUID_STRING + "/run-and-save\\?receiver=.*&reportUuid=.*&reporterId=.*&variantId=" + VARIANT_ID_2 + ".*")) {
206207
input.send(MessageBuilder.withPayload("")
207208
.setHeader("resultUuid", SHORT_CIRCUIT_ANALYSIS_RESULT_UUID)
208209
.setHeader("receiver", "%7B%22nodeUuid%22%3A%22" + request.getPath().split("%")[5].substring(4) + "%22%2C%20%22rootNetworkUuid%22%3A%20%22" + request.getPath().split("%")[11].substring(4) + "%22%2C%20%22userId%22%3A%22userId%22%7D")
@@ -341,6 +342,7 @@ void testAllBusesShortCircuit(final MockWebServer server) throws Exception {
341342

342343
//run an all-buses short circuit analysis
343344
mockMvc.perform(put("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/shortcircuit/run", studyNameUserIdUuid, firstRootNetworkUuid, modificationNode3Uuid)
345+
.param("debug", "true")
344346
.header("userId", "userId"))
345347
.andExpect(status().isOk());
346348

@@ -350,7 +352,7 @@ void testAllBusesShortCircuit(final MockWebServer server) throws Exception {
350352

351353
checkUpdateModelStatusMessagesReceived(studyNameUserIdUuid, NotificationService.UPDATE_TYPE_SHORT_CIRCUIT_STATUS);
352354

353-
assertTrue(TestUtils.getRequestsDone(1, server).stream().anyMatch(r -> r.matches("/v1/networks/" + NETWORK_UUID_STRING + "/run-and-save\\?receiver=.*&reportUuid=.*&reporterId=.*&variantId=" + VARIANT_ID_2)));
355+
assertTrue(TestUtils.getRequestsDone(1, server).stream().anyMatch(r -> r.matches("/v1/networks/" + NETWORK_UUID_STRING + "/run-and-save\\?receiver=.*&reportUuid=.*&reporterId=.*&variantId=" + VARIANT_ID_2 + "&debug=true")));
354356

355357
// get short circuit result
356358
mockMvc.perform(get("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/shortcircuit/result", studyNameUserIdUuid, firstRootNetworkUuid, modificationNode3Uuid))
@@ -637,8 +639,8 @@ void testResetUuidResultWhenSCFailed() throws Exception {
637639
doAnswer(invocation -> {
638640
input.send(MessageBuilder.withPayload("").setHeader(HEADER_RECEIVER, resultUuidJson).build(), shortCircuitAnalysisFailedDestination);
639641
return resultUuid;
640-
}).when(studyService).runShortCircuit(any(), any(), any(), any(), any());
641-
studyService.runShortCircuit(studyEntity.getId(), modificationNode.getId(), rootNetworkUuid, Optional.empty(), "user_1");
642+
}).when(studyService).runShortCircuit(any(), any(), any(), any(), anyBoolean(), any());
643+
studyService.runShortCircuit(studyEntity.getId(), modificationNode.getId(), rootNetworkUuid, Optional.empty(), false, "user_1");
642644

643645
// Test reset uuid result in the database
644646
assertNull(rootNetworkNodeInfoService.getComputationResultUuid(modificationNode.getId(), rootNetworkUuid, ComputationType.SHORT_CIRCUIT));

0 commit comments

Comments
 (0)