Software / code / prosody-modules
File
mod_debug_traceback/mod_debug_traceback.lua @ 6319:63ef69b2f046
mod_http_oauth2: Assume Prosody 13.0+ roles are available
Per the README, 0.12 is not supported, so we should not need to worry
about this. Plus it is assumed to be present elsewhere and that would
throw errors.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Wed, 02 Jul 2025 16:15:32 +0200 |
| parent | 5874:0358fcf14cd6 |
line wrap: on
line source
module:set_global(); local traceback = require "util.debug".traceback; local pposix = require "util.pposix"; local os_date = os.date; local render_filename = require "util.interpolation".new("%b{}", function (s) return s; end, { yyyymmdd = function (t) return os_date("%Y%m%d", t); end; hhmmss = function (t) return os_date("%H%M%S", t); end; }); local count = 0; local function get_filename(filename_template) filename_template = filename_template; return render_filename(filename_template, { paths = prosody.paths; pid = pposix.getpid(); count = count; time = os.time(); }); end local default_filename_template = "{paths.data}/traceback-{pid}-{count}.log"; local filename_template = module:get_option_string("debug_traceback_filename", default_filename_template); local signal_name = module:get_option_string("debug_traceback_signal", "SIGUSR1"); function dump_traceback() module:log("info", "Received %s, writing traceback", signal_name); local tb = traceback(); module:fire_event("debug_traceback/triggered", { traceback = tb }); local f, err = io.open(get_filename(filename_template), "a+"); if not f then module:log("error", "Unable to write traceback: %s", err); return; end f:write("-- Traceback generated at ", os.date("%b %d %H:%M:%S"), " --\n"); f:write(tb, "\n"); f:write("-- End of traceback --\n"); f:close(); count = count + 1; end module:hook("signal/"..signal_name, dump_traceback);