You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cs...@apache.org on 2024/05/28 12:53:39 UTC
(sling-org-apache-sling-distribution-journal) 01/01: GRANITE-50740 - Measure current import duration
This is an automated email from the ASF dual-hosted git repository.
cschneider pushed a commit to branch SLING-12328
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-distribution-journal.git
commit 1e44d8dcd6a26e59e171dc0dfb44deae45cd1de5
Author: Christian Schneider <cs...@adobe.com>
AuthorDate: Tue May 28 14:53:23 2024 +0200
GRANITE-50740 - Measure current import duration
---
.../sling/distribution/journal/bookkeeper/BookKeeper.java | 15 +++++++++++++--
.../journal/bookkeeper/SubscriberMetrics.java | 4 ++++
2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/src/main/java/org/apache/sling/distribution/journal/bookkeeper/BookKeeper.java b/src/main/java/org/apache/sling/distribution/journal/bookkeeper/BookKeeper.java
index f38830a..e9a569a 100644
--- a/src/main/java/org/apache/sling/distribution/journal/bookkeeper/BookKeeper.java
+++ b/src/main/java/org/apache/sling/distribution/journal/bookkeeper/BookKeeper.java
@@ -32,6 +32,7 @@ import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicLong;
import java.util.function.Consumer;
import org.apache.sling.api.resource.LoginException;
@@ -101,6 +102,7 @@ public class BookKeeper {
private final ImportPreProcessor importPreProcessor;
private final ImportPostProcessor importPostProcessor;
private final InvalidationProcessor invalidationProcessor;
+ private final AtomicLong currentImportStartTime;
private int skippedCounter = 0;
public BookKeeper(ResourceResolverFactory resolverFactory, SubscriberMetrics subscriberMetrics,
@@ -123,6 +125,8 @@ public class BookKeeper {
this.importPreProcessor = importPreProcessor;
this.importPostProcessor = importPostProcessor;
this.invalidationProcessor = invalidationProcessor;
+ this.subscriberMetrics.currentImportDuration(this::getCurrentImportDuration);
+ this.currentImportStartTime = new AtomicLong();
log.info("Started bookkeeper {}.", config);
}
@@ -148,7 +152,7 @@ public class BookKeeper {
ResourceResolver importerResolver = getServiceResolver(SUBSERVICE_IMPORTER)) {
// Execute the pre-processor
preProcess(pkgMsg);
-
+ this.currentImportStartTime.set(System.currentTimeMillis());
packageHandler.apply(importerResolver, pkgMsg);
if (config.isEditable()) {
storeStatus(importerResolver, new PackageStatus(Status.IMPORTED, offset, pkgMsg.getPubAgentName()));
@@ -160,7 +164,7 @@ public class BookKeeper {
// Execute the post-processor
postProcess(pkgMsg);
-
+
clearPackageRetriesOnSuccess(pkgMsg);
Event event = new AppliedEvent(pkgMsg, config.getSubAgentName()).toEvent();
@@ -169,6 +173,8 @@ public class BookKeeper {
subscriberMetrics.getPackageStatusCounter(pkgMsg.getPubAgentName(), Status.IMPORTED).increment();
} catch (DistributionException | LoginException | IOException | RuntimeException | ImportPreProcessException |ImportPostProcessException e) {
failure(pkgMsg, offset, e);
+ } finally {
+ this.currentImportStartTime.set(0L);
}
}
@@ -491,4 +497,9 @@ public class BookKeeper {
return s;
}
}
+
+ private Long getCurrentImportDuration() {
+ long importStartTime = this.currentImportStartTime.get();
+ return importStartTime == 0 ? 0 : System.currentTimeMillis() - importStartTime;
+ }
}
diff --git a/src/main/java/org/apache/sling/distribution/journal/bookkeeper/SubscriberMetrics.java b/src/main/java/org/apache/sling/distribution/journal/bookkeeper/SubscriberMetrics.java
index 377cbac..a981c59 100644
--- a/src/main/java/org/apache/sling/distribution/journal/bookkeeper/SubscriberMetrics.java
+++ b/src/main/java/org/apache/sling/distribution/journal/bookkeeper/SubscriberMetrics.java
@@ -87,6 +87,7 @@ public class SubscriberMetrics {
private static final String IMPORT_PRE_PROCESS_DURATION = SUB_COMPONENT + "import_pre_process_duration";
private static final String IMPORT_POST_PROCESS_DURATION = SUB_COMPONENT + "import_post_process_duration";
private static final String INVALIDATION_PROCESS_DURATION = SUB_COMPONENT + "invalidation_process_duration";
+ private static final String CURRENT_IMPORT_DURATION = SUB_COMPONENT + "current_import_duration";
private final MetricsService metricsService;
@@ -260,5 +261,8 @@ public class SubscriberMetrics {
metricsService.gauge(getMetricName(CURRENT_RETRIES, tags), retriesCallback);
}
+ public void currentImportDuration(Supplier<Long> importDurationCallback) {
+ metricsService.gauge(getMetricName(CURRENT_IMPORT_DURATION, tags), importDurationCallback);
+ }
}
\ No newline at end of file