annotate mod_audit_status/mod_audit_status.lua @ 5853:97c9b76867ca

mod_log_ringbuffer: Detach event handlers on logging reload (thanks Menel) Otherwise the global event handlers accumulate, one added each time logging is reoladed, and each invocation of the signal or event triggers one dump of each created ringbuffer.
author Kim Alvefur <zash@zash.se>
date Sun, 03 Mar 2024 11:23:40 +0100
parents bd0abf821cef
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5320
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
5324
18fd615c2733 mod_audit_status: Include shutdown reason in log entry
Matthew Wild <mwild1@gmail.com>
parents: 5320
diff changeset
3 local st = require "util.stanza";
18fd615c2733 mod_audit_status: Include shutdown reason in log entry
Matthew Wild <mwild1@gmail.com>
parents: 5320
diff changeset
4
5320
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
5840
bd0abf821cef mod_audit_status: Expose 'crashed' flag
Matthew Wild <mwild1@gmail.com>
parents: 5743
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: 5743
diff changeset
13 crashed = false; --luacheck: ignore 131/crashed
bd0abf821cef mod_audit_status: Expose 'crashed' flag
Matthew Wild <mwild1@gmail.com>
parents: 5743
diff changeset
14
5320
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();
5353
14b6397cd6de mod_audit_status: Fix error on first start
Kim Alvefur <zash@zash.se>
parents: 5324
diff changeset
17 if recorded_status and recorded_status.status == "started" then
5320
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 });
5840
bd0abf821cef mod_audit_status: Expose 'crashed' flag
Matthew Wild <mwild1@gmail.com>
parents: 5743
diff changeset
19 crashed = true;
5320
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 ()
5324
18fd615c2733 mod_audit_status: Include shutdown reason in log entry
Matthew Wild <mwild1@gmail.com>
parents: 5320
diff changeset
26 module:audit(nil, "server-stopped", {
18fd615c2733 mod_audit_status: Include shutdown reason in log entry
Matthew Wild <mwild1@gmail.com>
parents: 5320
diff changeset
27 custom = {
18fd615c2733 mod_audit_status: Include shutdown reason in log entry
Matthew Wild <mwild1@gmail.com>
parents: 5320
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: 5320
diff changeset
29 };
18fd615c2733 mod_audit_status: Include shutdown reason in log entry
Matthew Wild <mwild1@gmail.com>
parents: 5320
diff changeset
30 });
5320
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
5743
9944c6c3e914 mod_audit_status: Support writing heartbeat with async storage drivers
Matthew Wild <mwild1@gmail.com>
parents: 5353
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: 5353
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: 5353
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: 5353
diff changeset
38 end);
9944c6c3e914 mod_audit_status: Support writing heartbeat with async storage drivers
Matthew Wild <mwild1@gmail.com>
parents: 5353
diff changeset
39
5320
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 ()
5743
9944c6c3e914 mod_audit_status: Support writing heartbeat with async storage drivers
Matthew Wild <mwild1@gmail.com>
parents: 5353
diff changeset
41 heartbeat_writer:run(os.time());
5320
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