| /** |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.activemq.management; |
| |
| |
| /** |
| * A time statistic implementation |
| * |
| * |
| */ |
| public class TimeStatisticImpl extends StatisticImpl { |
| private long count; |
| private long maxTime; |
| private long minTime; |
| private long totalTime; |
| private TimeStatisticImpl parent; |
| |
| public TimeStatisticImpl(String name, String description) { |
| this(name, "millis", description); |
| } |
| |
| public TimeStatisticImpl(TimeStatisticImpl parent, String name, String description) { |
| this(name, description); |
| this.parent = parent; |
| } |
| |
| public TimeStatisticImpl(String name, String unit, String description) { |
| super(name, unit, description); |
| } |
| |
| public synchronized void reset() { |
| if(isDoReset()) { |
| super.reset(); |
| count = 0; |
| maxTime = 0; |
| minTime = 0; |
| totalTime = 0; |
| } |
| } |
| |
| public synchronized long getCount() { |
| return count; |
| } |
| |
| public synchronized void addTime(long time) { |
| count++; |
| totalTime += time; |
| if (time > maxTime) { |
| maxTime = time; |
| } |
| if (time < minTime || minTime == 0) { |
| minTime = time; |
| } |
| updateSampleTime(); |
| if (parent != null) { |
| parent.addTime(time); |
| } |
| } |
| |
| /** |
| * @return the maximum time of any step |
| */ |
| public long getMaxTime() { |
| return maxTime; |
| } |
| |
| /** |
| * @return the minimum time of any step |
| */ |
| public synchronized long getMinTime() { |
| return minTime; |
| } |
| |
| /** |
| * @return the total time of all the steps added together |
| */ |
| public synchronized long getTotalTime() { |
| return totalTime; |
| } |
| |
| /** |
| * @return the average time calculated by dividing the |
| * total time by the number of counts |
| */ |
| public synchronized double getAverageTime() { |
| if (count == 0) { |
| return 0; |
| } |
| double d = totalTime; |
| return d / count; |
| } |
| |
| |
| /** |
| * @return the average time calculated by dividing the |
| * total time by the number of counts but excluding the |
| * minimum and maximum times. |
| */ |
| public synchronized double getAverageTimeExcludingMinMax() { |
| if (count <= 2) { |
| return 0; |
| } |
| double d = totalTime - minTime - maxTime; |
| return d / (count - 2); |
| } |
| |
| |
| /** |
| * @return the average number of steps per second |
| */ |
| public double getAveragePerSecond() { |
| double d = 1000; |
| double averageTime = getAverageTime(); |
| if (averageTime == 0) { |
| return 0; |
| } |
| return d / averageTime; |
| } |
| |
| /** |
| * @return the average number of steps per second excluding the min & max values |
| */ |
| public double getAveragePerSecondExcludingMinMax() { |
| double d = 1000; |
| double average = getAverageTimeExcludingMinMax(); |
| if (average == 0) { |
| return 0; |
| } |
| return d / average; |
| } |
| |
| public TimeStatisticImpl getParent() { |
| return parent; |
| } |
| |
| public void setParent(TimeStatisticImpl parent) { |
| this.parent = parent; |
| } |
| |
| protected synchronized void appendFieldDescription(StringBuffer buffer) { |
| buffer.append(" count: "); |
| buffer.append(Long.toString(count)); |
| buffer.append(" maxTime: "); |
| buffer.append(Long.toString(maxTime)); |
| buffer.append(" minTime: "); |
| buffer.append(Long.toString(minTime)); |
| buffer.append(" totalTime: "); |
| buffer.append(Long.toString(totalTime)); |
| buffer.append(" averageTime: "); |
| buffer.append(Double.toString(getAverageTime())); |
| buffer.append(" averageTimeExMinMax: "); |
| buffer.append(Double.toString(getAverageTimeExcludingMinMax())); |
| buffer.append(" averagePerSecond: "); |
| buffer.append(Double.toString(getAveragePerSecond())); |
| buffer.append(" averagePerSecondExMinMax: "); |
| buffer.append(Double.toString(getAveragePerSecondExcludingMinMax())); |
| super.appendFieldDescription(buffer); |
| } |
| |
| } |