View Javadoc
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  	 * Because firsts runs are always longer than real times, min and max
17  	 * measurements can be delayed until the services is called a few times.
18  	 * 
19  	 * @param minMaxDelay
20  	 *            number of hits before starting to measure min and max times.
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  	 * @return the avgNestedCalls
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  }