Comparison

plugins/mod_s2s.lua @ 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
parent 11419:2c26dfc1977f
child 11526:15a3db955ad3
comparison
equal deleted inserted replaced
11524:6de302b53a3e 11525:5f99fcc43938
39 local secure_domains, insecure_domains = 39 local secure_domains, insecure_domains =
40 module:get_option_set("s2s_secure_domains", {})._items, module:get_option_set("s2s_insecure_domains", {})._items; 40 module:get_option_set("s2s_secure_domains", {})._items, module:get_option_set("s2s_insecure_domains", {})._items;
41 local require_encryption = module:get_option_boolean("s2s_require_encryption", false); 41 local require_encryption = module:get_option_boolean("s2s_require_encryption", false);
42 local stanza_size_limit = module:get_option_number("s2s_stanza_size_limit"); -- TODO come up with a sensible default (util.xmppstream defaults to 10M) 42 local stanza_size_limit = module:get_option_number("s2s_stanza_size_limit"); -- TODO come up with a sensible default (util.xmppstream defaults to 10M)
43 43
44 local measure_connections = module:measure("connections", "amount"); 44 local measure_connections_inbound = module:metric(
45 local measure_ipv6 = module:measure("ipv6", "amount"); 45 "gauge", "connections_inbound", "",
46 "Established incoming s2s connections",
47 {"host", "type", "ip_family"}
48 );
49 local measure_connections_outbound = module:metric(
50 "gauge", "connections_outbound", "",
51 "Established outgoing s2s connections",
52 {"host", "type", "ip_family"}
53 );
46 54
47 local sessions = module:shared("sessions"); 55 local sessions = module:shared("sessions");
48 56
49 local runner_callbacks = {}; 57 local runner_callbacks = {};
50 58
58 use_ipv6 = module:get_option_boolean("use_ipv6", true); 66 use_ipv6 = module:get_option_boolean("use_ipv6", true);
59 use_dane = module:get_option_boolean("use_dane", false); 67 use_dane = module:get_option_boolean("use_dane", false);
60 }; 68 };
61 69
62 module:hook("stats-update", function () 70 module:hook("stats-update", function ()
63 local count = 0; 71 measure_connections_inbound:clear()
64 local ipv6 = 0; 72 measure_connections_outbound:clear()
73 -- TODO: init all expected metrics once?
74 -- or maybe create/delete them in host-activate/host-deactivate? requires
75 -- extra API in openmetrics.lua tho
65 for _, session in pairs(sessions) do 76 for _, session in pairs(sessions) do
66 count = count + 1; 77 local is_inbound = string.sub(session.type, 4, 5) == "in"
67 if session.ip and session.ip:match(":") then 78 local metric_family = is_inbound and measure_connections_inbound or measure_connections_outbound
68 ipv6 = ipv6 + 1; 79 local host = is_inbound and session.to_host or session.from_host or ""
69 end 80 local type_ = session.type or "other"
70 end 81
71 measure_connections(count); 82 -- we want to expose both v4 and v6 counters in all cases to make
72 measure_ipv6(ipv6); 83 -- queries smoother
84 local is_ipv6 = session.ip and session.ip:match(":") and 1 or 0
85 local is_ipv4 = 1 - is_ipv6
86 metric_family:with_labels(host, type_, "ipv4"):add(is_ipv4)
87 metric_family:with_labels(host, type_, "ipv6"):add(is_ipv6)
88 end
73 end); 89 end);
74 90
75 --- Handle stanzas to remote domains 91 --- Handle stanzas to remote domains
76 92
77 local bouncy_stanzas = { message = true, presence = true, iq = true }; 93 local bouncy_stanzas = { message = true, presence = true, iq = true };