author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
Sun, 29 Dec 2019 22:09:58 +0100 | |
changeset 3789 | 6273705e3830 |
parent 2879 | c3a039972b74 |
permissions | -rw-r--r-- |
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" |
|
2429
26c68a5f432f
mod_statsd: Import bare_sessions from the prosody global, using it as a global directly is deprecated
Kim Alvefur <zash@zash.se>
parents:
1449
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 |
||
2879
c3a039972b74
mod_statsd: Fix typo in comment [codespell]
Kim Alvefur <zash@zash.se>
parents:
2429
diff
changeset
|
18 |
-- Metrics are namespaced by ".", and separated by newline |
1445
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 "." |
|
1446
d722a4defea7
mod_statsd: Optionally include host in prefix
daurnimator <quae@daurnimator.com>
parents:
1445
diff
changeset
|
25 |
local prefix = (options.prefix or "prosody") .. "." |
d722a4defea7
mod_statsd: Optionally include host in prefix
daurnimator <quae@daurnimator.com>
parents:
1445
diff
changeset
|
26 |
if not options.no_host then |
d722a4defea7
mod_statsd: Optionally include host in prefix
daurnimator <quae@daurnimator.com>
parents:
1445
diff
changeset
|
27 |
prefix = prefix .. clean(module.host) .. "." |
d722a4defea7
mod_statsd: Optionally include host in prefix
daurnimator <quae@daurnimator.com>
parents:
1445
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) |
|
1449
d31ace5b1175
mod_statsd: Add missing `pairs` call
daurnimator <quae@daurnimator.com>
parents:
1447
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) |
|
1449
d31ace5b1175
mod_statsd: Add missing `pairs` call
daurnimator <quae@daurnimator.com>
parents:
1447
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) |
|
1447
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1446
diff
changeset
|
60 |
-- Total count |
1443 | 61 |
send(prefix.."invite:1|c") |
62 |
local room_node = jid.split(event.room.jid) |
|
1447
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1446
diff
changeset
|
63 |
-- Counts per room |
1443 | 64 |
send(prefix..clean(room_node)..".invite:1|c") |
1447
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1446
diff
changeset
|
65 |
-- Counts per recipient |
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1446
diff
changeset
|
66 |
send(prefix..clean(event.stanza.attr.to)..".invited:1|c") |
1443 | 67 |
end) |
1447
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1446
diff
changeset
|
68 |
module:hook("muc-decline", function(event) |
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1446
diff
changeset
|
69 |
-- Total count |
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1446
diff
changeset
|
70 |
send(prefix.."decline:1|c") |
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1446
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:
1446
diff
changeset
|
72 |
-- Counts per room |
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1446
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:
1446
diff
changeset
|
74 |
-- Counts per sender |
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1446
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:
1446
diff
changeset
|
76 |
end) |