summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2019-11-02 22:47:25 +0100
committerJo-Philipp Wich <jo@mein.io>2019-11-03 17:56:58 +0100
commita2f43983b63b2e65aba7dd7f7f2fa22306c12e21 (patch)
treef8c7f00962b5d2d7aabb9e5b459334eab0d7df75
parent740d07573b34ccc38475445ff592b46556800c80 (diff)
luci-base: add luci/getRealtimeStats and luci/getConntrackList rpc methods
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
-rwxr-xr-xmodules/luci-base/root/usr/libexec/rpcd/luci66
1 files changed, 66 insertions, 0 deletions
diff --git a/modules/luci-base/root/usr/libexec/rpcd/luci b/modules/luci-base/root/usr/libexec/rpcd/luci
index 2601512da..10c1691b9 100755
--- a/modules/luci-base/root/usr/libexec/rpcd/luci
+++ b/modules/luci-base/root/usr/libexec/rpcd/luci
@@ -516,6 +516,72 @@ local methods = {
return { error = err }
end
end
+ },
+
+ getRealtimeStats = {
+ args = { mode = "interface", device = "eth0" },
+ call = function(args)
+ local util = require "luci.util"
+
+ local flags
+ if args.mode == "interface" then
+ flags = "-i %s" % util.shellquote(args.device)
+ elseif args.mode == "wireless" then
+ flags = "-r %s" % util.shellquote(args.device)
+ elseif args.mode == "conntrack" then
+ flags = "-c"
+ elseif args.mode == "load" then
+ flags = "-l"
+ else
+ return { error = "Invalid mode" }
+ end
+
+ local fd, err = io.popen("luci-bwc %s" % flags, "r")
+ if fd then
+ local parse = json.new()
+ local done
+
+ parse:parse("[")
+
+ while true do
+ local ln = fd:read("*l")
+ if not ln then
+ break
+ end
+
+ done, err = parse:parse((ln:gsub("%d+", "%1.0")))
+
+ if done then
+ err = "Unexpected JSON data"
+ end
+
+ if err then
+ break
+ end
+ end
+
+ fd:close()
+
+ done, err = parse:parse("]")
+
+ if err then
+ return { error = err }
+ elseif not done then
+ return { error = "Incomplete JSON data" }
+ else
+ return { result = parse:get() }
+ end
+ else
+ return { error = err }
+ end
+ end
+ },
+
+ getConntrackList = {
+ call = function()
+ local sys = require "luci.sys"
+ return { result = sys.net.conntrack() }
+ end
}
}