Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,7 @@
import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.gridsuite.study.server.StudyApi;
import org.gridsuite.study.server.StudyConstants.ModificationsActionType;
import org.gridsuite.study.server.StudyConstants.SldDisplayMode;
import org.gridsuite.study.server.StudyConstants.*;
import org.gridsuite.study.server.StudyException;
import org.gridsuite.study.server.StudyException.Type;
import org.gridsuite.study.server.dto.*;
Expand Down Expand Up @@ -874,9 +873,10 @@ public ResponseEntity<Void> runVoltageInit(
@PathVariable("studyUuid") UUID studyUuid,
@Parameter(description = "rootNetworkUuid") @PathVariable("rootNetworkUuid") UUID rootNetworkUuid,
@PathVariable("nodeUuid") UUID nodeUuid,
@Parameter(description = "debug") @RequestParam(name = "debug", required = false, defaultValue = "false") boolean debug,
@RequestHeader(HEADER_USER_ID) String userId) {
studyService.assertIsNodeNotReadOnly(nodeUuid);
studyService.runVoltageInit(studyUuid, nodeUuid, rootNetworkUuid, userId);
studyService.runVoltageInit(studyUuid, nodeUuid, rootNetworkUuid, userId, debug);
return ResponseEntity.ok().build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -802,6 +802,11 @@ public Consumer<Message<String>> consumeShortCircuitAnalysisFailed() {
};
}

@Bean
public Consumer<Message<String>> consumeVoltageInitDebug() {
return message -> consumeCalculationDebug(message, VOLTAGE_INITIALIZATION);
}

