From dc50d3e793098123cf7417713f2790e862e13bbb Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 13 May 2013 12:35:26 +0000
Subject: [PATCH] OPENDJ-858 (CR-1651) Add stats tracking to HTTP client connections 

---
 opends/src/server/org/opends/server/protocols/http/SdkConnectionAdapter.java |   94 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 94 insertions(+), 0 deletions(-)

diff --git a/opends/src/server/org/opends/server/protocols/http/SdkConnectionAdapter.java b/opends/src/server/org/opends/server/protocols/http/SdkConnectionAdapter.java
index ff2a1d5..737b542 100644
--- a/opends/src/server/org/opends/server/protocols/http/SdkConnectionAdapter.java
+++ b/opends/src/server/org/opends/server/protocols/http/SdkConnectionAdapter.java
@@ -58,20 +58,42 @@
 import org.forgerock.opendj.ldap.responses.CompareResult;
 import org.forgerock.opendj.ldap.responses.ExtendedResult;
 import org.forgerock.opendj.ldap.responses.Result;
+import org.opends.server.core.AbandonOperation;
 import org.opends.server.core.AbandonOperationBasis;
+import org.opends.server.core.AddOperation;
 import org.opends.server.core.AddOperationBasis;
+import org.opends.server.core.BindOperation;
 import org.opends.server.core.BindOperationBasis;
 import org.opends.server.core.BoundedWorkQueueStrategy;
+import org.opends.server.core.CompareOperation;
 import org.opends.server.core.CompareOperationBasis;
+import org.opends.server.core.DeleteOperation;
 import org.opends.server.core.DeleteOperationBasis;
+import org.opends.server.core.ExtendedOperation;
 import org.opends.server.core.ExtendedOperationBasis;
+import org.opends.server.core.ModifyDNOperation;
 import org.opends.server.core.ModifyDNOperationBasis;
+import org.opends.server.core.ModifyOperation;
 import org.opends.server.core.ModifyOperationBasis;
 import org.opends.server.core.QueueingStrategy;
+import org.opends.server.core.SearchOperation;
 import org.opends.server.core.SearchOperationBasis;
+import org.opends.server.core.UnbindOperation;
 import org.opends.server.core.UnbindOperationBasis;
 import org.opends.server.loggers.HTTPRequestInfo;
 import org.opends.server.loggers.debug.DebugTracer;
+import org.opends.server.protocols.ldap.AbandonRequestProtocolOp;
+import org.opends.server.protocols.ldap.AddRequestProtocolOp;
+import org.opends.server.protocols.ldap.BindRequestProtocolOp;
+import org.opends.server.protocols.ldap.CompareRequestProtocolOp;
+import org.opends.server.protocols.ldap.DeleteRequestProtocolOp;
+import org.opends.server.protocols.ldap.ExtendedRequestProtocolOp;
+import org.opends.server.protocols.ldap.LDAPMessage;
+import org.opends.server.protocols.ldap.ModifyDNRequestProtocolOp;
+import org.opends.server.protocols.ldap.ModifyRequestProtocolOp;
+import org.opends.server.protocols.ldap.ProtocolOp;
+import org.opends.server.protocols.ldap.SearchRequestProtocolOp;
+import org.opends.server.protocols.ldap.UnbindRequestProtocolOp;
 import org.opends.server.types.AuthenticationInfo;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DebugLogLevel;
@@ -142,6 +164,15 @@
     {
       operation.setInnerOperation(this.clientConnection.isInnerConnection());
 
+      HTTPConnectionHandler connHandler =
+          this.clientConnection.getConnectionHandler();
+      if (connHandler.keepStats())
+      {
+        connHandler.getStatTracker().updateMessageRead(
+            new LDAPMessage(operation.getMessageID(),
+                toRequestProtocolOp(operation)));
+      }
+
       // need this raw cast here to fool the compiler's generic type safety
       // Problem here is due to the generic type R on enqueueOperation()
       clientConnection.addOperationInProgress(operation,
@@ -163,6 +194,69 @@
     return futureResult;
   }
 
+  private ProtocolOp toRequestProtocolOp(Operation operation)
+  {
+    operation.getResultCode().getIntValue();
+    if (operation instanceof AbandonOperation)
+    {
+      final AbandonOperation op = (AbandonOperation) operation;
+      return new AbandonRequestProtocolOp(op.getIDToAbandon());
+    }
+    else if (operation instanceof AddOperation)
+    {
+      final AddOperation op = (AddOperation) operation;
+      return new AddRequestProtocolOp(op.getRawEntryDN(),
+          op.getRawAttributes());
+    }
+    else if (operation instanceof BindOperation)
+    {
+      final BindOperation op = (BindOperation) operation;
+      return new BindRequestProtocolOp(op.getRawBindDN(),
+          op.getSASLMechanism(), op.getSASLCredentials());
+    }
+    else if (operation instanceof CompareOperation)
+    {
+      final CompareOperation op = (CompareOperation) operation;
+      return new CompareRequestProtocolOp(op.getRawEntryDN(), op
+          .getRawAttributeType(), op.getAssertionValue());
+    }
+    else if (operation instanceof DeleteOperation)
+    {
+      final DeleteOperation op = (DeleteOperation) operation;
+      return new DeleteRequestProtocolOp(op.getRawEntryDN());
+    }
+    else if (operation instanceof ExtendedOperation)
+    {
+      final ExtendedOperation op = (ExtendedOperation) operation;
+      return new ExtendedRequestProtocolOp(op.getRequestOID(), op
+          .getRequestValue());
+    }
+    else if (operation instanceof ModifyDNOperation)
+    {
+      final ModifyDNOperation op = (ModifyDNOperation) operation;
+      return new ModifyDNRequestProtocolOp(op.getRawEntryDN(), op
+          .getRawNewRDN(), op.deleteOldRDN(), op.getRawNewSuperior());
+    }
+    else if (operation instanceof ModifyOperation)
+    {
+      final ModifyOperation op = (ModifyOperation) operation;
+      return new ModifyRequestProtocolOp(op.getRawEntryDN(), op
+          .getRawModifications());
+    }
+    else if (operation instanceof SearchOperation)
+    {
+      final SearchOperation op = (SearchOperation) operation;
+      return new SearchRequestProtocolOp(op.getRawBaseDN(), op.getScope(), op
+          .getDerefPolicy(), op.getSizeLimit(), op.getTimeLimit(), op
+          .getTypesOnly(), op.getRawFilter(), op.getAttributes());
+    }
+    else if (operation instanceof UnbindOperation)
+    {
+      return new UnbindRequestProtocolOp();
+    }
+    throw new RuntimeException("Not implemented for operation " + operation);
+  }
+
   /** {@inheritDoc} */
   @Override
   public FutureResult<Void> abandonAsync(AbandonRequest request)

--
Gitblit v1.10.0