Blob


2 biggraph = "arg=rpctotal&graph=diff"
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",
12 "arg=apartreadbyte&graph=diff",
13 "arena read bytes/second",
14 "arg=apartwritebyte&graph=diff",
15 "arena write bytes/second",
17 "arg=bloomfalsemiss&graph=pctdiff&arg2=bloomlookup&max=100",
18 "bloom false hit %",
19 "arg=bloomhit&graph=pctdiff&arg2=bloomlookup&max=100",
20 "bloom miss %",
21 "arg=bloomlookuptime&graph=divdiff&arg2=bloomlookup",
22 "bloom lookup time",
23 "arg=bloomones&graph=pct&arg2=bloombits&max=100",
24 "bloom usage %",
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",
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=icachewrite&graph=diff",
50 "icache writes/second",
52 "arg=isectreadbyte&graph=diff",
53 "isect read bytes/second",
54 "arg=isectwritebyte&graph=diff",
55 "isect write bytes/second",
57 "arg=lcachehit&graph=pctdiff&arg2=lcachelookup&max=100",
58 "lump cache hit %",
59 "arg=lcachelookuptime&graph=divdiff&arg2=lcachelookup",
60 "lump cache lookup time",
61 "arg=lcachewrite&graph=diff",
62 "lcache writes/second",
64 "arg=rpcreadbyte&graph=diff",
65 "read RPC bytes/second",
66 "arg=rpctotal&graph=diff",
67 "RPCs/second",
68 "arg=rpcwritebyte&graph=diff",
69 "write RPC bytes/second",
70 "arg=rpcreadtime&graph=divdiff&arg2=rpcread",
71 "read RPC time",
72 "arg=rpcwritetime&graph=divdiff&arg2=rpcwrite",
73 "write RPC time",
74 "arg=rpcreadcachedtime&graph=divdiff&arg2=rpcreadcached",
75 "cached read RPC time",
76 "arg=rpcreaduncachedtime&graph=divdiff&arg2=rpcreaduncached",
77 "uncached read RPC time",
78 "arg=rpcwritenewtime&graph=divdiff&arg2=rpcwritenew",
79 "fresh write RPC time",
80 "arg=rpcwriteoldtime&graph=divdiff&arg2=rpcwriteold",
81 "dup write RPC time",
82 "arg=cigloadtime&graph=divdiff&arg2=cigload",
83 "cig load time",
85 "arg=sumreadbyte&graph=diff",
86 "checksum bytes/second",
88 "arg=dblockstall",
89 "threads stalled: dblock",
90 "arg=dcachestall",
91 "threads stalled: dcache",
92 "arg=icachestall",
93 "threads stalled: icache",
94 "arg=lumpstall",
95 "threads stalled: lump",
97 "arg=END"
98 )
100 column0 = new Array(
101 "column0",
102 "!bandwidth",
103 "arg=*&graph=iobw",
104 "arg=*&graph=netbw",
105 "arg=rpcreadbyte&graph=diff",
106 "arg=rpcwritebyte&graph=diff",
107 "arg=*&graph=diskbw",
108 "arg=isectreadbyte&graph=diff",
109 "arg=isectwritebyte&graph=diff",
110 "arg=apartreadbyte&graph=diff",
111 "arg=apartwritebyte&graph=diff",
112 "arg=sumreadbyte&graph=diff",
114 "!bloom filter",
115 "arg=bloomhit&graph=pctdiff&arg2=bloomlookup&max=100",
116 "arg=bloomfalsemiss&graph=pctdiff&arg2=bloomlookup&max=100",
117 "arg=bloomones&graph=pct&arg2=bloombits&max=100",
119 "END"
122 column1 = new Array(
123 "column1",
124 "!icache",
125 "arg=icachedirty&graph=pct&arg2=icachesize&max=100",
126 "arg=icachehit&graph=pctdiff&arg2=icachelookup&max=100",
127 "arg=scachehit&graph=pctdiff&arg2=icachelookup&max=100",
128 "arg=icachemiss&graph=pctdiff&arg2=icachelookup&max=100",
129 "arg=icachewrite&graph=diff",
130 "arg=icacheprefetch&graph=diff",
131 "arg=scacheprefetch&graph=diff",
133 "!dcache",
134 "arg=dcachedirty&graph=pct&arg2=dcachesize&max=100",
135 "arg=dcachehit&graph=pctdiff&arg2=dcachelookup&max=100",
136 "arg=dcachelookup&graph=diff",
137 "arg=dcachewrite&graph=diff",
139 "!lump cache",
140 "arg=lcachehit&graph=pctdiff&arg2=lcachelookup&max=100",
141 "arg=lcachewrite&graph=diff",
143 "END"
146 column2 = new Array(
147 "column2",
149 "!stalls",
150 "arg=icachestall",
151 "arg=dcachestall",
152 "arg=dblockstall",
153 "arg=lumpstall",
155 "!timings",
156 "arg=bloomlookuptime&graph=divdiff&arg2=bloomlookup",
157 "arg=icachelookuptime&graph=divdiff&arg2=icachelookup",
158 "arg=lcachelookuptime&graph=divdiff&arg2=lcachelookup",
159 "arg=dcachelookuptime&graph=divdiff&arg2=dcachelookup",
160 "arg=rpcreadtime&graph=divdiff&arg2=rpcread",
161 "arg=rpcwritetime&graph=divdiff&arg2=rpcwrite",
162 "arg=rpcreadcachedtime&graph=divdiff&arg2=rpcreadcached",
163 "arg=rpcreaduncachedtime&graph=divdiff&arg2=rpcreaduncached",
164 "arg=rpcwritenewtime&graph=divdiff&arg2=rpcwritenew",
165 "arg=rpcwriteoldtime&graph=divdiff&arg2=rpcwriteold",
166 "arg=cigloadtime&graph=divdiff&arg2=cigload",
168 "END"
171 col0info = new Array(column0.length)
172 col1info = new Array(column1.length)
173 col2info = new Array(column2.length)
175 function cleardebug() {
176 var p = document.getElementById("debug")
177 p.innerHTML = ""
180 function debug(s) {
181 var p = document.getElementById("debug")
182 if(p.innerHTML == "")
183 p.innerHTML = "<a href=\"javascript:cleardebug()\">clear</a>\n"
184 p.innerHTML += "<br>"+s
187 function Ginfo(y, fill, name) {
188 var g = new Object()
189 g.y = y
190 g.fill = fill
191 g.name = name
192 return g
195 function cleartable(t) {
196 for(var i=t.rows.length-1; i>=0; i--)
197 t.deleteRow(i)
200 function textofname(name)
202 for(var i=0; i<graphname.length; i+=2)
203 if(name == graphname[i])
204 return graphname[i+1]
207 function graphrow(row, span, name, dt, wid, ht, fill, text) {
208 var url = "/graph?"+name
209 url = url+"&min=0"
210 url = url+"&t0=-"+dt
211 url = url+"&wid="+wid
212 url = url+"&ht="+ht
213 url = url+"&fill="+fill
215 var s = "<td colSpan="+span
216 s = s+" valign=bottom"
217 s = s+" align=center"
218 s = s+" width="+wid
219 s = s+" height="+ht
220 s = s+" style=\"background-image: url("+url+");\""
221 s = s+">"+textofname(name)+text+"</td>"
222 row.innerHTML = s
226 function graphcell(cell, name, dt, wid, ht, fill) {
227 cell.vAlign = "bottom"
228 cell.align = "center"
229 cell.width = wid
230 cell.height = ht
233 function redraw() {
234 redrawgraphs()
235 redrawsettings()
238 function redrawgraphs() {
239 var t = document.getElementById("statgraphs")
241 cleartable(t)
242 for(var i=0; i<4; i++)
243 t.insertRow(i)
245 graphrow(t.rows[0], 3, biggraph, 86400, 900, 30, 0, " &ndash; showing 24 hours")
246 graphrow(t.rows[1], 3, biggraph, 3600, 900, 30, 1, " &ndash; showing 1 hour")
247 t.rows[2].innerHTML = "<td height=10></td>"
249 var r = t.rows[3]
250 graphtable(r.insertCell(0), column0, col0info, 0)
251 graphtable(r.insertCell(1), column1, col1info, 2)
252 graphtable(r.insertCell(2), column2, col2info, 4)
255 function graphtable(bigcell, list, infolist, fill) {
256 bigcell.innerHTML = "<table id=\""+list[0]+"\"></table>"
257 bigcell.vAlign = "top"
258 var t = document.getElementById(list[0])
259 t.onclick = columnclick
261 for(var i=1; i<list.length; i++){
262 var r = t.insertRow(t.rows.length)
263 name = list[i]
264 infolist[i] = Ginfo(t.offsetHeight, fill, name)
265 if(name == "END")
266 break
267 if(name.substring(0,1) == "!"){
268 name = name.substring(1)
269 if(i > 1){
270 r.innerHTML = "<td height=10></td>"
271 r = t.insertRow(t.rows.length)
273 r.innerHTML = "<td align=center><b>"+name+"</b>"
274 }else{
275 graphrow(r, 1, name, 600, 300, 30, fill++, "")
280 function xpos(obj) {
281 var x = 0
282 if(obj.fixedx)
283 return obj.fixedx
284 if(obj.offsetParent){
285 while(obj.offsetParent){
286 x += obj.offsetLeft
287 obj = obj.offsetParent
289 }else if(obj.x)
290 x = obj.x
291 return x
294 function ypos(obj) {
295 var y = 0
296 if(obj.fixedy)
297 return obj.fixedy
298 if(obj.offsetParent){
299 while(obj.offsetParent){
300 y += obj.offsetTop
301 obj = obj.offsetParent
303 }else if(obj.y)
304 y = obj.y
305 return y
308 function scrollleft() {
309 return document.body.scrollLeft
312 function scrolltop() {
313 return document.body.scrollTop
316 function columnclick(e) {
317 if(e.which && e.which != 1)
318 return;
319 var g = findgraph(scrollleft()+e.clientX, scrolltop()+e.clientY)
320 if(g && g.name.substring(0,1) != "!"){
321 biggraph = g.name
322 var t = document.getElementById("statgraphs")
323 graphrow(t.rows[0], 3, biggraph, 86400, 900, 30, 0, " &ndash; showing 24 hours")
324 graphrow(t.rows[1], 3, biggraph, 3600, 900, 30, 1, " &ndash; showing 1 hour")
328 function findgraph(x, y) {
329 var g
331 if(g = findgraphin(x, y, "column2", col2info))
332 return g
333 if(g = findgraphin(x, y, "column1", col1info))
334 return g
335 if(g = findgraphin(x, y, "column0", col0info))
336 return g
337 return
340 function findgraphin(x, y, tname, info) {
341 var t = document.getElementById(tname)
342 if(x < xpos(t))
343 return
344 y = y - ypos(t)
345 for(var i=info.length-2; i>=1; i--){
346 if(y > info[i].y)
347 return info[i]
349 return
352 function setof(name, val, list) {
353 var s = ""
354 for(var i=0; i<list.length; i++){
355 if(val == list[i])
356 s = s+" <b>"+val+"</b>"
357 else
358 s = s+" <a href=\"javascript:set('"+name+"', '"+list[i]+"')\">"+list[i]+"</a>"
360 return s
363 function loglinks(list) {
364 var s = ""
365 for(var i=0; i<list.length; i++){
366 s = s+" <a href=\"/log/"+list[i]+"\">"+list[i]+"</a>"
368 return s
371 first = 1
372 function redrawsettings() {
373 if(first){
374 loadsettings()
375 first = 0
377 var s = ""
378 s = s+"<font size=-1>\n"
379 s = s+"logging:"+setof("logging", logging, loggingchoices)
380 s = s+" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "
381 s = s+"stats:"+setof("stats", stats, statschoices)
382 s = s+"\n<p/>\n"
383 s = s+"compression:"+setof("compress", compress, compresschoices1)
384 s = s+"<br>"+setof("compress", compress, compresschoices2)
385 s = s+"\n<p/>\n"
386 s = s+"<a href=/index>index</a> | <a href=/storage>storage</a> | "
387 s = s+"log:"+loglinks(logs)
388 s = s+"</font>"
389 document.getElementById("settings").innerHTML = s
392 function set(name, value) {
393 eval(name+"= \""+value+"\"")
394 redrawsettings()
395 // Works in FireFox, not in Safari
396 parent.hidden.location.href = "/set/"+name+"/"+value