@Bean
public Consumer<Message<String>> consumeVoltageInitStopped() {
return message -> consumeCalculationStopped(message, VOLTAGE_INITIALIZATION);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,10 @@
import org.gridsuite.study.server.elasticsearch.EquipmentInfosService;
import org.gridsuite.study.server.elasticsearch.StudyInfosService;
import org.gridsuite.study.server.networkmodificationtree.dto.*;
import org.gridsuite.study.server.networkmodificationtree.entities.*;
import org.gridsuite.study.server.networkmodificationtree.entities.NetworkModificationNodeInfoEntity;
import org.gridsuite.study.server.networkmodificationtree.entities.NodeEntity;
import org.gridsuite.study.server.networkmodificationtree.entities.NodeType;
import org.gridsuite.study.server.networkmodificationtree.entities.RootNetworkNodeInfoEntity;
import org.gridsuite.study.server.notification.NotificationService;
import org.gridsuite.study.server.notification.dto.NetworkImpactsInfos;
import org.gridsuite.study.server.repository.*;
Expand Down Expand Up @@ -2526,7 +2529,7 @@ public UUID runShortCircuit(UUID studyUuid, UUID nodeUuid, UUID rootNetworkUuid,
}

@Transactional
public UUID runVoltageInit(UUID studyUuid, UUID nodeUuid, UUID rootNetworkUuid, String userId) {
public UUID runVoltageInit(UUID studyUuid, UUID nodeUuid, UUID rootNetworkUuid, String userId, boolean debug) {
UUID prevResultUuid = rootNetworkNodeInfoService.getComputationResultUuid(nodeUuid, rootNetworkUuid, VOLTAGE_INITIALIZATION);
if (prevResultUuid != null) {
voltageInitService.deleteVoltageInitResults(List.of(prevResultUuid));
Expand All @@ -2537,7 +2540,7 @@ public UUID runVoltageInit(UUID studyUuid, UUID nodeUuid, UUID rootNetworkUuid,
StudyEntity studyEntity = studyRepository.findById(studyUuid).orElseThrow(() -> new StudyException(STUDY_NOT_FOUND));
UUID reportUuid = networkModificationTreeService.getComputationReports(nodeUuid, rootNetworkUuid).getOrDefault(VOLTAGE_INITIALIZATION.name(), UUID.randomUUID());
networkModificationTreeService.updateComputationReportUuid(nodeUuid, rootNetworkUuid, VOLTAGE_INITIALIZATION, reportUuid);
UUID result = voltageInitService.runVoltageInit(networkUuid, variantId, studyEntity.getVoltageInitParametersUuid(), reportUuid, nodeUuid, rootNetworkUuid, userId);
UUID result = voltageInitService.runVoltageInit(new VariantInfos(networkUuid, variantId), studyEntity.getVoltageInitParametersUuid(), new ReportInfos(reportUuid, nodeUuid), rootNetworkUuid, userId, debug);

updateComputationResultUuid(nodeUuid, rootNetworkUuid, result, VOLTAGE_INITIALIZATION);
notificationService.emitStudyChanged(studyUuid, nodeUuid, rootNetworkUuid, NotificationService.UPDATE_TYPE_VOLTAGE_INIT_STATUS);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
import org.gridsuite.study.server.RemoteServicesProperties;
import org.gridsuite.study.server.StudyException;
import org.gridsuite.study.server.dto.NodeReceiver;
import org.gridsuite.study.server.dto.ReportInfos;
import org.gridsuite.study.server.dto.VariantInfos;
import org.gridsuite.study.server.dto.VoltageInitStatus;
import org.gridsuite.study.server.dto.voltageinit.parameters.VoltageInitParametersInfos;
import org.gridsuite.study.server.service.common.AbstractComputationService;
Expand Down Expand Up @@ -60,30 +62,35 @@ public VoltageInitService(RemoteServicesProperties remoteServicesProperties,
this.objectMapper = objectMapper;
}

public UUID runVoltageInit(UUID networkUuid, String variantId, UUID parametersUuid, UUID reportUuid, UUID nodeUuid, UUID rootNetworkUuid, String userId) {
public UUID runVoltageInit(VariantInfos variantInfos, UUID parametersUuid, ReportInfos reportInfos, UUID rootNetworkUuid, String userId, boolean debug) {

String receiver;
try {
receiver = URLEncoder.encode(objectMapper.writeValueAsString(new NodeReceiver(nodeUuid, rootNetworkUuid)), StandardCharsets.UTF_8);
receiver = URLEncoder.encode(objectMapper.writeValueAsString(new NodeReceiver(reportInfos.nodeUuid(), rootNetworkUuid)), StandardCharsets.UTF_8);
} catch (JsonProcessingException e) {
throw new UncheckedIOException(e);
}

var uriComponentsBuilder = UriComponentsBuilder
.fromPath(DELIMITER + VOLTAGE_INIT_API_VERSION + "/networks/{networkUuid}/run-and-save")
.queryParam(QUERY_PARAM_RECEIVER, receiver)
.queryParam("reportUuid", reportUuid.toString())
.queryParam("reporterId", nodeUuid.toString())
.queryParam("reportUuid", reportInfos.reportUuid().toString())
.queryParam("reporterId", reportInfos.nodeUuid().toString())
.queryParam("reportType", StudyService.ReportType.VOLTAGE_INITIALIZATION.reportKey);

if (parametersUuid != null) {
uriComponentsBuilder.queryParam("parametersUuid", parametersUuid.toString());
}

if (!StringUtils.isBlank(variantId)) {
uriComponentsBuilder.queryParam(QUERY_PARAM_VARIANT_ID, variantId);
if (!StringUtils.isBlank(variantInfos.getVariantId())) {
uriComponentsBuilder.queryParam(QUERY_PARAM_VARIANT_ID, variantInfos.getVariantId());
}

if (debug) {
uriComponentsBuilder.queryParam(QUERY_PARAM_DEBUG, true);
}
var path = uriComponentsBuilder.buildAndExpand(networkUuid).toUriString();

var path = uriComponentsBuilder.buildAndExpand(variantInfos.getNetworkUuid()).toUriString();

HttpHeaders headers = new HttpHeaders();
headers.set(HEADER_USER_ID, userId);
Expand Down
5 changes: 4 additions & 1 deletion src/main/resources/config/application.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ spring:
consumeCaseImportSucceeded;consumeCaseImportFailed;\
consumeSensitivityAnalysisResult;consumeSensitivityAnalysisStopped;consumeSensitivityAnalysisFailed;consumeSensitivityAnalysisCancelFailed;\
consumeShortCircuitAnalysisResult;consumeShortCircuitAnalysisStopped;consumeShortCircuitAnalysisFailed;consumeShortCircuitAnalysisCancelFailed;\
consumeVoltageInitResult;consumeVoltageInitStopped;consumeVoltageInitFailed;consumeVoltageInitCancelFailed;\
consumeVoltageInitDebug;consumeVoltageInitResult;consumeVoltageInitStopped;consumeVoltageInitFailed;consumeVoltageInitCancelFailed;\
consumeLoadFlowResult;consumeLoadFlowStopped;consumeLoadFlowFailed;consumeLoadFlowCancelFailed;\
consumeNonEvacuatedEnergyResult;consumeNonEvacuatedEnergyStopped;consumeNonEvacuatedEnergyFailed;consumeNonEvacuatedEnergyCancelFailed;\
consumeStateEstimationResult;consumeStateEstimationStopped;consumeStateEstimationFailed"
Expand Down Expand Up @@ -121,6 +121,9 @@ spring:
consumeShortCircuitAnalysisCancelFailed-in-0:
destination: ${powsybl-ws.rabbitmq.destination.prefix:}shortcircuitanalysis.cancelfailed
group: studyShortCircuitAnalysisCancelFailedGroup
consumeVoltageInitDebug-in-0:
destination: ${powsybl-ws.rabbitmq.destination.prefix:}voltageinit.debug
group: studyVoltageInitDebugGroup
consumeVoltageInitResult-in-0:
destination: ${powsybl-ws.rabbitmq.destination.prefix:}voltageinit.result
group: studyVoltageInitResultGroup
Expand Down
16 changes: 7 additions & 9 deletions src/test/java/org/gridsuite/study/server/VoltageInitTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,7 @@
import org.gridsuite.study.server.dto.modification.NetworkModificationsResult;
import org.gridsuite.study.server.dto.voltageinit.parameters.*;
import org.gridsuite.study.server.networkmodificationtree.dto.*;
import org.gridsuite.study.server.networkmodificationtree.entities.NetworkModificationNodeInfoEntity;
import org.gridsuite.study.server.networkmodificationtree.entities.NodeEntity;
import org.gridsuite.study.server.networkmodificationtree.entities.NodeType;
import org.gridsuite.study.server.networkmodificationtree.entities.RootNetworkNodeInfoEntity;
import org.gridsuite.study.server.networkmodificationtree.entities.RootNodeInfoEntity;
import org.gridsuite.study.server.networkmodificationtree.entities.*;
import org.gridsuite.study.server.notification.NotificationService;
import org.gridsuite.study.server.notification.dto.AlertLevel;
import org.gridsuite.study.server.notification.dto.NetworkImpactsInfos;
Expand Down Expand Up @@ -94,6 +90,7 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
Expand Down Expand Up @@ -320,7 +317,7 @@ public MockResponse dispatch(RecordedRequest request) {
.setHeader(HEADER_VOLTAGE_LEVEL_LIMITS_OUT_OF_NOMINAL_VOLTAGE_RANGE, Boolean.TRUE)
.build(), voltageInitResultDestination);
return new MockResponse(200, Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE), voltageInitResultUuidStr2);
} else if (path.matches("/v1/networks/" + NETWORK_UUID_STRING + "/run-and-save\\?receiver=.*&reportUuid=.*&reporterId=.*&variantId=" + VARIANT_ID_2)) {
} else if (path.matches("/v1/networks/" + NETWORK_UUID_STRING + "/run-and-save\\?receiver=.*&reportUuid=.*&reporterId=.*&variantId=" + VARIANT_ID_2 + ".*")) {
input.send(MessageBuilder.withPayload("")
.setHeader("resultUuid", VOLTAGE_INIT_RESULT_UUID)
.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")
Expand Down Expand Up @@ -570,6 +567,7 @@ void testVoltageInit(final MockWebServer server) throws Exception {

//run a voltage init analysis
mockMvc.perform(put("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/voltage-init/run", studyNameUserIdUuid, firstRootNetworkUuid, modificationNode3Uuid)
.param("debug", "true")
.header("userId", "userId"))
.andExpect(status().isOk());

Expand All @@ -582,7 +580,7 @@ void testVoltageInit(final MockWebServer server) throws Exception {

checkUpdateModelStatusMessagesReceived(studyNameUserIdUuid, firstRootNetworkUuid, NotificationService.UPDATE_TYPE_VOLTAGE_INIT_STATUS);

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)));
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")));

// get voltage init result
mockMvc.perform(get("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/voltage-init/result", studyNameUserIdUuid, firstRootNetworkUuid, modificationNode3Uuid)).andExpectAll(
Expand Down Expand Up @@ -944,8 +942,8 @@ void testNotResetedUuidResultWhenVoltageInitFailed() throws Exception {
.setHeader("resultUuid", VOLTAGE_INIT_ERROR_RESULT_UUID)
.build(), voltageInitFailedDestination);
return resultUuid;
}).when(mockStudyService).runVoltageInit(any(), any(), any(), any());
mockStudyService.runVoltageInit(studyEntity.getId(), modificationNode.getId(), rootNetworkUuid, "");
}).when(mockStudyService).runVoltageInit(any(), any(), any(), any(), anyBoolean());
mockStudyService.runVoltageInit(studyEntity.getId(), modificationNode.getId(), rootNetworkUuid, "", false);

// Test doesn't reset uuid result in the database
assertEquals(VOLTAGE_INIT_ERROR_RESULT_UUID, rootNetworkNodeInfoService.getComputationResultUuid(modificationNode.getId(), rootNetworkUuid, VOLTAGE_INITIALIZATION).toString());
Expand Down