From d90a8f4889fdc359bfe5f089b937b303a4d58973 Mon Sep 17 00:00:00 2001
From: fguigues <fguigues@localhost>
Date: Fri, 12 Dec 2008 13:13:01 +0000
Subject: [PATCH] * Ability to create monitor provider with hierarchical naming * Modification of Network Monitor provider names (includes hierarchical naming) * Provide basic Monitoring objects. * Add monitoring instrumentation for the connection handlers. * Add the ability to do a subtree search in the monitor backend.

---
 opends/src/server/org/opends/server/protocols/ldap/LDAPClientConnection.java |  127 ++++++++++++++++++++++++++++++++++++++----
 1 files changed, 115 insertions(+), 12 deletions(-)

diff --git a/opends/src/server/org/opends/server/protocols/ldap/LDAPClientConnection.java b/opends/src/server/org/opends/server/protocols/ldap/LDAPClientConnection.java
index 6d77f00..df57bde 100644
--- a/opends/src/server/org/opends/server/protocols/ldap/LDAPClientConnection.java
+++ b/opends/src/server/org/opends/server/protocols/ldap/LDAPClientConnection.java
@@ -64,6 +64,7 @@
 import org.opends.server.extensions.TLSCapableConnection;
 import org.opends.server.extensions.TLSConnectionSecurityProvider;
 import org.opends.server.loggers.debug.DebugTracer;
+import org.opends.server.monitors.OperationMonitor;
 import org.opends.server.protocols.asn1.ASN1Element;
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.protocols.asn1.ASN1Sequence;
@@ -90,6 +91,7 @@
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.util.StaticUtils.getExceptionMessage;
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
+import static org.opends.server.types.OperationType.*;
 
 
 
@@ -192,6 +194,9 @@
   // The statistics tracker associated with this client connection.
   private LDAPStatistics statTracker;
 
+  // The connectionHandler statistic tracker.
+  private LDAPStatistics parentTracker;
+
   // The connection ID assigned to this connection.
   private long connectionID;
 
@@ -224,6 +229,18 @@
   //during a SASL bind (GSSAPI and DIGEST-MD5 only).
   private ConnectionSecurityProvider saslSecurityProvider;
 
