001 /**
002 *
003 * Copyright 2004 Protique Ltd
004 *
005 * Licensed under the Apache License, Version 2.0 (the "License");
006 * you may not use this file except in compliance with the License.
007 * You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 *
017 **/
018 package org.activemq.management;
019
020
021 /**
022 * A time statistic implementation
023 *
024 * @version $Revision: 1.1.1.1 $
025 */
026 public class TimeStatisticImpl extends StatisticImpl {
027 private long count;
028 private long maxTime;
029 private long minTime;
030 private long totalTime;
031 private TimeStatisticImpl parent;
032
033 public TimeStatisticImpl(String name, String description) {
034 this(name, "millis", description);
035 }
036
037 public TimeStatisticImpl(TimeStatisticImpl parent, String name, String description) {
038 this(name, description);
039 this.parent = parent;
040 }
041
042 public TimeStatisticImpl(String name, String unit, String description) {
043 super(name, unit, description);
044 }
045
046 public synchronized void reset() {
047 super.reset();
048 count = 0;
049 maxTime = 0;
050 minTime = 0;
051 totalTime = 0;
052 }
053
054 public synchronized long getCount() {
055 return count;
056 }
057
058 public synchronized void addTime(long time) {
059 count++;
060 totalTime += time;
061 if (time > maxTime) {
062 maxTime = time;
063 }
064 if (time < minTime || minTime == 0) {
065 minTime = time;
066 }
067 updateSampleTime();
068 if (parent != null) {
069 parent.addTime(time);
070 }
071 }
072
073 /**
074 * @return the maximum time of any step
075 */
076 public long getMaxTime() {
077 return maxTime;
078 }
079
080 /**
081 * @return the minimum time of any step
082 */
083 public synchronized long getMinTime() {
084 return minTime;
085 }
086
087 /**
088 * @return the total time of all the steps added together
089 */
090 public synchronized long getTotalTime() {
091 return totalTime;
092 }
093
094 /**
095 * @return the average time calculated by dividing the
096 * total time by the number of counts
097 */
098 public synchronized double getAverageTime() {
099 if (count == 0) {
100 return 0;
101 }
102 double d = totalTime;
103 return d / count;
104 }
105
106
107 /**
108 * @return the average time calculated by dividing the
109 * total time by the number of counts but excluding the
110 * minimum and maximum times.
111 */
112 public synchronized double getAverageTimeExcludingMinMax() {
113 if (count <= 2) {
114 return 0;
115 }
116 double d = totalTime - minTime - maxTime;
117 return d / (count - 2);
118 }
119
120
121 /**
122 * @return the average number of steps per second
123 */
124 public double getAveragePerSecond() {
125 double d = 1000;
126 double averageTime = getAverageTime();
127 if (averageTime == 0) {
128 return 0;
129 }
130 return d / averageTime;
131 }
132
133 /**
134 * @return the average number of steps per second excluding the min & max values
135 */
136 public double getAveragePerSecondExcludingMinMax() {
137 double d = 1000;
138 double average = getAverageTimeExcludingMinMax();
139 if (average == 0) {
140 return 0;
141 }
142 return d / average;
143 }
144
145 public TimeStatisticImpl getParent() {
146 return parent;
147 }
148
149 public void setParent(TimeStatisticImpl parent) {
150 this.parent = parent;
151 }
152
153 protected synchronized void appendFieldDescription(StringBuffer buffer) {
154 buffer.append(" count: ");
155 buffer.append(Long.toString(count));
156 buffer.append(" maxTime: ");
157 buffer.append(Long.toString(maxTime));
158 buffer.append(" minTime: ");
159 buffer.append(Long.toString(minTime));
160 buffer.append(" totalTime: ");
161 buffer.append(Long.toString(totalTime));
162 buffer.append(" averageTime: ");
163 buffer.append(Double.toString(getAverageTime()));
164 buffer.append(" averageTimeExMinMax: ");
165 buffer.append(Double.toString(getAverageTimeExcludingMinMax()));
166 buffer.append(" averagePerSecond: ");
167 buffer.append(Double.toString(getAveragePerSecond()));
168 buffer.append(" averagePerSecondExMinMax: ");
169 buffer.append(Double.toString(getAveragePerSecondExcludingMinMax()));
170 super.appendFieldDescription(buffer);
171 }
172
173 }