Software /
code /
prosody
Changeset
11525:5f99fcc43938
mod_s2s: Port to new OpenMetrics API
author | Jonas Schäfer <jonas@wielicki.name> |
---|---|
date | Sun, 18 Apr 2021 12:35:16 +0200 (2021-04-18) |
parents | 11524:6de302b53a3e |
children | 11526:15a3db955ad3 |
files | plugins/mod_s2s.lua |
diffstat | 1 files changed, 26 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/plugins/mod_s2s.lua Sun Apr 18 12:34:17 2021 +0200 +++ b/plugins/mod_s2s.lua Sun Apr 18 12:35:16 2021 +0200 @@ -41,8 +41,16 @@ local require_encryption = module:get_option_boolean("s2s_require_encryption", false); local stanza_size_limit = module:get_option_number("s2s_stanza_size_limit"); -- TODO come up with a sensible default (util.xmppstream defaults to 10M) -local measure_connections = module:measure("connections", "amount"); -local measure_ipv6 = module:measure("ipv6", "amount"); +local measure_connections_inbound = module:metric( + "gauge", "connections_inbound", "", + "Established incoming s2s connections", + {"host", "type", "ip_family"} +); +local measure_connections_outbound = module:metric( + "gauge", "connections_outbound", "", + "Established outgoing s2s connections", + {"host", "type", "ip_family"} +); local sessions = module:shared("sessions"); @@ -60,16 +68,24 @@ }; module:hook("stats-update", function () - local count = 0; - local ipv6 = 0; + measure_connections_inbound:clear() + measure_connections_outbound:clear() + -- TODO: init all expected metrics once? + -- or maybe create/delete them in host-activate/host-deactivate? requires + -- extra API in openmetrics.lua tho for _, session in pairs(sessions) do - count = count + 1; - if session.ip and session.ip:match(":") then - ipv6 = ipv6 + 1; - end + local is_inbound = string.sub(session.type, 4, 5) == "in" + local metric_family = is_inbound and measure_connections_inbound or measure_connections_outbound + local host = is_inbound and session.to_host or session.from_host or "" + local type_ = session.type or "other" + + -- we want to expose both v4 and v6 counters in all cases to make + -- queries smoother + local is_ipv6 = session.ip and session.ip:match(":") and 1 or 0 + local is_ipv4 = 1 - is_ipv6 + metric_family:with_labels(host, type_, "ipv4"):add(is_ipv4) + metric_family:with_labels(host, type_, "ipv6"):add(is_ipv6) end - measure_connections(count); - measure_ipv6(ipv6); end); --- Handle stanzas to remote domains