diff --git a/monitor-commons/src/main/java/org/gridsuite/monitor/commons/CaseResultInfos.java b/monitor-commons/src/main/java/org/gridsuite/monitor/commons/CaseResultInfos.java new file mode 100644 index 00000000..785de07d --- /dev/null +++ b/monitor-commons/src/main/java/org/gridsuite/monitor/commons/CaseResultInfos.java @@ -0,0 +1,38 @@ +/** + * Copyright (c) 2026, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package org.gridsuite.monitor.commons; + +import lombok.Getter; + +import java.util.UUID; + +/** + * @author Franck Lecuyer + */ +@Getter +public class CaseResultInfos { + private final UUID caseResultUuid; + + private final UUID executionUuid; + + private final UUID reportUuid; + + private final UUID resultUuid; + + private final String stepType; + + private final String status; + + public CaseResultInfos(UUID caseResultUuid, UUID executionUuid, UUID reportUuid, UUID resultUuid, String stepType, String status) { + this.caseResultUuid = caseResultUuid; + this.executionUuid = executionUuid; + this.reportUuid = reportUuid; + this.resultUuid = resultUuid; + this.stepType = stepType; + this.status = status; + } +} diff --git a/monitor-commons/src/main/java/org/gridsuite/monitor/commons/types/messaging/ProcessExecutionStep.java b/monitor-commons/src/main/java/org/gridsuite/monitor/commons/types/messaging/ProcessExecutionStep.java index b7875ec8..dcf74a88 100644 --- a/monitor-commons/src/main/java/org/gridsuite/monitor/commons/types/messaging/ProcessExecutionStep.java +++ b/monitor-commons/src/main/java/org/gridsuite/monitor/commons/types/messaging/ProcessExecutionStep.java @@ -33,4 +33,5 @@ public class ProcessExecutionStep { private UUID reportId; private Instant startedAt; private Instant completedAt; + private UUID resultCaseId; } diff --git a/monitor-server/src/main/java/org/gridsuite/monitor/server/controllers/MonitorController.java b/monitor-server/src/main/java/org/gridsuite/monitor/server/controllers/MonitorController.java index 99bb4d5c..bdf067b9 100644 --- a/monitor-server/src/main/java/org/gridsuite/monitor/server/controllers/MonitorController.java +++ b/monitor-server/src/main/java/org/gridsuite/monitor/server/controllers/MonitorController.java @@ -12,6 +12,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import org.gridsuite.monitor.commons.types.messaging.ProcessExecutionStep; +import org.gridsuite.monitor.commons.types.processconfig.SecurityAnalysisConfig; import org.gridsuite.monitor.commons.types.processexecution.ProcessType; import org.gridsuite.monitor.server.dto.processexecution.ProcessExecution; import org.gridsuite.monitor.server.dto.report.ReportPage; @@ -112,5 +113,16 @@ public ResponseEntity deleteExecution(@PathVariable UUID executionId) { ResponseEntity.ok().build() : ResponseEntity.notFound().build(); } + + @PostMapping("/execute/security-analysis-using-servers") + @Operation(summary = "Execute a security analysis process using existing servers (network-modification-server and security-analysis-server)") + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "The security analysis execution has been started")}) + public ResponseEntity executeSecurityAnalysisUsingServers( + @RequestParam UUID caseUuid, + @RequestBody SecurityAnalysisConfig securityAnalysisConfig, + @RequestHeader(HEADER_USER_ID) String userId) { + UUID executionId = processExecutionService.executeProcessUsingServers(caseUuid, userId, securityAnalysisConfig); + return ResponseEntity.ok(executionId); + } } diff --git a/monitor-server/src/main/java/org/gridsuite/monitor/server/entities/processexecution/ProcessExecutionStepEntity.java b/monitor-server/src/main/java/org/gridsuite/monitor/server/entities/processexecution/ProcessExecutionStepEntity.java index b498b631..95bf7f67 100644 --- a/monitor-server/src/main/java/org/gridsuite/monitor/server/entities/processexecution/ProcessExecutionStepEntity.java +++ b/monitor-server/src/main/java/org/gridsuite/monitor/server/entities/processexecution/ProcessExecutionStepEntity.java @@ -54,4 +54,7 @@ public class ProcessExecutionStepEntity { @Column private Instant completedAt; + + @Column + private UUID resultCaseId; } diff --git a/monitor-server/src/main/java/org/gridsuite/monitor/server/messaging/NotificationService.java b/monitor-server/src/main/java/org/gridsuite/monitor/server/messaging/NotificationService.java index f107489b..e605c464 100644 --- a/monitor-server/src/main/java/org/gridsuite/monitor/server/messaging/NotificationService.java +++ b/monitor-server/src/main/java/org/gridsuite/monitor/server/messaging/NotificationService.java @@ -27,6 +27,10 @@ public void sendProcessRunMessage(UUID caseUuid, ProcessConfig processConfig, UU String bindingName = switch (processConfig.processType()) { case SECURITY_ANALYSIS -> "publishRunSecurityAnalysis-out-0"; }; + sendProcessRunMessage(caseUuid, processConfig, executionId, bindingName, debugFileLocation); + } + + public void sendProcessRunMessage(UUID caseUuid, ProcessConfig processConfig, UUID executionId, String bindingName, String debugFileLocation) { ProcessRunMessage message = new ProcessRunMessage<>(executionId, caseUuid, processConfig, debugFileLocation); publisher.send(bindingName, message); } diff --git a/monitor-server/src/main/java/org/gridsuite/monitor/server/services/ConsumerServiceUsingServers.java b/monitor-server/src/main/java/org/gridsuite/monitor/server/services/ConsumerServiceUsingServers.java new file mode 100644 index 00000000..f295d8a2 --- /dev/null +++ b/monitor-server/src/main/java/org/gridsuite/monitor/server/services/ConsumerServiceUsingServers.java @@ -0,0 +1,168 @@ +/** + * Copyright (c) 2026, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package org.gridsuite.monitor.server.services; + +import org.gridsuite.monitor.commons.CaseResultInfos; +import org.gridsuite.monitor.commons.types.messaging.ProcessExecutionStep; +import org.gridsuite.monitor.commons.types.messaging.ProcessRunMessage; +import org.gridsuite.monitor.commons.types.processconfig.ProcessConfig; +import org.gridsuite.monitor.commons.types.processconfig.SecurityAnalysisConfig; +import org.gridsuite.monitor.commons.types.processexecution.ProcessStatus; +import org.gridsuite.monitor.commons.types.processexecution.StepStatus; +import org.gridsuite.monitor.commons.types.result.ResultType; +import org.gridsuite.monitor.server.services.processexecution.ProcessExecutionService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.messaging.Message; + +import java.time.Instant; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Consumer; + +/** + * @author Franck Lecuyer + */ +@Configuration +public class ConsumerServiceUsingServers { + private static final Logger LOGGER = LoggerFactory.getLogger(ConsumerServiceUsingServers.class); + + private final NetworkModificationRestService networkModificationRestService; + private final SecurityAnalysisRestService securityAnalysisRestService; + private final ProcessExecutionService processExecutionService; + + private record ProcessExecutionContext( + UUID applyModificationsStepId, + UUID securityAnalysisStepId, + UUID caseUuid, + UUID securityAnalysisParametersUuid, + UUID loadflowParametersUuid + ) { } + + private final Map processExecutionContexts = new ConcurrentHashMap<>(); + + @Autowired + ConsumerServiceUsingServers(NetworkModificationRestService networkModificationRestService, + SecurityAnalysisRestService securityAnalysisRestService, + ProcessExecutionService processExecutionService) { + this.networkModificationRestService = networkModificationRestService; + this.securityAnalysisRestService = securityAnalysisRestService; + this.processExecutionService = processExecutionService; + } + + @Bean + public Consumer>> consumeRunUsingServers() { + // consume message to launch process + // + return message -> { + ProcessRunMessage processRunMessage = message.getPayload(); + UUID caseUuid = processRunMessage.caseUuid(); + UUID executionId = processRunMessage.executionId(); + + ProcessConfig processConfig = processRunMessage.config(); + List modificationUuids = processConfig.modificationUuids(); + + UUID applyModificationsStepId = UUID.randomUUID(); + UUID securityAnalysisStepId = UUID.randomUUID(); + + UUID securityAnalysisParametersUuid = null; + UUID loadflowParametersUuid = null; + switch (processConfig.processType()) { + case SECURITY_ANALYSIS -> { + securityAnalysisParametersUuid = ((SecurityAnalysisConfig) processConfig).securityAnalysisParametersUuid(); + loadflowParametersUuid = ((SecurityAnalysisConfig) processConfig).loadflowParametersUuid(); + } + } + + processExecutionContexts.put(executionId, new ProcessExecutionContext( + applyModificationsStepId, + securityAnalysisStepId, + caseUuid, + securityAnalysisParametersUuid, + loadflowParametersUuid + )); + + processExecutionService.updateExecutionStatus(executionId, ProcessStatus.RUNNING, null, Instant.now(), null); + processExecutionService.updateStepStatus(executionId, + new ProcessExecutionStep(applyModificationsStepId, "APPLY_MODIFICATIONS", 0, StepStatus.RUNNING, null, null, null, Instant.now(), null, null)); + processExecutionService.updateStepStatus(executionId, + new ProcessExecutionStep(securityAnalysisStepId, "SECURITY_ANALYSIS", 1, StepStatus.SCHEDULED, null, null, null, null, null, null)); + + // call network-modification-server to apply modifications + networkModificationRestService.applyModifications(caseUuid, executionId, modificationUuids); + }; + } + + @Bean + public Consumer> consumeNetworkModifications() { + // consume message received from network-modification-server + // + return message -> { + CaseResultInfos caseResultInfos = message.getPayload(); + UUID caseResultUuid = caseResultInfos.getCaseResultUuid(); + UUID executionId = caseResultInfos.getExecutionUuid(); + String stepType = caseResultInfos.getStepType(); + UUID reportUuid = caseResultInfos.getReportUuid(); + + StepStatus stepStatus = StepStatus.valueOf(caseResultInfos.getStatus()); + + ProcessExecutionContext processExecutionContext = processExecutionContexts.get(executionId); + if (processExecutionContext == null) { + LOGGER.error("Process execution context not found for executionId: {}", executionId); + return; + } + + processExecutionService.updateStepStatus(executionId, + new ProcessExecutionStep(processExecutionContext.applyModificationsStepId(), stepType, 0, stepStatus, null, null, reportUuid, null, Instant.now(), caseResultUuid)); + processExecutionService.updateStepStatus(executionId, + new ProcessExecutionStep(processExecutionContext.securityAnalysisStepId(), "SECURITY_ANALYSIS", 1, + stepStatus == StepStatus.COMPLETED ? StepStatus.RUNNING : StepStatus.SKIPPED, + null, null, null, Instant.now(), null, null)); + + if (stepStatus == StepStatus.COMPLETED) { + // call security-analysis-server to run security analysis + securityAnalysisRestService.runSecurityAnalysis(caseResultUuid, executionId, processExecutionContext.securityAnalysisParametersUuid(), processExecutionContext.loadflowParametersUuid); + } else { + processExecutionContexts.remove(executionId); + } + }; + } + + @Bean + public Consumer> consumeSecurityAnalysis() { + // consume message received from security-analysis-server + // + return message -> { + CaseResultInfos caseResultInfos = message.getPayload(); + UUID executionId = caseResultInfos.getExecutionUuid(); + String stepType = caseResultInfos.getStepType(); + UUID reportUuid = caseResultInfos.getReportUuid(); + UUID resultUuid = caseResultInfos.getResultUuid(); + StepStatus stepStatus = StepStatus.valueOf(caseResultInfos.getStatus()); + UUID caseResultUuid = caseResultInfos.getCaseResultUuid(); + + ProcessExecutionContext processExecutionContext = processExecutionContexts.get(executionId); + if (processExecutionContext == null) { + LOGGER.error("Process execution context not found for executionId: {}", executionId); + return; + } + + processExecutionService.updateStepStatus(executionId, + new ProcessExecutionStep(processExecutionContext.securityAnalysisStepId(), stepType, 1, stepStatus, resultUuid, ResultType.SECURITY_ANALYSIS, reportUuid, null, Instant.now(), caseResultUuid)); + processExecutionService.updateExecutionStatus(executionId, + stepStatus == StepStatus.COMPLETED ? ProcessStatus.COMPLETED : ProcessStatus.FAILED, + null, null, Instant.now()); + + processExecutionContexts.remove(executionId); + }; + } +} diff --git a/monitor-server/src/main/java/org/gridsuite/monitor/server/services/NetworkModificationRestService.java b/monitor-server/src/main/java/org/gridsuite/monitor/server/services/NetworkModificationRestService.java new file mode 100644 index 00000000..ef17ad83 --- /dev/null +++ b/monitor-server/src/main/java/org/gridsuite/monitor/server/services/NetworkModificationRestService.java @@ -0,0 +1,54 @@ +/** + * Copyright (c) 2026, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.monitor.server.services; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; + +import java.util.List; +import java.util.UUID; + +/** + * @author Franck Lecuyer + */ +@Service +public class NetworkModificationRestService { + private static final String NETWORK_MODIFICATION_SERVER_API_VERSION = "v1"; + private static final String DELIMITER = "/"; + + private final RestTemplate networkModificationServerRest; + private final String networkModificationServerBaseUri; + + public NetworkModificationRestService(@Value("${gridsuite.services.network-modification-server.base-uri:http://network-modification-server/}") String networkModificationServerBaseUri, + RestTemplateBuilder restTemplateBuilder) { + this.networkModificationServerRest = restTemplateBuilder.build(); + this.networkModificationServerBaseUri = networkModificationServerBaseUri; + } + + public void applyModifications(UUID caseUuid, UUID executionId, List modificationUuids) { + var uriComponentsBuilder = UriComponentsBuilder.fromPath(DELIMITER + NETWORK_MODIFICATION_SERVER_API_VERSION + DELIMITER + "cases/{caseUuid}/network-composite-modifications"); + var path = uriComponentsBuilder + .queryParam("executionUuid", executionId) + .queryParam("uuids", modificationUuids) + .buildAndExpand(caseUuid) + .toUriString(); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + HttpEntity httpEntity = new HttpEntity<>(null, headers); + + networkModificationServerRest.exchange(networkModificationServerBaseUri + path, HttpMethod.POST, httpEntity, Void.class); + } +} diff --git a/monitor-server/src/main/java/org/gridsuite/monitor/server/services/SecurityAnalysisRestService.java b/monitor-server/src/main/java/org/gridsuite/monitor/server/services/SecurityAnalysisRestService.java new file mode 100644 index 00000000..da0f1090 --- /dev/null +++ b/monitor-server/src/main/java/org/gridsuite/monitor/server/services/SecurityAnalysisRestService.java @@ -0,0 +1,54 @@ +/** + * Copyright (c) 2026, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.monitor.server.services; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; + +import java.util.UUID; + +/** + * @author Franck Lecuyer + */ +@Service +public class SecurityAnalysisRestService { + private static final String SECURITY_ANALYSIS_SERVER_API_VERSION = "v1"; + private static final String DELIMITER = "/"; + + private final RestTemplate securityAnalysisServerRest; + private final String securityAnalysisServerBaseUri; + + public SecurityAnalysisRestService(@Value("${gridsuite.services.security-analysis-server.base-uri:http://security-analysis-server/}") String securityAnalysisServerBaseUri, + RestTemplateBuilder restTemplateBuilder) { + this.securityAnalysisServerRest = restTemplateBuilder.build(); + this.securityAnalysisServerBaseUri = securityAnalysisServerBaseUri; + } + + public void runSecurityAnalysis(UUID caseUuid, UUID executionId, UUID securityAnalysisParametersUuid, UUID loadflowParametersUuid) { + var uriComponentsBuilder = UriComponentsBuilder.fromPath(DELIMITER + SECURITY_ANALYSIS_SERVER_API_VERSION + DELIMITER + "/cases/{caseUuid}/run-and-save"); + var path = uriComponentsBuilder + .queryParam("executionUuid", executionId) + .queryParam("parametersUuid", securityAnalysisParametersUuid) + .queryParam("loadFlowParametersUuid", loadflowParametersUuid) + .buildAndExpand(caseUuid) + .toUriString(); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + HttpEntity httpEntity = new HttpEntity<>(null, headers); + + securityAnalysisServerRest.exchange(securityAnalysisServerBaseUri + path, HttpMethod.POST, httpEntity, Void.class); + } +} diff --git a/monitor-server/src/main/java/org/gridsuite/monitor/server/services/processexecution/ProcessExecutionService.java b/monitor-server/src/main/java/org/gridsuite/monitor/server/services/processexecution/ProcessExecutionService.java index ba2fceea..21bd3c7c 100644 --- a/monitor-server/src/main/java/org/gridsuite/monitor/server/services/processexecution/ProcessExecutionService.java +++ b/monitor-server/src/main/java/org/gridsuite/monitor/server/services/processexecution/ProcessExecutionService.java @@ -7,6 +7,7 @@ package org.gridsuite.monitor.server.services.processexecution; import com.powsybl.commons.PowsyblException; +import org.gridsuite.monitor.commons.types.processconfig.ProcessConfig; import org.gridsuite.monitor.server.dto.processconfig.PersistedProcessConfig; import org.gridsuite.monitor.commons.types.messaging.ProcessExecutionStep; import org.gridsuite.monitor.commons.types.processexecution.ProcessStatus; @@ -242,4 +243,24 @@ public boolean deleteExecution(UUID executionId) { } return false; } + + @Transactional + public UUID executeProcessUsingServers(UUID caseUuid, String userId, ProcessConfig processConfig) { + ProcessExecutionEntity execution = ProcessExecutionEntity.builder() + .type(processConfig.processType().name()) + .caseUuid(caseUuid) + .status(ProcessStatus.SCHEDULED) + .scheduledAt(Instant.now()) + .userId(userId) + .executionEnvName("using-servers-env") + .build(); + processExecutionRepository.save(execution); + + String bindingName = switch (processConfig.processType()) { + case SECURITY_ANALYSIS -> "publishRunSecurityAnalysisUsingServers-out-0"; + }; + notificationService.sendProcessRunMessage(caseUuid, processConfig, execution.getId(), null, bindingName); + + return execution.getId(); + } } diff --git a/monitor-server/src/main/resources/application-local.yaml b/monitor-server/src/main/resources/application-local.yaml index 248fecfc..db9fefeb 100644 --- a/monitor-server/src/main/resources/application-local.yaml +++ b/monitor-server/src/main/resources/application-local.yaml @@ -18,4 +18,8 @@ gridsuite: report-server: base-uri: http://localhost:5028 security-analysis-server: - base-uri: http://localhost:5023 \ No newline at end of file + base-uri: http://localhost:5023 + network-modification-server: + base-uri: http://localhost:5007 + state-estimation-server: + base-uri: http://localhost:6040 diff --git a/monitor-server/src/main/resources/config/application.yaml b/monitor-server/src/main/resources/config/application.yaml index 1b47c9b7..102673e1 100644 --- a/monitor-server/src/main/resources/config/application.yaml +++ b/monitor-server/src/main/resources/config/application.yaml @@ -2,6 +2,8 @@ spring: application: name: monitor-server cloud: + function: + definition: consumeMonitorUpdate;consumeRunUsingServers;consumeNetworkModifications;consumeSecurityAnalysis stream: bindings: publishRunSecurityAnalysis-out-0: @@ -9,6 +11,15 @@ spring: consumeMonitorUpdate-in-0: destination: ${powsybl-ws.rabbitmq.destination.prefix:}monitor.update group: monitorUpdateGroup + publishRunSecurityAnalysisUsingServers-out-0: + destination: ${powsybl-ws.rabbitmq.destination.prefix:}monitor.process.securityanalysis.using.servers.run + consumeRunUsingServers-in-0: + destination: ${powsybl-ws.rabbitmq.destination.prefix:}monitor.process.securityanalysis.using.servers.run + consumeNetworkModifications-in-0: + destination: ${powsybl-ws.rabbitmq.destination.prefix:}modifications.case.result + consumeSecurityAnalysis-in-0: + destination: ${powsybl-ws.rabbitmq.destination.prefix:}sa.case.result + output-bindings: publishRunSecurityAnalysis-out-0;publishRunSecurityAnalysisUsingServers-out-0; powsybl-ws: database: diff --git a/monitor-server/src/main/resources/db/changelog/changesets/changelog_20260225T073450Z.xml b/monitor-server/src/main/resources/db/changelog/changesets/changelog_20260225T073450Z.xml new file mode 100644 index 00000000..f58dfb1c --- /dev/null +++ b/monitor-server/src/main/resources/db/changelog/changesets/changelog_20260225T073450Z.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/monitor-server/src/main/resources/db/changelog/db.changelog-master.yaml b/monitor-server/src/main/resources/db/changelog/db.changelog-master.yaml index 38ad3a30..fb0b96ad 100644 --- a/monitor-server/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/monitor-server/src/main/resources/db/changelog/db.changelog-master.yaml @@ -11,6 +11,9 @@ databaseChangeLog: - include: file: changesets/changelog_20260212T082157Z.xml relativeToChangelogFile: true + - include: + file: changesets/changelog_20260225T073450Z.xml + relativeToChangelogFile: true - include: file: changesets/changelog_20260227T101113Z.xml relativeToChangelogFile: true diff --git a/monitor-server/src/test/java/org/gridsuite/monitor/server/controllers/MonitorControllerTest.java b/monitor-server/src/test/java/org/gridsuite/monitor/server/controllers/MonitorControllerTest.java index 817281b0..da311213 100644 --- a/monitor-server/src/test/java/org/gridsuite/monitor/server/controllers/MonitorControllerTest.java +++ b/monitor-server/src/test/java/org/gridsuite/monitor/server/controllers/MonitorControllerTest.java @@ -198,9 +198,9 @@ void getLaunchedProcesses() throws Exception { @Test void getStepsInfos() throws Exception { UUID executionId = UUID.randomUUID(); - ProcessExecutionStep processExecutionStep1 = new ProcessExecutionStep(UUID.randomUUID(), "loadNetwork", 0, StepStatus.RUNNING, null, null, UUID.randomUUID(), Instant.now(), null); - ProcessExecutionStep processExecutionStep2 = new ProcessExecutionStep(UUID.randomUUID(), "applyModifs", 1, StepStatus.SCHEDULED, null, null, UUID.randomUUID(), null, null); - ProcessExecutionStep processExecutionStep3 = new ProcessExecutionStep(UUID.randomUUID(), "runSA", 2, StepStatus.SCHEDULED, null, null, UUID.randomUUID(), null, null); + ProcessExecutionStep processExecutionStep1 = new ProcessExecutionStep(UUID.randomUUID(), "loadNetwork", 0, StepStatus.RUNNING, null, null, UUID.randomUUID(), Instant.now(), null, null); + ProcessExecutionStep processExecutionStep2 = new ProcessExecutionStep(UUID.randomUUID(), "applyModifs", 1, StepStatus.SCHEDULED, null, null, UUID.randomUUID(), null, null, null); + ProcessExecutionStep processExecutionStep3 = new ProcessExecutionStep(UUID.randomUUID(), "runSA", 2, StepStatus.SCHEDULED, null, null, UUID.randomUUID(), null, null, null); List processExecutionStepList = List.of(processExecutionStep1, processExecutionStep2, processExecutionStep3); when(processExecutionService.getStepsInfos(executionId)).thenReturn(Optional.of(processExecutionStepList)); diff --git a/monitor-server/src/test/java/org/gridsuite/monitor/server/mappers/processexecution/ProcessExecutionStepMapperTest.java b/monitor-server/src/test/java/org/gridsuite/monitor/server/mappers/processexecution/ProcessExecutionStepMapperTest.java index 30df1dd1..8ac43dc1 100644 --- a/monitor-server/src/test/java/org/gridsuite/monitor/server/mappers/processexecution/ProcessExecutionStepMapperTest.java +++ b/monitor-server/src/test/java/org/gridsuite/monitor/server/mappers/processexecution/ProcessExecutionStepMapperTest.java @@ -35,7 +35,8 @@ void updateEntityFromEntity() { ResultType.SECURITY_ANALYSIS, UUID.randomUUID(), Instant.now(), - Instant.now().plusSeconds(10) + Instant.now().plusSeconds(10), + UUID.randomUUID() ); UUID targetID = UUID.randomUUID(); @@ -48,7 +49,8 @@ void updateEntityFromEntity() { ResultType.SECURITY_ANALYSIS, UUID.randomUUID(), Instant.now().plusSeconds(20), - Instant.now().plusSeconds(30) + Instant.now().plusSeconds(30), + UUID.randomUUID() ); mapper.updateEntityFromEntity(source, target); diff --git a/monitor-server/src/test/java/org/gridsuite/monitor/server/services/processexecution/ProcessExecutionServiceTest.java b/monitor-server/src/test/java/org/gridsuite/monitor/server/services/processexecution/ProcessExecutionServiceTest.java index 9360b82a..4c329697 100644 --- a/monitor-server/src/test/java/org/gridsuite/monitor/server/services/processexecution/ProcessExecutionServiceTest.java +++ b/monitor-server/src/test/java/org/gridsuite/monitor/server/services/processexecution/ProcessExecutionServiceTest.java @@ -501,8 +501,8 @@ void getStepsInfos() { Optional> result = processExecutionService.getStepsInfos(executionUuid); - ProcessExecutionStep processExecutionStep1 = new ProcessExecutionStep(stepId1, "loadNetwork", 0, StepStatus.RUNNING, null, null, null, startedAt1, null); - ProcessExecutionStep processExecutionStep2 = new ProcessExecutionStep(stepId2, "applyModifs", 1, StepStatus.SCHEDULED, null, null, null, null, null); + ProcessExecutionStep processExecutionStep1 = new ProcessExecutionStep(stepId1, "loadNetwork", 0, StepStatus.RUNNING, null, null, null, startedAt1, null, null); + ProcessExecutionStep processExecutionStep2 = new ProcessExecutionStep(stepId2, "applyModifs", 1, StepStatus.SCHEDULED, null, null, null, null, null, null); assertThat(result).isPresent(); assertThat(result.get()).hasSize(2).containsExactly(processExecutionStep1, processExecutionStep2);