1 package net.sf.appstatus.services;
2
3 public class CallStatistics {
4
5 private Long maxResponseTime;
6 private double avgResponseTime = 0;
7 private long failures = 0;
8 private long errors = 0;
9 private long hits = 0;
10 private Long minResponseTime;
11 private double avgNestedCalls = 0;
12
13 private int minMaxDelay;
14
15
16
17
18
19
20
21
22 public CallStatistics(int minMaxDelay) {
23 this.minMaxDelay = minMaxDelay;
24 }
25
26 public Long getMaxResponseTime() {
27 return maxResponseTime;
28 }
29
30 public double getAvgResponseTime() {
31 return avgResponseTime;
32 }
33
34 public long getFailures() {
35 return failures;
36 }
37
38 public long getErrors() {
39 return errors;
40 }
41
42 public long getHits() {
43 return hits;
44 }
45
46 public Long getMinResponseTime() {
47 return minResponseTime;
48 }
49
50
51
52
53 public double getAvgNestedCalls() {
54 return avgNestedCalls;
55 }
56
57 public void addCall(Long executionTime, boolean failure, boolean error, int nestedCalls) {
58 synchronized (this) {
59 hits++;
60 if (failure) {
61 failures++;
62 }
63
64 if (error) {
65 errors++;
66 }
67
68 if (hits > minMaxDelay) {
69 if (maxResponseTime == null || maxResponseTime < executionTime) {
70 maxResponseTime = executionTime;
71 }
72
73 if (minResponseTime == null || minResponseTime > executionTime) {
74 minResponseTime = executionTime;
75 }
76 }
77
78 avgResponseTime = (avgResponseTime * (hits - 1) + executionTime) / (hits);
79
80 avgNestedCalls = (avgNestedCalls * (hits - 1) + (double) nestedCalls) / hits;
81 }
82
83 }
84 }