1 /*** 2 * 3 * Copyright 2004 Protique Ltd 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 **/ 18 package org.codehaus.activemq.management; 19 20 import javax.management.j2ee.statistics.TimeStatistic; 21 22 /*** 23 * A time statistic implementation 24 * 25 * @version $Revision: 1.7 $ 26 */ 27 public class TimeStatisticImpl extends StatisticImpl implements TimeStatistic { 28 private long count; 29 private long maxTime; 30 private long minTime; 31 private long totalTime; 32 private TimeStatisticImpl parent; 33 34 public TimeStatisticImpl(String name, String description) { 35 this(name, "millis", description); 36 } 37 38 public TimeStatisticImpl(TimeStatisticImpl parent, String name, String description) { 39 this(name, description); 40 this.parent = parent; 41 } 42 43 public TimeStatisticImpl(String name, String unit, String description) { 44 super(name, unit, description); 45 } 46 47 public synchronized void reset() { 48 super.reset(); 49 count = 0; 50 maxTime = 0; 51 minTime = 0; 52 totalTime = 0; 53 } 54 55 public synchronized long getCount() { 56 return count; 57 } 58 59 public synchronized void addTime(long time) { 60 count++; 61 totalTime += time; 62 if (time > maxTime) { 63 maxTime = time; 64 } 65 if (time < minTime || minTime == 0) { 66 minTime = time; 67 } 68 updateSampleTime(); 69 if (parent != null) { 70 parent.addTime(time); 71 } 72 } 73 74 /*** 75 * @return the maximum time of any step 76 */ 77 public long getMaxTime() { 78 return maxTime; 79 } 80 81 /*** 82 * @return the minimum time of any step 83 */ 84 public synchronized long getMinTime() { 85 return minTime; 86 } 87 88 /*** 89 * @return the total time of all the steps added together 90 */ 91 public synchronized long getTotalTime() { 92 return totalTime; 93 } 94 95 /*** 96 * @return the average time calculated by dividing the 97 * total time by the number of counts 98 */ 99 public synchronized double getAverageTime() { 100 if (count == 0) { 101 return 0; 102 } 103 double d = totalTime; 104 return d / count; 105 } 106 107 108 /*** 109 * @return the average time calculated by dividing the 110 * total time by the number of counts but excluding the 111 * minimum and maximum times. 112 */ 113 public synchronized double getAverageTimeExcludingMinMax() { 114 if (count <= 2) { 115 return 0; 116 } 117 double d = totalTime - minTime - maxTime; 118 return d / (count - 2); 119 } 120 121 122 /*** 123 * @return the average number of steps per second 124 */ 125 public double getAveragePerSecond() { 126 double d = 1000; 127 double averageTime = getAverageTime(); 128 if (averageTime == 0) { 129 return 0; 130 } 131 return d / averageTime; 132 } 133 134 /*** 135 * @return the average number of steps per second excluding the min & max values 136 */ 137 public double getAveragePerSecondExcludingMinMax() { 138 double d = 1000; 139 double average = getAverageTimeExcludingMinMax(); 140 if (average == 0) { 141 return 0; 142 } 143 return d / average; 144 } 145 146 public TimeStatisticImpl getParent() { 147 return parent; 148 } 149 150 public void setParent(TimeStatisticImpl parent) { 151 this.parent = parent; 152 } 153 154 protected synchronized void appendFieldDescription(StringBuffer buffer) { 155 buffer.append(" count: "); 156 buffer.append(Long.toString(count)); 157 buffer.append(" maxTime: "); 158 buffer.append(Long.toString(maxTime)); 159 buffer.append(" minTime: "); 160 buffer.append(Long.toString(minTime)); 161 buffer.append(" totalTime: "); 162 buffer.append(Long.toString(totalTime)); 163 buffer.append(" averageTime: "); 164 buffer.append(Double.toString(getAverageTime())); 165 buffer.append(" averageTimeExMinMax: "); 166 buffer.append(Double.toString(getAverageTimeExcludingMinMax())); 167 buffer.append(" averagePerSecond: "); 168 buffer.append(Double.toString(getAveragePerSecond())); 169 buffer.append(" averagePerSecondExMinMax: "); 170 buffer.append(Double.toString(getAveragePerSecondExcludingMinMax())); 171 super.appendFieldDescription(buffer); 172 } 173 174 }