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