Skip to content

Commit 22ee0ad

Browse files
authored
Computation in debug mode (#117)
Signed-off-by: Thang PHAM <[email protected]>
1 parent c7ea626 commit 22ee0ad

File tree

15 files changed

+154
-60
lines changed

15 files changed

+154
-60
lines changed

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@
5151
<properties>
5252
<gridsuite-dependencies.version>42.0.0</gridsuite-dependencies.version>
5353
<!-- FIXME to remove at next upgrade of gridsuite-dependencies -->
54-
<gridsuite-computation.version>1.0.0</gridsuite-computation.version>
54+
<gridsuite-computation.version>1.1.0</gridsuite-computation.version>
5555
<!-- FIXME to remove at next upgrade of powsybl-ws-dependencies -->
56-
<powsybl-ws-commons.version>1.28.0</powsybl-ws-commons.version>
56+
<powsybl-ws-commons.version>1.28.1</powsybl-ws-commons.version>
5757
<powsybl-open-reac.version>0.14.0</powsybl-open-reac.version>
5858
<powsybl-optimizer-commons.version>0.13.0</powsybl-optimizer-commons.version>
5959
<mockwebserver3.version>5.0.0-alpha.14</mockwebserver3.version>

src/main/java/org/gridsuite/voltageinit/server/VoltageInitController.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,19 @@
1111
import io.swagger.v3.oas.annotations.responses.ApiResponse;
1212
import io.swagger.v3.oas.annotations.responses.ApiResponses;
1313
import io.swagger.v3.oas.annotations.tags.Tag;
14-
1514
import org.gridsuite.voltageinit.server.dto.VoltageInitResult;
1615
import org.gridsuite.voltageinit.server.dto.VoltageInitStatus;
1716
import org.gridsuite.voltageinit.server.service.VoltageInitRunContext;
1817
import org.gridsuite.voltageinit.server.service.VoltageInitService;
18+
import org.springframework.core.io.Resource;
1919
import org.springframework.http.MediaType;
2020
import org.springframework.http.ResponseEntity;
2121
import org.springframework.web.bind.annotation.*;
2222

23-
import java.util.List;
24-
import java.util.UUID;
25-
2623
import java.net.URLDecoder;
2724
import java.nio.charset.StandardCharsets;
25+
import java.util.List;
26+
import java.util.UUID;
2827

2928
import static org.gridsuite.computation.service.NotificationService.HEADER_USER_ID;
3029
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
@@ -52,9 +51,10 @@ public ResponseEntity<UUID> runAndSave(@Parameter(description = "Network UUID")
5251
@Parameter(description = "reportUuid") @RequestParam(name = "reportUuid", required = false) UUID reportUuid,
5352
@Parameter(description = "reporterId") @RequestParam(name = "reporterId", required = false) String reporterId,
5453
@Parameter(description = "The type name for the report") @RequestParam(name = "reportType", required = false, defaultValue = "VoltageInit") String reportType,
54+
@Parameter(description = "Debug") @RequestParam(name = "debug", required = false, defaultValue = "false") boolean debug,
5555
@Parameter(description = "parametersUuid") @RequestParam(name = "parametersUuid", required = false) UUID parametersUuid,
5656
@RequestHeader(HEADER_USER_ID) String userId) {
57-
VoltageInitRunContext runContext = new VoltageInitRunContext(networkUuid, variantId, receiver, reportUuid, reporterId, reportType, userId, parametersUuid);
57+
VoltageInitRunContext runContext = new VoltageInitRunContext(networkUuid, variantId, receiver, reportUuid, reporterId, reportType, userId, parametersUuid, debug);
5858
UUID resultUuid = voltageInitService.runAndSaveResult(runContext);
5959
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(resultUuid);
6060
}
@@ -124,4 +124,12 @@ public ResponseEntity<Void> resetModificationsGroupUuidInResult(@Parameter(descr
124124
voltageInitService.resetModificationsGroupUuid(resultUuid);
125125
return ResponseEntity.ok().build();
126126
}
127+
128+
@GetMapping(value = "/results/{resultUuid}/download-debug-file", produces = "application/json")
129+
@Operation(summary = "Download a voltage init debug file")
130+
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Voltage init debug file"),
131+
@ApiResponse(responseCode = "404", description = "Voltage init debug file has not been found")})
132+
public ResponseEntity<Resource> downloadDebugFile(@Parameter(description = "Result UUID") @PathVariable("resultUuid") UUID resultUuid) {
133+
return voltageInitService.downloadDebugFile(resultUuid);
134+
}
127135
}

src/main/java/org/gridsuite/voltageinit/server/entities/VoltageInitResultEntity.java

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,17 @@
66
*/
77
package org.gridsuite.voltageinit.server.entities;
88

