Created
October 1, 2017 13:50
-
-
Save globalbus/334d715a2c42f42a97239dffd744cf77 to your computer and use it in GitHub Desktop.
Gather statistics in LuCI enabled router and encode in JSON
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require "luci.jsonc" | |
function to_map(obj, key) | |
local rv = { } | |
for _,el in ipairs(obj) do | |
rv[string.upper(el[key])] = el | |
el[key]=nil | |
end | |
return rv | |
end | |
function wifi_networks() | |
local ntm = require "luci.model.network".init() | |
local dev = ntm:get_wifidevs()[1] | |
local net = dev:get_wifinets()[1] | |
local rv = { | |
up = net:is_up(), | |
mode = net:active_mode(), | |
ssid = net:active_ssid(), | |
bssid = net:active_bssid(), | |
encryption = net:active_encryption(), | |
frequency = net:frequency(), | |
channel = net:channel(), | |
quality = net:signal_percent(), | |
noise = net:noise(), | |
bitrate = net:bitrate(), | |
ifname = net:ifname(), | |
assoclist = net:assoclist(), | |
txpower = net:txpower() | |
} | |
return rv | |
end | |
local fs = require "nixio.fs" | |
local util = require "luci.util" | |
local stat = require "luci.tools.status" | |
local ver = require "luci.version" | |
local sys = require "luci.sys" | |
local sysinfo = luci.util.ubus("system", "info") or { } | |
local boardinfo = luci.util.ubus("system", "board") or { } | |
local unameinfo = nixio.uname() or { } | |
local meminfo = sysinfo.memory or { | |
total = 0, | |
free = 0, | |
buffered = 0, | |
shared = 0 | |
} | |
local ntm = require "luci.model.network".init() | |
local wan = ntm:get_wannet() | |
local conn_count = tonumber( | |
fs.readfile("/proc/sys/net/netfilter/nf_conntrack_count")) or 0 | |
local conn_max = tonumber(( | |
luci.sys.exec("sysctl net.nf_conntrack_max") or | |
luci.sys.exec("sysctl net.ipv4.netfilter.ip_conntrack_max") or | |
""):match("%d+")) or 4096 | |
local rv = { | |
uptime = sysinfo.uptime or 0, | |
localtime = os.date(), | |
loadavg = sysinfo.load or { 0, 0, 0 }, | |
memory = meminfo, | |
connmax = conn_max, | |
conncount = conn_count, | |
leases = to_map(stat.dhcp_leases(),"macaddr"), | |
wifinets = wifi_networks() | |
} | |
rv.wan = { | |
ipaddr = wan:ipaddr(), | |
gwaddr = wan:gwaddr(), | |
netmask = wan:netmask(), | |
dns = wan:dnsaddrs(), | |
uptime = wan:uptime(), | |
ifname = wan:ifname() | |
} | |
local dsl_stat = sys.exec("/etc/init.d/dsl_control lucistat") | |
local dsl_func = loadstring(dsl_stat) | |
if dsl_func then | |
local dsl = dsl_func() | |
rv.dsl = { | |
errors_loss_far = dsl.errors_loss_far, | |
errors_fec_far = dsl.errors_fec_far, | |
errors_ses_far = dsl.errors_ses_far, | |
errors_crc_p_far = dsl.errors_crc_p_far, | |
errors_hec_near = dsl.errors_hec_near, | |
errors_es_far = dsl.errors_es_far, | |
max_data_rate_up = dsl.max_data_rate_up, | |
max_data_rate_down = dsl.max_data_rate_down, | |
actatp_up = dsl.actatp_up, | |
actatp_down = dsl.actatp_down, | |
signal_attenuation_up = dsl.signal_attenuation_up, | |
signal_attenuation_down = dsl.signal_attenuation_down, | |
noise_margin_up = dsl.noise_margin_up, | |
line_attenuation_down = dsl.line_attenuation_down, | |
data_rate_up = dsl.data_rate_up, | |
errors_uas_near = dsl.errors_uas_near, | |
errors_fec_near = dsl.errors_fec_near, | |
data_rate_down = dsl.data_rate_down, | |
noise_margin_down = dsl.noise_margin_down, | |
power_mode_num = dsl.power_mode_num, | |
errors_es_near = dsl.errors_es_near, | |
errors_crcp_p_far = dsl.errors_crcp_p_far, | |
errors_crcp_p_near = dsl.errors_crcp_p_near, | |
errors_loss_near = dsl.errors_loss_near, | |
errors_uas_far = dsl.errors_uas_far, | |
errors_crc_p_near = dsl.errors_crc_p_near, | |
errors_hec_far = dsl.errors_hec_far, | |
line_state_detail = dsl.line_state_detail, | |
errors_ses_near = dsl.errors_ses_near, | |
line_state = dsl.line_state, | |
line_attenuation_up = dsl.line_attenuation_up, | |
line_uptime = dsl.line_uptime | |
} | |
end | |
print(luci.jsonc.stringify(rv)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
based on code from LuCI project https://github.com/openwrt/luci/blob/master/modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm