Adding UI extensibility
[aai/sparky-be.git] / src / main / java / org / onap / aai / sparky / analytics / HistoricalCounter.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
4  * ================================================================================
5  * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
6  * Copyright © 2017 Amdocs
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *       http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  *
21  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
22  */
23 package org.onap.aai.sparky.analytics;
24
25 /**
26  * A simple class to model a historical counter. A set of values will be tracked and basic
27  * statistics will be calculated in real time (n, min, max, avg).
28  * 
29  * @author davea
30  */
31 public class HistoricalCounter {
32
33   private double min;
34
35   private double max;
36
37   private double totalOfSamples;
38
39   private long numSamples;
40
41   private double value;
42
43   private boolean maintainSingleValue;
44
45   /**
46    * Instantiates a new historical counter.
47    *
48    * @param trackSingleValue the track single value
49    */
50   public HistoricalCounter(boolean trackSingleValue) {
51     min = -1;
52     max = 0;
53     totalOfSamples = 0;
54     value = 0.0;
55     numSamples = 0;
56     this.maintainSingleValue = trackSingleValue;
57   }
58
59   public boolean isSingleValue() {
60     return maintainSingleValue;
61   }
62
63   /**
64    * Update.
65    *
66    * @param value the value
67    */
68   public synchronized void update(double value) {
69
70     if (value < 0) {
71       return;
72     }
73
74     if (maintainSingleValue) {
75
76       this.value = value;
77
78     } else {
79
80       if (min == -1) {
81         min = value;
82       }
83
84       if (value < min) {
85         min = value;
86       }
87
88       if (value > max) {
89         max = value;
90       }
91
92       totalOfSamples += value;
93       numSamples++;
94     }
95   }
96
97   public double getValue() {
98     return value;
99   }
100
101   public double getMin() {
102     return min;
103   }
104
105   public double getMax() {
106     return max;
107   }
108
109   public long getNumSamples() {
110     return numSamples;
111   }
112
113   public double getAvg() {
114     if (numSamples == 0) {
115       return 0;
116     }
117
118     return (totalOfSamples / numSamples);
119   }
120
121   public void setMin(double min) {
122     this.min = min;
123   }
124
125   public void setMax(double max) {
126     this.max = max;
127   }
128
129   public double getTotalOfSamples() {
130     return totalOfSamples;
131   }
132
133   public void setTotalOfSamples(double totalOfSamples) {
134     this.totalOfSamples = totalOfSamples;
135   }
136
137   public void setNumSamples(long numSamples) {
138     this.numSamples = numSamples;
139   }
140
141   public void setMaintainSingleValue(boolean maintainSingleValue) {
142     this.maintainSingleValue = maintainSingleValue;
143   }
144
145
146   /**
147    * Reset.
148    */
149   public synchronized void reset() {
150     min = -1;
151     max = 0;
152     numSamples = 0;
153     totalOfSamples = 0;
154     value = 0.0;
155   }
156
157   /*
158    * (non-Javadoc)
159    * 
160    * @see java.lang.Object#toString()
161    */
162   @Override
163   public String toString() {
164     StringBuilder sb = new StringBuilder(32);
165
166     if (maintainSingleValue) {
167       sb.append("[ Val=").append(value).append(" ]");
168     } else {
169       sb.append("[ NumSamples=").append(numSamples).append(",");
170       sb.append(" Min=").append(min).append(",");
171       sb.append(" Max=").append(max).append(",");
172       sb.append(" Avg=").append(getAvg()).append(" ]");
173     }
174
175     return sb.toString();
176   }
177
178 }