You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2020/03/16 14:49:52 UTC

[sling-whiteboard] 01/02: metrics-osgi: change format of logging consumer

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

commit 4989f2ebef8ea5cd1bb2a906bf8a875c7887698c
Author: Robert Munteanu <ro...@apache.org>
AuthorDate: Mon Mar 16 15:49:12 2020 +0100

    metrics-osgi: change format of logging consumer
---
 .../consumers/impl/log/LoggingMetricsListener.java | 42 ++++++++++++++++++----
 1 file changed, 36 insertions(+), 6 deletions(-)

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 44156e0..321dd63 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
@@ -16,15 +16,22 @@
  */
 package org.apache.sling.metrics.osgi.consumers.impl.log;
 
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.apache.sling.metrics.osgi.BundleStartDuration;
+import org.apache.sling.metrics.osgi.ServiceRestartCounter;
 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.Designate;
 import org.osgi.service.metatype.annotations.ObjectClassDefinition;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @Component
+@Designate(ocd = LoggingMetricsListener.Config.class)
 public class LoggingMetricsListener implements StartupMetricsListener {
     
     @ObjectClassDefinition(name = "Apache Sling Logging Startup Metrics Listener")
@@ -47,13 +54,36 @@ public class LoggingMetricsListener implements StartupMetricsListener {
     public void onStartupComplete(StartupMetrics event) {
         Logger log = LoggerFactory.getLogger(getClass());
         log.info("Application startup completed in {}", event.getStartupTime());
-        event.getBundleStartDurations().stream()
-            .filter( bsd -> bsd.getStartedAfter().toMillis() >= slowBundleThresholdMillis )
-            .forEach( bsd -> log.info("Bundle {} started in {}", bsd.getSymbolicName(), bsd.getStartedAfter()) );
+
+        List<BundleStartDuration> slowStartBundles = event.getBundleStartDurations().stream()
+                .filter( bsd -> bsd.getStartedAfter().toMillis() >= slowBundleThresholdMillis )
+                .collect(Collectors.toList());
+        
+        if ( !slowStartBundles.isEmpty() && log.isInfoEnabled() ) {
+            StringBuilder logEntry = new StringBuilder();
+            logEntry.append("The following bundles started in more than ")
+                .append(slowBundleThresholdMillis)
+                .append(" milliseconds: \n");
+            slowStartBundles
+                .forEach( ssb -> logEntry.append("- ").append(ssb.getSymbolicName()).append(" : ").append(ssb.getStartedAfter()).append('\n'));
+            
+            log.info(logEntry.toString());
+        }
+        
+        List<ServiceRestartCounter> oftenRestartedServices = event.getServiceRestarts().stream()
+                .filter( src -> src.getServiceRestarts() >= serviceRestartThreshold )
+                .collect(Collectors.toList());
         
-        event.getServiceRestarts().stream()
-            .filter( src -> src.getServiceRestarts() >= serviceRestartThreshold )
-            .forEach( src -> log.info("Service identified with {} was restarted {} times", src.getServiceIdentifier(), src.getServiceRestarts()));
+        if ( !oftenRestartedServices.isEmpty() && log.isInfoEnabled() ) {
+            StringBuilder logEntry = new StringBuilder();
+            logEntry.append("The following services have restarted more than ")
+                .append(serviceRestartThreshold)
+                .append(" times during startup :\n");
+            oftenRestartedServices
+                .forEach(ors -> logEntry.append("- ").append(ors.getServiceIdentifier()).append(" : ").append(ors.getServiceRestarts()).append(" restarts\n"));
+            
+            log.info(logEntry.toString());
+        }
     }
 
 }