openwrt-packages/utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/ltq-dsl.lua

96 lines
3.9 KiB
Lua

local ubus = require "ubus"
local function scrape()
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")
local dsl_erb_total = metric("dsl_erb_total", "counter")
local u = ubus.connect()
local m = u:call("dsl", "metrics", {})
-- dsl hardware/firmware information
metric("dsl_info", "gauge", {
atuc_vendor = m.atu_c.vendor,
atuc_system_vendor = m.atu_c.system_vendor,
chipset = m.chipset,
firmware_version = m.firmware_version,
api_version = m.api_version,
driver_version = m.driver_version,
}, 1)
-- dsl line settings information
metric("dsl_line_info", "gauge", {
annex = m.annex,
standard = m.standard,
mode = m.mode,
profile = m.profile,
}, 1)
local dsl_up
if m.up then
dsl_up = 1
else
dsl_up = 0
end
metric("dsl_up", "gauge", {
detail = m.state,
}, dsl_up)
-- dsl line status data
metric("dsl_uptime_seconds", "gauge", {}, m.uptime)
-- dsl db measurements
dsl_line_attenuation({direction="down"}, m.downstream.latn)
dsl_line_attenuation({direction="up"}, m.upstream.latn)
dsl_signal_attenuation({direction="down"}, m.downstream.satn)
dsl_signal_attenuation({direction="up"}, m.upstream.satn)
dsl_snr({direction="down"}, m.downstream.snr)
dsl_snr({direction="up"}, m.upstream.snr)
dsl_aggregated_transmit_power({direction="down"}, m.downstream.actatp)
dsl_aggregated_transmit_power({direction="up"}, m.upstream.actatp)
-- dsl performance data
if m.downstream.interleave_delay ~= nil then
dsl_latency({direction="down"}, m.downstream.interleave_delay / 1000000)
dsl_latency({direction="up"}, m.upstream.interleave_delay / 1000000)
end
dsl_datarate({direction="down"}, m.downstream.data_rate)
dsl_datarate({direction="up"}, m.upstream.data_rate)
dsl_max_datarate({direction="down"}, m.downstream.attndr)
dsl_max_datarate({direction="up"}, m.upstream.attndr)
-- dsl errors
dsl_error_seconds_total({err="forward error correction", loc="near"}, m.errors.near.fecs)
dsl_error_seconds_total({err="forward error correction", loc="far"}, m.errors.far.fecs)
dsl_error_seconds_total({err="errored", loc="near"}, m.errors.near.es)
dsl_error_seconds_total({err="errored", loc="far"}, m.errors.far.es)
dsl_error_seconds_total({err="severely errored", loc="near"}, m.errors.near.ses)
dsl_error_seconds_total({err="severely errored", loc="far"}, m.errors.far.ses)
dsl_error_seconds_total({err="loss of signal", loc="near"}, m.errors.near.loss)
dsl_error_seconds_total({err="loss of signal", loc="far"}, m.errors.far.loss)
dsl_error_seconds_total({err="unavailable", loc="near"}, m.errors.near.uas)
dsl_error_seconds_total({err="unavailable", loc="far"}, m.errors.far.uas)
dsl_errors_total({err="header error code error", loc="near"}, m.errors.near.hec)
dsl_errors_total({err="header error code error", loc="far"}, m.errors.far.hec)
dsl_errors_total({err="non pre-emptive crc error", loc="near"}, m.errors.near.crc_p)
dsl_errors_total({err="non pre-emptive crc error", loc="far"}, m.errors.far.crc_p)
dsl_errors_total({err="pre-emptive crc error", loc="near"}, m.errors.near.crcp_p)
dsl_errors_total({err="pre-emptive crc error", loc="far"}, m.errors.far.crcp_p)
-- dsl error vectors
if m.erb ~= nil then
dsl_erb_total({counter="sent"}, m.erb.sent)
dsl_erb_total({counter="discarded"}, m.erb.discarded)
end
end
return { scrape = scrape }