annotate mod_statsd/mod_statsd.lua @ 1448:d722a4defea7

mod_statsd: Optionally include host in prefix
author daurnimator <quae@daurnimator.com>
date Mon, 23 Jun 2014 16:05:54 -0400
parents e96ac4291b36
children 365f6db9531a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1443
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
1 -- Log common stats to statsd
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
2 --
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
3 -- Copyright (C) 2014 Daurnimator
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
4 --
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
5 -- This module is MIT/X11 licensed.
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
6
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
7 local socket = require "socket"
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
8 local iterators = require "util.iterators"
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
9 local jid = require "util.jid"
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
10
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
11 local options = module:get_option("statsd") or {}
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
12
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
13 -- Create UDP socket to statsd server
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
14 local sock = socket.udp()
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
15 sock:setpeername(options.hostname or "127.0.0.1", options.port or 8125)
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
16
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
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
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
19
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
20 -- A 'safer' send function to expose
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
21 function send(s) return sock:send(s) end
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
22
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
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
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
28
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
29 -- Track users as they bind/unbind
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
30 -- count bare sessions every time, as we have no way to tell if it's a new bare session or not
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
31 module:hook("resource-bind", function(event)
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
32 send(prefix.."bare_sessions:"..iterators.count(bare_sessions).."|g")
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
33 send(prefix.."full_sessions:+1|g")
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
34 end, 1)
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
35 module:hook("resource-unbind", function(event)
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
36 send(prefix.."bare_sessions:"..iterators.count(bare_sessions).."|g")
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
37 send(prefix.."full_sessions:-1|g")
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
38 end, 1)
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
39
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
40 -- Track MUC occupants as they join/leave
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
41 module:hook("muc-occupant-joined", function(event)
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
42 send(prefix.."n_occupants:+1|g")
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
43 local room_node = jid.split(event.room.jid)
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
44 send(prefix..clean(room_node)..".occupants:+1|g")
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
45 end)
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
46 module:hook("muc-occupant-left", function(event)
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
47 send(prefix.."n_occupants:-1|g")
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
48 local room_node = jid.split(event.room.jid)
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
49 send(prefix..clean(room_node)..".occupants:-1|g")
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
50 end)
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
51
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
52 -- Misc other MUC
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
53 module:hook("muc-broadcast-message", function(event)
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
54 send(prefix.."broadcast-message:1|c")
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
55 local room_node = jid.split(event.room.jid)
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
56 send(prefix..clean(room_node)..".broadcast-message:1|c")
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
57 end)
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
58 module:hook("muc-invite", function(event)
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
59 send(prefix.."invite:1|c")
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
60 local room_node = jid.split(event.room.jid)
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
61 send(prefix..clean(room_node)..".invite:1|c")
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
62 local to_node, to_host, to_resource = jid.split(event.stanza.attr.to)
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
63 send(prefix..clean(to_node)..".invites:1|c")
faf1a5d89cd7 mod_statsd: First commit
daurnimator <quae@daurnimator.com>
parents:
diff changeset
64 end)