Software /
code /
prosody
File
util/statsd.lua @ 10833:ac691f305ea7
mod_csi_simple: Report whatever's not a stirng and not a stanza
This is either dead code or actually a type error, but catching that
should be the responsibility of the session.send function. This type
check is left since everything after it assumes a stanza object.
These last few commits aren't meant to change any behavior and it did
mark things not stanzas as important, but those would have been mostly
raw strings which are now specially handled.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 10 May 2020 23:12:33 +0200 |
parent | 7988:dc758422d896 |
child | 10924:0c072dd69603 |
line wrap: on
line source
local socket = require "socket"; local time = require "util.time".now local function new(config) if not config or not config.statsd_server then return nil, "No statsd server specified in the config, please see https://prosody.im/doc/statistics"; end local sock = socket.udp(); sock:setpeername(config.statsd_server, config.statsd_port or 8125); local prefix = (config.prefix or "prosody").."."; local function send_metric(s) return sock:send(prefix..s); end local function send_gauge(name, amount, relative) local s_amount = tostring(amount); if relative and amount > 0 then s_amount = "+"..s_amount; end return send_metric(name..":"..s_amount.."|g"); end local function send_counter(name, amount) return send_metric(name..":"..tostring(amount).."|c"); end local function send_duration(name, duration) return send_metric(name..":"..tostring(duration).."|ms"); end local function send_histogram_sample(name, sample) return send_metric(name..":"..tostring(sample).."|h"); end local methods; methods = { amount = function (name, initial) if initial then send_gauge(name, initial); end return function (new_v) send_gauge(name, new_v); end end; counter = function (name, initial) --luacheck: ignore 212/initial return function (delta) send_gauge(name, delta, true); end; end; rate = function (name) return function () send_counter(name, 1); end; end; distribution = function (name, unit, type) --luacheck: ignore 212/unit 212/type return function (value) send_histogram_sample(name, value); end; end; sizes = function (name) name = name.."_size"; return function (value) send_histogram_sample(name, value); end; end; times = function (name) return function () local start_time = time(); return function () local end_time = time(); local duration = end_time - start_time; send_duration(name, duration*1000); end end; end; }; return methods; end return { new = new; }