From 110124e8e47ec7cd5c1cf770b72cafcb7b459745 Mon Sep 17 00:00:00 2001 From: BOUHOURS Antoine Date: Thu, 20 Nov 2025 14:46:31 +0100 Subject: [PATCH 1/2] Handle null provider in observations --- .../service/AbstractComputationObserver.java | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/gridsuite/computation/service/AbstractComputationObserver.java b/src/main/java/org/gridsuite/computation/service/AbstractComputationObserver.java index c645bfd..c0ca903 100644 --- a/src/main/java/org/gridsuite/computation/service/AbstractComputationObserver.java +++ b/src/main/java/org/gridsuite/computation/service/AbstractComputationObserver.java @@ -31,6 +31,7 @@ public abstract class AbstractComputationObserver { protected static final String STATUS_TAG_NAME = "status"; protected static final String COMPUTATION_TOTAL_COUNTER_NAME = OBSERVATION_PREFIX + "count"; protected static final String COMPUTATION_CURRENT_COUNTER_NAME = OBSERVATION_PREFIX + "current.count"; + private static final String UNKNOWN_PROVIDER = "unknown-provider"; private final ObservationRegistry observationRegistry; private final MeterRegistry meterRegistry; @@ -45,12 +46,9 @@ protected AbstractComputationObserver(@NonNull ObservationRegistry observationRe protected abstract String getComputationType(); protected Observation createObservation(String name, AbstractComputationRunContext

runContext) { - Observation observation = Observation.createNotStarted(OBSERVATION_PREFIX + name, observationRegistry) - .lowCardinalityKeyValue(TYPE_TAG_NAME, getComputationType()); - if (runContext.getProvider() != null) { - observation.lowCardinalityKeyValue(PROVIDER_TAG_NAME, runContext.getProvider()); - } - return observation; + return Observation.createNotStarted(OBSERVATION_PREFIX + name, observationRegistry) + .lowCardinalityKeyValue(TYPE_TAG_NAME, getComputationType()) + .lowCardinalityKeyValue(PROVIDER_TAG_NAME, runContext.getProvider() != null ? runContext.getProvider() : UNKNOWN_PROVIDER); } public void observe(String name, AbstractComputationRunContext

runContext, Observation.CheckedRunnable callable) throws E { @@ -64,13 +62,14 @@ public T observe(String name, AbstractComputationRunCon public T observeRun( String name, AbstractComputationRunContext

runContext, Observation.CheckedCallable callable) throws E { T result; + String provider = runContext.getProvider() != null ? runContext.getProvider() : UNKNOWN_PROVIDER; try { - incrementCurrentCount(runContext.getProvider()); + incrementCurrentCount(provider); result = createObservation(name, runContext).observeChecked(callable); } finally { - decrementCurrentCount(runContext.getProvider()); + decrementCurrentCount(provider); } - incrementTotalCount(runContext, result); + incrementTotalCount(provider, result); return result; } @@ -91,13 +90,10 @@ private void updateCurrentCountMetric(String provider) { .register(meterRegistry); } - private void incrementTotalCount(AbstractComputationRunContext

runContext, R result) { - Counter.Builder builder = - Counter.builder(COMPUTATION_TOTAL_COUNTER_NAME); - if (runContext.getProvider() != null) { - builder.tag(PROVIDER_TAG_NAME, runContext.getProvider()); - } - builder.tag(TYPE_TAG_NAME, getComputationType()) + private void incrementTotalCount(String provider, R result) { + Counter.builder(COMPUTATION_TOTAL_COUNTER_NAME) + .tag(PROVIDER_TAG_NAME, provider) + .tag(TYPE_TAG_NAME, getComputationType()) .tag(STATUS_TAG_NAME, getResultStatus(result)) .register(meterRegistry) .increment(); From 824428cfd5b476a1f355ff1836161426333ddd95 Mon Sep 17 00:00:00 2001 From: BOUHOURS Antoine Date: Thu, 20 Nov 2025 15:14:15 +0100 Subject: [PATCH 2/2] Add test --- .../org/gridsuite/computation/ComputationTest.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/test/java/org/gridsuite/computation/ComputationTest.java b/src/test/java/org/gridsuite/computation/ComputationTest.java index d3b110f..3ed7946 100644 --- a/src/test/java/org/gridsuite/computation/ComputationTest.java +++ b/src/test/java/org/gridsuite/computation/ComputationTest.java @@ -529,4 +529,15 @@ void testDownloadDebugFileIOException() throws IOException { verify(computationS3Service).downloadFile(S3_KEY); } + @Test + void testObserveRunWithNullProvider() { + MockComputationObserver observer = new MockComputationObserver(ObservationRegistry.create(), new SimpleMeterRegistry()); + + MockComputationRunContext context = new MockComputationRunContext( + UUID.randomUUID(), "variantId", "receiver", + new ReportInfos(null, "reporter", "computationType"), + "userId", null, new Object()); + + assertDoesNotThrow(() -> observer.observeRun("testName", context, () -> "result")); + } }