openwrt dhcp leases prometheus metric

Note

this lua function works with prometheus and node exporter to allow scraping of openwrt's dhcp leases

Files

dhcp_leases.lua
lua
local function scrape()
  local metric_dhcp_leases = metric("dhcp_leases_total", "gauge")
  local metric_dhcp_lease_info = metric("dhcp_lease_info", "gauge")
  local leases_file = "/tmp/dhcp.leases"
  local leases_count = 0
  local file = io.open(leases_file, "r")
  if file then
    for line in file:lines() do
      local expiry, mac, ip, hostname, client_id = line:match("^(%d+)%s+([%x:]+)%s+([%d%.]+)%s+([^%s]*)%s+([^%s]*)$")
      if ip and mac then
        leases_count = leases_count + 1
        local labels = {
          ip = ip,
          mac = string.upper(mac),
          hostname = (hostname == "*" or hostname == "") and "unknown" or hostname,
          client_id = (client_id == "*" or client_id == "") and "unknown" or client_id
        }
        metric_dhcp_lease_info(labels, 1)
      end
    end
    file:close()
  end
  metric_dhcp_leases({}, leases_count)
end
return { scrape = scrape }