# HG changeset patch # User Kim Alvefur # Date 1675036092 -3600 # Node ID 6af2d74daa157cafa3a50a33633527ed51e9e962 # Parent 8474a3b80200b8aec9f80420311c2ca1b660536a mod_http_status: Report module statuses Uncommitted code from 2021 diff -r 8474a3b80200 -r 6af2d74daa15 mod_http_status/README.md --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_http_status/README.md Mon Jan 30 00:48:12 2023 +0100 @@ -0,0 +1,15 @@ +Prosody 0.12 added an API allowing modules to report their status. This +module allows reading these statuses via HTTP for use in monitoring. + +``` +$ curl http://prosody.localhost:5280/status +{ + "example.com" : { + "c2s" : { + "message" : "Loaded", + "type" : "core" + } + } +} +``` + diff -r 8474a3b80200 -r 6af2d74daa15 mod_http_status/mod_http_status.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_http_status/mod_http_status.lua Mon Jan 30 00:48:12 2023 +0100 @@ -0,0 +1,36 @@ +module:set_global(); + +local json = require "util.json"; +local datetime = require "util.datetime".datetime; + +local modulemanager = require "core.modulemanager"; + +module:provides("http", { + route = { + GET = function(event) + local request, response = event.request, event.response; + response.headers.content_type = "application/json"; + + local resp = { ["*"] = true }; + + for host in pairs(prosody.hosts) do + resp[host] = true; + end + + for host in pairs(resp) do + local hostmods = {}; + local mods = modulemanager.get_modules(host); + for mod_name, mod in pairs(mods) do + hostmods[mod_name] = { + type = mod.module.status_type; + message = mod.module.status_message; + time = datetime(math.floor(mod.module.status_time)); + }; + end + resp[host] = hostmods; + end + + return json.encode(resp); + end; + }; +});