Software /
code /
prosody-modules
Annotate
mod_statsd/mod_statsd.lua @ 1617:e0d8caffa209
mod_onions: Depend on mod_s2s to avoid a traceback when loaded before mod_s2s
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Wed, 25 Feb 2015 17:27:00 +0000 |
parent | 1451:d31ace5b1175 |
child | 2425:26c68a5f432f |
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" | |
10 | |
11 local options = module:get_option("statsd") or {} | |
12 | |
13 -- Create UDP socket to statsd server | |
14 local sock = socket.udp() | |
15 sock:setpeername(options.hostname or "127.0.0.1", options.port or 8125) | |
16 | |
17 -- Metrics are namespaced by ".", and seperated by newline | |
1447
e96ac4291b36
mod_statsd: Clean off colons (:)
daurnimator <quae@daurnimator.com>
parents:
1443
diff
changeset
|
18 function clean(s) return (s:gsub("[%.:\n]", "_")) end |
1443 | 19 |
20 -- A 'safer' send function to expose | |
21 function send(s) return sock:send(s) end | |
22 | |
23 -- prefix should end in "." | |
1448
d722a4defea7
mod_statsd: Optionally include host in prefix
daurnimator <quae@daurnimator.com>
parents:
1447
diff
changeset
|
24 local prefix = (options.prefix or "prosody") .. "." |
d722a4defea7
mod_statsd: Optionally include host in prefix
daurnimator <quae@daurnimator.com>
parents:
1447
diff
changeset
|
25 if not options.no_host then |
d722a4defea7
mod_statsd: Optionally include host in prefix
daurnimator <quae@daurnimator.com>
parents:
1447
diff
changeset
|
26 prefix = prefix .. clean(module.host) .. "." |
d722a4defea7
mod_statsd: Optionally include host in prefix
daurnimator <quae@daurnimator.com>
parents:
1447
diff
changeset
|
27 end |
1443 | 28 |
29 -- Track users as they bind/unbind | |
30 -- count bare sessions every time, as we have no way to tell if it's a new bare session or not | |
31 module:hook("resource-bind", function(event) | |
1451
d31ace5b1175
mod_statsd: Add missing `pairs` call
daurnimator <quae@daurnimator.com>
parents:
1449
diff
changeset
|
32 send(prefix.."bare_sessions:"..iterators.count(pairs(bare_sessions)).."|g") |
1443 | 33 send(prefix.."full_sessions:+1|g") |
34 end, 1) | |
35 module:hook("resource-unbind", function(event) | |
1451
d31ace5b1175
mod_statsd: Add missing `pairs` call
daurnimator <quae@daurnimator.com>
parents:
1449
diff
changeset
|
36 send(prefix.."bare_sessions:"..iterators.count(pairs(bare_sessions)).."|g") |
1443 | 37 send(prefix.."full_sessions:-1|g") |
38 end, 1) | |
39 | |
40 -- Track MUC occupants as they join/leave | |
41 module:hook("muc-occupant-joined", function(event) | |
42 send(prefix.."n_occupants:+1|g") | |
43 local room_node = jid.split(event.room.jid) | |
44 send(prefix..clean(room_node)..".occupants:+1|g") | |
45 end) | |
46 module:hook("muc-occupant-left", function(event) | |
47 send(prefix.."n_occupants:-1|g") | |
48 local room_node = jid.split(event.room.jid) | |
49 send(prefix..clean(room_node)..".occupants:-1|g") | |
50 end) | |
51 | |
52 -- Misc other MUC | |
53 module:hook("muc-broadcast-message", function(event) | |
54 send(prefix.."broadcast-message:1|c") | |
55 local room_node = jid.split(event.room.jid) | |
56 send(prefix..clean(room_node)..".broadcast-message:1|c") | |
57 end) | |
58 module:hook("muc-invite", function(event) | |
1449
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1448
diff
changeset
|
59 -- Total count |
1443 | 60 send(prefix.."invite:1|c") |
61 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
|
62 -- Counts per room |
1443 | 63 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
|
64 -- Counts per recipient |
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1448
diff
changeset
|
65 send(prefix..clean(event.stanza.attr.to)..".invited:1|c") |
1443 | 66 end) |
1449
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1448
diff
changeset
|
67 module:hook("muc-decline", function(event) |
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1448
diff
changeset
|
68 -- Total count |
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1448
diff
changeset
|
69 send(prefix.."decline:1|c") |
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1448
diff
changeset
|
70 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
|
71 -- Counts per room |
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1448
diff
changeset
|
72 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
|
73 -- Counts per sender |
365f6db9531a
mod_statsd: Better accounting for invites, add declines
daurnimator <quae@daurnimator.com>
parents:
1448
diff
changeset
|
74 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
|
75 end) |