Skip to content

Commit f67c862

Browse files
Add metric for variant build (#683)
1 parent 8a0395a commit f67c862

File tree

2 files changed

+34
-38
lines changed

2 files changed

+34
-38
lines changed

src/main/java/org/gridsuite/modification/server/service/BuildWorkerService.java

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,13 @@
77
package org.gridsuite.modification.server.service;
88

99
import com.fasterxml.jackson.databind.ObjectMapper;
10-
import com.google.common.collect.Sets;
1110
import lombok.NonNull;
11+
import lombok.RequiredArgsConstructor;
1212
import org.gridsuite.modification.server.BuildException;
1313
import org.gridsuite.modification.server.dto.BuildInfos;
1414
import org.gridsuite.modification.server.dto.NetworkModificationResult;
1515
import org.slf4j.Logger;
1616
import org.slf4j.LoggerFactory;
17-
import org.springframework.beans.factory.annotation.Autowired;
1817
import org.springframework.context.annotation.Bean;
1918
import org.springframework.messaging.Message;
2019
import org.springframework.stereotype.Service;
@@ -34,42 +33,28 @@
3433
* @author Franck Lecuyer <franck.lecuyer at rte-france.com>
3534
*/
3635
@Service
36+
@RequiredArgsConstructor
3737
public class BuildWorkerService {
3838

3939
private static final Logger LOGGER = LoggerFactory.getLogger(BuildWorkerService.class);
4040

4141
public static final String CANCEL_MESSAGE = "Build was canceled";
4242
public static final String FAIL_MESSAGE = "Build has failed";
4343

44-
private final NetworkModificationService networkModificationService;
45-
46-
private final NetworkModificationObserver networkModificationObserver;
47-
48-
private final ObjectMapper objectMapper;
49-
50-
private final BuildStoppedPublisherService stoppedPublisherService;
44+
@NonNull private final NetworkModificationService networkModificationService;
45+
@NonNull private final NetworkModificationObserver networkModificationObserver;
46+
@NonNull private final ObjectMapper objectMapper;
47+
@NonNull private final BuildStoppedPublisherService stoppedPublisherService;
48+
@NonNull private NotificationService notificationService;
5149

5250
private final Map<String, CompletableFuture<NetworkModificationResult>> futures = new ConcurrentHashMap<>();
5351

5452
private final Map<String, BuildCancelContext> cancelBuildRequests = new ConcurrentHashMap<>();
5553

56-
private final Set<String> buildRequests = Sets.newConcurrentHashSet();
54+
private final Set<String> buildRequests = ConcurrentHashMap.newKeySet();
5755

5856
private final Lock lockRunAndCancel = new ReentrantLock();
5957

60-
@Autowired
61-
private NotificationService notificationService;
62-
63-
public BuildWorkerService(@NonNull NetworkModificationService networkModificationService,
64-
@NonNull NetworkModificationObserver networkModificationObserver,
65-
@NonNull ObjectMapper objectMapper,
66-
@NonNull BuildStoppedPublisherService stoppedPublisherService) {
67-
this.networkModificationService = networkModificationService;
68-
this.networkModificationObserver = networkModificationObserver;
69-
this.objectMapper = objectMapper;
70-
this.stoppedPublisherService = stoppedPublisherService;
71-
}
72-
7358
private CompletableFuture<NetworkModificationResult> execBuildVariant(BuildExecContext execContext, BuildInfos buildInfos) {
7459
lockRunAndCancel.lock();
7560
try {
@@ -83,10 +68,9 @@ private CompletableFuture<NetworkModificationResult> execBuildVariant(BuildExecC
8368
buildRequests.add(execContext.getReceiver()); // receiver is the node uuid to build
8469

8570
CompletableFuture<NetworkModificationResult> future = CompletableFuture.supplyAsync(() -> {
86-
LOGGER.info("Starting build on variant : {}", buildInfos.getDestinationVariantId());
87-
return networkModificationService.buildVariant(networkUuid, buildInfos);
88-
}
89-
);
71+
LOGGER.info("Starting build on variant : {}", buildInfos.getDestinationVariantId());
72+
return networkModificationObserver.observeBuild(execContext, () -> networkModificationService.buildVariant(networkUuid, buildInfos));
73+
});
9074

9175
futures.put(receiver, future);
9276

@@ -98,7 +82,7 @@ private CompletableFuture<NetworkModificationResult> execBuildVariant(BuildExecC
9882

9983
@Bean
10084
public Consumer<Message<String>> consumeBuild() {
101-
return message -> networkModificationObserver.observeBuild(() -> {
85+
return message -> networkModificationObserver.observeFullBuild(() -> {
10286
BuildExecContext execContext;
10387
try {
10488
execContext = BuildExecContext.fromMessage(message, objectMapper);
@@ -117,7 +101,7 @@ private void startBuild(BuildExecContext execContext) {
117101
if (future != null && (result = future.join()) != null) { // result available
118102
notificationService.emitBuildResultMessage(result, execContext.getReceiver(), execContext.getWorkflowType(), execContext.getWorkflowInfos());
119103
LOGGER.info("Build complete on node '{}'", execContext.getReceiver());
120-
} else { // result not available : stop build request
104+
} else { // result not available: stop build request
121105
if (cancelBuildRequests.get(execContext.getReceiver()) != null) {
122106
stoppedPublisherService.publishCancel(execContext.getReceiver(), CANCEL_MESSAGE, execContext.getWorkflowType(), execContext.getWorkflowInfos());
123107
}

src/main/java/org/gridsuite/modification/server/service/NetworkModificationObserver.java

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,18 @@
33
import io.micrometer.core.instrument.Gauge;
44
import io.micrometer.core.instrument.MeterRegistry;
55
import io.micrometer.observation.Observation;
6+
import io.micrometer.observation.Observation.CheckedCallable;
7+
import io.micrometer.observation.Observation.CheckedRunnable;
68
import io.micrometer.observation.ObservationRegistry;
79
import lombok.NonNull;
10+
import lombok.RequiredArgsConstructor;
811
import org.gridsuite.modification.ModificationType;
912
import org.springframework.stereotype.Service;
1013

1114
import java.util.concurrent.ThreadPoolExecutor;
1215

1316
@Service
17+
@RequiredArgsConstructor
1418
public class NetworkModificationObserver {
1519
private static final String OBSERVATION_PREFIX = "app.network-modification.";
1620
private static final String MODIFICATION_TYPE_TAG_NAME = "modification_type";
@@ -20,20 +24,28 @@ public class NetworkModificationObserver {
2024
private static final String TASK_TYPE_TAG_VALUE_PENDING = "pending";
2125
private static final String TASK_POOL_METER_NAME_PREFIX = OBSERVATION_PREFIX + "tasks.pool.";
2226

23-
private final ObservationRegistry observationRegistry;
24-
private final MeterRegistry meterRegistry;
27+
@NonNull private final ObservationRegistry observationRegistry;
28+
@NonNull private final MeterRegistry meterRegistry;
2529

26-
public NetworkModificationObserver(@NonNull ObservationRegistry observationRegistry, @NonNull MeterRegistry meterRegistry) {
27-
this.observationRegistry = observationRegistry;
28-
this.meterRegistry = meterRegistry;
30+
public <E extends Throwable> void observeApply(final ModificationType modificationType, final CheckedRunnable<E> runnable) throws E {
31+
this.createObservation("apply", modificationType).observeChecked(runnable);
2932
}
3033

31-
public <E extends Throwable> void observeApply(ModificationType modificationType, Observation.CheckedRunnable<E> runnable) throws E {
32-
createObservation("apply", modificationType).observeChecked(runnable);
34+
public <E extends Throwable> void observeFullBuild(final CheckedRunnable<E> runnable) throws E {
35+
this.createObservation("consume_build_message").observeChecked(runnable);
3336
}
3437

35-
public <E extends Throwable> void observeBuild(Observation.CheckedRunnable<E> runnable) throws E {
36-
createObservation("build").observeChecked(runnable);
38+
public <R, E extends Throwable> R observeBuild(final BuildExecContext execContext, final CheckedCallable<R, E> callable) throws E {
39+
Observation observation = this.createObservation("build")
40+
.highCardinalityKeyValue("network_uuid", execContext.getNetworkUuid().toString());
41+
//.highCardinalityKeyValue("receiver", execContext.getReceiver())
42+
if (execContext.getBuildInfos().getOriginVariantId() != null) {
43+
observation = observation.highCardinalityKeyValue("variant_origin", execContext.getBuildInfos().getOriginVariantId());
44+
}
45+
if (execContext.getBuildInfos().getDestinationVariantId() != null) {
46+
observation = observation.highCardinalityKeyValue("variant_destination", execContext.getBuildInfos().getDestinationVariantId());
47+
}
48+
return observation.observeChecked(callable);
3749
}
3850

3951
private Observation createObservation(String name, ModificationType modificationType) {

0 commit comments

Comments
 (0)