Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: org/activemq/management/TimeStatisticImpl.java


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.activemq.management;
19  
20  
21  /**
22   * A time statistic implementation
23   *
24   * @version $Revision: 1.1.1.1 $
25   */
26  public class TimeStatisticImpl extends StatisticImpl {
27      private long count;
28      private long maxTime;
29      private long minTime;
30      private long totalTime;
31      private TimeStatisticImpl parent;
32  
33      public TimeStatisticImpl(String name, String description) {
34          this(name, "millis", description);
35      }
36  
37      public TimeStatisticImpl(TimeStatisticImpl parent, String name, String description) {
38          this(name, description);
39          this.parent = parent;
40      }
41  
42      public TimeStatisticImpl(String name, String unit, String description) {
43          super(name, unit, description);
44      }
45  
46      public synchronized void reset() {
47          super.reset();
48          count = 0;
49          maxTime = 0;
50          minTime = 0;
51          totalTime = 0;
52      }
53  
54      public synchronized long getCount() {
55          return count;
56      }
57  
58      public synchronized void addTime(long time) {
59          count++;
60          totalTime += time;
61          if (time > maxTime) {
62              maxTime = time;
63          }
64          if (time < minTime || minTime == 0) {
65              minTime = time;
66          }
67          updateSampleTime();
68          if (parent != null) {
69              parent.addTime(time);
70          }
71      }
72  
73      /**
74       * @return the maximum time of any step
75       */
76      public long getMaxTime() {
77          return maxTime;
78      }
79  
80      /**
81       * @return the minimum time of any step
82       */
83      public synchronized long getMinTime() {
84          return minTime;
85      }
86  
87      /**
88       * @return the total time of all the steps added together
89       */
90      public synchronized long getTotalTime() {
91          return totalTime;
92      }
93  
94      /**
95       * @return the average time calculated by dividing the
96       *         total time by the number of counts
97       */
98      public synchronized double getAverageTime() {
99          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 }