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