diff --git a/src/main/java/org/gridsuite/study/server/notification/NotificationService.java b/src/main/java/org/gridsuite/study/server/notification/NotificationService.java index 1934f497e..0042d9b2e 100644 --- a/src/main/java/org/gridsuite/study/server/notification/NotificationService.java +++ b/src/main/java/org/gridsuite/study/server/notification/NotificationService.java @@ -66,6 +66,9 @@ public class NotificationService { public static final String UPDATE_TYPE_SECURITY_ANALYSIS_FAILED = "securityAnalysis_failed"; public static final String UPDATE_TYPE_SECURITY_ANALYSIS_RESULT = "securityAnalysisResult"; public static final String UPDATE_TYPE_SECURITY_ANALYSIS_STATUS = "securityAnalysis_status"; + public static final String UPDATE_TYPE_SECURITY_ANALYSIS_PROGRESS = "securityAnalysis_progress"; + public static final String HEADER_SA_PROGRESS_CURRENT = "progressCurrent"; + public static final String HEADER_SA_PROGRESS_TOTAL = "progressTotal"; public static final String UPDATE_TYPE_SENSITIVITY_ANALYSIS_RESULT = "sensitivityAnalysisResult"; public static final String UPDATE_TYPE_SENSITIVITY_ANALYSIS_STATUS = "sensitivityAnalysis_status"; public static final String UPDATE_TYPE_SENSITIVITY_ANALYSIS_FAILED = "sensitivityAnalysis_failed"; @@ -494,6 +497,15 @@ public void emitStudyAlert(UUID studyUuid, UUID nodeUuid, UUID rootNetworkUuid, } } + public void emitSecurityAnalysisProgress(UUID studyUuid, UUID nodeUuid, UUID rootNetworkUuid, int current, int total) { + sendStudyUpdateMessage(studyUuid, UPDATE_TYPE_SECURITY_ANALYSIS_PROGRESS, MessageBuilder.withPayload("") + .setHeader(HEADER_NODE, nodeUuid) + .setHeader(HEADER_ROOT_NETWORK_UUID, rootNetworkUuid) + .setHeader(HEADER_SA_PROGRESS_CURRENT, current) + .setHeader(HEADER_SA_PROGRESS_TOTAL, total) + ); + } + @PostCompletion public void emitComputationDebugFileStatus(UUID studyUuid, UUID nodeUuid, UUID rootNetworkUuid, ComputationType computationType, String userId, UUID resultUuid, @Nullable String error) { sendStudyUpdateMessage(studyUuid, COMPUTATION_DEBUG_FILE_STATUS, MessageBuilder.withPayload("") diff --git a/src/main/java/org/gridsuite/study/server/service/ConsumerService.java b/src/main/java/org/gridsuite/study/server/service/ConsumerService.java index 545bbecfa..6db155a1f 100644 --- a/src/main/java/org/gridsuite/study/server/service/ConsumerService.java +++ b/src/main/java/org/gridsuite/study/server/service/ConsumerService.java @@ -813,6 +813,18 @@ public Consumer> consumeSaFailed() { return message -> consumeCalculationFailed(message, SECURITY_ANALYSIS); } + @Bean + public Consumer> consumeSaProgress() { + return message -> getNodeReceiver(message).ifPresent(receiverObj -> { + Integer current = message.getHeaders().get(NotificationService.HEADER_SA_PROGRESS_CURRENT, Integer.class); + Integer total = message.getHeaders().get(NotificationService.HEADER_SA_PROGRESS_TOTAL, Integer.class); + if (current != null && total != null) { + UUID studyUuid = networkModificationTreeService.getStudyUuidForNodeId(receiverObj.getNodeUuid()); + notificationService.emitSecurityAnalysisProgress(studyUuid, receiverObj.getNodeUuid(), receiverObj.getRootNetworkUuid(), current, total); + } + }); + } + @Bean public Consumer> consumeSensitivityAnalysisResult() { return message -> consumeCalculationResult(message, SENSITIVITY_ANALYSIS); diff --git a/src/main/resources/config/application.yaml b/src/main/resources/config/application.yaml index c1cd9ad0a..0780cc8e0 100644 --- a/src/main/resources/config/application.yaml +++ b/src/main/resources/config/application.yaml @@ -5,7 +5,7 @@ spring: allow-circular-references: true cloud: function: - definition: "consumeSaResult;consumeSaStopped;consumeSaFailed;consumeSaCancelFailed;\ + definition: "consumeSaResult;consumeSaStopped;consumeSaFailed;consumeSaCancelFailed;consumeSaProgress;\ consumeDsDebug;consumeDsResult;consumeDsStopped;consumeDsFailed;consumeDsCancelFailed;\ consumeDsaDebug;consumeDsaResult;consumeDsaStopped;consumeDsaFailed;consumeDsaCancelFailed;\ consumeDmcDebug;consumeDmcResult;consumeDmcStopped;consumeDmcFailed;consumeDmcCancelFailed;\ @@ -36,6 +36,9 @@ spring: consumeSaFailed-in-0: destination: ${powsybl-ws.rabbitmq.destination.prefix:}sa.run.dlx group: dlq + consumeSaProgress-in-0: + destination: ${powsybl-ws.rabbitmq.destination.prefix:}sa.progress + group: studySaProgressGroup consumeDsDebug-in-0: destination: ${powsybl-ws.rabbitmq.destination.prefix:}ds.debug group: studyDsDebugGroup