SLING-11091: expose the number of scheduled jobs as metric
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.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.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 @@
})
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 @@
@Reference
private StatisticsManager statisticsManager;
+
+
+ @Reference(target = "(name=sling)", cardinality = ReferenceCardinality.OPTIONAL)
+ private MetricRegistry metricRegistry;
@Reference
private QueueManager qManager;
@@ -134,6 +144,10 @@
@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 @@
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 @@
}
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