From a3397ec4e0e6c70b6caab535173a08bbefb62ef4 Mon Sep 17 00:00:00 2001
From: ludovicp <ludovicp@localhost>
Date: Mon, 31 May 2010 12:03:51 +0000
Subject: [PATCH] Add support for statistics for WorkFlowElements
---
opends/src/server/org/opends/server/workflowelement/WorkflowElement.java | 27 ++++++++
opends/src/server/org/opends/server/workflowelement/WorkflowElementStatistics.java | 113 +++++++++++++++++++++++++++++++++++++
2 files changed, 139 insertions(+), 1 deletions(-)
diff --git a/opends/src/server/org/opends/server/workflowelement/WorkflowElement.java b/opends/src/server/org/opends/server/workflowelement/WorkflowElement.java
index 70e57c0..4038899 100644
--- a/opends/src/server/org/opends/server/workflowelement/WorkflowElement.java
+++ b/opends/src/server/org/opends/server/workflowelement/WorkflowElement.java
@@ -33,8 +33,11 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.CopyOnWriteArrayList;
+import org.opends.server.admin.std.server.MonitorProviderCfg;
import org.opends.server.admin.std.server.WorkflowElementCfg;
+import org.opends.server.api.MonitorProvider;
+import org.opends.server.core.DirectoryServer;
import org.opends.server.types.Operation;
import org.opends.server.types.CanceledOperationException;
@@ -86,6 +89,8 @@
private ObservableWorkflowElementStatus observableStatus =
new ObservableWorkflowElementStatus(this);
+ // The statistics exported by the workflow element
+ private MonitorProvider<MonitorProviderCfg> statistics;
/**
* Provides the observable state of the workflow element.
@@ -275,6 +280,10 @@
{
this.workflowElementID = workflowElementID;
this.workflowElementTypeInfo = workflowElementTypeInfo;
+ this.statistics = this.createStatistics();
+ if (this.statistics != null) {
+ DirectoryServer.registerMonitorProvider(this.statistics);
+ }
}
@@ -331,7 +340,11 @@
*/
public void finalizeWorkflowElement()
{
- // No action is required by default.
+ // Deregister the monitor provider.
+ if (this.statistics != null) {
+ DirectoryServer.deregisterMonitorProvider(
+ this.statistics.getMonitorInstanceName());
+ }
}
/**
@@ -461,4 +474,16 @@
}
return false;
}
+
+ /**
+ * Creates the statistics exposed by the workflow element. By default,
+ * workflow elements do not expose anything but specific implementations
+ * can override this method and provide their own stats.
+ * @return the statistics exposed by the workflow element.
+ */
+ public MonitorProvider<MonitorProviderCfg> createStatistics() {
+ // by default, no stats are created;
+ // This method should be overriden if necessary
+ return null;
+ }
}
diff --git a/opends/src/server/org/opends/server/workflowelement/WorkflowElementStatistics.java b/opends/src/server/org/opends/server/workflowelement/WorkflowElementStatistics.java
new file mode 100644
index 0000000..6f78877
--- /dev/null
+++ b/opends/src/server/org/opends/server/workflowelement/WorkflowElementStatistics.java
@@ -0,0 +1,113 @@
+/*
+ * 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
+ *
+ *
+ * Copyright 2010 Sun Microsystems, Inc.
+ */
+package org.opends.server.workflowelement;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.opends.server.admin.std.server.MonitorProviderCfg;
+import org.opends.server.api.MonitorProvider;
+import org.opends.server.config.ConfigException;
+import org.opends.server.types.Attribute;
+import org.opends.server.types.Attributes;
+import org.opends.server.types.InitializationException;
+
+
+/**
+ * This class implements the statistics associated to a workflow element.
+ * The workflow element provides a saturation index.
+ */
+public class WorkflowElementStatistics
+ extends MonitorProvider<MonitorProviderCfg> {
+
+ // The instance name for this monitor provider instance.
+ private final String instanceName;
+ private final WorkflowElement<?> workflowElement;
+
+ /**
+ * Constructor.
+ * @param workflowElement The workflowElement owning these stats
+ */
+ public WorkflowElementStatistics(WorkflowElement<?> workflowElement)
+ {
+ super(workflowElement.getWorkflowElementID());
+ this.instanceName = workflowElement.getWorkflowElementID();
+ this.workflowElement = workflowElement;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void initializeMonitorProvider(MonitorProviderCfg configuration)
+ throws ConfigException, InitializationException
+ {
+ // No initialization required
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getMonitorInstanceName()
+ {
+ return this.instanceName + ",cn=Workflow Elements";
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public long getUpdateInterval()
+ {
+ // This monitor should not run periodically.
+ return -1;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void updateMonitorData()
+ {
+ // No implementation is required since this does not do periodic updates.
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public List<Attribute> getMonitorData()
+ {
+ ArrayList<Attribute> attrs = new ArrayList<Attribute>();
+
+ attrs.add(Attributes.create(
+ "ds-mon-saturation-index",
+ String.valueOf(this.workflowElement.getSaturationIndex())));
+
+ return attrs;
+ }
+}
--
Gitblit v1.10.0