From 4048f37cfefaec82850f62ab412055d375a63d94 Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Tue, 17 Jul 2007 00:01:42 +0000
Subject: [PATCH] Implement a monitor provider that can be used to publish information about the client connections that are established.
---
opendj-sdk/opends/src/server/org/opends/server/monitors/ClientConnectionMonitorProvider.java | 178 ++++++++++++++++++++++++++++++++++++++++++++
opendj-sdk/opends/resource/config/config.ldif | 7 +
2 files changed, 185 insertions(+), 0 deletions(-)
diff --git a/opendj-sdk/opends/resource/config/config.ldif b/opendj-sdk/opends/resource/config/config.ldif
index 0fc4998..61302b1 100644
--- a/opendj-sdk/opends/resource/config/config.ldif
+++ b/opendj-sdk/opends/resource/config/config.ldif
@@ -1003,6 +1003,13 @@
objectClass: ds-cfg-branch
cn: Monitor Providers
+dn: cn=Client Connections,cn=Monitor Providers,cn=config
+objectClass: top
+objectClass: ds-cfg-monitor-provider
+cn: Client Connections
+ds-cfg-monitor-provider-class: org.opends.server.monitors.ClientConnectionMonitorProvider
+ds-cfg-monitor-provider-enabled: true
+
dn: cn=JVM Stack Trace,cn=Monitor Providers,cn=config
objectClass: top
objectClass: ds-cfg-monitor-provider
diff --git a/opendj-sdk/opends/src/server/org/opends/server/monitors/ClientConnectionMonitorProvider.java b/opendj-sdk/opends/src/server/org/opends/server/monitors/ClientConnectionMonitorProvider.java
new file mode 100644
index 0000000..3b835ee
--- /dev/null
+++ b/opendj-sdk/opends/src/server/org/opends/server/monitors/ClientConnectionMonitorProvider.java
@@ -0,0 +1,178 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Portions Copyright 2006-2007 Sun Microsystems, Inc.
+ */
+package org.opends.server.monitors;
+
+
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashSet;
+import java.util.TreeMap;
+
+import org.opends.server.admin.std.server.ConnectionHandlerCfg;
+import org.opends.server.admin.std.server.MonitorProviderCfg;
+import org.opends.server.api.ClientConnection;
+import org.opends.server.api.ConnectionHandler;
+import org.opends.server.api.MonitorProvider;
+import org.opends.server.config.ConfigException;
+import org.opends.server.core.DirectoryServer;
+import org.opends.server.types.Attribute;
+import org.opends.server.types.AttributeType;
+import org.opends.server.types.AttributeValue;
+import org.opends.server.types.InitializationException;
+
+
+
+
+/**
+ * This class defines a Directory Server monitor provider that can be used to
+ * obtain information about the client connections established to the server.
+ * Note that the information reported is obtained with little or no locking, so
+ * it may not be entirely consistent, especially for active connections.
+ */
+public class ClientConnectionMonitorProvider
+ extends MonitorProvider<MonitorProviderCfg>
+{
+ /**
+ * Creates an instance of this monitor provider.
+ */
+ public ClientConnectionMonitorProvider()
+ {
+ super("Client Connection Monitor Provider");
+
+ // No initialization should be performed here.
+ }
+
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public void initializeMonitorProvider(MonitorProviderCfg configuration)
+ throws ConfigException, InitializationException
+ {
+ // No initialization is required.
+ }
+
+
+
+ /**
+ * Retrieves the name of this monitor provider. It should be unique among all
+ * monitor providers, including all instances of the same monitor provider.
+ *
+ * @return The name of this monitor provider.
+ */
+ public String getMonitorInstanceName()
+ {
+ return "Client Connections";
+ }
+
+
+
+ /**
+ * Retrieves the length of time in milliseconds that should elapse between
+ * calls to the <CODE>updateMonitorData()</CODE> method. A negative or zero
+ * return value indicates that the <CODE>updateMonitorData()</CODE> method
+ * should not be periodically invoked.
+ *
+ * @return The length of time in milliseconds that should elapse between
+ * calls to the <CODE>updateMonitorData()</CODE> method.
+ */
+ public long getUpdateInterval()
+ {
+ // This monitor does not need to run periodically.
+ return 0;
+ }
+
+
+
+ /**
+ * Performs any processing periodic processing that may be desired to update
+ * the information associated with this monitor. Note that best-effort
+ * attempts will be made to ensure that calls to this method come
+ * <CODE>getUpdateInterval()</CODE> milliseconds apart, but no guarantees will
+ * be made.
+ */
+ public void updateMonitorData()
+ {
+ // This monitor does not need to run periodically.
+ return;
+ }
+
+
+
+ /**
+ * Retrieves a set of attributes containing monitor data that should be
+ * returned to the client if the corresponding monitor entry is requested.
+ *
+ * @return A set of attributes containing monitor data that should be
+ * returned to the client if the corresponding monitor entry is
+ * requested.
+ */
+ public ArrayList<Attribute> getMonitorData()
+ {
+ // Get information about all the available connections.
+ ArrayList<Collection<ClientConnection>> connCollections =
+ new ArrayList<Collection<ClientConnection>>();
+ for (ConnectionHandler handler : DirectoryServer.getConnectionHandlers())
+ {
+ ConnectionHandler<? extends ConnectionHandlerCfg> connHandler =
+ (ConnectionHandler<? extends ConnectionHandlerCfg>) handler;
+ connCollections.add(connHandler.getClientConnections());
+ }
+
+
+ // Re-order the connections by connection ID.
+ TreeMap<Long,ClientConnection> connMap =
+ new TreeMap<Long,ClientConnection>();
+ for (Collection<ClientConnection> collection : connCollections)
+ {
+ for (ClientConnection conn : collection)
+ {
+ connMap.put(conn.getConnectionID(), conn);
+ }
+ }
+
+
+ // Iterate through all the client connections and create a one-line summary
+ // of each.
+ AttributeType attrType =
+ DirectoryServer.getDefaultAttributeType("connection");
+ LinkedHashSet<AttributeValue> values =
+ new LinkedHashSet<AttributeValue>(connMap.size());
+ for (ClientConnection conn : connMap.values())
+ {
+ values.add(new AttributeValue(attrType, conn.getMonitorSummary()));
+ }
+
+
+ ArrayList<Attribute> attrs = new ArrayList<Attribute>(1);
+ attrs.add(new Attribute(attrType, "connection", values));
+ return attrs;
+ }
+}
+
--
Gitblit v1.10.0