prometheus-node-exporter-lua: add lantiq dsl modem collector
authorRene Treffer <treffer+github@measite.de>
Sat, 28 Jul 2018 10:43:57 +0000 (12:43 +0200)
committerEtienne Champetier <echampetier@anevia.com>
Fri, 16 Aug 2019 06:08:09 +0000 (23:08 -0700)
a.heider: Address PR comments and clean up.

Signed-off-by: Rene Treffer <treffer+github@measite.de>
Signed-off-by: Andre Heider <a.heider@gmail.com>
(cherry picked from commit c751af86160f4467a2856ecceb2c8b599f517676)

utils/prometheus-node-exporter-lua/Makefile
utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/ltq-dsl.lua [new file with mode: 0644]

index 659668958604e053bcb1b8089babf818dda507f6..f63ec7443ea2ed4a7b25b769cef80fc9d834c563 100644 (file)
@@ -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 <champetier.etienne@gmail.com>
 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 (file)
index 0000000..39b65fb
--- /dev/null
@@ -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 }