1
2
3
4 package org.apache.hadoop.hbase.tmpl.common;
5
6
7 import java.util.*;
8
9 import org.apache.hadoop.hbase.monitoring.*;
10
11 import org.apache.hadoop.util.StringUtils;
12
13 import org.owasp.esapi.ESAPI;
14
15 import org.owasp.esapi.errors.EncodingException;
16
17 public class TaskMonitorTmplImpl
18 extends org.jamon.AbstractTemplateImpl
19 implements org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl.Intf
20
21 {
22 private final TaskMonitor taskMonitor;
23 private final String filter;
24 private final String format;
25
26
27 public String encodeFilter() {
28 try {
29 return ESAPI.encoder().encodeForURL(filter);
30 }catch(EncodingException e) {}
31 return ESAPI.encoder().encodeForHTML(filter);
32 }
33
34 protected static org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl.ImplData p_implData)
35 {
36 if(! p_implData.getTaskMonitor__IsNotDefault())
37 {
38 p_implData.setTaskMonitor(TaskMonitor.get());
39 }
40 if(! p_implData.getFilter__IsNotDefault())
41 {
42 p_implData.setFilter("general");
43 }
44 if(! p_implData.getFormat__IsNotDefault())
45 {
46 p_implData.setFormat("html");
47 }
48 return p_implData;
49 }
50 public TaskMonitorTmplImpl(org.jamon.TemplateManager p_templateManager, org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl.ImplData p_implData)
51 {
52 super(p_templateManager, __jamon_setOptionalArguments(p_implData));
53 taskMonitor = p_implData.getTaskMonitor();
54 filter = p_implData.getFilter();
55 format = p_implData.getFormat();
56 }
57
58 @Override public void renderNoFlush(final java.io.Writer jamonWriter)
59 throws java.io.IOException
60 {
61
62
63 List<? extends MonitoredTask> tasks = taskMonitor.getTasks();
64 Iterator<? extends MonitoredTask> iter = tasks.iterator();
65
66 while (iter.hasNext()) {
67 MonitoredTask t = iter.next();
68 if (filter.equals("general")) {
69 if (t instanceof MonitoredRPCHandler)
70 iter.remove();
71 } else if (filter.equals("handler")) {
72 if (!(t instanceof MonitoredRPCHandler))
73 iter.remove();
74 } else if (filter.equals("rpc")) {
75 if (!(t instanceof MonitoredRPCHandler) ||
76 !((MonitoredRPCHandler) t).isRPCRunning())
77 iter.remove();
78 } else if (filter.equals("operation")) {
79 if (!(t instanceof MonitoredRPCHandler) ||
80 !((MonitoredRPCHandler) t).isOperationRunning())
81 iter.remove();
82 }
83 }
84 long now = System.currentTimeMillis();
85 Collections.reverse(tasks);
86 boolean first = true;
87
88
89 if (format.equals("json"))
90 {
91
92 jamonWriter.write("\n[");
93
94 for (MonitoredTask task : tasks)
95 {
96
97 if (first)
98 {
99
100 first = false;
101 }
102
103 else
104 {
105
106 jamonWriter.write(",");
107 }
108
109 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(task.toJSON()), jamonWriter);
110 }
111
112 jamonWriter.write("]\n");
113 }
114
115 else
116 {
117
118 jamonWriter.write("\n<h2>Tasks</h2>\n <ul class=\"nav nav-pills\">\n <li ");
119
120 if (filter.equals("all"))
121 {
122
123 jamonWriter.write("class=\"active\"");
124 }
125
126 jamonWriter.write("><a href=\"?filter=all\">Show All Monitored Tasks</a></li>\n <li ");
127
128 if (filter.equals("general"))
129 {
130
131 jamonWriter.write("class=\"active\"");
132 }
133
134 jamonWriter.write("><a href=\"?filter=general\">Show non-RPC Tasks</a></li>\n <li ");
135
136 if (filter.equals("handler"))
137 {
138
139 jamonWriter.write("class=\"active\"");
140 }
141
142 jamonWriter.write("><a href=\"?filter=handler\">Show All RPC Handler Tasks</a></li>\n <li ");
143
144 if (filter.equals("rpc"))
145 {
146
147 jamonWriter.write("class=\"active\"");
148 }
149
150 jamonWriter.write("><a href=\"?filter=rpc\">Show Active RPC Calls</a></li>\n <li ");
151
152 if (filter.equals("operation"))
153 {
154
155 jamonWriter.write("class=\"active\"");
156 }
157
158 jamonWriter.write("><a href=\"?filter=operation\">Show Client Operations</a></li>\n <li><a href=\"?format=json&filter=");
159
160 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(encodeFilter()), jamonWriter);
161
162 jamonWriter.write("\">View as JSON</a></li>\n </ul>\n ");
163
164 if (tasks.isEmpty())
165 {
166
167 jamonWriter.write("\n <p>No tasks currently running on this node.</p>\n ");
168 }
169
170 else
171 {
172
173 jamonWriter.write("\n <table class=\"table\">\n <tr>\n <th>Start Time</th>\n <th>Description</th>\n <th>State</th>\n <th>Status</th>\n </tr>\n ");
174
175 for (MonitoredTask task : tasks )
176 {
177
178 jamonWriter.write("\n <tr class=\"");
179
180 {
181
182 __jamon_innerUnit__stateCss(jamonWriter, task.getState() );
183 }
184
185 jamonWriter.write("\">\n <td>");
186
187 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(new Date(task.getStartTime())), jamonWriter);
188
189 jamonWriter.write("</td>\n <td>");
190
191 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(task.getDescription()), jamonWriter);
192
193 jamonWriter.write("</td>\n <td>");
194
195 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(task.getState()), jamonWriter);
196
197 jamonWriter.write("\n (since ");
198
199 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.formatTimeDiff(now, task.getStateTime())), jamonWriter);
200
201 jamonWriter.write(" ago)\n </td>\n <td>");
202
203 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(task.getStatus()), jamonWriter);
204
205 jamonWriter.write("\n (since ");
206
207 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.formatTimeDiff(now, task.getStatusTime())), jamonWriter);
208
209 jamonWriter.write(" \n ago)</td>\n </tr>\n ");
210 }
211
212 jamonWriter.write("\n </table>\n\n ");
213 }
214
215 jamonWriter.write("\n");
216 }
217
218 jamonWriter.write("\n\n\n");
219 }
220
221
222
223 private void __jamon_innerUnit__stateCss(final java.io.Writer jamonWriter, final MonitoredTask.State state)
224 throws java.io.IOException
225 {
226
227 if (state == MonitoredTask.State.COMPLETE) {
228
229 jamonWriter.write("alert alert-success");
230
231 }
232
233 else if (state == MonitoredTask.State.ABORTED) {
234
235 jamonWriter.write("alert alert-error");
236
237 }
238 }
239
240
241 }