mod_audit_status/mod_audit_status.lua
author Matthew Wild <mwild1@gmail.com>
Tue, 20 Feb 2024 17:11:42 +0000
changeset 5844 bd0abf821cef
parent 5747 9944c6c3e914
permissions -rw-r--r--
mod_audit_status: Expose 'crashed' flag
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5324
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     1
module:depends("audit");
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     2
5328
18fd615c2733 mod_audit_status: Include shutdown reason in log entry
Matthew Wild <mwild1@gmail.com>
parents: 5324
diff changeset
     3
local st = require "util.stanza";
18fd615c2733 mod_audit_status: Include shutdown reason in log entry
Matthew Wild <mwild1@gmail.com>
parents: 5324
diff changeset
     4
5324
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     5
-- Suppress warnings about module:audit()
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     6
-- luacheck: ignore 143/module
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     7
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     8
local heartbeat_interval = module:get_option_number("audit_status_heartbeat_interval", 60);
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     9
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    10
local store = module:open_store(nil, "keyval+");
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    11
5844
bd0abf821cef mod_audit_status: Expose 'crashed' flag
Matthew Wild <mwild1@gmail.com>
parents: 5747
diff changeset
    12
-- This is global, to make it available to other modules
bd0abf821cef mod_audit_status: Expose 'crashed' flag
Matthew Wild <mwild1@gmail.com>
parents: 5747
diff changeset
    13
crashed = false; --luacheck: ignore 131/crashed
bd0abf821cef mod_audit_status: Expose 'crashed' flag
Matthew Wild <mwild1@gmail.com>
parents: 5747
diff changeset
    14
5324
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    15
module:hook_global("server-started", function ()
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    16
	local recorded_status = store:get();
5357
14b6397cd6de mod_audit_status: Fix error on first start
Kim Alvefur <zash@zash.se>
parents: 5328
diff changeset
    17
	if recorded_status and recorded_status.status == "started" then
5324
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    18
		module:audit(nil, "server-crashed", { timestamp = recorded_status.heartbeat });
5844
bd0abf821cef mod_audit_status: Expose 'crashed' flag
Matthew Wild <mwild1@gmail.com>
parents: 5747
diff changeset
    19
		crashed = true;
5324
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    20
	end
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    21
	module:audit(nil, "server-started");
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    22
	store:set_key(nil, "status", "started");
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    23
end);
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    24
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    25
module:hook_global("server-stopped", function ()
5328
18fd615c2733 mod_audit_status: Include shutdown reason in log entry
Matthew Wild <mwild1@gmail.com>
parents: 5324
diff changeset
    26
	module:audit(nil, "server-stopped", {
18fd615c2733 mod_audit_status: Include shutdown reason in log entry
Matthew Wild <mwild1@gmail.com>
parents: 5324
diff changeset
    27
		custom = {
18fd615c2733 mod_audit_status: Include shutdown reason in log entry
Matthew Wild <mwild1@gmail.com>
parents: 5324
diff changeset
    28
			prosody.shutdown_reason and st.stanza("note"):text(prosody.shutdown_reason);
18fd615c2733 mod_audit_status: Include shutdown reason in log entry
Matthew Wild <mwild1@gmail.com>
parents: 5324
diff changeset
    29
		};
18fd615c2733 mod_audit_status: Include shutdown reason in log entry
Matthew Wild <mwild1@gmail.com>
parents: 5324
diff changeset
    30
	});
5324
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    31
	store:set_key(nil, "status", "stopped");
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    32
end);
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    33
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    34
if heartbeat_interval then
5747
9944c6c3e914 mod_audit_status: Support writing heartbeat with async storage drivers
Matthew Wild <mwild1@gmail.com>
parents: 5357
diff changeset
    35
	local async = require "util.async";
9944c6c3e914 mod_audit_status: Support writing heartbeat with async storage drivers
Matthew Wild <mwild1@gmail.com>
parents: 5357
diff changeset
    36
	local heartbeat_writer = async.runner(function (timestamp)
9944c6c3e914 mod_audit_status: Support writing heartbeat with async storage drivers
Matthew Wild <mwild1@gmail.com>
parents: 5357
diff changeset
    37
		store:set_key(nil, "heartbeat", timestamp);
9944c6c3e914 mod_audit_status: Support writing heartbeat with async storage drivers
Matthew Wild <mwild1@gmail.com>
parents: 5357
diff changeset
    38
	end);
9944c6c3e914 mod_audit_status: Support writing heartbeat with async storage drivers
Matthew Wild <mwild1@gmail.com>
parents: 5357
diff changeset
    39
5324
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    40
	module:add_timer(0, function ()
5747
9944c6c3e914 mod_audit_status: Support writing heartbeat with async storage drivers
Matthew Wild <mwild1@gmail.com>
parents: 5357
diff changeset
    41
		heartbeat_writer:run(os.time());
5324
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    42
		return heartbeat_interval;
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    43
	end);
c450dbf6c0fa mod_audit_status: New module to log server status to audit log
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    44
end