Software / code / prosody-modules
Comparison
mod_prometheus/mod_prometheus.lua @ 3134:99ac6dda9878
mod_prometheus: Move timestamp generation to the stats-update event.
| author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
|---|---|
| date | Fri, 22 Jun 2018 01:03:47 +0200 |
| parent | 3133:321fd53a3191 |
| child | 3138:9817e45a79e6 |
comparison
equal
deleted
inserted
replaced
| 3133:321fd53a3191 | 3134:99ac6dda9878 |
|---|---|
| 61 return escape_name(metric)..repr_labels(labels).." "..value.." "..timestamp.."\n"; | 61 return escape_name(metric)..repr_labels(labels).." "..value.." "..timestamp.."\n"; |
| 62 end | 62 end |
| 63 | 63 |
| 64 module:hook("stats-updated", function (event) | 64 module:hook("stats-updated", function (event) |
| 65 local all_stats, this = event.stats_extra; | 65 local all_stats, this = event.stats_extra; |
| 66 local timestamp = tostring(get_timestamp()); | |
| 66 local host, sect, name, typ; | 67 local host, sect, name, typ; |
| 67 data = {}; | 68 data = {}; |
| 68 for stat, value in pairs(event.stats) do | 69 for stat, value in pairs(event.stats) do |
| 69 this = all_stats[stat]; | 70 this = all_stats[stat]; |
| 70 -- module:log("debug", "changed_stats[%q] = %s", stat, tostring(value)); | 71 -- module:log("debug", "changed_stats[%q] = %s", stat, tostring(value)); |
| 84 local field = { | 85 local field = { |
| 85 value = value, | 86 value = value, |
| 86 labels = { ["type"] = name}, | 87 labels = { ["type"] = name}, |
| 87 -- TODO: Use the other types where it makes sense. | 88 -- TODO: Use the other types where it makes sense. |
| 88 typ = (typ == "rate" and "counter" or "gauge"), | 89 typ = (typ == "rate" and "counter" or "gauge"), |
| 90 timestamp = timestamp, | |
| 89 }; | 91 }; |
| 90 if host then | 92 if host then |
| 91 field.labels.host = host; | 93 field.labels.host = host; |
| 92 end | 94 end |
| 93 if data[key] == nil then | 95 if data[key] == nil then |
| 100 local function get_metrics(event) | 102 local function get_metrics(event) |
| 101 local response = event.response; | 103 local response = event.response; |
| 102 response.headers.content_type = "text/plain; version=0.4.4"; | 104 response.headers.content_type = "text/plain; version=0.4.4"; |
| 103 | 105 |
| 104 local answer = {}; | 106 local answer = {}; |
| 105 local timestamp = tostring(get_timestamp()); | |
| 106 for key, fields in pairs(data) do | 107 for key, fields in pairs(data) do |
| 107 t_insert(answer, repr_help(key, "TODO: add a description here.")); | 108 t_insert(answer, repr_help(key, "TODO: add a description here.")); |
| 108 t_insert(answer, repr_type(key, fields[1].typ)); | 109 t_insert(answer, repr_type(key, fields[1].typ)); |
| 109 for _, field in pairs(fields) do | 110 for _, field in pairs(fields) do |
| 110 t_insert(answer, repr_sample(key, field.labels, field.value, timestamp)); | 111 t_insert(answer, repr_sample(key, field.labels, field.value, field.timestamp)); |
| 111 end | 112 end |
| 112 end | 113 end |
| 113 return t_concat(answer, ""); | 114 return t_concat(answer, ""); |
| 114 end | 115 end |
| 115 | 116 |