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

rombert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git


The following commit(s) were added to refs/heads/master by this push:
     new de51794  metrics-osgi: configurable thresholds for the consumers
de51794 is described below

commit de517948fa6023f6fb35f0a3e04f94edab1ce961
Author: Robert Munteanu <[email protected]>
AuthorDate: Mon Mar 16 15:15:30 2020 +0100

    metrics-osgi: configurable thresholds for the consumers
---
 osgi-metrics/consumers/pom.xml                     |  4 +++
 ...istener.java => DropwizardMetricsListener.java} | 33 ++++++++++++++++------
 .../consumers/impl/log/LoggingMetricsListener.java | 25 ++++++++++++++--
 3 files changed, 52 insertions(+), 10 deletions(-)

diff --git a/osgi-metrics/consumers/pom.xml b/osgi-metrics/consumers/pom.xml
index 5881884..21e90a5 100644
--- a/osgi-metrics/consumers/pom.xml
+++ b/osgi-metrics/consumers/pom.xml
@@ -55,6 +55,10 @@
         </dependency>
         <dependency>
             <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.service.metatype.annotations</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
             <artifactId>osgi.core</artifactId>
         </dependency>
         <dependency>
diff --git 
a/osgi-metrics/consumers/src/main/java/org/apache/sling/metrics/osgi/consumers/impl/dropwizard/SlingMetricsListener.java
 
b/osgi-metrics/consumers/src/main/java/org/apache/sling/metrics/osgi/consumers/impl/dropwizard/DropwizardMetricsListener.java
similarity index 60%
rename from 
osgi-metrics/consumers/src/main/java/org/apache/sling/metrics/osgi/consumers/impl/dropwizard/SlingMetricsListener.java
rename to 
osgi-metrics/consumers/src/main/java/org/apache/sling/metrics/osgi/consumers/impl/dropwizard/DropwizardMetricsListener.java
index 5628a0e..33f659d 100644
--- 
a/osgi-metrics/consumers/src/main/java/org/apache/sling/metrics/osgi/consumers/impl/dropwizard/SlingMetricsListener.java
+++ 
b/osgi-metrics/consumers/src/main/java/org/apache/sling/metrics/osgi/consumers/impl/dropwizard/DropwizardMetricsListener.java
@@ -20,31 +20,48 @@ import org.apache.sling.metrics.osgi.StartupMetrics;
 import org.apache.sling.metrics.osgi.StartupMetricsListener;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.metatype.annotations.AttributeDefinition;
+import org.osgi.service.metatype.annotations.Designate;
+import org.osgi.service.metatype.annotations.ObjectClassDefinition;
 
 import com.codahale.metrics.Gauge;
 import com.codahale.metrics.MetricRegistry;
 
 @Component