9-
import java.time.Instant;
10-
import java.util.List;
11-
import java.util.Map;
12-
import java.util.UUID;
13-
14-
import jakarta.persistence.CollectionTable;
15-
import jakarta.persistence.Column;
16-
import jakarta.persistence.ElementCollection;
17-
import jakarta.persistence.Entity;
18-
import jakarta.persistence.ForeignKey;
19-
import jakarta.persistence.Id;
20-
import jakarta.persistence.Index;
21-
import jakarta.persistence.Table;
22-
9+
import jakarta.persistence.*;
2310
import lombok.AllArgsConstructor;
2411
import lombok.Getter;
2512
import lombok.NoArgsConstructor;
2613
import lombok.Setter;
2714

15+
import java.time.Instant;
16+
import java.util.List;
17+
import java.util.Map;
18+
import java.util.UUID;
19+
2820
/**
2921
* @author Ayoub LABIDI <ayoub.labidi at rte-france.com>
3022
*/
@@ -62,4 +54,7 @@ public class VoltageInitResultEntity {
6254

6355
@Column
6456
private Double reactiveSlacksThreshold;
57+
58+
@Column(name = "debug_file_location")
59+
private String debugFileLocation;
6560
}

src/main/java/org/gridsuite/voltageinit/server/repository/ResultRepository.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@
66
*/
77
package org.gridsuite.voltageinit.server.repository;
88

9-
import java.util.Optional;
10-
import java.util.UUID;
11-
129
import org.gridsuite.voltageinit.server.entities.VoltageInitResultEntity;
1310
import org.springframework.data.jpa.repository.JpaRepository;
11+
import org.springframework.data.jpa.repository.Modifying;
12+
import org.springframework.data.jpa.repository.Query;
13+
import org.springframework.data.repository.query.Param;
1414
import org.springframework.stereotype.Repository;
1515

16+
import java.util.Optional;
17+
import java.util.UUID;
18+
1619
/**
1720
* @author Ayoub LABIDI <ayoub.labidi at rte-france.com>
1821
*/
@@ -23,4 +26,8 @@ public interface ResultRepository extends JpaRepository<VoltageInitResultEntity,
2326
Optional<VoltageInitResultEntity> findByResultUuid(UUID resultUuid);
2427

2528
void deleteByResultUuid(UUID resultUuid);
29+
30+
@Modifying
31+
@Query("UPDATE VoltageInitResultEntity r SET r.debugFileLocation = :debugFileLocation WHERE r.resultUuid = :resultUuid")
32+
int updateDebugFileLocation(@Param("resultUuid") UUID resultUuid, @Param("debugFileLocation") String debugFileLocation);
2633
}

src/main/java/org/gridsuite/voltageinit/server/service/VoltageInitResultContext.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@
1818
import java.io.UncheckedIOException;
1919
import java.util.*;
2020

21-
import static org.gridsuite.computation.service.NotificationService.HEADER_RECEIVER;
22-
import static org.gridsuite.computation.service.NotificationService.HEADER_USER_ID;
21+
import static org.gridsuite.computation.service.NotificationService.*;
2322

