router.html: add support for available memory

Add support for showing available memory if included in the alfred
dataset. This might be more helpful than free memory in several
cases.

While at it, tidy up and improve the JS code for the graph. It also
shows the latest values in the legend now.

Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
This commit is contained in:
Adrian Schmutzler 2021-02-26 17:22:47 +01:00
parent bd8d0280f6
commit 543117cb00
3 changed files with 42 additions and 11 deletions

View File

@ -515,6 +515,7 @@ def new_router_stats(infdict, router_id, uptime, router_update, statstime):
"time": statstime,
"fields": {
"sys_memfree": router_update["memory"]['free'],
"sys_memavail": router_update["memory"]['available'],
"sys_membuff": router_update["memory"]['buffering'],
"sys_memcache": router_update["memory"]['caching'],
"loadavg": float(router_update["sys_loadavg"]),
@ -661,6 +662,7 @@ def parse_nodewatcher_xml(xml,statstime):
"sys_uptime": int(evalxpathfloat(tree,"/data/system_data/uptime/text()")),
"memory": {
"free": evalxpathint(tree,"/data/system_data/memory_free/text()"),
"available": evalxpathint(tree,"/data/system_data/memory_available/text()"),
"buffering": evalxpathint(tree,"/data/system_data/memory_buffering/text()"),
"caching": evalxpathint(tree,"/data/system_data/memory_caching/text()"),
},

View File

@ -285,6 +285,7 @@ def router_info(dbid):
"mb": s["sys_membuff"],
"mc": s["sys_memcache"],
"mf": s["sys_memfree"],
"ma": s["sys_memavail"],
"pr": s["sys_procrun"],
"pt": s["sys_proctot"]
})

View File

@ -20,6 +20,9 @@ function legendFormatter(label, series) {
return label;
}
function appendMiB(value, fixed=1) {
return " (" + (value/1024).toFixed(fixed) + " M)";
}
function setup_plot_zoom(plot, pdata, num_data_points) {
plot.getPlaceholder().bind("plotselected", function (event, ranges) {
@ -184,18 +187,42 @@ function gw_graph(gws) {
function memory_graph() {
var memstat = $("#memstat");
var free = [], caching = [], buffering = [];
var free = [], caching = [], buffering = [], available = [];
var len, i;
var label_free = "free";
var label_avail = "available";
var label_cache = "cache";
var label_buff = "buffer";
for (len=router_stats.length, i=0; i<len; i++) {
try {
var free_value = router_stats[i].mf*1024;
var caching_value = router_stats[i].mc*1024;
var buffering_value = router_stats[i].mb*1024;
var free_value = router_stats[i].mf;
var avail_value = router_stats[i].ma;
var caching_value = router_stats[i].mc;
var buffering_value = router_stats[i].mb;
var date_value = router_stats[i].t.$date;
if(free_value != null && caching_value != null && buffering_value != null) {
free.push([date_value, free_value]);
caching.push([date_value, caching_value]);
buffering.push([date_value, buffering_value]);
/* push bytes */
free.push([date_value, free_value*1024]);
caching.push([date_value, caching_value*1024]);
buffering.push([date_value, buffering_value*1024]);
}
if(avail_value != null) {
available.push([date_value, avail_value*1024]);
}
if(i == len-1) {
if(free_value) {
label_free += appendMiB(free_value);
}
if(caching_value) {
label_cache += appendMiB(caching_value);
}
if(buffering_value) {
label_buff += appendMiB(buffering_value);
}
if(avail_value) {
label_avail += appendMiB(avail_value);
}
}
}
catch(TypeError) {
@ -203,15 +230,16 @@ function memory_graph() {
}
}
var pdata = [
{"label": "free", "data": free, "color": "#4DA74A"},
{"label": "caching", "data": caching, "color": "#EDC240"},
{"label": "buffering", "data": buffering, "color": "#8CACC6"}
{"label": label_free, "data": free, "color": "#4DA74A"},
{"label": label_avail, "data": available, "color": "#CB4B4B"},
{"label": label_cache, "data": caching, "color": "#EDC240"},
{"label": label_buff, "data": buffering, "color": "#8CACC6"}
];
var plot = $.plot(memstat, pdata, {
xaxis: {mode: "time", timezone: "browser"},
selection: {mode: "x"},
yaxis: {min: 0, mode: "byte", autoscaleMargin: 0.1},
legend: {noColumns: 3, hideable: true},
legend: {noColumns: 4, hideable: true},
series: {downsample: {threshold: Math.floor(memstat.width() * points_per_px)}}
});
setup_plot_zoom(plot, pdata, len);