include $(INCLUDE_DIR)/package.mk
-define Package/prometheus-node-exporter-lua
+define Package/prometheus-node-exporter-lua/Default
SECTION:=utils
CATEGORY:=Utilities
- TITLE:=Provides system statistics as Prometheus scraping endpoint
- DEPENDS:=+luasocket +libiwinfo-lua +libubus-lua +lua
- URL:=https://github.com/rbo/openwrt_exporter
+ TITLE:=Prometheus node exporter
PKGARCH:=all
endef
+define Package/prometheus-node-exporter-lua
+ $(call Package/prometheus-node-exporter-lua/Default)
+ DEPENDS:=+luasocket +lua
+endef
+
define Package/prometheus-node-exporter-lua/conffiles
/etc/config/prometheus-node-exporter-lua
endef
This service is a lightweight rewrite in LUA of the offical Prometheus node_exporter.
endef
+define Package/prometheus-node-exporter-lua-wifi
+ $(call Package/prometheus-node-exporter-lua/Default)
+ TITLE+= (wifi collector)
+ DEPENDS:=prometheus-node-exporter-lua +libiwinfo-lua +libubus-lua
+endef
+
+define Package/prometheus-node-exporter-lua-wifi_stations
+ $(call Package/prometheus-node-exporter-lua/Default)
+ TITLE+= (wifi_stations collector)
+ DEPENDS:=prometheus-node-exporter-lua +libiwinfo-lua +libubus-lua
+endef
+
Build/Compile=
define Package/prometheus-node-exporter-lua/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) ./files/usr/bin/prometheus-node-exporter-lua $(1)/usr/bin/prometheus-node-exporter-lua
$(INSTALL_DIR) $(1)/usr/lib/lua/prometheus-collectors
- $(INSTALL_BIN) ./files/usr/lib/lua/prometheus-collectors/* $(1)/usr/lib/lua/prometheus-collectors/
+ $(INSTALL_BIN) ./files/usr/lib/lua/prometheus-collectors/cpu.lua $(1)/usr/lib/lua/prometheus-collectors/
+ $(INSTALL_BIN) ./files/usr/lib/lua/prometheus-collectors/filefd.lua $(1)/usr/lib/lua/prometheus-collectors/
+ $(INSTALL_BIN) ./files/usr/lib/lua/prometheus-collectors/loadavg.lua $(1)/usr/lib/lua/prometheus-collectors/
+ $(INSTALL_BIN) ./files/usr/lib/lua/prometheus-collectors/meminfo.lua $(1)/usr/lib/lua/prometheus-collectors/
+ $(INSTALL_BIN) ./files/usr/lib/lua/prometheus-collectors/nat_traffic.lua $(1)/usr/lib/lua/prometheus-collectors/
+ $(INSTALL_BIN) ./files/usr/lib/lua/prometheus-collectors/netstat.lua $(1)/usr/lib/lua/prometheus-collectors/
+ $(INSTALL_BIN) ./files/usr/lib/lua/prometheus-collectors/netdev.lua $(1)/usr/lib/lua/prometheus-collectors/
+ $(INSTALL_BIN) ./files/usr/lib/lua/prometheus-collectors/time.lua $(1)/usr/lib/lua/prometheus-collectors/
+ $(INSTALL_BIN) ./files/usr/lib/lua/prometheus-collectors/uname.lua $(1)/usr/lib/lua/prometheus-collectors/
+endef
+
+define Package/prometheus-node-exporter-lua-wifi/install
+ $(INSTALL_DIR) $(1)/usr/lib/lua/prometheus-collectors
+ $(INSTALL_BIN) ./files/usr/lib/lua/prometheus-collectors/wifi.lua $(1)/usr/lib/lua/prometheus-collectors/
+endef
+
+define Package/prometheus-node-exporter-lua-wifi_stations/install
+ $(INSTALL_DIR) $(1)/usr/lib/lua/prometheus-collectors
+ $(INSTALL_BIN) ./files/usr/lib/lua/prometheus-collectors/wifi_stations.lua $(1)/usr/lib/lua/prometheus-collectors/
endef
$(eval $(call BuildPackage,prometheus-node-exporter-lua))
+$(eval $(call BuildPackage,prometheus-node-exporter-lua-wifi))
+$(eval $(call BuildPackage,prometheus-node-exporter-lua-wifi_stations))
local metric_wifi_network_noise = metric("wifi_network_noise","gauge")
local metric_wifi_network_signal = metric("wifi_network_signal","gauge")
- local metric_wifi_station_signal = metric("wifi_station_signal","gauge")
- local metric_wifi_station_tx_packets = metric("wifi_station_tx_packets","gauge")
- local metric_wifi_station_rx_packets = metric("wifi_station_rx_packets","gauge")
-
local u = ubus.connect()
local status = u:call("network.wireless", "status", {})
metric_wifi_network_noise(labels, iw.noise(ifname) or 0)
metric_wifi_network_bitrate(labels, iw.bitrate(ifname) or 0)
metric_wifi_network_signal(labels, iw.signal(ifname) or -255)
-
- local assoclist = iw.assoclist(ifname)
- for mac, station in pairs(assoclist) do
- local labels = {
- ifname = ifname,
- mac = mac,
- }
- metric_wifi_station_signal(labels, station.signal)
- metric_wifi_station_tx_packets(labels, station.tx_packets)
- metric_wifi_station_rx_packets(labels, station.rx_packets)
- end
end
end
end
--- /dev/null
+local ubus = require "ubus"
+local iwinfo = require "iwinfo"
+
+local function scrape()
+ local metric_wifi_station_signal = metric("wifi_station_signal","gauge")
+ local metric_wifi_station_tx_packets = metric("wifi_station_tx_packets","gauge")
+ local metric_wifi_station_rx_packets = metric("wifi_station_rx_packets","gauge")
+
+ local u = ubus.connect()
+ local status = u:call("network.wireless", "status", {})
+
+ for dev, dev_table in pairs(status) do
+ for _, intf in ipairs(dev_table['interfaces']) do
+ local ifname = intf['ifname']
+ local iw = iwinfo[iwinfo.type(ifname)]
+
+ local assoclist = iw.assoclist(ifname)
+ for mac, station in pairs(assoclist) do
+ local labels = {
+ ifname = ifname,
+ mac = mac,
+ }
+ metric_wifi_station_signal(labels, station.signal)
+ metric_wifi_station_tx_packets(labels, station.tx_packets)
+ metric_wifi_station_rx_packets(labels, station.rx_packets)
+ end
+ end
+ end
+end
+
+return { scrape = scrape }