'use strict'; 'require baseclass'; 'require rpc'; var callSystemInfo = rpc.declare({ object: 'system', method: 'info' }); function progressbar(value, max, byte) { var vn = parseInt(value) || 0, mn = parseInt(max) || 100, fv = byte ? String.format('%1024.2mB', value) : value, fm = byte ? String.format('%1024.2mB', max) : max, pc = Math.floor((100 / mn) * vn); return E('div', { 'class': 'cbi-progressbar', 'title': '%s / %s (%d%%)'.format(fv, fm, pc) }, E('div', { 'style': 'width:%.2f%%'.format(pc) })); } return baseclass.extend({ title: _('Memory'), load: function() { return L.resolveDefault(callSystemInfo(), {}); }, render: function(systeminfo) { var mem = L.isObject(systeminfo.memory) ? systeminfo.memory : {}, swap = L.isObject(systeminfo.swap) ? systeminfo.swap : {}; var fields = [ _('Total Available'), (mem.available) ? mem.available : (mem.total && mem.free && mem.buffered) ? mem.free + mem.buffered : null, mem.total, _('Used'), (mem.total && mem.free) ? (mem.total - mem.free) : null, mem.total, ]; if (mem.buffered) fields.push(_('Buffered'), mem.buffered, mem.total); if (mem.cached) fields.push(_('Cached'), mem.cached, mem.total); if (swap.total > 0) fields.push(_('Swap free'), swap.free, swap.total); var table = E('table', { 'class': 'table' }); for (var i = 0; i < fields.length; i += 3) { table.appendChild(E('tr', { 'class': 'tr' }, [ E('td', { 'class': 'td left', 'width': '33%' }, [ fields[i] ]), E('td', { 'class': 'td left' }, [ (fields[i + 1] != null) ? progressbar(fields[i + 1], fields[i + 2], true) : '?' ]) ])); } return table; } });