+  // Statistics for the processed operations
+  private OperationMonitor addMonitor;
+  private OperationMonitor searchMonitor;
+  private OperationMonitor abandonMonitor;
+  private OperationMonitor bindMonitor;
+  private OperationMonitor compareMonitor;
+  private OperationMonitor delMonitor;
+  private OperationMonitor extendedMonitor;
+  private OperationMonitor modMonitor;
+  private OperationMonitor moddnMonitor;
+  private OperationMonitor unbindMonitor;
+
   /**
    * Creates a new LDAP client connection with the provided information.
    *
@@ -276,10 +293,12 @@
     serverAddress = clientChannel.socket().getLocalAddress().getHostAddress();
     serverPort    = clientChannel.socket().getLocalPort();
 
-    LDAPStatistics parentTracker = connectionHandler.getStatTracker();
+    parentTracker = connectionHandler.getStatTracker();
     String         instanceName  = parentTracker.getMonitorInstanceName() +
                                    " for " + toString();
-    statTracker = new LDAPStatistics(instanceName, parentTracker);
+    this.initializeOperationMonitors();
+    statTracker = new LDAPStatistics(connectionHandler,
+            instanceName, parentTracker);
 
     if (keepStats)
     {
@@ -1846,28 +1865,89 @@
     // the connection being terminated.
     try
     {
+      boolean result;
       switch (message.getProtocolOpType())
       {
         case OP_TYPE_ABANDON_REQUEST:
-          return processAbandonRequest(message, opControls);
+          if (keepStats) this.abandonMonitor.start();
+          result=processAbandonRequest(message, opControls);
+          if (keepStats) {
+              this.abandonMonitor.stop();
+              this.abandonMonitor.updateMonitorProvider(statTracker);
+          }
+          return result;
         case OP_TYPE_ADD_REQUEST:
-          return processAddRequest(message, opControls);
+          if (keepStats) this.addMonitor.start();
+          result=processAddRequest(message, opControls);
+          if (keepStats) {
+              this.addMonitor.stop();
+              this.addMonitor.updateMonitorProvider(statTracker);
+          }
+          return result;
         case OP_TYPE_BIND_REQUEST:
-          return processBindRequest(message, opControls);
+          if (keepStats) this.bindMonitor.start();
+          result=processBindRequest(message, opControls);
+          if (keepStats) {
+              this.bindMonitor.stop();
+              this.bindMonitor.updateMonitorProvider(statTracker);
+          }
+          return result;
         case OP_TYPE_COMPARE_REQUEST:
-          return processCompareRequest(message, opControls);
+          if (keepStats) this.compareMonitor.start();
+          result=processCompareRequest(message, opControls);
+          if (keepStats) {
+              this.compareMonitor.stop();
+              this.compareMonitor.updateMonitorProvider(statTracker);
+          }
+          return result;
         case OP_TYPE_DELETE_REQUEST:
-          return processDeleteRequest(message, opControls);
+          if (keepStats) this.delMonitor.start();
+          result=processDeleteRequest(message, opControls);
+          if (keepStats) {
+              this.delMonitor.stop();
+              this.delMonitor.updateMonitorProvider(statTracker);
+          }
+          return result;
         case OP_TYPE_EXTENDED_REQUEST:
-          return processExtendedRequest(message, opControls);
+          if (keepStats) this.extendedMonitor.start();
+          result=processExtendedRequest(message, opControls);
+          if (keepStats) {
+              this.extendedMonitor.stop();
+              this.extendedMonitor.updateMonitorProvider(statTracker);
+          }
+          return result;
         case OP_TYPE_MODIFY_REQUEST:
-          return processModifyRequest(message, opControls);
+          if (keepStats) this.modMonitor.start();
+          result=processModifyRequest(message, opControls);
+          if (keepStats) {
+              this.modMonitor.stop();
+              this.modMonitor.updateMonitorProvider(statTracker);
+          }
+          return result;
         case OP_TYPE_MODIFY_DN_REQUEST:
-          return processModifyDNRequest(message, opControls);
+          if (keepStats) this.moddnMonitor.start();
+          result=processModifyDNRequest(message, opControls);
+          if (keepStats) {
+              this.moddnMonitor.stop();
+              this.moddnMonitor.updateMonitorProvider(statTracker);
+          }
+          return result;
         case OP_TYPE_SEARCH_REQUEST:
-          return processSearchRequest(message, opControls);
+          if (keepStats) this.searchMonitor.start();
+          result=processSearchRequest(message, opControls);
+          if (keepStats) {
+              this.searchMonitor.stop();
+              this.searchMonitor.updateMonitorProvider(statTracker);
+          }
+          return result;
         case OP_TYPE_UNBIND_REQUEST:
-          return processUnbindRequest(message, opControls);
+          if (keepStats) this.unbindMonitor.start();
+          result=processUnbindRequest(message, opControls);
+          if (keepStats) {
+              this.unbindMonitor.stop();
+              this.unbindMonitor.updateMonitorProvider(statTracker);
+          }
+          return result;
         default:
           Message msg = ERR_LDAP_DISCONNECT_DUE_TO_INVALID_REQUEST_TYPE.get(
                   message.getProtocolOpName(), message.getMessageID());
@@ -2893,5 +2973,28 @@
       return 0L;
     }
   }
+
+  private void initializeOperationMonitors() {
+    this.addMonitor = OperationMonitor.getOperationMonitor(
+            ADD);
+    this.searchMonitor = OperationMonitor.getOperationMonitor(
+            SEARCH);
+    this.abandonMonitor = OperationMonitor.getOperationMonitor(
+            ABANDON);
+    this.bindMonitor = OperationMonitor.getOperationMonitor(
+            BIND);
+    this.compareMonitor = OperationMonitor.getOperationMonitor(
+            COMPARE);
+    this.delMonitor = OperationMonitor.getOperationMonitor(
+            DELETE);
+    this.extendedMonitor = OperationMonitor.getOperationMonitor(
+            EXTENDED);
+    this.modMonitor = OperationMonitor.getOperationMonitor(
+            MODIFY);
+    this.moddnMonitor = OperationMonitor.getOperationMonitor(
+            MODIFY_DN);
+    this.unbindMonitor = OperationMonitor.getOperationMonitor(
+            UNBIND);
+  }
 }
 

--
Gitblit v1.10.0