You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

100 lines
4.3 KiB

  1. local function scrape()
  2. local fd = io.popen("/etc/init.d/dsl_control lucistat")
  3. local dsl_func = loadstring(fd:read("*a"))
  4. fd:close()
  5. if not dsl_func then
  6. return
  7. end
  8. local dsl_stat = dsl_func()
  9. local dsl_line_attenuation = metric("dsl_line_attenuation_db", "gauge")
  10. local dsl_signal_attenuation = metric("dsl_signal_attenuation_db", "gauge")
  11. local dsl_snr = metric("dsl_signal_to_noise_margin_db", "gauge")
  12. local dsl_aggregated_transmit_power = metric("dsl_aggregated_transmit_power_db", "gauge")
  13. local dsl_latency = metric("dsl_latency_seconds", "gauge")
  14. local dsl_datarate = metric("dsl_datarate", "gauge")
  15. local dsl_max_datarate = metric("dsl_max_datarate", "gauge")
  16. local dsl_error_seconds_total = metric("dsl_error_seconds_total", "counter")
  17. local dsl_errors_total = metric("dsl_errors_total", "counter")
  18. -- dsl hardware/firmware information
  19. metric("dsl_info", "gauge", {
  20. atuc_vendor_id = dsl_stat.atuc_vendor_id,
  21. atuc_system_vendor_id = dsl_stat.atuc_system_vendor_id,
  22. chipset = dsl_stat.chipset,
  23. firmware_version = dsl_stat.firmware_version,
  24. api_version = dsl_stat.api_version,
  25. }, 1)
  26. -- dsl line settings information
  27. metric("dsl_line_info", "gauge", {
  28. xtse1 = dsl_stat.xtse1,
  29. xtse2 = dsl_stat.xtse2,
  30. xtse3 = dsl_stat.xtse3,
  31. xtse4 = dsl_stat.xtse4,
  32. xtse5 = dsl_stat.xtse5,
  33. xtse6 = dsl_stat.xtse6,
  34. xtse7 = dsl_stat.xtse7,
  35. xtse8 = dsl_stat.xtse8,
  36. annex = dsl_stat.annex_s,
  37. mode = dsl_stat.line_mode_s,
  38. profile = dsl_stat.profile_s,
  39. }, 1)
  40. -- dsl up is 1 if the line is up and running
  41. local dsl_up
  42. if dsl_stat.line_state == "UP" then
  43. dsl_up = 1
  44. else
  45. dsl_up = 0
  46. end
  47. metric("dsl_up", "gauge", {
  48. detail = dsl_stat.line_state_detail,
  49. }, dsl_up)
  50. -- dsl line status data
  51. metric("dsl_uptime_seconds", "gauge", {}, dsl_stat.line_uptime)
  52. -- dsl db measurements
  53. dsl_line_attenuation({direction="down"}, dsl_stat.line_attenuation_down)
  54. dsl_line_attenuation({direction="up"}, dsl_stat.line_attenuation_up)
  55. dsl_signal_attenuation({direction="down"}, dsl_stat.signal_attenuation_down)
  56. dsl_signal_attenuation({direction="up"}, dsl_stat.signal_attenuation_up)
  57. dsl_snr({direction="down"}, dsl_stat.noise_margin_down)
  58. dsl_snr({direction="up"}, dsl_stat.noise_margin_up)
  59. dsl_aggregated_transmit_power({direction="down"}, dsl_stat.actatp_down)
  60. dsl_aggregated_transmit_power({direction="up"}, dsl_stat.actatp_up)
  61. -- dsl performance data
  62. if dsl_stat.latency_down ~= nil then
  63. dsl_latency({direction="down"}, dsl_stat.latency_down / 1000000)
  64. dsl_latency({direction="up"}, dsl_stat.latency_up / 1000000)
  65. end
  66. dsl_datarate({direction="down"}, dsl_stat.data_rate_down)
  67. dsl_datarate({direction="up"}, dsl_stat.data_rate_up)
  68. dsl_max_datarate({direction="down"}, dsl_stat.max_data_rate_down)
  69. dsl_max_datarate({direction="up"}, dsl_stat.max_data_rate_up)
  70. -- dsl errors
  71. dsl_error_seconds_total({err="forward error correction",loc="near"}, dsl_stat.errors_fecs_near)
  72. dsl_error_seconds_total({err="forward error correction",loc="far"}, dsl_stat.errors_fecs_far)
  73. dsl_error_seconds_total({err="errored",loc="near"}, dsl_stat.errors_es_near)
  74. dsl_error_seconds_total({err="errored",loc="far"}, dsl_stat.errors_es_near)
  75. dsl_error_seconds_total({err="severely errored",loc="near"}, dsl_stat.errors_ses_near)
  76. dsl_error_seconds_total({err="severely errored",loc="near"}, dsl_stat.errors_ses_near)
  77. dsl_error_seconds_total({err="loss of signal",loc="near"}, dsl_stat.errors_loss_near)
  78. dsl_error_seconds_total({err="loss of signal",loc="far"}, dsl_stat.errors_loss_far)
  79. dsl_error_seconds_total({err="unavailable",loc="near"}, dsl_stat.errors_uas_near)
  80. dsl_error_seconds_total({err="unavailable",loc="far"}, dsl_stat.errors_uas_far)
  81. dsl_errors_total({err="header error code error",loc="near"}, dsl_stat.errors_hec_near)
  82. dsl_errors_total({err="header error code error",loc="far"}, dsl_stat.errors_hec_far)
  83. dsl_errors_total({err="non pre-emptive crc error",loc="near"}, dsl_stat.errors_crc_p_near)
  84. dsl_errors_total({err="non pre-emptive crc error",loc="far"}, dsl_stat.errors_crc_p_far)
  85. dsl_errors_total({err="pre-emptive crc error",loc="near"}, dsl_stat.errors_crcp_p_near)
  86. dsl_errors_total({err="pre-emptive crc error",loc="far"}, dsl_stat.errors_crcp_p_far)
  87. end
  88. return { scrape = scrape }