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 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
from common.utilsgui import *
def render(dp, fields, vld):
# mu.memlabels,mu.abrlabels,mu.totalused,mu.totalallocated,mu.memusage = dp.get_memory_usage()
mu = dp.get_memory_usage()
out = []
out.append("""<div class="tab_title">Memory usage details</div>""")
out.append("""<table class="FR">""")
out.append(""" <tr><th></th>""")
for label in mu.memlabels:
out.append(""" <th style="min-width: 70px;">%s</th>""" % label)
out.append(""" <th style="min-width: 70px;">total</th></tr>""")
out.append(""" <tr><th align="center">Used</th>""")
for i in range(len(mu.memlabels)):
out.append(""" <td align="center"><a style="cursor:default" title="%s B">%s</a></td>""" % (decimal_number(mu.memusage[1+i*2]),humanize_number(mu.memusage[1+i*2]," ")))
out.append(""" <td align="center"><a style="cursor:default" title="%s B">%s</a></td></tr>""" % (decimal_number(mu.totalused),humanize_number(mu.totalused," ")))
out.append(""" <tr><th align="center">Allocated</th>""")
for i in range(len(mu.memlabels)):
out.append(""" <td align="center"><a style="cursor:default" title="%s B">%s</a></td>""" % (decimal_number(mu.memusage[i*2]),humanize_number(mu.memusage[i*2]," ")))
out.append(""" <td align="center"><a style="cursor:default" title="%s B">%s</a></td></tr>""" % (decimal_number(mu.totalallocated),humanize_number(mu.totalallocated," ")))
out.append(""" <tr><th align="center">Utilization</th>""")
for i in range(len(mu.memlabels)):
if mu.memusage[i*2]:
percent = "%.2f %%" % (100.0 * mu.memusage[1+i*2] / mu.memusage[i*2])
else:
percent = "-"
out.append(""" <td align="center">%s</td>""" % percent)
if mu.totalallocated:
percent = "%.2f %%" % (100.0 * mu.totalused / mu.totalallocated)
else:
percent = "-"
out.append(""" <td align="center">%s</td></tr>""" % percent)
if mu.totalallocated>0:
out.append(""" <tr><th rowspan="2" align="center">Distribution</th>""")
for i in range(len(mu.memlabels)):
tpercent = "%.2f %%" % (100.0 * mu.memusage[i*2] / mu.totalallocated)
out.append(""" <td align="center">%s</td>""" % tpercent)
out.append(""" <td>-</td></tr>""")
out.append(""" <tr>""")
out.append(""" <td colspan="%d" class="NOPADDING">""" % (len(mu.memlabels)+1))
out.append(""" <table width="100%" style="border:0px;" id="bar"><tr>""")
memdistribution = []
other = 0.0
for i,(label,abr) in enumerate(zip(mu.memlabels,mu.abrlabels)):
tpercent = (100.0 * mu.memusage[i*2] / mu.totalallocated)
if tpercent>5.0:
memdistribution.append((tpercent,label,abr))
else:
other+=tpercent
memdistribution.sort()
memdistribution.reverse()
if other>0:
memdistribution.append((other,None,None))
clz = "FIRST"
labels = []
tooltips = []
for i,(percent,label,abr) in enumerate(memdistribution):
if label:
if percent>7.0:
out.append(""" <td style="width:%.2f%%;" class="MEMDIST%d MEMDIST%s" align="center"><a style="cursor:default;" title="%s (%.2f %%)">%s</a></td>""" % (percent,i,clz,label,percent,label))
elif percent>3.0:
out.append(""" <td style="width:%.2f%%;" class="MEMDIST%d MEMDIST%s" align="center"><a style="cursor:default;" title="%s (%.2f %%)">%s</a></td>""" % (percent,i,clz,label,percent,abr))
else:
out.append(""" <td style="width:%.2f%%;" class="MEMDIST%d MEMDIST%s" align="center"><a style="cursor:default;" title="%s (%.2f %%)">%s</a></td>""" % (percent,i,clz,label,percent,"#"))
labels.append(label)
tooltips.append("%s (%.2f %%)" % (label,percent))
else:
out.append(""" <td style="width:%.2f%%;" class="MEMDISTOTHER MEMDIST%s">others</td>""" % (percent,clz))
labels.append("others")
tooltips.append("other memory segments (%.2f %%)" % (percent))
clz = "MID"
out.append(""" </tr></table>""")
out.append("""<script type="text/javascript">""")
out.append("""<!--//--><![CDATA[//><!--""")
out.append(""" var bar_labels = [%s];""" % ",".join(map(repr,labels)))
out.append(""" var bar_tooltips = [%s];""" % ",".join(map(repr,tooltips)))
out.append("""//--><!]]>""")
out.append("""</script>""")
out.append("""<script type="text/javascript">
<!--//--><![CDATA[//><!--
function bar_refresh() {
var b = document.getElementById("bar");
var i,j,x;
if (b) {
var x = b.getElementsByTagName("td");
for (i=0 ; i<x.length ; i++) {
x[i].innerHTML = "";
}
for (i=0 ; i<x.length ; i++) {
var width = x[i].clientWidth;
var label = bar_labels[i];
var tooltip = bar_tooltips[i];
x[i].innerHTML = "<a title='" + tooltip + "'>" + label + "</a>";
if (width<x[i].clientWidth) {
x[i].innerHTML = "<a title='" + tooltip + "'>…</a>";
if (width<x[i].clientWidth) {
x[i].innerHTML = "<a title='" + tooltip + "'>•</a>";
if (width<x[i].clientWidth) {
x[i].innerHTML = "<a title='" + tooltip + "'>.</a>";
if (width<x[i].clientWidth) {
x[i].innerHTML = "";
}
}
} else {
for (j=1 ; j<bar_labels[i].length-1 ; j++) {
x[i].innerHTML = "<a title='" + tooltip + "'>"+label.substring(0,j) + "…</a>";
if (width<x[i].clientWidth) {
break;
}
}
x[i].innerHTML = "<a title='" + tooltip + "'>" + label.substring(0,j-1) + "…</a>";
}
}
}
}
}
function bar_add_event(obj,type,fn) {
if (obj.addEventListener) {
obj.addEventListener(type, fn, false);
} else if (obj.attachEvent) {
obj.attachEvent('on'+type, fn);
}
}
//bar_add_event(window,"load",bar_refresh); - comment due to flickering on load (for short bars <10%)
bar_add_event(window,"resize",bar_refresh);
//--><!]]>
</script>""")
out.append(""" </td>""")
out.append(""" </tr>""")
out.append("""</table>""")
return out
|