1 package org.apache.helix.healthcheck;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.log4j.Logger;
23
24 public class DecayAggregationType implements AggregationType
25 {
26
27 private static final Logger logger = Logger
28 .getLogger(DecayAggregationType.class);
29
30 public final static String TYPE_NAME = "decay";
31
32 double _decayFactor = 0.1;
33
34 public DecayAggregationType(double df)
35 {
36 super();
37 _decayFactor = df;
38 }
39
40 @Override
41 public String getName()
42 {
43 StringBuilder sb = new StringBuilder();
44 sb.append(TYPE_NAME);
45 sb.append(DELIM);
46 sb.append(_decayFactor);
47 return sb.toString();
48 }
49
50 @Override
51 public String merge(String iv, String ev, long prevTimestamp)
52 {
53 double incomingVal = Double.parseDouble(iv);
54 double existingVal = Double.parseDouble(ev);
55 long currTimestamp = System.currentTimeMillis();
56 double minutesOld = (currTimestamp - prevTimestamp) / 60000.0;
57
58
59 double oldDecayCoeff = Math.pow((1 - _decayFactor), minutesOld);
60 return String
61 .valueOf((double) (oldDecayCoeff * existingVal + (1 - oldDecayCoeff)
62 * incomingVal));
63 }
64 }