luci-app-vnstat2: use more efficient way to get database interfaces
authorJan Hoffmann <jan@3e8.eu>
Sat, 18 Nov 2023 08:52:45 +0000 (09:52 +0100)
committerJo-Philipp Wich <jo@mein.io>
Sun, 19 Nov 2023 00:01:45 +0000 (01:01 +0100)
The currently used command "vnstat --json f 1" can be very slow when the
database contains many entries. This can result in an XHR timeout error
on the configuration page.

Use the "--dbiflist" option instead, which was added in vnStat 2.7.

Fixes: #6702
Signed-off-by: Jan Hoffmann <jan@3e8.eu>
(cherry picked from commit 3ac4f567dfdfd6ee989ceffb025241e605790b6d)

applications/luci-app-vnstat2/htdocs/luci-static/resources/view/vnstat2/config.js

index 10cd85641c0ee0aa174c3a0e34cf7722705c953b..4d4bfd0dbe1e94359c87665a0933c6259b59ad02 100644 (file)
@@ -58,13 +58,10 @@ return view.extend({
                o = s.option(form.DummyValue, '_database');
 
                o.load = function(section_id) {
-                       return fs.exec('/usr/bin/vnstat', ['--json', 'f', '1']).then(L.bind(function(result) {
+                       return fs.exec('/usr/bin/vnstat', ['--dbiflist', '1']).then(L.bind(function(result) {
                                var databaseInterfaces = [];
                                if (result.code == 0) {
-                                       var vnstatData = JSON.parse(result.stdout);
-                                       for (var i = 0; i < vnstatData.interfaces.length; i++) {
-                                               databaseInterfaces.push(vnstatData.interfaces[i].name);
-                                       }
+                                       databaseInterfaces = result.stdout.trim().split('\n');
                                }
 
                                var configInterfaces = uci.get_first('vnstat', 'vnstat', 'interface') || [];