2423
/**
2524
* @author Etienne Homer <etienne.homer at rte-france.com>
@@ -51,6 +50,7 @@ public static VoltageInitResultContext fromMessage(Message<String> message, Obje
5150
String variantId = (String) headers.get(VARIANT_ID_HEADER);
5251
String receiver = (String) headers.get(HEADER_RECEIVER);
5352
String userId = (String) headers.get(HEADER_USER_ID);
53+
Boolean debug = (Boolean) headers.get(HEADER_DEBUG);
5454
Map<String, Double> voltageLevelsIdsRestricted;
5555
try {
5656
voltageLevelsIdsRestricted = headers.get(VOLTAGE_LEVELS_IDS_RESTRICTED) != null ?
@@ -68,8 +68,7 @@ public static VoltageInitResultContext fromMessage(Message<String> message, Obje
6868
String reporterId = headers.containsKey(REPORTER_ID_HEADER) ? (String) headers.get(REPORTER_ID_HEADER) : null;
6969
String reportType = headers.containsKey(REPORT_TYPE_HEADER) ? (String) headers.get(REPORT_TYPE_HEADER) : null;
7070
VoltageInitRunContext runContext = new VoltageInitRunContext(
71-
networkUuid, variantId, receiver, reportUuid, reporterId, reportType, userId, parametersUuid, voltageLevelsIdsRestricted
72-
);
71+
networkUuid, variantId, receiver, reportUuid, reporterId, reportType, userId, parametersUuid, voltageLevelsIdsRestricted, debug);
7372
return new VoltageInitResultContext(resultUuid, runContext);
7473
}
7574

src/main/java/org/gridsuite/voltageinit/server/service/VoltageInitResultService.java

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
package org.gridsuite.voltageinit.server.service;
88

99
import com.powsybl.iidm.network.Bus;
10+
import com.powsybl.openreac.parameters.output.OpenReacResult;
1011
import org.gridsuite.computation.service.AbstractComputationResultService;
1112
import org.gridsuite.voltageinit.server.dto.VoltageInitStatus;
1213
import org.gridsuite.voltageinit.server.entities.BusVoltageEmbeddable;
@@ -19,14 +20,8 @@
1920
import org.springframework.stereotype.Service;
2021
import org.springframework.transaction.annotation.Transactional;
2122

22-
import com.powsybl.openreac.parameters.output.OpenReacResult;
23-
2423
import java.time.Instant;
25-
import java.util.List;
26-
import java.util.Map;
27-
import java.util.Objects;
28-
import java.util.Optional;
29-
import java.util.UUID;
24+
import java.util.*;
3025
import java.util.stream.Collectors;
3126

3227
/**
@@ -64,7 +59,7 @@ private static VoltageInitResultEntity toVoltageInitResultEntity(UUID resultUuid
6459
}
6560
).filter(Objects::nonNull).toList();
6661
return new VoltageInitResultEntity(resultUuid, Instant.now(), indicators, reactiveSlacks, busVoltages, modificationsGroupUuid,
67-
isReactiveSlacksOverThreshold, reactiveSlacksThreshold);
62+
isReactiveSlacksOverThreshold, reactiveSlacksThreshold, null);
6863
}
6964

7065
@Override
@@ -129,6 +124,25 @@ public void insert(UUID resultUuid, OpenReacResult result, Map<String, Bus> netw
129124
@Transactional
130125
public void insertErrorResult(UUID resultUuid, Map<String, String> errorIndicators) {
131126
Objects.requireNonNull(resultUuid);
132-
resultRepository.save(new VoltageInitResultEntity(resultUuid, Instant.now(), errorIndicators, List.of(), List.of(), null, false, null));
127+
resultRepository.save(new VoltageInitResultEntity(resultUuid, Instant.now(), errorIndicators, List.of(), List.of(), null, false, null, null));
128+
}
129+
130+
@Override
131+
@Transactional
132+
public void saveDebugFileLocation(UUID resultUuid, String debugFilePath) {
133+
resultRepository.findById(resultUuid).ifPresentOrElse(
134+
(var resultEntity) -> resultRepository.updateDebugFileLocation(resultUuid, debugFilePath),
135+
() -> resultRepository.save(new VoltageInitResultEntity(resultUuid, null, null, null, null, null,
136+
false, null, debugFilePath))
137+
);
138+
}
139+
140+
@Override
141+
@Transactional(readOnly = true)
142+
public String findDebugFileLocation(UUID resultUuid) {
143+
Objects.requireNonNull(resultUuid);
144+
return resultRepository.findById(resultUuid)
145+
.map(VoltageInitResultEntity::getDebugFileLocation)
146+
.orElse(null);
133147
}
134148
}

src/main/java/org/gridsuite/voltageinit/server/service/VoltageInitRunContext.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,16 @@ public class VoltageInitRunContext extends AbstractComputationRunContext<Void> {
2424

2525
private final Map<String, Double> voltageLevelsIdsRestricted;
2626

27-
public VoltageInitRunContext(UUID networkUuid, String variantId, String receiver, UUID reportUuid, String reporterId, String reportType, String userId, UUID parametersUuid, Map<String, Double> voltageLevelsIdsRestricted) {
27+
public VoltageInitRunContext(UUID networkUuid, String variantId, String receiver, UUID reportUuid, String reporterId,
28+
String reportType, String userId, UUID parametersUuid, Map<String, Double> voltageLevelsIdsRestricted, Boolean debug) {
2829
super(networkUuid, variantId, receiver, new ReportInfos(reportUuid, reporterId, reportType), userId,
2930
"default-provider", // TODO : replace with null when fix in powsybl-ws-commons will handle null provider
30-
null);
31+
null, debug);
3132
this.parametersUuid = parametersUuid;
3233
this.voltageLevelsIdsRestricted = voltageLevelsIdsRestricted;
3334
}
3435

35-
public VoltageInitRunContext(UUID networkUuid, String variantId, String receiver, UUID reportUuid, String reporterId, String reportType, String userId, UUID parametersUuid) {
36-
this(networkUuid, variantId, receiver, reportUuid, reporterId, reportType, userId, parametersUuid, new HashMap<>());
36+
public VoltageInitRunContext(UUID networkUuid, String variantId, String receiver, UUID reportUuid, String reporterId, String reportType, String userId, UUID parametersUuid, Boolean debug) {
37+
this(networkUuid, variantId, receiver, reportUuid, reporterId, reportType, userId, parametersUuid, new HashMap<>(), debug);
3738
}
3839
}

src/main/java/org/gridsuite/voltageinit/server/service/VoltageInitService.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88

99
import com.fasterxml.jackson.databind.ObjectMapper;
1010
import com.powsybl.network.store.client.NetworkStoreService;
11-
1211
import org.gridsuite.computation.dto.GlobalFilter;
12+
import org.gridsuite.computation.s3.ComputationS3Service;
1313
import org.gridsuite.computation.service.AbstractComputationService;
1414
import org.gridsuite.computation.service.NotificationService;
1515
import org.gridsuite.computation.service.UuidGeneratorService;
@@ -45,9 +45,11 @@ public VoltageInitService(NotificationService notificationService,
4545
NetworkModificationService networkModificationService,
4646
UuidGeneratorService uuidGeneratorService,
4747
VoltageInitResultService resultService,
48+
@Autowired(required = false)
49+
ComputationS3Service computationS3Service,
4850
FilterService filterService,
4951
ObjectMapper objectMapper) {
50-
super(notificationService, resultService, objectMapper, uuidGeneratorService, null);
52+
super(notificationService, resultService, computationS3Service, objectMapper, uuidGeneratorService, null);
5153
this.networkModificationService = Objects.requireNonNull(networkModificationService);
5254
this.filterService = Objects.requireNonNull(filterService);
5355
}

src/main/java/org/gridsuite/voltageinit/server/service/VoltageInitWorkerService.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@
1818
import com.powsybl.openreac.parameters.input.OpenReacParameters;
1919
import com.powsybl.openreac.parameters.output.OpenReacResult;
2020
import com.powsybl.openreac.parameters.output.OpenReacStatus;
21+
import org.gridsuite.computation.s3.ComputationS3Service;
2122
import org.gridsuite.computation.service.*;
2223
import org.gridsuite.voltageinit.server.dto.VoltageInitStatus;
2324
import org.gridsuite.voltageinit.server.dto.parameters.VoltageInitParametersInfos;
2425
import org.gridsuite.voltageinit.server.service.parameters.VoltageInitParametersService;
2526
import org.slf4j.Logger;
2627
import org.slf4j.LoggerFactory;
28+
import org.springframework.beans.factory.annotation.Autowired;
2729
import org.springframework.context.annotation.Bean;
2830
import org.springframework.messaging.Message;
2931
import org.springframework.stereotype.Service;
@@ -63,10 +65,12 @@ public VoltageInitWorkerService(NetworkStoreService networkStoreService,
6365
NetworkModificationService networkModificationService,
6466
VoltageInitParametersService voltageInitParametersService,
6567
VoltageInitResultService resultService,
68+
@Autowired(required = false)
69+
ComputationS3Service computationS3Service,
6670
ReportService reportService,
6771
VoltageInitObserver voltageInitObserver,
6872
ObjectMapper objectMapper) {
69-
super(networkStoreService, notificationService, reportService, resultService, executionService, voltageInitObserver, objectMapper);
73+
super(networkStoreService, notificationService, reportService, resultService, computationS3Service, executionService, voltageInitObserver, objectMapper);
7074
this.networkModificationService = Objects.requireNonNull(networkModificationService);
7175
this.voltageInitParametersService = Objects.requireNonNull(voltageInitParametersService);
7276
}
@@ -88,6 +92,9 @@ private boolean checkReactiveSlacksOverThreshold(OpenReacResult openReacResult,
8892
@Override
8993
protected CompletableFuture<OpenReacResult> getCompletableFuture(VoltageInitRunContext context, String provider, UUID resultUuid) {
9094
OpenReacParameters parameters = voltageInitParametersService.buildOpenReacParameters(context, context.getNetwork());
95+
if (context.getDebugDir() != null) {
96+
parameters.setDebugDir(context.getDebugDir().toString());
97+
}
9198
OpenReacConfig config = OpenReacConfig.load();
9299
return OpenReacRunner.runAsync(context.getNetwork(), context.getNetwork().getVariantManager().getWorkingVariantId(), parameters, config, executionService.getComputationManager(), context.getReportNode(), null);
93100
}

src/main/resources/application-local.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ server:
44
spring:
55
rabbitmq:
66
addresses: localhost
7+
cloud:
8+
aws:
9+
endpoint: http://localhost:19000
710

811
powsybl-ws:
912
database:

0 commit comments

Comments
 (0)