-public class SlingMetricsListener implements StartupMetricsListener{
+@Designate(ocd = DropwizardMetricsListener.Config.class)
+public class DropwizardMetricsListener implements StartupMetricsListener {
+
+    @ObjectClassDefinition(name = "Apache Sling Dropwizard Startup Metrics 
Listener")
+    public @interface Config {
+        @AttributeDefinition(name = "Service Restart Threshold", 
description="Minimum number of service restarts during startup needed to create 
a metric for the service")
+        int service_restart_threshold() default 3;
+        @AttributeDefinition(name = "Slow Bundle Startup Threshold", 
description="Minimum bundle startup duration in milliseconds needed to create a 
metric for the bundle")
+        long slow_bundle_threshold_millis() default 200;
+    }
 
     private static final String APPLICATION_STARTUP_GAUGE_NAME = 
"osgi.application_startup_time_millis";
-    private static final String BUNDLE_STARTUP_GAUGE_NAME_PREFIX = 
"osgi.bundle_startup_time_millis.";
-    private static final String SERVICE_RESTART_GAUGE_NAME_PREFIX = 
"osgi.service_restarts_count.";
-    
-    private static final long SERVICE_RESTART_THRESOLD = 3;
-    private static final long SLOW_BUNDLE_THRESHOLD_MILLIS = 50;
+    private static final String BUNDLE_STARTUP_GAUGE_NAME_PREFIX = 
"osgi.slow_bundle_startup_time_millis.";
+    private static final String SERVICE_RESTART_GAUGE_NAME_PREFIX = 
"osgi.excessive_service_restarts_count.";
     
     @Reference
     private MetricRegistry registry;
     
+    private int serviceRestartThreshold;
+    private long slowBundleThresholdMillis;
+    
+    protected void activate(Config cfg) {
+        this.serviceRestartThreshold = cfg.service_restart_threshold();
+        this.slowBundleThresholdMillis = cfg.slow_bundle_threshold_millis();
+    }
+    
     @Override
     public void onStartupComplete(StartupMetrics event) {
         registry.register(APPLICATION_STARTUP_GAUGE_NAME, (Gauge<Long>) () -> 
event.getStartupTime().toMillis() );
         event.getBundleStartDurations().stream()
-            .filter( bsd -> bsd.getStartedAfter().toMillis() >= 
SLOW_BUNDLE_THRESHOLD_MILLIS )
+            .filter( bsd -> bsd.getStartedAfter().toMillis() >= 
slowBundleThresholdMillis )
             .forEach( bsd -> 
registry.register(BUNDLE_STARTUP_GAUGE_NAME_PREFIX + bsd.getSymbolicName(), 
(Gauge<Long>) () -> bsd.getStartedAfter().toMillis()));
         event.getServiceRestarts().stream()
-            .filter( src -> src.getServiceRestarts() >= 
SERVICE_RESTART_THRESOLD )
+            .filter( src -> src.getServiceRestarts() >= 
serviceRestartThreshold )
             .forEach( src -> 
registry.register(SERVICE_RESTART_GAUGE_NAME_PREFIX + 
src.getServiceIdentifier(), (Gauge<Integer>) src::getServiceRestarts) );
     }
 }
diff --git 
a/osgi-metrics/consumers/src/main/java/org/apache/sling/metrics/osgi/consumers/impl/log/LoggingMetricsListener.java
 
b/osgi-metrics/consumers/src/main/java/org/apache/sling/metrics/osgi/consumers/impl/log/LoggingMetricsListener.java
index 64e3e51..44156e0 100644
--- 
a/osgi-metrics/consumers/src/main/java/org/apache/sling/metrics/osgi/consumers/impl/log/LoggingMetricsListener.java
+++ 
b/osgi-metrics/consumers/src/main/java/org/apache/sling/metrics/osgi/consumers/impl/log/LoggingMetricsListener.java
@@ -19,19 +19,40 @@ package org.apache.sling.metrics.osgi.consumers.impl.log;
 import org.apache.sling.metrics.osgi.StartupMetrics;
 import org.apache.sling.metrics.osgi.StartupMetricsListener;
 import org.osgi.service.component.annotations.Component;
+import org.osgi.service.metatype.annotations.AttributeDefinition;
+import org.osgi.service.metatype.annotations.ObjectClassDefinition;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @Component
 public class LoggingMetricsListener implements StartupMetricsListener {
+    
+    @ObjectClassDefinition(name = "Apache Sling Logging Startup Metrics 
Listener")
+    public @interface Config {
+        @AttributeDefinition(name = "Service Restart Threshold", 
description="Minimum number of service restarts during startup needed log the 
number of service restarts")
+        int service_restart_threshold() default 3;
+        @AttributeDefinition(name = "Slow Bundle Startup Threshold", 
description="Minimum bundle startup duration in milliseconds needed to log the 
bundle startup time")
+        long slow_bundle_threshold_millis() default 200;
+    }
 
+    private int serviceRestartThreshold;
+    private long slowBundleThresholdMillis;
+    
+    protected void activate(Config cfg) {
+        this.serviceRestartThreshold = cfg.service_restart_threshold();
+        this.slowBundleThresholdMillis = cfg.slow_bundle_threshold_millis();
+    }
+    
     @Override
     public void onStartupComplete(StartupMetrics event) {
         Logger log = LoggerFactory.getLogger(getClass());
         log.info("Application startup completed in {}", 
event.getStartupTime());
-        event.getBundleStartDurations().forEach( bsd -> log.info("Bundle {} 
started in {}", bsd.getSymbolicName(), bsd.getStartedAfter()));
+        event.getBundleStartDurations().stream()
+            .filter( bsd -> bsd.getStartedAfter().toMillis() >= 
slowBundleThresholdMillis )
+            .forEach( bsd -> log.info("Bundle {} started in {}", 
bsd.getSymbolicName(), bsd.getStartedAfter()) );
+        
         event.getServiceRestarts().stream()
-            .filter( src -> src.getServiceRestarts() > 0)
+            .filter( src -> src.getServiceRestarts() >= 
serviceRestartThreshold )
             .forEach( src -> log.info("Service identified with {} was 
restarted {} times", src.getServiceIdentifier(), src.getServiceRestarts()));
     }
 

Reply via email to