View Javadoc

1   // ========================================================================
2   // Copyright (c) 2009-2009 Mort Bay Consulting Pty. Ltd.
3   // ------------------------------------------------------------------------
4   // All rights reserved. This program and the accompanying materials
5   // are made available under the terms of the Eclipse Public License v1.0
6   // and Apache License v2.0 which accompanies this distribution.
7   // The Eclipse Public License is available at 
8   // http://www.eclipse.org/legal/epl-v10.html
9   // The Apache License v2.0 is available at
10  // http://www.opensource.org/licenses/apache2.0.php
11  // You may elect to redistribute this code under either of these licenses. 
12  // ========================================================================
13  
14  package org.eclipse.jetty.util.statistic;
15  
16  import java.util.concurrent.atomic.AtomicLong;
17  
18  
19  /* ------------------------------------------------------------ */
20  /** Statistics on a counter value.
21   * <p>
22   * Keep total, current and maximum values of a counter that
23   * can be incremented and decremented. The total refers only
24   * to increments.
25   * 
26   */
27  public class CounterStatistic 
28  {
29      protected final AtomicLong _max = new AtomicLong();
30      protected final AtomicLong _curr = new AtomicLong();
31      protected final AtomicLong _total = new AtomicLong();
32  
33      /* ------------------------------------------------------------ */
34      public void reset()
35      {
36          reset(0);
37      }
38  
39      /* ------------------------------------------------------------ */
40      public void reset(final long value)
41      {
42          _max.set(value);   
43          _curr.set(value);
44          _total.set(0); // total always set to 0 to properly calculate cumulative total
45      }
46      
47      /* ------------------------------------------------------------ */
48      /**
49       * @param delta the amount to add to the count
50       */
51      public void add(final long delta)
52      {
53          long value=_curr.addAndGet(delta);
54          if (delta > 0)
55              _total.addAndGet(delta);
56          long oldValue = _max.get();
57          while (value > oldValue)
58          {
59              if (_max.compareAndSet(oldValue, value))
60                  break;
61              oldValue = _max.get();
62          }
63      }
64      
65      /* ------------------------------------------------------------ */
66      /**
67       * @param delta the amount to subtract the count by.
68       */
69      public void subtract(final long delta)
70      {
71          add(-delta);
72      }
73      
74      /* ------------------------------------------------------------ */
75      /**
76       */
77      public void increment()
78      {
79          add(1);
80      }
81      
82      /* ------------------------------------------------------------ */
83      /**
84       */
85      public void decrement()
86      {
87          add(-1);
88      }
89  
90      /* ------------------------------------------------------------ */
91      /**
92       * @return max value
93       */
94      public long getMax()
95      {
96          return _max.get();
97      }
98      
99      /* ------------------------------------------------------------ */
100     /**
101      * @return current value
102      */
103     public long getCurrent()
104     {
105         return _curr.get();
106     }
107     
108     /* ------------------------------------------------------------ */
109     /**
110      * @return total value
111      */
112     public long getTotal()
113     {
114         return _total.get();
115     }
116     
117     /* ------------------------------------------------------------ */
118     protected void upxdateMax(long value)
119     {
120     }
121 }