Merge pull request #17303 from CarlosDerSeher/feature_bt_agent
[feed/packages.git] / utils / prometheus-node-exporter-lua / files / usr / lib / lua / prometheus-collectors / ubnt-manager.lua
1 local function get_devices()
2 local handle = io.popen("ubnt-manager -l")
3 local result = handle:read("*a")
4 handle:close()
5
6 local devices = {}
7 for device in result:gmatch("%S+") do table.insert(devices, device) end
8 return devices
9 end
10
11 local function get_metric_airos6(device_data, label)
12 -- host
13 metric("ubnt_uptime", "counter", label, device_data['host']['uptime'])
14 metric("ubnt_totalram", "gauge", label, device_data['host']['totalram'])
15 metric("ubnt_freeram", "gauge", label, device_data['host']['freeram'])
16 metric("ubnt_cpuload", "gauge", label, device_data['host']['cpuload'])
17 metric("ubnt_cpubusy", "gauge", label, device_data['host']['cpubusy'])
18 metric("ubnt_cputotal", "gauge", label, device_data['host']['cputotal'])
19
20 -- wireless
21 metric("ubnt_channel", "gauge", label, device_data['wireless']['channel'])
22 local freqstring = {}
23 for freq in device_data['wireless']['frequency']:gmatch("%S+") do
24 table.insert(freqstring, freq)
25 end
26 if freqstring[1] then
27 metric("ubnt_frequency", "gauge", label, tonumber(freqstring[1]))
28 end
29
30 metric("ubnt_dfs", "gauge", label, tonumber(device_data['wireless']['dfs']))
31 metric("ubnt_signal", "gauge", label, device_data['wireless']['signal'])
32 metric("ubnt_rssi", "gauge", label, device_data['wireless']['rssi'])
33 metric("ubnt_noisef", "gauge", label, device_data['wireless']['noisef'])
34 metric("ubnt_txpower", "gauge", label, device_data['wireless']['txpower'])
35 metric("ubnt_distance", "gauge", label, device_data['wireless']['distance'])
36 metric("ubnt_txrate", "gauge", label,
37 tonumber(device_data['wireless']['txrate']))
38 metric("ubnt_rxrate", "gauge", label,
39 tonumber(device_data['wireless']['rxrate']))
40 metric("ubnt_count", "gauge", label, device_data['wireless']['count'])
41 end
42
43 local function get_metric_airos8(device_data, label)
44 -- host
45 metric("ubnt_uptime", "counter", label, device_data['host']['uptime'])
46 metric("ubnt_loadavg", "gauge", label, device_data['host']['loadavg'])
47 metric("ubnt_totalram", "gauge", label, device_data['host']['totalram'])
48 metric("ubnt_freeram", "gauge", label, device_data['host']['freeram'])
49 metric("ubnt_temperature", "gauge", label,
50 device_data['host']['temperature'])
51 metric("ubnt_cpuload", "gauge", label, device_data['host']['cpuload'])
52 metric("ubnt_timestamp", "counter", label, device_data['host']['timestamp'])
53
54 -- wireless
55 metric("ubnt_band", "gauge", label, device_data['wireless']['band'])
56 metric("ubnt_frequency", "gauge", label,
57 device_data['wireless']['frequency'])
58 metric("ubnt_center1_freq", "gauge", label,
59 device_data['wireless']['center1_freq'])
60 metric("ubnt_dfs", "gauge", label, device_data['wireless']['dfs'])
61 metric("ubnt_distance", "gauge", label, device_data['wireless']['distance'])
62 metric("ubnt_noisef", "gauge", label, device_data['wireless']['noisef'])
63 metric("ubnt_txpower", "gauge", label, device_data['wireless']['txpower'])
64 metric("ubnt_aprepeater", "gauge", label,
65 device_data['wireless']['aprepeater'])
66 metric("ubnt_rstatus", "gauge", label, device_data['wireless']['rstatus'])
67 metric("ubnt_chanbw", "gauge", label, device_data['wireless']['chanbw'])
68 metric("ubnt_rx_chainmask", "gauge", label,
69 device_data['wireless']['rx_chainmask'])
70 metric("ubnt_tx_chainmask", "gauge", label,
71 device_data['wireless']['tx_chainmask'])
72 metric("ubnt_cac_state", "gauge", label,
73 device_data['wireless']['cac_state'])
74 metric("ubnt_cac_timeout", "gauge", label,
75 device_data['wireless']['cac_timeout'])
76 metric("ubnt_rx_idx", "gauge", label, device_data['wireless']['rx_idx'])
77 metric("ubnt_rx_nss", "gauge", label, device_data['wireless']['rx_nss'])
78 metric("ubnt_tx_idx", "gauge", label, device_data['wireless']['tx_idx'])
79 metric("ubnt_tx_nss", "gauge", label, device_data['wireless']['tx_nss'])
80 metric("ubnt_count", "gauge", label, device_data['wireless']['count'])
81
82 -- wireless throughput
83 metric("ubnt_throughput_tx", "gauge", label,
84 device_data['wireless']['throughput']['tx'])
85 metric("ubnt_throughput_rx", "gauge", label,
86 device_data['wireless']['throughput']['rx'])
87
88 -- wireless polling
89 metric("ubnt_polling_cb_capacity", "gauge", label,
90 device_data['wireless']['polling']['cb_capacity'])
91 metric("ubnt_polling_dl_capacity", "gauge", label,
92 device_data['wireless']['polling']['dl_capacity'])
93 metric("ubnt_polling_ul_capacity", "gauge", label,
94 device_data['wireless']['polling']['ul_capacity'])
95 metric("ubnt_use", "gauge", label, device_data['wireless']['polling']['use'])
96 metric("ubnt_tx_use", "gauge", label,
97 device_data['wireless']['polling']['tx_use'])
98 metric("ubnt_rx_use", "gauge", label,
99 device_data['wireless']['polling']['rx_use'])
100 metric("ubnt_atpc_status", "gauge", label,
101 device_data['wireless']['polling']['atpc_status'])
102 metric("ubnt_atpc_status", "gauge", label,
103 device_data['wireless']['polling']['atpc_status'])
104 end
105
106 local function get_metric(device)
107 local json = require('cjson')
108 local handle = io.popen("ubnt-manager -j -t " .. device)
109 local result = handle:read("*a")
110 handle:close()
111 local device_data = json.decode(result)
112
113 if not device_data['host'] then return end
114 if not device_data['wireless'] then return end
115
116 local hostname = device_data['host']['hostname']
117 local devmodel = device_data['host']['devmodel']
118 local fwversion = device_data['host']['fwversion']
119 local essid = device_data['wireless']['essid']
120
121 local label = {
122 device = device,
123 hostname = hostname,
124 devmodel = devmodel,
125 fwversion = fwversion,
126 essid = essid
127 }
128
129 -- v6. vs v8.
130 if fwversion:find("v8.", 1, true) then
131 get_metric_airos8(device_data, label)
132 elseif fwversion:find("v6.", 1, true) then
133 get_metric_airos6(device_data, label)
134 end
135 end
136
137 local function scrape()
138 for _, device in ipairs(get_devices()) do get_metric(device) end
139 end
140
141 return {scrape = scrape}