Software / code / prosody-modules
Annotate
mod_statsd/mod_statsd.lua @ 6307:aae94f82c56e
mod_http_oauth2: Refactor to return all errors to Device clients
Previously only a single case was returned to device clients, now all
error conditions that pass trough the error_response() are covered.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Fri, 13 Jun 2025 21:30:56 +0200 |
| parent | 2875:c3a039972b74 |
| rev | line source |
|---|---|
| 1443 | 1 -- Log common stats to statsd |
| 2 -- | |
| 3 -- Copyright (C) 2014 Daurnimator | |
| 4 -- | |
| 5 -- This module is MIT/X11 licensed. | |
| 6 | |
| 7 local socket = require "socket" | |
| 8 local iterators = require "util.iterators" | |
| 9 local jid = require "util.jid" | |
|
2425
26c68a5f432f
mod_statsd: Import bare_sessions from the prosody global, using it as a global directly is deprecated
Kim Alvefur <zash@zash.se>
parents:
1451
diff
changeset
|
10 local bare_sessions = prosody.bare_sessions; |
| 1443 | 11 |
| 12 local options = module:get_option("statsd") or {} | |
| 13 | |
| 14 -- Create UDP socket to statsd server | |
| 15 local sock = socket.udp() | |
| 16 sock:setpeername(options.hostname or "127.0.0.1", options.port or 8125) | |
| 17 | |
|
2875
c3a039972b74
mod_statsd: Fix typo in comment [codespell]
Kim Alvefur <zash@zash.se>
parents:
2425
diff
changeset
|
18 -- Metrics are namespaced by ".", and separated by newline |
|
1447
e96ac4291b36
mod_statsd: Clean off colons (:)
daurnimator <quae@daurnimator.com>
parents:
1443
diff
changeset
|
19 function clean(s) return (s:gsub("[%.:\n]", "_")) end |
| 1443 | 20 |
| 21 -- A 'safer' send function to expose | |
| 22 function send(s) return sock:send(s) end | |
| 23 | |
| 24 -- prefix should end in "." | |
|
1448
d722a4defea7
mod_statsd: Optionally include host in prefix
daurnimator <quae@daurnimator.com>
parents:
1447
diff
changeset
|
25 local prefix = (options.prefix or "prosody") .. "." |
|
d722a4defea7
mod_statsd: Optionally include host in prefix
daurnimator <quae@daurnimator.com>
parents:
1447
diff
changeset
|
26 if not options.no_host then |
|
d722a4defea7
mod_statsd: Optionally include host in prefix
daurnimator <quae@daurnimator.com>
parents:
1447
diff
changeset
|
27 prefix = prefix .. clean(module.host) .. "." |
|
d722a4defea7
mod_statsd: Optionally include host in prefix
daurnimator <quae@daurnimator.com>
parents:
1447
diff
changeset
|
28 end |
| 1443 | 29 |
| 30 -- Track users as they bind/unbind | |
| 31 -- count bare sessions every time, as we have no way to tell if it's a new bare session or not | |
| 32 module:hook("resource-bind", function(event) | |
|
1451
d31ace5b1175
mod_statsd: Add missing `pairs` call
daurnimator <quae@daurnimator.com>
parents:
1449
diff
changeset
|
33 send(prefix.."bare_sessions:"..iterators.count(pairs(bare_sessions)).."|g") |
| 1443 | 34 send(prefix.."full_sessions:+1|g") |
| 35 end, 1) | |
| 36 module:hook("resource-unbind", function(event) | |
|
1451
d31ace5b1175
mod_statsd: Add missing `pairs` call
daurnimator <quae@daurnimator.com>
parents:
1449
diff
changeset
|
37 send(prefix.."bare_sessions:"..iterators.count(pairs(bare_sessions)).."|g") |
| 1443 | 38 send(prefix.."full_sessions:-1|g") |
| 39 end, 1) | |
| 40 | |
| 41 -- Track MUC occupants as they join/leave | |
| 42 module:hook("muc-occupant-joined", function(event) | |
| 43 send(prefix.."n_occupants:+1|g") | |
| 44 local room_node = jid.split(event.room.jid) | |
| 45 send(prefix..clean(room_node)..".occupants:+1|g") | |
| 46 end) | |
| 47 module:hook("muc-occupant-left", function(event) | |
| 48 send(prefix.."n_occupants:-1|g") | |
| 49 local room_node = jid.split(event.room.jid) | |
| 50 send(prefix..clean(room_node)..".occupants:-1|g") | |
| 51 end) | |
| 52 | |
| 53 -- Misc other MUC | |
| 54 module:hook("muc-broadcast-message", function(event) | |
| 55 send(prefix.."broadcast-message:1|c") | |
| 56 local room_node = jid.split(event.room.jid) | |
| 57 send(prefix..clean(room_node)..".broadcast-message:1|c") | |
| 58 end) | |
| 59 module:hook("muc-invite", function(event) | |
|
1449
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1448
diff
changeset
|
60 -- Total count |
| 1443 | 61 send(prefix.."invite:1|c") |
| 62 local room_node = jid.split(event.room.jid) | |
|
1449
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1448
diff
changeset
|
63 -- Counts per room |
| 1443 | 64 send(prefix..clean(room_node)..".invite:1|c") |
|
1449
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1448
diff
changeset
|
65 -- Counts per recipient |
|
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1448
diff
changeset
|
66 send(prefix..clean(event.stanza.attr.to)..".invited:1|c") |
| 1443 | 67 end) |
|
1449
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1448
diff
changeset
|
68 module:hook("muc-decline", function(event) |
|
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1448
diff
changeset
|
69 -- Total count |
|
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1448
diff
changeset
|
70 send(prefix.."decline:1|c") |
|
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1448
diff
changeset
|
71 local room_node = jid.split(event.room.jid) |
|
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1448
diff
changeset
|
72 -- Counts per room |
|
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1448
diff
changeset
|
73 send(prefix..clean(room_node)..".decline:1|c") |
|
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1448
diff
changeset
|
74 -- Counts per sender |
|
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1448
diff
changeset
|
75 send(prefix..clean(event.incoming.attr.from)..".declined:1|c") |
|
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1448
diff
changeset
|
76 end) |