author | Matthew Wild <mwild1@gmail.com> |
Tue, 20 Feb 2024 17:11:42 +0000 | |
changeset 5844 | bd0abf821cef |
parent 5747 | 9944c6c3e914 |
permissions | -rw-r--r-- |
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 |