# HG changeset patch # User Kim Alvefur # Date 1645205745 -3600 # Node ID 42a362a2bf51da70e821da1e4d5ad5e8f7ccf5c2 # Parent 54fa2116bbf37b9347003b197ab359dec0d42ab7 mod_portcheck: Shell command to check if ports are open diff -r 54fa2116bbf3 -r 42a362a2bf51 mod_portcheck/README.md --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_portcheck/README.md Fri Feb 18 18:35:45 2022 +0100 @@ -0,0 +1,20 @@ +This module adds a `portcheck` command to the [shell][doc:console] +intended for use with health checks, i.e. to check whether Prosody is +listening to all expected ports. + +# Usage + +After installing and enabling the module a command like this becomes +available: + +``` bash +prosodyctl shell "portcheck [::]:5222 *:5222 [::]:5269 *:5269" +``` + +This would check if the c2s (`5222`) and s2s (`5269`) ports are +available on both IPv6 (`*`) and *Legacy IP*^[often referred to as IPv4]. + +# Compatibility + +Compatible with Prosody **trunk**, will **not** work with 0.11.x or +earlier. diff -r 54fa2116bbf3 -r 42a362a2bf51 mod_portcheck/mod_portcheck.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_portcheck/mod_portcheck.lua Fri Feb 18 18:35:45 2022 +0100 @@ -0,0 +1,18 @@ +module:set_global(); +local portmanager = require "core.portmanager"; + +local commands = module:shared("admin_shell/commands") + +function commands.portcheck(session, line) + for desc, interface, port in line:gmatch("%s(%[?([%x:.]+)%]?:(%d+))") do + if interface == "*" then + interface = "0.0.0.0"; + end + assert(portmanager.get_service_at(interface, tonumber(port)), desc); + end + session.print "OK"; +end + +function module.unload() + commands.portcheck = nil; +end