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()));
}