You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by jo...@apache.org on 2022/02/04 15:56:22 UTC

[sling-org-apache-sling-event] 01/01: SLING-11091: expose the number of scheduled jobs as metric

This is an automated email from the ASF dual-hosted git repository.

joerghoh pushed a commit to branch improvement/SLING-11091-improve-observability
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-event.git

commit 8ae7eb80c76693e6f121eeed12f9e4c93c3acd6a
Author: Joerg Hoh <jh...@adobe.com>
AuthorDate: Fri Feb 4 16:56:02 2022 +0100

    SLING-11091: expose the number of scheduled jobs as metric
---
 .../apache/sling/event/impl/jobs/JobManagerImpl.java   | 18 +++++++++++++++++-
 .../event/impl/jobs/scheduling/JobSchedulerImpl.java   |  8 ++++++++
 2 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/apache/sling/event/impl/jobs/JobManagerImpl.java b/src/main/java/org/apache/sling/event/impl/jobs/JobManagerImpl.java
index 388b5cf..c3e963a 100644
--- a/src/main/java/org/apache/sling/event/impl/jobs/JobManagerImpl.java
+++ b/src/main/java/org/apache/sling/event/impl/jobs/JobManagerImpl.java
@@ -67,6 +67,7 @@ import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Deactivate;
 import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
 import org.osgi.service.component.annotations.ReferencePolicyOption;
 import org.osgi.service.event.Event;
 import org.osgi.service.event.EventAdmin;
@@ -75,6 +76,9 @@ import org.osgi.service.event.EventHandler;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.codahale.metrics.Gauge;
+import com.codahale.metrics.MetricRegistry;
+
 
 /**
  * Implementation of the job manager.
@@ -91,6 +95,8 @@ import org.slf4j.LoggerFactory;
     })
 public class JobManagerImpl
     implements JobManager, EventHandler, Runnable {
+    
+    private static final String GAUGE_TOTAL_SCHEDULED_JOBS = "totalScheduledJobs";
 
     /** Default logger. */
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
@@ -116,6 +122,10 @@ public class JobManagerImpl
 
     @Reference
     private StatisticsManager statisticsManager;
+    
+    
+    @Reference(target = "(name=sling)", cardinality = ReferenceCardinality.OPTIONAL)
+    private MetricRegistry metricRegistry;
 
     @Reference
     private QueueManager qManager;
@@ -134,6 +144,10 @@ public class JobManagerImpl
     @Activate
     protected void activate(final BundleContext ctx, final Map<String, Object> props) throws LoginException {
         this.jobScheduler = new org.apache.sling.event.impl.jobs.scheduling.JobSchedulerImpl(this.configuration, this.scheduler, this);
+        if (metricRegistry != null) {
+            Gauge<Integer> sup = () -> jobScheduler.getTotalNumberOfScheduledJobs();
+            metricRegistry.gauge(GAUGE_TOTAL_SCHEDULED_JOBS, () -> sup);
+        }
         this.maintenanceTask = new CleanUpTask(this.configuration, this.jobScheduler);
 
         final Dictionary<String, Object> regProps = new Hashtable<>();
@@ -160,7 +174,9 @@ public class JobManagerImpl
             this.changeListenerReg.unregister();
             this.changeListenerReg = null;
         }
-
+        if (metricRegistry != null) {
+            metricRegistry.remove(GAUGE_TOTAL_SCHEDULED_JOBS);
+        }
         this.jobScheduler.deactivate();
 
         this.maintenanceTask = null;
diff --git a/src/main/java/org/apache/sling/event/impl/jobs/scheduling/JobSchedulerImpl.java b/src/main/java/org/apache/sling/event/impl/jobs/scheduling/JobSchedulerImpl.java
index 4f7de0e..40d2039 100644
--- a/src/main/java/org/apache/sling/event/impl/jobs/scheduling/JobSchedulerImpl.java
+++ b/src/main/java/org/apache/sling/event/impl/jobs/scheduling/JobSchedulerImpl.java
@@ -455,6 +455,14 @@ public class JobSchedulerImpl
         }
         return jobs;
     }
+    
+    /**
+     * Provide the total number of jobs registered in the system, irrespective of topics
+     * @return the total number of scheduled jobs
+     */
+    public int getTotalNumberOfScheduledJobs() {
+       return this.scheduledJobs.size(); 
+    }
 
     /**
      * Change the suspended flag for a scheduled job