Mercurial > prosody-modules
comparison mod_statsd/mod_statsd.lua @ 1443:faf1a5d89cd7
mod_statsd: First commit
| author | daurnimator <quae@daurnimator.com> |
|---|---|
| date | Mon, 23 Jun 2014 14:19:05 -0400 |
| parents | |
| children | e96ac4291b36 |
comparison
equal
deleted
inserted
replaced
| 1442:253e374824a8 | 1443:faf1a5d89cd7 |
|---|---|
| 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 | |
| 18 function clean(s) return (s:gsub("[%.\n]", "_")) end | |
| 19 | |
| 20 -- A 'safer' send function to expose | |
| 21 function send(s) return sock:send(s) end | |
| 22 | |
| 23 -- prefix should end in "." | |
| 24 local prefix = (options.prefix or ("prosody." .. clean(module.host))) .. "." | |
| 25 | |
| 26 -- Track users as they bind/unbind | |
| 27 -- count bare sessions every time, as we have no way to tell if it's a new bare session or not | |
| 28 module:hook("resource-bind", function(event) | |
| 29 send(prefix.."bare_sessions:"..iterators.count(bare_sessions).."|g") | |
| 30 send(prefix.."full_sessions:+1|g") | |
| 31 end, 1) | |
| 32 module:hook("resource-unbind", function(event) | |
| 33 send(prefix.."bare_sessions:"..iterators.count(bare_sessions).."|g") | |
| 34 send(prefix.."full_sessions:-1|g") | |
| 35 end, 1) | |
| 36 | |
| 37 -- Track MUC occupants as they join/leave | |
| 38 module:hook("muc-occupant-joined", function(event) | |
| 39 send(prefix.."n_occupants:+1|g") | |
| 40 local room_node = jid.split(event.room.jid) | |
| 41 send(prefix..clean(room_node)..".occupants:+1|g") | |
| 42 end) | |
| 43 module:hook("muc-occupant-left", function(event) | |
| 44 send(prefix.."n_occupants:-1|g") | |
| 45 local room_node = jid.split(event.room.jid) | |
| 46 send(prefix..clean(room_node)..".occupants:-1|g") | |
| 47 end) | |
| 48 | |
| 49 -- Misc other MUC | |
| 50 module:hook("muc-broadcast-message", function(event) | |
| 51 send(prefix.."broadcast-message:1|c") | |
| 52 local room_node = jid.split(event.room.jid) | |
| 53 send(prefix..clean(room_node)..".broadcast-message:1|c") | |
| 54 end) | |
| 55 module:hook("muc-invite", function(event) | |
| 56 send(prefix.."invite:1|c") | |
| 57 local room_node = jid.split(event.room.jid) | |
| 58 send(prefix..clean(room_node)..".invite:1|c") | |
| 59 local to_node, to_host, to_resource = jid.split(event.stanza.attr.to) | |
| 60 send(prefix..clean(to_node)..".invites:1|c") | |
| 61 end) |
