|
@ -0,0 +1,141 @@ |
|
|
|
|
|
local function get_devices() |
|
|
|
|
|
local handle = io.popen("ubnt-manager -l") |
|
|
|
|
|
local result = handle:read("*a") |
|
|
|
|
|
handle:close() |
|
|
|
|
|
|
|
|
|
|
|
local devices = {} |
|
|
|
|
|
for device in result:gmatch("%S+") do table.insert(devices, device) end |
|
|
|
|
|
return devices |
|
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
local function get_metric_airos6(device_data, label) |
|
|
|
|
|
-- host |
|
|
|
|
|
metric("ubnt_uptime", "counter", label, device_data['host']['uptime']) |
|
|
|
|
|
metric("ubnt_totalram", "gauge", label, device_data['host']['totalram']) |
|
|
|
|
|
metric("ubnt_freeram", "gauge", label, device_data['host']['freeram']) |
|
|
|
|
|
metric("ubnt_cpuload", "gauge", label, device_data['host']['cpuload']) |
|
|
|
|
|
metric("ubnt_cpubusy", "gauge", label, device_data['host']['cpubusy']) |
|
|
|
|
|
metric("ubnt_cputotal", "gauge", label, device_data['host']['cputotal']) |
|
|
|
|
|
|
|
|
|
|
|
-- wireless |
|
|
|
|
|
metric("ubnt_channel", "gauge", label, device_data['wireless']['channel']) |
|
|
|
|
|
local freqstring = {} |
|
|
|
|
|
for freq in device_data['wireless']['frequency']:gmatch("%S+") do |
|
|
|
|
|
table.insert(freqstring, freq) |
|
|
|
|
|
end |
|
|
|
|
|
if freqstring[1] then |
|
|
|
|
|
metric("ubnt_frequency", "gauge", label, tonumber(freqstring[1])) |
|
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
metric("ubnt_dfs", "gauge", label, tonumber(device_data['wireless']['dfs'])) |
|
|
|
|
|
metric("ubnt_signal", "gauge", label, device_data['wireless']['signal']) |
|
|
|
|
|
metric("ubnt_rssi", "gauge", label, device_data['wireless']['rssi']) |
|
|
|
|
|
metric("ubnt_noisef", "gauge", label, device_data['wireless']['noisef']) |
|
|
|
|
|
metric("ubnt_txpower", "gauge", label, device_data['wireless']['txpower']) |
|
|
|
|
|
metric("ubnt_distance", "gauge", label, device_data['wireless']['distance']) |
|
|
|
|
|
metric("ubnt_txrate", "gauge", label, |
|
|
|
|
|
tonumber(device_data['wireless']['txrate'])) |
|
|
|
|
|
metric("ubnt_rxrate", "gauge", label, |
|
|
|
|
|
tonumber(device_data['wireless']['rxrate'])) |
|
|
|
|
|
metric("ubnt_count", "gauge", label, device_data['wireless']['count']) |
|
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
local function get_metric_airos8(device_data, label) |
|
|
|
|
|
-- host |
|
|
|
|
|
metric("ubnt_uptime", "counter", label, device_data['host']['uptime']) |
|
|
|
|
|
metric("ubnt_loadavg", "gauge", label, device_data['host']['loadavg']) |
|
|
|
|
|
metric("ubnt_totalram", "gauge", label, device_data['host']['totalram']) |
|
|
|
|
|
metric("ubnt_freeram", "gauge", label, device_data['host']['freeram']) |
|
|
|
|
|
metric("ubnt_temperature", "gauge", label, |
|
|
|
|
|
device_data['host']['temperature']) |
|
|
|
|
|
metric("ubnt_cpuload", "gauge", label, device_data['host']['cpuload']) |
|
|
|
|
|
metric("ubnt_timestamp", "counter", label, device_data['host']['timestamp']) |
|
|
|
|
|
|
|
|
|
|
|
-- wireless |
|
|
|
|
|
metric("ubnt_band", "gauge", label, device_data['wireless']['band']) |
|
|
|
|
|
metric("ubnt_frequency", "gauge", label, |
|
|
|
|
|
device_data['wireless']['frequency']) |
|
|
|
|
|
metric("ubnt_center1_freq", "gauge", label, |
|
|
|
|
|
device_data['wireless']['center1_freq']) |
|
|
|
|
|
metric("ubnt_dfs", "gauge", label, device_data['wireless']['dfs']) |
|
|
|
|
|
metric("ubnt_distance", "gauge", label, device_data['wireless']['distance']) |
|
|
|
|
|
metric("ubnt_noisef", "gauge", label, device_data['wireless']['noisef']) |
|
|
|
|
|
metric("ubnt_txpower", "gauge", label, device_data['wireless']['txpower']) |
|
|
|
|
|
metric("ubnt_aprepeater", "gauge", label, |
|
|
|
|
|
device_data['wireless']['aprepeater']) |
|
|
|
|
|
metric("ubnt_rstatus", "gauge", label, device_data['wireless']['rstatus']) |
|
|
|
|
|
metric("ubnt_chanbw", "gauge", label, device_data['wireless']['chanbw']) |
|
|
|
|
|
metric("ubnt_rx_chainmask", "gauge", label, |
|
|
|
|
|
device_data['wireless']['rx_chainmask']) |
|
|
|
|
|
metric("ubnt_tx_chainmask", "gauge", label, |
|
|
|
|
|
device_data['wireless']['tx_chainmask']) |
|
|
|
|
|
metric("ubnt_cac_state", "gauge", label, |
|
|
|
|
|
device_data['wireless']['cac_state']) |
|
|
|
|
|
metric("ubnt_cac_timeout", "gauge", label, |
|
|
|
|
|
device_data['wireless']['cac_timeout']) |
|
|
|
|
|
metric("ubnt_rx_idx", "gauge", label, device_data['wireless']['rx_idx']) |
|
|
|
|
|
metric("ubnt_rx_nss", "gauge", label, device_data['wireless']['rx_nss']) |
|
|
|
|
|
metric("ubnt_tx_idx", "gauge", label, device_data['wireless']['tx_idx']) |
|
|
|
|
|
metric("ubnt_tx_nss", "gauge", label, device_data['wireless']['tx_nss']) |
|
|
|
|
|
metric("ubnt_count", "gauge", label, device_data['wireless']['count']) |
|
|
|
|
|
|
|
|
|
|
|
-- wireless throughput |
|
|
|
|
|
metric("ubnt_throughput_tx", "gauge", label, |
|
|
|
|
|
device_data['wireless']['throughput']['tx']) |
|
|
|
|
|
metric("ubnt_throughput_rx", "gauge", label, |
|
|
|
|
|
device_data['wireless']['throughput']['rx']) |
|
|
|
|
|
|
|
|
|
|
|
-- wireless polling |
|
|
|
|
|
metric("ubnt_polling_cb_capacity", "gauge", label, |
|
|
|
|
|
device_data['wireless']['polling']['cb_capacity']) |
|
|
|
|
|
metric("ubnt_polling_dl_capacity", "gauge", label, |
|
|
|
|
|
device_data['wireless']['polling']['dl_capacity']) |
|
|
|
|
|
metric("ubnt_polling_ul_capacity", "gauge", label, |
|
|
|
|
|
device_data['wireless']['polling']['ul_capacity']) |
|
|
|
|
|
metric("ubnt_use", "gauge", label, device_data['wireless']['polling']['use']) |
|
|
|
|
|
metric("ubnt_tx_use", "gauge", label, |
|
|
|
|
|
device_data['wireless']['polling']['tx_use']) |
|
|
|
|
|
metric("ubnt_rx_use", "gauge", label, |
|
|
|
|
|
device_data['wireless']['polling']['rx_use']) |
|
|
|
|
|
metric("ubnt_atpc_status", "gauge", label, |
|
|
|
|
|
device_data['wireless']['polling']['atpc_status']) |
|
|
|
|
|
metric("ubnt_atpc_status", "gauge", label, |
|
|
|
|
|
device_data['wireless']['polling']['atpc_status']) |
|
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
local function get_metric(device) |
|
|
|
|
|
local json = require('cjson') |
|
|
|
|
|
local handle = io.popen("ubnt-manager -j -t " .. device) |
|
|
|
|
|
local result = handle:read("*a") |
|
|
|
|
|
handle:close() |
|
|
|
|
|
local device_data = json.decode(result) |
|
|
|
|
|
|
|
|
|
|
|
if not device_data['host'] then return end |
|
|
|
|
|
if not device_data['wireless'] then return end |
|
|
|
|
|
|
|
|
|
|
|
local hostname = device_data['host']['hostname'] |
|
|
|
|
|
local devmodel = device_data['host']['devmodel'] |
|
|
|
|
|
local fwversion = device_data['host']['fwversion'] |
|
|
|
|
|
local essid = device_data['wireless']['essid'] |
|
|
|
|
|
|
|
|
|
|
|
local label = { |
|
|
|
|
|
device = device, |
|
|
|
|
|
hostname = hostname, |
|
|
|
|
|
devmodel = devmodel, |
|
|
|
|
|
fwversion = fwversion, |
|
|
|
|
|
essid = essid |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
-- v6. vs v8. |
|
|
|
|
|
if fwversion:find("v8.", 1, true) then |
|
|
|
|
|
get_metric_airos8(device_data, label) |
|
|
|
|
|
elseif fwversion:find("v6.", 1, true) then |
|
|
|
|
|
get_metric_airos6(device_data, label) |
|
|
|
|
|
end |
|
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
local function scrape() |
|
|
|
|
|
for _, device in ipairs(get_devices()) do get_metric(device) end |
|
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
return {scrape = scrape} |