tstats.js - plan9port - [fork] Plan 9 from user space
(HTM) git clone git://src.adamsgaard.dk/plan9port
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
tstats.js (9923B)
---
1
2 biggraph = "arg=rpctotal&graph=diff"
3
4 graphname = new Array(
5 "arg=*&graph=diskbw",
6 "<b>disk</b> bytes/second",
7 "arg=*&graph=netbw",
8 "<b>network</b> bytes/second",
9 "arg=*&graph=iobw",
10 "total: <b>disk+net</b> bytes/second",
11
12 "arg=apartreadbyte&graph=diff",
13 "arena read bytes/second",
14 "arg=apartwritebyte&graph=diff",
15 "arena write bytes/second",
16
17 "arg=bloomfalsemiss&graph=pctdiff&arg2=bloomlookup&max=100",
18 "bloom false miss %",
19 "arg=bloomhit&graph=pctdiff&arg2=bloomlookup&max=100",
20 "bloom hit %",
21 "arg=bloommiss&graph=pctdiff&arg2=bloomlookup&max=100",
22 "bloom miss %",
23 "arg=bloomones&graph=pct&arg2=bloombits&max=100",
24 "bloom usage %",
25
26 "arg=dcachedirty&graph=pct&arg2=dcachesize&max=100",
27 "dcache dirty %",
28 "arg=dcachehit&graph=pctdiff&arg2=dcachelookup&max=100",
29 "dcache hit %",
30 "arg=dcachelookuptime&graph=divdiff&arg2=dcachelookup",
31 "dcache lookup time",
32 "arg=dcachelookup&graph=diff",
33 "dcache lookups/second",
34 "arg=dcachewrite&graph=diff",
35 "dcache writes/second",
36
37 "arg=icachedirty&graph=pct&arg2=icachesize&max=100",
38 "icache dirty %",
39 "arg=icachehit&graph=pctdiff&arg2=icachelookup&max=100",
40 "icache hit %",
41 "arg=scachehit&graph=pctdiff&arg2=icachelookup&max=100",
42 "scache hit %",
43 "arg=icachemiss&graph=pctdiff&arg2=icachelookup&max=100",
44 "icache miss %",
45 "arg=icachelookuptime&graph=divdiff&arg2=icachelookup",
46 "icache lookup time",
47 "arg=icacheprefetch&graph=diff",
48 "icache prefetches/second",
49 "arg=scacheprefetch&graph=diff",
50 "scache prefetches/second",
51 "arg=icachewrite&graph=diff",
52 "icache writes/second",
53
54 "arg=isectreadbyte&graph=diff",
55 "isect read bytes/second",
56 "arg=isectwritebyte&graph=diff",
57 "isect write bytes/second",
58
59 "arg=lcachehit&graph=pctdiff&arg2=lcachelookup&max=100",
60 "lump cache hit %",
61 "arg=lcachelookuptime&graph=divdiff&arg2=lcachelookup",
62 "lump cache lookup time",
63 "arg=lcachewrite&graph=diff",
64 "lcache writes/second",
65
66 "arg=rpcreadbyte&graph=diff",
67 "read RPC bytes/second",
68 "arg=rpctotal&graph=diff",
69 "RPCs/second",
70 "arg=rpcwritebyte&graph=diff",
71 "write RPC bytes/second",
72 "arg=rpcreadtime&graph=divdiff&arg2=rpcread",
73 "read RPC time",
74 "arg=rpcwritetime&graph=divdiff&arg2=rpcwrite",
75 "write RPC time",
76 "arg=rpcreadcachedtime&graph=divdiff&arg2=rpcreadcached",
77 "cached read RPC time",
78 "arg=rpcreaduncachedtime&graph=divdiff&arg2=rpcreaduncached",
79 "uncached read RPC time",
80 "arg=rpcwritenewtime&graph=divdiff&arg2=rpcwritenew",
81 "fresh write RPC time",
82 "arg=rpcwriteoldtime&graph=divdiff&arg2=rpcwriteold",
83 "dup write RPC time",
84 "arg=cigloadtime&graph=divdiff&arg2=cigload",
85 "cig load time",
86
87 "arg=sumreadbyte&graph=diff",
88 "checksum bytes/second",
89
90 "arg=dblockstall",
91 "threads stalled: dblock",
92 "arg=dcachestall",
93 "threads stalled: dcache",
94 "arg=icachestall",
95 "threads stalled: icache",
96 "arg=lumpstall",
97 "threads stalled: lump",
98
99 "arg=END"
100 )
101
102 column0 = new Array(
103 "column0",
104 "!bandwidth",
105 "arg=*&graph=iobw",
106 "arg=*&graph=netbw",
107 "arg=rpcreadbyte&graph=diff",
108 "arg=rpcwritebyte&graph=diff",
109 "arg=*&graph=diskbw",
110 "arg=isectreadbyte&graph=diff",
111 "arg=isectwritebyte&graph=diff",
112 "arg=apartreadbyte&graph=diff",
113 "arg=apartwritebyte&graph=diff",
114 "arg=sumreadbyte&graph=diff",
115
116 "!bloom filter",
117 "arg=bloomhit&graph=pctdiff&arg2=bloomlookup&max=100",
118 "arg=bloommiss&graph=pctdiff&arg2=bloomlookup&max=100",
119 "arg=bloomfalsemiss&graph=pctdiff&arg2=bloomlookup&max=100",
120 "arg=bloomones&graph=pct&arg2=bloombits&max=100",
121
122 "END"
123 )
124
125 column1 = new Array(
126 "column1",
127 "!icache",
128 "arg=icachedirty&graph=pct&arg2=icachesize&max=100",
129 "arg=icachehit&graph=pctdiff&arg2=icachelookup&max=100",
130 "arg=scachehit&graph=pctdiff&arg2=icachelookup&max=100",
131 "arg=icachemiss&graph=pctdiff&arg2=icachelookup&max=100",
132 "arg=icachewrite&graph=diff",
133 "arg=icacheprefetch&graph=diff",
134 "arg=scacheprefetch&graph=diff",
135
136 "!dcache",
137 "arg=dcachedirty&graph=pct&arg2=dcachesize&max=100",
138 "arg=dcachehit&graph=pctdiff&arg2=dcachelookup&max=100",
139 "arg=dcachelookup&graph=diff",
140 "arg=dcachewrite&graph=diff",
141
142 "!lump cache",
143 "arg=lcachehit&graph=pctdiff&arg2=lcachelookup&max=100",
144 "arg=lcachewrite&graph=diff",
145
146 "END"
147 )
148
149 column2 = new Array(
150 "column2",
151
152 "!stalls",
153 "arg=icachestall",
154 "arg=dcachestall",
155 "arg=dblockstall",
156 "arg=lumpstall",
157
158 "!timings",
159 "arg=icachelookuptime&graph=divdiff&arg2=icachelookup",
160 "arg=lcachelookuptime&graph=divdiff&arg2=lcachelookup",
161 "arg=dcachelookuptime&graph=divdiff&arg2=dcachelookup",
162 "arg=rpcreadtime&graph=divdiff&arg2=rpcread",
163 "arg=rpcwritetime&graph=divdiff&arg2=rpcwrite",
164 "arg=rpcreadcachedtime&graph=divdiff&arg2=rpcreadcached",
165 "arg=rpcreaduncachedtime&graph=divdiff&arg2=rpcreaduncached",
166 "arg=rpcwritenewtime&graph=divdiff&arg2=rpcwritenew",
167 "arg=rpcwriteoldtime&graph=divdiff&arg2=rpcwriteold",
168 "arg=cigloadtime&graph=divdiff&arg2=cigload",
169
170 "END"
171 )
172
173 col0info = new Array(column0.length)
174 col1info = new Array(column1.length)
175 col2info = new Array(column2.length)
176
177 function cleardebug() {
178 var p = document.getElementById("debug")
179 p.innerHTML = ""
180 }
181
182 function debug(s) {
183 var p = document.getElementById("debug")
184 if(p.innerHTML == "")
185 p.innerHTML = "<a href=\"javascript:cleardebug()\">clear</a>\n"
186 p.innerHTML += "<br>"+s
187 }
188
189 function Ginfo(y, fill, name) {
190 var g = new Object()
191 g.y = y
192 g.fill = fill
193 g.name = name
194 return g
195 }
196
197 function cleartable(t) {
198 for(var i=t.rows.length-1; i>=0; i--)
199 t.deleteRow(i)
200 }
201
202 function textofname(name)
203 {
204 for(var i=0; i<graphname.length; i+=2)
205 if(name == graphname[i])
206 return graphname[i+1]
207 }
208
209 function graphrow(row, span, name, dt, wid, ht, fill, text) {
210 var url = "/graph?"+name
211 url = url+"&min=0"
212 url = url+"&t0=-"+dt
213 url = url+"&wid="+wid
214 url = url+"&ht="+ht
215 url = url+"&fill="+fill
216
217 var s = "<td colSpan="+span
218 s = s+" valign=bottom"
219 s = s+" align=center"
220 s = s+" width="+wid
221 s = s+" height="+ht
222 s = s+" style=\"background-image: url("+url+");\""
223 s = s+">"+textofname(name)+text+"</td>"
224 row.innerHTML = s
225 }
226
227
228 function graphcell(cell, name, dt, wid, ht, fill) {
229 cell.vAlign = "bottom"
230 cell.align = "center"
231 cell.width = wid
232 cell.height = ht
233 }
234
235 function redraw() {
236 redrawgraphs()
237 redrawsettings()
238 }
239
240 function redrawgraphs() {
241 var t = document.getElementById("statgraphs")
242
243 cleartable(t)
244 for(var i=0; i<4; i++)
245 t.insertRow(i)
246
247 graphrow(t.rows[0], 3, biggraph, 86400, 900, 30, 0, " – showing 24 hours")
248 graphrow(t.rows[1], 3, biggraph, 3600, 900, 30, 1, " – showing 1 hour")
249 t.rows[2].innerHTML = "<td height=10></td>"
250
251 var r = t.rows[3]
252 graphtable(r.insertCell(0), column0, col0info, 0)
253 graphtable(r.insertCell(1), column1, col1info, 2)
254 graphtable(r.insertCell(2), column2, col2info, 4)
255 }
256
257 function graphtable(bigcell, list, infolist, fill) {
258 bigcell.innerHTML = "<table id=\""+list[0]+"\"></table>"
259 bigcell.vAlign = "top"
260 var t = document.getElementById(list[0])
261 t.onclick = columnclick
262
263 for(var i=1; i<list.length; i++){
264 var r = t.insertRow(t.rows.length)
265 name = list[i]
266 infolist[i] = Ginfo(t.offsetHeight, fill, name)
267 if(name == "END")
268 break
269 if(name.substring(0,1) == "!"){
270 name = name.substring(1)
271 if(i > 1){
272 r.innerHTML = "<td height=10></td>"
273 r = t.insertRow(t.rows.length)
274 }
275 r.innerHTML = "<td align=center><b>"+name+"</b>"
276 }else{
277 graphrow(r, 1, name, 600, 300, 30, fill++, "")
278 }
279 }
280 }
281
282 function xpos(obj) {
283 var x = 0
284 if(obj.fixedx)
285 return obj.fixedx
286 if(obj.offsetParent){
287 while(obj.offsetParent){
288 x += obj.offsetLeft
289 obj = obj.offsetParent
290 }
291 }else if(obj.x)
292 x = obj.x
293 return x
294 }
295
296 function ypos(obj) {
297 var y = 0
298 if(obj.fixedy)
299 return obj.fixedy
300 if(obj.offsetParent){
301 while(obj.offsetParent){
302 y += obj.offsetTop
303 obj = obj.offsetParent
304 }
305 }else if(obj.y)
306 y = obj.y
307 return y
308 }
309
310 function scrollleft() {
311 return document.body.scrollLeft
312 }
313
314 function scrolltop() {
315 return document.body.scrollTop
316 }
317
318 function columnclick(e) {
319 if(e.which && e.which != 1)
320 return;
321 var g = findgraph(scrollleft()+e.clientX, scrolltop()+e.clientY)
322 if(g && g.name.substring(0,1) != "!"){
323 biggraph = g.name
324 var t = document.getElementById("statgraphs")
325 graphrow(t.rows[0], 3, biggraph, 86400, 900, 30, 0, " – showing 24 hours")
326 graphrow(t.rows[1], 3, biggraph, 3600, 900, 30, 1, " – showing 1 hour")
327 }
328 }
329
330 function findgraph(x, y) {
331 var g
332
333 if(g = findgraphin(x, y, "column2", col2info))
334 return g
335 if(g = findgraphin(x, y, "column1", col1info))
336 return g
337 if(g = findgraphin(x, y, "column0", col0info))
338 return g
339 return
340 }
341
342 function findgraphin(x, y, tname, info) {
343 var t = document.getElementById(tname)
344 if(x < xpos(t))
345 return
346 y = y - ypos(t)
347 for(var i=info.length-2; i>=1; i--){
348 if(y > info[i].y)
349 return info[i]
350 }
351 return
352 }
353
354 function setof(name, val, list) {
355 var s = ""
356 for(var i=0; i<list.length; i++){
357 if(val == list[i])
358 s = s+" <b>"+val+"</b>"
359 else
360 s = s+" <a href=\"javascript:set('"+name+"', '"+list[i]+"')\">"+list[i]+"</a>"
361 }
362 return s
363 }
364
365 function loglinks(list) {
366 var s = ""
367 for(var i=0; i<list.length; i++){
368 s = s+" <a href=\"/log?log="+list[i]+"\">"+list[i]+"</a>"
369 }
370 return s
371 }
372
373 first = 1
374 function redrawsettings() {
375 if(first){
376 loadsettings()
377 first = 0
378 }
379 var s = ""
380 s = s+"<font size=-1>\n"
381 s = s+"logging:"+setof("logging", logging, loggingchoices)
382 s = s+" "
383 s = s+"stats:"+setof("stats", stats, statschoices)
384 s = s+"\n<p/>\n"
385 s = s+"compression:"+setof("compress", compress, compresschoices1)
386 s = s+"<br>"+setof("compress", compress, compresschoices2)
387 s = s+"\n<p/>\n"
388 s = s+"<a href=/index>index</a> | <a href=/storage>storage</a> | "
389 s = s+"log:"+loglinks(logs)
390 s = s+"</font>"
391 document.getElementById("settings").innerHTML = s
392 }
393
394 function set(name, value) {
395 eval(name+"= \""+value+"\"")
396 redrawsettings()
397 // Works in FireFox, not in Safari
398 parent.hidden.location.href = "/set?name="+name+"&value="+value
399 }