From 0205e2d5b2a1b1b09a25dce6ba394aca232d394e Mon Sep 17 00:00:00 2001
From: fguigues <fguigues@localhost>
Date: Fri, 12 Dec 2008 13:42:12 +0000
Subject: [PATCH] Add two monitor objects

---
 opends/src/server/org/opends/server/monitors/OperationMonitor.java |  239 +++++++++++++++++++++++++++++++++++++++
 opends/src/server/org/opends/server/monitors/CounterMonitor.java   |  120 ++++++++++++++++++++
 2 files changed, 359 insertions(+), 0 deletions(-)

diff --git a/opends/src/server/org/opends/server/monitors/CounterMonitor.java b/opends/src/server/org/opends/server/monitors/CounterMonitor.java
new file mode 100644
index 0000000..e177b41
--- /dev/null
+++ b/opends/src/server/org/opends/server/monitors/CounterMonitor.java
@@ -0,0 +1,120 @@
+/*
+ * 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 2008 Sun Microsystems, Inc.
+ */
+package org.opends.server.monitors;
+
+/**
+ * This class implements a monitor a basic counter.
+ */
+public class CounterMonitor {
+
+    // private counter
+    private int count=0;
+    // max counter
+    private int max=0;
+
+    // private constructor
+    private CounterMonitor() {
+    }
+
+    // private constructor
+    private CounterMonitor(CounterMonitor countMonitor) {
+        this.count=countMonitor.getCount();
+        this.max=countMonitor.getMax();
+    }
+
+    /**
+     * Gets a CounterMonitor Object.
+     * @return a counter monitor object.
+     */
+    public static CounterMonitor getCounter() {
+        return new CounterMonitor();
+    }
+
+    /**
+     * Gets a copy of the counter monitor.
+     * @return a duplicate object.
+     */
+    public CounterMonitor duplicate() {
+        return new CounterMonitor(this);
+    }
+
+    /**
+     * Adds a counter Monitor to the current counter object.
+     * @param countMonitor to add.
+     */
+    public void add(CounterMonitor countMonitor) {
+        this.count+=countMonitor.count;
+        if ((this.count>this.max) && (this.count>=countMonitor.max)) {
+            this.max=this.count;
+        }
+        else {
+            if (this.max<countMonitor.getMax()) {
+                this.max=countMonitor.getMax();
+            }
+        }
+    }
+
+    /**
+     * Increments the counter object.
+     */
+    public void increment() {
+        count++;
+        if (count>max) max=count;
+    }
+
+    /**
+     * Decrements the counter object.
+     */
+    public void decrement() {
+        count--;
+    }
+
+    /**
+     * Gets the current counter value.
+     * @return the current counter value.
+     */
+    public int getCount() {
+        return count;
+    }
+
+    /**
+     * Gets the maximum value the counter reached since the object creation.
+     * @return the maximum value.
+     */
+    public int getMax() {
+        return max;
+    }
+
+    /**
+     * Reset the counter values (Value and max).
+     */
+    public void reset() {
+        this.count=0;
+        this.max=0;
+    }
+
+}
diff --git a/opends/src/server/org/opends/server/monitors/OperationMonitor.java b/opends/src/server/org/opends/server/monitors/OperationMonitor.java
new file mode 100644
index 0000000..04011b6
--- /dev/null
+++ b/opends/src/server/org/opends/server/monitors/OperationMonitor.java
@@ -0,0 +1,239 @@
+/*
+ * 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 2008 Sun Microsystems, Inc.
+ */
+package org.opends.server.monitors;
+
+import org.opends.server.api.MonitorProvider;
+import org.opends.server.protocols.ldap.LDAPStatistics;
+import org.opends.server.types.OperationType;
+
+/**
+ * This class defines a monitor object which are able to measure
+ * an elapse time (nanosecs), a number of times the measurement was done,
+ * the minimum and the maximum.
+ */
+public class OperationMonitor {
+
+    /**
+     * Undefined value for the timer.
+     */
+    public static long UNDEFINED_VALUE = 0;
+
+    // Lock object
+    private Object lock = new Object();
+    // Type of the operation
+    private OperationType opType;
+    // Date of creation of the object
+    private long creationTime;
+    // ElapseTime
+    private long eTime = UNDEFINED_VALUE;
+    // Date the start method was called
+    private long startTime = UNDEFINED_VALUE;
+    // Date stop method was called
+    private long stopTime = UNDEFINED_VALUE;
+    // Accumualted time
+    private long totalTime = UNDEFINED_VALUE;
+    // Min time
+    private long minTime = UNDEFINED_VALUE;
+    // Max time
+    private long maxTime = UNDEFINED_VALUE;
+
+    // Counter
+    private CounterMonitor counter;
+
+    // Private constructor
+    private OperationMonitor(OperationMonitor opMonitor) {
+        this.opType = opMonitor.getType();
+        this.eTime = opMonitor.getTime();
+        this.startTime = opMonitor.getStartTime();
+        this.stopTime = opMonitor.getStopTime();
+        this.totalTime = opMonitor.getTotalTime();
+        this.maxTime = opMonitor.getMaxTime();
+        this.minTime = opMonitor.getMinTime();
+        this.counter = opMonitor.getCounter().duplicate();
+    }
+
+    // Private constructor
+    private OperationMonitor(OperationType opType) {
+        this.opType = opType;
+        this.counter = CounterMonitor.getCounter();
+        this.creationTime = System.nanoTime();
+    }
+
+    /**
+     * Gets a Operation Monitor object od the specified type.
+     * @param opType of the monitor object.
+     * @return the Operation monitor object.
+     */
+    public static OperationMonitor getOperationMonitor(OperationType opType) {
+        return new OperationMonitor(opType);
+    }
+
+    /**
+     * Returns a duplicate object.
+     * @return the duplicate object.
+     */
+    public OperationMonitor duplicate() {
+        return new OperationMonitor(this);
+    }
+
+    /**
+     * Add the provider moniyot object to the current one.
+     * @param opMonitor to add.
+     */
+    public void add(OperationMonitor opMonitor) {
+        synchronized (lock) {
+            this.counter.add(opMonitor.getCounter());
+            this.totalTime += opMonitor.getTotalTime();
+            if ((this.minTime == UNDEFINED_VALUE) ||
+                    (this.minTime > opMonitor.getMinTime())) {
+                this.minTime = opMonitor.getMinTime();
+            }
+            if (this.maxTime < opMonitor.getMaxTime()) {
+                this.maxTime = opMonitor.getMaxTime();
+            }
+        }
+    }
+
+    /**
+     * Sets the starTime.
+     */
+    public void start() {
+        synchronized (lock) {
+            this.counter.increment();
+            this.startTime = System.nanoTime();
+        }
+    }
+
+    /**
+     * Sets the stopTime, process the elapseTime, min max and accumulated
+     * time.
+     */
+    public void stop() {
+        synchronized (lock) {
+            this.stopTime = System.nanoTime();
+            this.eTime = stopTime - startTime;
+            totalTime += eTime;
+            if ((this.minTime == UNDEFINED_VALUE) || (eTime < this.minTime)) {
+                this.minTime = this.eTime;
+            }
+            if (eTime > this.maxTime) {
+                this.maxTime = this.eTime;
+            }
+        }
+    }
+
+    /**
+     * Gets a elapse time.
+     * @return the elapse time.
+     */
+    public long getTime() {
+        return eTime;
+    }
+
+    /**
+     * Gets the Min time.
+     * @return the min time.
+     */
+    public long getMinTime() {
+        return this.minTime;
+    }
+
+    /**
+     * Gets the max time.
+     * @return the max time.
+     */
+    public long getMaxTime() {
+        return this.maxTime;
+    }
+
+    /**
+     * Gets the accumulated time.
+     * @return the accumulated time.
+     */
+    public long getTotalTime() {
+        return this.totalTime;
+    }
+
+    /**
+     * Gets the startTime.
+     * @return the date in a long format.
+     */
+    public long getStartTime() {
+        return this.startTime;
+    }
+
+    /**
+     * Get the stopTime.
+     * @return the date in long format.
+     */
+    public long getStopTime() {
+        return this.stopTime;
+    }
+
+    /**
+     * Gets the counter object.
+     * @return the counterMonitor object.
+     */
+    public CounterMonitor getCounter() {
+        return this.counter;
+    }
+
+    /**
+     * Gets the type of the OperationMonitor object.
+     * @return the OperationType.
+     */
+    public OperationType getType() {
+        return this.opType;
+    }
+
+    /**
+     * Reset the values to 0.
+     */
+    public void reset() {
+        this.counter.reset();
+        this.totalTime=UNDEFINED_VALUE;
+        this.minTime=UNDEFINED_VALUE;
+        this.maxTime=UNDEFINED_VALUE;
+    }
+
+    /**
+     * Updates the associated monitor provider object calling
+     * updateMonitorData() method of the monitorProvider object.
+     * @param provider to update.
+     */
+    public void updateMonitorProvider(MonitorProvider provider) {
+        provider.updateMonitorData();
+    }
+
+    /**
+     * Updates the associated monitor provider object.
+     * @param stats provider to update.
+     */
+    public void updateMonitorProvider(LDAPStatistics stats) {
+        stats.updateMonitor(this);
+    }
+}

--
Gitblit v1.10.0