305 lines
8.7 KiB
Lua
305 lines
8.7 KiB
Lua
|
#!/usr/bin/env lua
|
||
|
|
||
|
local posix = require("Posix")
|
||
|
local json = require("json")
|
||
|
local xqf = require("xiaoqiang.common.XQFunction")
|
||
|
local uci = require("luci.model.uci").cursor()
|
||
|
local ubus = require ("ubus")
|
||
|
|
||
|
local cfg = {
|
||
|
['model_file'] = "/proc/xiaoqiang/model",
|
||
|
['debug'] = 0,
|
||
|
}
|
||
|
|
||
|
function read_line(filename)
|
||
|
local fd = io.open(filename)
|
||
|
local line = fd:read("*line")
|
||
|
fd:close()
|
||
|
return line
|
||
|
end
|
||
|
|
||
|
function exec(cmd)
|
||
|
local p = io.popen(cmd)
|
||
|
ret = p:read("*line")
|
||
|
p:close()
|
||
|
return ret
|
||
|
end
|
||
|
|
||
|
function log_points(t, v, instant)
|
||
|
if(type(v) ~= "string") then
|
||
|
v = tostring(v)
|
||
|
end
|
||
|
|
||
|
--[[if(instant) then
|
||
|
if (cfg.debug == 1) then
|
||
|
posix.syslog(posix.LOG_DEBUG, string.format("log_points %s=%s", t, v))
|
||
|
elseif(cfg.debug == 2) then
|
||
|
print(string.format("stat_points_instant %s=%s", t, v))
|
||
|
else
|
||
|
posix.syslog(posix.LOG_INFO, string.format("stat_points_instant %s=%s", t, v))
|
||
|
end
|
||
|
else]]
|
||
|
if (cfg.debug == 1) then
|
||
|
posix.syslog(posix.LOG_DEBUG, string.format("log_points %s=%s", t, v))
|
||
|
elseif(cfg.debug == 2) then
|
||
|
print(string.format("stat_points_none %s=%s", t, v))
|
||
|
else
|
||
|
posix.syslog(posix.LOG_INFO, string.format("stat_points_none %s=%s", t, v))
|
||
|
end
|
||
|
--end
|
||
|
end
|
||
|
|
||
|
|
||
|
|
||
|
function function_appqos()
|
||
|
local enable = uci:get("app-tc", "config", "enable") or 0
|
||
|
log_points("function_appqos", enable == '0' and 0 or 1)
|
||
|
end
|
||
|
|
||
|
function function_clone()
|
||
|
local wan = require("xiaoqiang.util.XQLanWanUtil")
|
||
|
local defaultMac = wan.getDefaultMacAddress() or ""
|
||
|
local wanMac = wan.getWanMac()
|
||
|
log_points("function_clone", wanMac == defaultMac and 1 or 0)
|
||
|
end
|
||
|
|
||
|
function function_qos()
|
||
|
local enable = uci:get("miqos", "settings", "enabled") or 0
|
||
|
log_points("function_qos", enable == '0' and 0 or 1)
|
||
|
|
||
|
local qos_stat='off'
|
||
|
if enable ~= '0' then
|
||
|
qos_stat=uci:get("miqos","settings","qos_auto") or "off"
|
||
|
end
|
||
|
log_points("function_qos_state", qos_stat)
|
||
|
|
||
|
end
|
||
|
|
||
|
function function_upnp()
|
||
|
log_points("function_upnp", exec("/etc/init.d/miniupnpd enabled && echo 1 || echo 0"))
|
||
|
end
|
||
|
|
||
|
function function_pptp()
|
||
|
local proto = uci:get("network", "vpn", "proto")
|
||
|
local enable
|
||
|
local status
|
||
|
if proto and proto == 'pptp' then
|
||
|
status = json.decode(exec("vpn.lua status"))
|
||
|
if status and status.up then
|
||
|
enable = 1
|
||
|
else
|
||
|
enable = 0
|
||
|
end
|
||
|
else
|
||
|
enable = 0
|
||
|
end
|
||
|
log_points("function_pptp", enable)
|
||
|
end
|
||
|
|
||
|
function function_l2tp()
|
||
|
local proto = uci:get("network", "vpn", "proto")
|
||
|
local enable
|
||
|
local status
|
||
|
if proto and proto == 'l2tp' then
|
||
|
status = json.decode(exec("vpn.lua status"))
|
||
|
if status and status.up then
|
||
|
enable = 1
|
||
|
else
|
||
|
enable = 0
|
||
|
end
|
||
|
else
|
||
|
enable = 0
|
||
|
end
|
||
|
log_points("function_l2tp", enable)
|
||
|
end
|
||
|
|
||
|
function function_dmz()
|
||
|
local enable = uci:get("firewall", "dmz", "proto") or 0
|
||
|
log_points("function_dmz", enable == '0' and 0 or 1)
|
||
|
end
|
||
|
|
||
|
function function_plugin()
|
||
|
local datacenter = xqf.thrift_tunnel_to_datacenter([[{"api":612}]])
|
||
|
log_points("function_plugin", datacenter.status == 0 and 0 or 1)
|
||
|
end
|
||
|
|
||
|
function function_port_forwarding()
|
||
|
log_points("function_port_forwarding", exec("iptables-save | grep reflection >/dev/null && echo 1 || echo 0"))
|
||
|
end
|
||
|
|
||
|
function function_wireless_access()
|
||
|
local model = uci:get_first("wireless", "wifi-iface", "macfilter", nil)
|
||
|
if model and (model == 'deny' or model == 'allow') then
|
||
|
log_points("function_wireless_access", 1)
|
||
|
else
|
||
|
log_points("function_wireless_access", 0)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function function_wireless_access_blacklist()
|
||
|
local model = uci:get_first("wireless", "wifi-iface", "macfilter", nil)
|
||
|
if model and model == 'deny' then
|
||
|
log_points("function_wireless_access_blacklist", table.getn(uci:get_first("wireless", "wifi-iface", "maclist", {})))
|
||
|
else
|
||
|
log_points("function_wireless_access_blacklist", 0)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function function_wireless_access_whitelist()
|
||
|
local model = uci:get_first("wireless", "wifi-iface", "macfilter", nil)
|
||
|
if model and model == 'allow' then
|
||
|
log_points("function_wireless_access_whitelist", table.getn(uci:get_first("wireless", "wifi-iface", "maclist", {})))
|
||
|
else
|
||
|
log_points("function_wireless_access_whitelist", 0)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function function_channel_2g()
|
||
|
local channel_2g = uci:get("wireless", "wl1", "channel") or 0
|
||
|
log_points("function_channel_2g", channel_2g)
|
||
|
end
|
||
|
|
||
|
function function_channel_5g()
|
||
|
local channel_5g = uci:get("wireless", "wl0", "channel") or 0
|
||
|
log_points("function_channel_5g", channel_5g)
|
||
|
end
|
||
|
|
||
|
function function_channel_2g_signal()
|
||
|
local channel_2g_signal = uci:get("wireless", "wl1", "txpwr") or 0
|
||
|
log_points("function_channel_2g_signal", channel_2g_signal)
|
||
|
end
|
||
|
|
||
|
function function_channel_5g_signal()
|
||
|
local channel_5g_signal = uci:get("wireless", "wl0", "txpwr") or 0
|
||
|
log_points("function_channel_5g_signal", channel_5g_signal)
|
||
|
end
|
||
|
|
||
|
|
||
|
function function_channel_2g_r1c()
|
||
|
local channel_2g = uci:get("wireless", "mt7628", "channel") or 0
|
||
|
log_points("function_channel_2g", channel_2g)
|
||
|
end
|
||
|
|
||
|
function function_channel_5g_r1c()
|
||
|
local channel_5g = uci:get("wireless", "mt7612", "channel") or 0
|
||
|
log_points("function_channel_5g", channel_5g)
|
||
|
end
|
||
|
|
||
|
function function_channel_2g_signal_r1c()
|
||
|
local channel_2g_signal = uci:get("wireless", "mt7628", "txpwr") or 0
|
||
|
log_points("function_channel_2g_signal", channel_2g_signal)
|
||
|
end
|
||
|
|
||
|
function function_channel_5g_signal_r1c()
|
||
|
local channel_5g_signal = uci:get("wireless", "mt7612", "txpwr") or 0
|
||
|
log_points("function_channel_5g_signal", channel_5g_signal)
|
||
|
end
|
||
|
|
||
|
function function_hdd_hibernation()
|
||
|
log_points("function_hdd_hibernation", exec("/etc/init.d/noflushd status >/dev/null && echo 1 || echo 0"))
|
||
|
end
|
||
|
|
||
|
function function_dhcp()
|
||
|
local dhcp = uci:get("dhcp", "lan", "interface") or 'off'
|
||
|
log_points("function_dhcp", dhcp == 'lan' and 1 or 0)
|
||
|
end
|
||
|
|
||
|
function function_ddns()
|
||
|
local ddns = uci:get("ddns", "ddns", "status") or 'off'
|
||
|
log_points("function_ddns", ddns == 'on' and 1 or 0)
|
||
|
end
|
||
|
|
||
|
function function_zigbee()
|
||
|
local zb = require('xiaoqiang.util.XQZigbeeUtil')
|
||
|
local t = {}
|
||
|
zb.append_yeelink_list(t)
|
||
|
for _, v in ipairs(t) do
|
||
|
-- network_device_zigbee=mac|origin_name|ptype|ctype|name
|
||
|
log_points("network_device_zigbee", string.format("%s|%s|%d|%d|%s", v.mac, v.origin_name, v.ptype, v.ctype, v.name))
|
||
|
end
|
||
|
end
|
||
|
|
||
|
-- report bandwdith for one time each day
|
||
|
function function_bandwidth()
|
||
|
local bw_upload= uci:get("miqos", "settings", "upload") or '0'
|
||
|
local bw_download= uci:get("miqos", "settings", "download") or '0'
|
||
|
log_points("network_bandwidth", string.format("%s|%s", bw_upload,bw_download))
|
||
|
end
|
||
|
------------------------------------------------------------------------------------------
|
||
|
|
||
|
|
||
|
|
||
|
local model = read_line(cfg.model_file)
|
||
|
posix.openlog(arg[0], "cp", posix.LOG_LOCAL7)
|
||
|
|
||
|
if model == 'R1D' then
|
||
|
function_appqos()
|
||
|
function_qos()
|
||
|
function_bandwidth()
|
||
|
function_clone()
|
||
|
function_upnp()
|
||
|
function_pptp()
|
||
|
function_l2tp()
|
||
|
function_dmz()
|
||
|
function_port_forwarding()
|
||
|
function_channel_2g()
|
||
|
function_channel_5g()
|
||
|
function_channel_2g_signal()
|
||
|
function_channel_5g_signal()
|
||
|
function_hdd_hibernation()
|
||
|
function_dhcp()
|
||
|
function_ddns()
|
||
|
|
||
|
elseif model == 'R1CM' then
|
||
|
function_appqos()
|
||
|
function_qos()
|
||
|
function_bandwidth()
|
||
|
function_clone()
|
||
|
function_upnp()
|
||
|
function_dmz()
|
||
|
function_plugin()
|
||
|
function_port_forwarding()
|
||
|
function_wireless_access()
|
||
|
function_wireless_access_blacklist()
|
||
|
function_wireless_access_whitelist()
|
||
|
function_channel_2g_r1c()
|
||
|
function_channel_5g_r1c()
|
||
|
function_channel_2g_signal_r1c()
|
||
|
function_channel_5g_signal_r1c()
|
||
|
function_dhcp()
|
||
|
function_ddns()
|
||
|
|
||
|
elseif model == 'R1CL' then
|
||
|
function_clone()
|
||
|
function_upnp()
|
||
|
function_dmz()
|
||
|
function_plugin()
|
||
|
function_port_forwarding()
|
||
|
function_wireless_access()
|
||
|
function_wireless_access_blacklist()
|
||
|
function_wireless_access_whitelist()
|
||
|
function_channel_2g_r1c()
|
||
|
function_channel_2g_signal_r1c()
|
||
|
function_dhcp()
|
||
|
function_ddns()
|
||
|
function_zigbee()
|
||
|
|
||
|
elseif model == 'R1CQ' then
|
||
|
function_clone()
|
||
|
function_upnp()
|
||
|
function_dmz()
|
||
|
function_plugin()
|
||
|
function_port_forwarding()
|
||
|
function_wireless_access()
|
||
|
function_wireless_access_blacklist()
|
||
|
function_wireless_access_whitelist()
|
||
|
function_channel_2g_r1c()
|
||
|
function_channel_5g_r1c()
|
||
|
function_channel_2g_signal_r1c()
|
||
|
function_channel_5g_signal_r1c()
|
||
|
function_dhcp()
|
||
|
function_ddns()
|
||
|
end
|
||
|
|
||
|
posix.closelog()
|