From: Jo-Philipp Wich Date: Sat, 2 Nov 2019 21:47:25 +0000 (+0100) Subject: luci-base: add luci/getRealtimeStats and luci/getConntrackList rpc methods X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=a2f43983b63b2e65aba7dd7f7f2fa22306c12e21;p=oweals%2Fluci.git luci-base: add luci/getRealtimeStats and luci/getConntrackList rpc methods Signed-off-by: Jo-Philipp Wich --- 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 } }