luci/applications/luci-app-nft-qos/luasrc/controller/nft-qos.lua
Jo-Philipp Wich 74da73b012 applications: add ACL dependency annotations to legacy controllers
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2020-04-19 17:17:26 +02:00

62 lines
1.6 KiB
Lua

-- Copyright 2018 Rosy Song <rosysong@rosinson.com>
-- Licensed to the public under the Apache License 2.0.
module("luci.controller.nft-qos", package.seeall)
function index()
if not nixio.fs.access("/etc/config/nft-qos") then
return
end
local e
e = entry({"admin", "status", "realtime", "rate"}, template("nft-qos/rate"), _("Rate"), 5)
e.leaf = true
e.acl_depends = { "luci-app-nft-qos" }
e = entry({"admin", "status", "realtime", "rate_status"}, call("action_rate"))
e.leaf = true
e.acl_depends = { "luci-app-nft-qos" }
e = entry({"admin", "services", "nft-qos"}, cbi("nft-qos/nft-qos"), _("QoS over Nftables"), 60)
e.leaf = true
e.acl_depends = { "luci-app-nft-qos" }
end
function _action_rate(rv, n)
local c = nixio.fs.access("/proc/net/ipv6_route") and
io.popen("nft list chain inet nft-qos-monitor " .. n .. " 2>/dev/null") or
io.popen("nft list chain ip nft-qos-monitor " .. n .. " 2>/dev/null")
if c then
for l in c:lines() do
local _, i, p, b = l:match(
'^%s+ip ([^%s]+) ([^%s]+) counter packets (%d+) bytes (%d+)'
)
if i and p and b then
-- handle expression
rv[#rv + 1] = {
rule = {
family = "inet",
table = "nft-qos-monitor",
chain = n,
handle = 0,
expr = {
{ match = { right = i } },
{ counter = { packets = p, bytes = b } }
}
}
}
end
end
c:close()
end
end
function action_rate()
luci.http.prepare_content("application/json")
local data = { nftables = {} }
_action_rate(data.nftables, "upload")
_action_rate(data.nftables, "download")
luci.http.write_json(data)
end