Software /
code /
prosody-modules
Diff
mod_prometheus/mod_prometheus.lua @ 3138:9817e45a79e6
mod_prometheus: Fetch statistics at every request.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Fri, 22 Jun 2018 15:19:55 +0200 |
parent | 3134:99ac6dda9878 |
child | 3149:ccbfe7df02dc |
line wrap: on
line diff
--- a/mod_prometheus/mod_prometheus.lua Fri Jun 22 11:12:34 2018 +0200 +++ b/mod_prometheus/mod_prometheus.lua Fri Jun 22 15:19:55 2018 +0200 @@ -12,8 +12,7 @@ local t_insert = table.insert; local t_concat = table.concat; local socket = require "socket"; - -local data = {}; +local get_stats = require "core.statsmanager".get_stats; local function escape(text) return text:gsub("\\", "\\\\"):gsub("\"", "\\\""):gsub("\n", "\\n"); @@ -61,15 +60,12 @@ return escape_name(metric)..repr_labels(labels).." "..value.." "..timestamp.."\n"; end -module:hook("stats-updated", function (event) - local all_stats, this = event.stats_extra; +local function parse_stats() local timestamp = tostring(get_timestamp()); - local host, sect, name, typ; - data = {}; - for stat, value in pairs(event.stats) do - this = all_stats[stat]; + local data = {}; + for stat, value in pairs(get_stats()) do -- module:log("debug", "changed_stats[%q] = %s", stat, tostring(value)); - host, sect, name, typ = stat:match("^/([^/]+)/([^/]+)/(.+):(%a+)$"); + local host, sect, name, typ = stat:match("^/([^/]+)/([^/]+)/(.+):(%a+)$"); if host == nil then sect, name, typ = stat:match("^([^.]+)%.(.+):(%a+)$"); elseif host == "*" then @@ -97,14 +93,15 @@ end t_insert(data[key], field); end -end); + return data; +end local function get_metrics(event) local response = event.response; - response.headers.content_type = "text/plain; version=0.4.4"; + response.headers.content_type = "text/plain; version=0.0.4"; local answer = {}; - for key, fields in pairs(data) do + for key, fields in pairs(parse_stats()) do t_insert(answer, repr_help(key, "TODO: add a description here.")); t_insert(answer, repr_type(key, fields[1].typ)); for _, field in pairs(fields) do