Software /
code /
prosody
File
util/statsd.lua @ 11369:87105a9a11df
util.datamanager: Support iterating over any file extension
The 'typ' argument to all other functions is the actual file extension,
but not here for some reason.
May need this for iterating over the .bin files created by
mod_http_file_share in the future.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 07 Feb 2021 19:23:33 +0100 |
parent | 10924:0c072dd69603 |
child | 11523:5f15ab7c6ae5 |
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, conf) if conf and conf.initial then send_gauge(name, conf.initial); end return function (new_v) send_gauge(name, new_v); end end; counter = function (name, conf) --luacheck: ignore 212/conf return function (delta) send_gauge(name, delta, true); end; end; rate = function (name) return function () send_counter(name, 1); end; end; distribution = function (name, conf) --luacheck: ignore 212/conf 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; }