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