From f1db42e67041d7c290fb2221ba5e787aa5e6b8bb Mon Sep 17 00:00:00 2001 From: Christian Marangi Date: Thu, 15 Jun 2023 18:52:55 +0200 Subject: [PATCH] luci-mod-status: add ACL entry for storage index Add missing ACL entry for storage index page. Signed-off-by: Christian Marangi luci-mod-status: expand storage index page with mount points Expand storage index page with mount points. For custom mounts point we use the device name and we reference the mount point between (). Signed-off-by: Christian Marangi luci-mod-status: ensure each storage getMountPoints result is unique Signed-off-by: Paul Donald Closes #2767 --- .../view/status/include/25_storage.js | 56 +++++++++++++++---- .../rpcd/acl.d/luci-mod-status-index.json | 10 ++++ 2 files changed, 56 insertions(+), 10 deletions(-) diff --git a/modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/25_storage.js b/modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/25_storage.js index f6a3cef036..60661f63e5 100644 --- a/modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/25_storage.js +++ b/modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/25_storage.js @@ -7,6 +7,20 @@ var callSystemInfo = rpc.declare({ 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, @@ -24,27 +38,49 @@ return baseclass.extend({ title: _('Storage'), load: function() { - return L.resolveDefault(callSystemInfo(), {}); + return Promise.all([ + L.resolveDefault(callSystemInfo(), {}), + L.resolveDefault(callMountPoints(), {}), + ]); }, - render: function(systeminfo) { - var root = L.isObject(systeminfo.root) ? systeminfo.root : {}, + render: function(data) { + var systeminfo = data[0], + mounts = data[1], + root = L.isObject(systeminfo.root) ? systeminfo.root : {}, tmp = L.isObject(systeminfo.tmp) ? systeminfo.tmp : {}; - var fields = []; - fields.push(_('Disk space'), root.used*1024, root.total*1024); - fields.push(_('Temp space'), tmp.used*1024, tmp.total*1024); + 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' }); - for (var i = 0; i < fields.length; i += 3) { + Object.keys(fields).forEach(function(key) { table.appendChild(E('tr', { 'class': 'tr' }, [ - E('td', { 'class': 'td left', 'width': '33%' }, [ fields[i] ]), + E('td', { 'class': 'td left', 'width': '33%' }, [ key ]), E('td', { 'class': 'td left' }, [ - (fields[i + 1] != null) ? progressbar(fields[i + 1], fields[i + 2], true) : '?' + (fields[key].used != null) ? progressbar(fields[key].used, fields[key].size, true) : '?' ]) ])); - } + }); return table; } diff --git a/modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status-index.json b/modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status-index.json index 20cd23bb6c..99b4d02b1d 100644 --- a/modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status-index.json +++ b/modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status-index.json @@ -19,6 +19,16 @@ } }, + "luci-mod-status-index-storage": { + "description": "Grant access to Storage and Mount status display", + "read": { + "ubus": { + "luci": [ "getMountPoints" ], + "system": [ "info" ] + } + } + }, + "luci-mod-status-index-dhcp": { "description": "Grant access to DHCP status display", "read": { -- 2.30.2