From c751af86160f4467a2856ecceb2c8b599f517676 Mon Sep 17 00:00:00 2001 From: Rene Treffer Date: Sat, 28 Jul 2018 12:43:57 +0200 Subject: [PATCH] prometheus-node-exporter-lua: add lantiq dsl modem collector a.heider: Address PR comments and clean up. Signed-off-by: Rene Treffer Signed-off-by: Andre Heider --- utils/prometheus-node-exporter-lua/Makefile | 14 ++- .../lib/lua/prometheus-collectors/ltq-dsl.lua | 100 ++++++++++++++++++ 2 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/ltq-dsl.lua diff --git a/utils/prometheus-node-exporter-lua/Makefile b/utils/prometheus-node-exporter-lua/Makefile index 659668958..f63ec7443 100644 --- a/utils/prometheus-node-exporter-lua/Makefile +++ b/utils/prometheus-node-exporter-lua/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=prometheus-node-exporter-lua PKG_VERSION:=2018.07.23 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_MAINTAINER:=Etienne CHAMPETIER PKG_LICENSE:=Apache-2.0 @@ -82,6 +82,12 @@ define Package/prometheus-node-exporter-lua-openwrt DEPENDS:=prometheus-node-exporter-lua endef +define Package/prometheus-node-exporter-lua-ltq-dsl + $(call Package/prometheus-node-exporter-lua/Default) + TITLE+= (lantiq dsl collector) + DEPENDS:=prometheus-node-exporter-lua @(PACKAGE_ltq-adsl-app||PACKAGE_ltq-vdsl-app) +endef + Build/Compile= define Package/prometheus-node-exporter-lua/install @@ -142,6 +148,11 @@ define Package/prometheus-node-exporter-lua-openwrt/install $(INSTALL_BIN) ./files/usr/lib/lua/prometheus-collectors/openwrt.lua $(1)/usr/lib/lua/prometheus-collectors/ endef +define Package/prometheus-node-exporter-lua-ltq-dsl/install + $(INSTALL_DIR) $(1)/usr/lib/lua/prometheus-collectors + $(INSTALL_BIN) ./files/usr/lib/lua/prometheus-collectors/ltq-dsl.lua $(1)/usr/lib/lua/prometheus-collectors/ +endef + $(eval $(call BuildPackage,prometheus-node-exporter-lua)) $(eval $(call BuildPackage,prometheus-node-exporter-lua-nat_traffic)) $(eval $(call BuildPackage,prometheus-node-exporter-lua-netstat)) @@ -151,3 +162,4 @@ $(eval $(call BuildPackage,prometheus-node-exporter-lua-bmx6)) $(eval $(call BuildPackage,prometheus-node-exporter-lua-bmx7)) $(eval $(call BuildPackage,prometheus-node-exporter-lua-textfile)) $(eval $(call BuildPackage,prometheus-node-exporter-lua-openwrt)) +$(eval $(call BuildPackage,prometheus-node-exporter-lua-ltq-dsl)) diff --git a/utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/ltq-dsl.lua b/utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/ltq-dsl.lua new file mode 100644 index 000000000..39b65fb8e --- /dev/null +++ b/utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/ltq-dsl.lua @@ -0,0 +1,100 @@ +local function scrape() + local fd = io.popen("/etc/init.d/dsl_control lucistat") + local dsl_func = loadstring(fd:read("*a")) + fd:close() + + if not dsl_func then + return + end + + local dsl_stat = dsl_func() + + local dsl_line_attenuation = metric("dsl_line_attenuation_db", "gauge") + local dsl_signal_attenuation = metric("dsl_signal_attenuation_db", "gauge") + local dsl_snr = metric("dsl_signal_to_noise_margin_db", "gauge") + local dsl_aggregated_transmit_power = metric("dsl_aggregated_transmit_power_db", "gauge") + local dsl_latency = metric("dsl_latency_seconds", "gauge") + local dsl_datarate = metric("dsl_datarate", "gauge") + local dsl_max_datarate = metric("dsl_max_datarate", "gauge") + local dsl_error_seconds_total = metric("dsl_error_seconds_total", "counter") + local dsl_errors_total = metric("dsl_errors_total", "counter") + + -- dsl hardware/firmware information + metric("dsl_info", "gauge", { + atuc_vendor_id = dsl_stat.atuc_vendor_id, + atuc_system_vendor_id = dsl_stat.atuc_system_vendor_id, + chipset = dsl_stat.chipset, + firmware_version = dsl_stat.firmware_version, + api_version = dsl_stat.api_version, + }, 1) + + -- dsl line settings information + metric("dsl_line_info", "gauge", { + xtse1 = dsl_stat.xtse1, + xtse2 = dsl_stat.xtse2, + xtse3 = dsl_stat.xtse3, + xtse4 = dsl_stat.xtse4, + xtse5 = dsl_stat.xtse5, + xtse6 = dsl_stat.xtse6, + xtse7 = dsl_stat.xtse7, + xtse8 = dsl_stat.xtse8, + annex = dsl_stat.annex_s, + mode = dsl_stat.line_mode_s, + profile = dsl_stat.profile_s, + }, 1) + + -- dsl up is 1 if the line is up and running + local dsl_up + if dsl_stat.line_state == "UP" then + dsl_up = 1 + else + dsl_up = 0 + end + + metric("dsl_up", "gauge", { + detail = dsl_stat.line_state_detail, + }, dsl_up) + + -- dsl line status data + metric("dsl_uptime_seconds", "gauge", {}, dsl_stat.line_uptime) + + -- dsl db measurements + dsl_line_attenuation({direction="down"}, dsl_stat.line_attenuation_down) + dsl_line_attenuation({direction="up"}, dsl_stat.line_attenuation_up) + dsl_signal_attenuation({direction="down"}, dsl_stat.signal_attenuation_down) + dsl_signal_attenuation({direction="up"}, dsl_stat.signal_attenuation_up) + dsl_snr({direction="down"}, dsl_stat.noise_margin_down) + dsl_snr({direction="up"}, dsl_stat.noise_margin_up) + dsl_aggregated_transmit_power({direction="down"}, dsl_stat.actatp_down) + dsl_aggregated_transmit_power({direction="up"}, dsl_stat.actatp_up) + + -- dsl performance data + if dsl_stat.latency_down ~= nil then + dsl_latency({direction="down"}, dsl_stat.latency_down / 1000000) + dsl_latency({direction="up"}, dsl_stat.latency_up / 1000000) + end + dsl_datarate({direction="down"}, dsl_stat.data_rate_down) + dsl_datarate({direction="up"}, dsl_stat.data_rate_up) + dsl_max_datarate({direction="down"}, dsl_stat.max_data_rate_down) + dsl_max_datarate({direction="up"}, dsl_stat.max_data_rate_up) + + -- dsl errors + dsl_error_seconds_total({err="forward error correction",loc="near"}, dsl_stat.errors_fec_near) + dsl_error_seconds_total({err="forward error correction",loc="far"}, dsl_stat.errors_fec_far) + dsl_error_seconds_total({err="errored",loc="near"}, dsl_stat.errors_es_near) + dsl_error_seconds_total({err="errored",loc="far"}, dsl_stat.errors_es_near) + dsl_error_seconds_total({err="severely errored",loc="near"}, dsl_stat.errors_ses_near) + dsl_error_seconds_total({err="severely errored",loc="near"}, dsl_stat.errors_ses_near) + dsl_error_seconds_total({err="loss of signal",loc="near"}, dsl_stat.errors_loss_near) + dsl_error_seconds_total({err="loss of signal",loc="far"}, dsl_stat.errors_loss_far) + dsl_error_seconds_total({err="unavailable",loc="near"}, dsl_stat.errors_uas_near) + dsl_error_seconds_total({err="unavailable",loc="far"}, dsl_stat.errors_uas_far) + dsl_errors_total({err="header error code error",loc="near"}, dsl_stat.errors_hec_near) + dsl_errors_total({err="header error code error",loc="far"}, dsl_stat.errors_hec_far) + dsl_errors_total({err="non pre-emptive crc error",loc="near"}, dsl_stat.errors_crc_p_near) + dsl_errors_total({err="non pre-emptive crc error",loc="far"}, dsl_stat.errors_crc_p_far) + dsl_errors_total({err="pre-emptive crc error",loc="near"}, dsl_stat.errors_crcp_p_near) + dsl_errors_total({err="pre-emptive crc error",loc="far"}, dsl_stat.errors_crcp_p_far) +end + +return { scrape = scrape }