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/11 17:25:03 UTC

[sling-org-apache-sling-event-dea] branch improvement/SLING-11139-metrics-for-DEA created (now 505114f)

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

joerghoh pushed a change to branch improvement/SLING-11139-metrics-for-DEA
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-event-dea.git.


      at 505114f  SLING-11139 maintain metrics for the DEA

This branch includes the following new commits:

     new 505114f  SLING-11139 maintain metrics for the DEA

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[sling-org-apache-sling-event-dea] 01/01: SLING-11139 maintain metrics for the DEA

Posted by jo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

joerghoh pushed a commit to branch improvement/SLING-11139-metrics-for-DEA
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-event-dea.git

commit 505114f925854873f5569479471fe90873c3fa12
Author: Jörg Hoh <jo...@joerghoh.de>
AuthorDate: Fri Feb 11 18:24:47 2022 +0100

    SLING-11139 maintain metrics for the DEA
---
 pom.xml                                                 |  6 ++++++
 .../sling/event/dea/impl/DistributedEventAdminImpl.java | 17 +++++++++++++++++
 .../sling/event/dea/impl/DistributedEventReceiver.java  | 16 ++++++++++++++++
 .../sling/event/dea/impl/DistributedEventSender.java    | 12 ++++++++++++
 4 files changed, 51 insertions(+)

diff --git a/pom.xml b/pom.xml
index 7e89b28..8d531e3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -109,6 +109,12 @@
             <version>1.2.0</version>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.commons.metrics</artifactId>
+            <version>1.2.10</version>
+            <scope>provided</scope>
+        </dependency>
       <!-- Testing -->
         <dependency>
             <groupId>junit</groupId>
diff --git a/src/main/java/org/apache/sling/event/dea/impl/DistributedEventAdminImpl.java b/src/main/java/org/apache/sling/event/dea/impl/DistributedEventAdminImpl.java
index 809b0ba..fe3a70a 100644
--- a/src/main/java/org/apache/sling/event/dea/impl/DistributedEventAdminImpl.java
+++ b/src/main/java/org/apache/sling/event/dea/impl/DistributedEventAdminImpl.java
@@ -21,13 +21,18 @@ package org.apache.sling.event.dea.impl;
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.serviceusermapping.ServiceUserMapped;
 import org.apache.sling.settings.SlingSettingsService;
+import org.apache.sling.commons.metrics.Gauge;
+import org.apache.sling.commons.metrics.MetricsService;
 import org.osgi.framework.BundleContext;
 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.event.EventAdmin;
 
+
+
 /**
  * This service wraps the configuration of the distributed event admin
  * and starts the different parts.
@@ -59,6 +64,9 @@ public class DistributedEventAdminImpl {
     @Reference
     private ServiceUserMapped serviceUserMapped;
 
+    @Reference(cardinality = ReferenceCardinality.OPTIONAL)
+    MetricsService metrics;
+    
     /** Default repository path. */
     public static final String DEFAULT_REPOSITORY_PATH = "/var/eventing/distribution";
 
@@ -84,6 +92,15 @@ public class DistributedEventAdminImpl {
                               props.repository_path(),
                               ownRootPath,
                               this.resourceResolverFactory, this.eventAdmin);
+        
+        if (metrics != null) {
+            // It's easier to use a gauge here instead of passing the (optional) MetricsRegistry into 
+            // each of these 2 services, so they can register counters themselves.
+            metrics.gauge("org.apache.sling.event.dea.receiver.successCounter", receiver::getSuccessCounter);
+            metrics.gauge("org.apache.sling.event.dea.receiver.failureCounter", receiver::getFailureCounter);
+            metrics.gauge("org.apache.sling.event.dea.sender.postedEventsCounter", sender::getPostedEventCounter);
+        }
+        
     }
 
     @Deactivate
diff --git a/src/main/java/org/apache/sling/event/dea/impl/DistributedEventReceiver.java b/src/main/java/org/apache/sling/event/dea/impl/DistributedEventReceiver.java
index 6fe6302..c8ea420 100644
--- a/src/main/java/org/apache/sling/event/dea/impl/DistributedEventReceiver.java
+++ b/src/main/java/org/apache/sling/event/dea/impl/DistributedEventReceiver.java
@@ -28,6 +28,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
 
 import org.apache.sling.api.resource.LoginException;
@@ -98,6 +99,10 @@ public class DistributedEventReceiver
 
     /** The service registration. */
     private volatile ServiceRegistration<?> serviceRegistration;
+    
+    // counters can be simple ints, as there's only 1 thread
+    private volatile int successCounter = 0;
+    private volatile int failureCounter = 0;
 
     public DistributedEventReceiver(final BundleContext bundleContext,
             final String rootPath,
@@ -202,8 +207,10 @@ public class DistributedEventReceiver
             if ( event != null && this.running ) {
                 try {
                     this.writeEvent(event);
+                    successCounter++;
                 } catch (final Exception e) {
                     this.logger.error("Exception during writing the event to the resource tree.", e);
+                    failureCounter++;
                 }
             }
         }
@@ -440,5 +447,14 @@ public class DistributedEventReceiver
             }
         }
     }
+    
+    
+    public int getSuccessCounter() {
+        return successCounter;
+    }
+    
+    public int getFailureCounter() {
+        return failureCounter;
+    }
 }
 
diff --git a/src/main/java/org/apache/sling/event/dea/impl/DistributedEventSender.java b/src/main/java/org/apache/sling/event/dea/impl/DistributedEventSender.java
index 3159931..950da29 100644
--- a/src/main/java/org/apache/sling/event/dea/impl/DistributedEventSender.java
+++ b/src/main/java/org/apache/sling/event/dea/impl/DistributedEventSender.java
@@ -71,6 +71,8 @@ public class DistributedEventSender
     private final String ownRootPathWithSlash;
 
     private volatile ServiceRegistration<ResourceChangeListener> serviceRegistration;
+    
+    private volatile int postedEventCounter = 0;
 
     public DistributedEventSender(final BundleContext bundleContext,
             final String rootPath,
@@ -202,6 +204,7 @@ public class DistributedEventSender
                             final EventAdmin localEA = this.eventAdmin;
                             if ( localEA != null ) {
                                 localEA.postEvent(e);
+                                postedEventCounter++;
                             } else {
                                 this.logger.error("Unable to post event as no event admin is available.");
                             }
@@ -244,4 +247,13 @@ public class DistributedEventSender
             this.logger.debug("Ignored exception " + e.getMessage(), e);
         }
     }
+    
+    /**
+     * Return the number of events which have been posted to the local eventAdmin
+     * @return number of events
+     */
+    public int getPostedEventCounter() {
+        return postedEventCounter;
+    }
+    
 }