Software /
code /
prosody-modules
Changeset
6049:491c56449a76
mod_measure_conn_buffers: Measure total size of connection write buffers
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Mon, 11 Nov 2024 14:03:46 +0000 |
parents | 6048:cce76628c83a |
children | 6050:81805f11263c |
files | mod_measure_conn_buffers/README.md mod_measure_conn_buffers/mod_measure_conn_buffers.lua |
diffstat | 2 files changed, 41 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_measure_conn_buffers/README.md Mon Nov 11 14:03:46 2024 +0000 @@ -0,0 +1,12 @@ +--- +labels: +- Statistics +- Stage-Alpha +summary: Measure connection buffer usage +... + +Description +=========== + +This module measures data that is buffered by Prosody, waiting to be written +to sockets.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_measure_conn_buffers/mod_measure_conn_buffers.lua Mon Nov 11 14:03:46 2024 +0000 @@ -0,0 +1,29 @@ +local measure_total_pending_tx = module:measure("total_pending_tx", "amount"); + +local server = require "net.server"; + +if server.get_backend() ~= "epoll" or not server.loop.fds then + module:log_status("error", "This module is not compatible with your network_backend, only epoll is supported"); + return; +end + +local fds = server.loop.fds; + +module:hook("stats-update", function () + local pending_tx = 0; + for _, conn in pairs(fds) do + local buffer = conn.writebuffer; + if buffer then + if type(buffer) == "string" then + pending_tx = pending_tx + #buffer; + elseif buffer._length then -- dbuffer + pending_tx = pending_tx + buffer._length; + else -- simple table + for i = 1, #buffer do + pending_tx = pending_tx + #buffer[i]; + end + end + end + end + measure_total_pending_tx(pending_tx); +end);