/
Status.java
94 lines (84 loc) · 3.35 KB
/
Status.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package jrds.webapp;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONException;
import jrds.HostInfo;
import jrds.HostsList;
import jrds.starter.Timer;
import jrds.starter.Timer.Stats;
/**
* A few stats for jrds inner status
* @author Fabrice Bacchella
*/
@ServletSecurity
public class Status extends JrdsServlet {
/**
* @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
HostsList hl = getHostsList();
ParamsBean params = new ParamsBean(req, hl);
if(! allowed(params, ACL.ALLOWEDACL, req, res)) {
return;
}
Collection<HostInfo> hosts = hl.getHosts();
int numHosts = hosts.size();
int numProbes = 0;
int generation = hl.getGeneration();
for(HostInfo h: hosts) {
numProbes += h.getNumProbes();
}
Map<String, Stats> stats = new HashMap<String, Stats>();
for(Timer t: hl.getTimers()) {
try {
stats.put(t.getName(), (Stats) t.getStats().clone());
} catch (CloneNotSupportedException e) {
//No that's false, it's always supported
}
}
if(params.getValue("json") != null) {
JrdsJSONWriter writer = new JrdsJSONWriter(res);
try {
writer.object();
writer.key("Hosts").value(numHosts);
writer.key("Probes").value(numProbes);
writer.key("Timers");
writer.array();
for(Map.Entry<String, Stats> e: stats.entrySet()) {
writer.object();
long lastCollectAgo = (System.currentTimeMillis() - e.getValue().lastCollect.getTime()) / 1000;
writer.key("Name").value(e.getKey());
writer.key("LastCollect").value(lastCollectAgo);
writer.key("LastDuration").value(e.getValue().runtime);
writer.endObject();
}
writer.endArray();
writer.key("Generation").value(generation);
writer.endObject();
writer.flush();
} catch (JSONException e) {
}
}
else {
res.setContentType("text/plain");
res.addHeader("Cache-Control", "no-cache");
PrintWriter writer = res.getWriter();
writer.println("Hosts: " + numHosts);
writer.println("Probes: " + numProbes);
for(Map.Entry<String, Stats> e: stats.entrySet()) {
long lastCollectAgo = (System.currentTimeMillis() - e.getValue().lastCollect.getTime()) / 1000;
writer.println("Timer name: " + e.getKey());
writer.println(" Last collect: " + lastCollectAgo + "s ago (" + lastCollectAgo + ")" );
writer.println(" Last running duration: " + e.getValue().runtime / 1000 + "s");
}
writer.flush();
}
}
}