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
|
'use strict';
'require baseclass';
'require rpc';
var callSystemInfo = rpc.declare({
object: 'system',
method: 'info'
});
var callMountPoints = rpc.declare({
object: 'luci',
method: 'getMountPoints',
expect: { result: [] }
});
var MountSkipList = [
"/rom",
"/tmp",
"/dev",
"/overlay",
"/",
]
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: _('Storage'),
load: function() {
return Promise.all([
L.resolveDefault(callSystemInfo(), {}),
L.resolveDefault(callMountPoints(), {}),
]);
},
render: function(data) {
var systeminfo = data[0],
mounts = data[1],
root = L.isObject(systeminfo.root) ? systeminfo.root : {},
tmp = L.isObject(systeminfo.tmp) ? systeminfo.tmp : {};
const existenceChk = function(fields, name, values) {
if (!fields.hasOwnProperty(name))
fields[name] = values;
};
var fields = {};
existenceChk(fields, _('Disk space'), { used: root.used * 1024, size: root.total * 1024 });
existenceChk(fields, _('Temp space'), { used: tmp.used * 1024, size: tmp.total * 1024 });
for (var i = 0; i < mounts.length; i++) {
var entry = mounts[i];
if (MountSkipList.includes(entry.mount))
continue;
var name = entry.device + ' (' + entry.mount +')',
used = entry.size - entry.free;
existenceChk(fields, name, { used: used, size: entry.size });
}
var table = E('table', { 'class': 'table' });
Object.keys(fields).forEach(function(key) {
table.appendChild(E('tr', { 'class': 'tr' }, [
E('td', { 'class': 'td left', 'width': '33%' }, [ key ]),
E('td', { 'class': 'td left' }, [
(fields[key].used != null) ? progressbar(fields[key].used, fields[key].size, true) : '?'
])
]));
});
return table;
}
});
|