annotate mod_log_json/mod_log_json.lua @ 3965:2b10e51d85a6

mod_muc_limits: Add config option to limit to join stanzas only This is a bit more limited in pre-0.11 MUC modules, because it just detects stanzas sent to full JIDs (which would include all presence and nick changes). This option is useful for setups where users are typically unaffiliated, but trusted (e.g. if access to the room is gated through some other means such as password/token auth).
author Matthew Wild <mwild1@gmail.com>
date Fri, 03 Apr 2020 12:26:56 +0100
parents 900ea02ab00b
children 4356088ad675
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3732
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 local pack = require "util.table".pack;
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2 local json = require "util.json";
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3 local array = require "util.array";
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4 local datetime = require "util.datetime".datetime;
3746
bc865568ff02 mod_log_json: Add UDP support
Kim Alvefur <zash@zash.se>
parents: 3734
diff changeset
5 local socket = require "socket";
3732
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7 module:set_global();
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9 local function sink_maker(config)
3746
bc865568ff02 mod_log_json: Add UDP support
Kim Alvefur <zash@zash.se>
parents: 3734
diff changeset
10 local send = function () end
bc865568ff02 mod_log_json: Add UDP support
Kim Alvefur <zash@zash.se>
parents: 3734
diff changeset
11 if config.filename then
bc865568ff02 mod_log_json: Add UDP support
Kim Alvefur <zash@zash.se>
parents: 3734
diff changeset
12 local logfile = io.open(config.filename, "a+");
bc865568ff02 mod_log_json: Add UDP support
Kim Alvefur <zash@zash.se>
parents: 3734
diff changeset
13 logfile:setvbuf("no");
bc865568ff02 mod_log_json: Add UDP support
Kim Alvefur <zash@zash.se>
parents: 3734
diff changeset
14 function send(payload)
bc865568ff02 mod_log_json: Add UDP support
Kim Alvefur <zash@zash.se>
parents: 3734
diff changeset
15 logfile:write(payload, "\n");
bc865568ff02 mod_log_json: Add UDP support
Kim Alvefur <zash@zash.se>
parents: 3734
diff changeset
16 end
bc865568ff02 mod_log_json: Add UDP support
Kim Alvefur <zash@zash.se>
parents: 3734
diff changeset
17 elseif config.udp_host and config.udp_port then
bc865568ff02 mod_log_json: Add UDP support
Kim Alvefur <zash@zash.se>
parents: 3734
diff changeset
18 local conn = socket.udp();
3748
27abf3b6819a mod_log_json: Use correct method to specify remote endpoint
Kim Alvefur <zash@zash.se>
parents: 3747
diff changeset
19 conn:setpeername(config.udp_host, config.udp_port);
3746
bc865568ff02 mod_log_json: Add UDP support
Kim Alvefur <zash@zash.se>
parents: 3734
diff changeset
20 function send(payload)
bc865568ff02 mod_log_json: Add UDP support
Kim Alvefur <zash@zash.se>
parents: 3734
diff changeset
21 conn:send(payload);
bc865568ff02 mod_log_json: Add UDP support
Kim Alvefur <zash@zash.se>
parents: 3734
diff changeset
22 end
bc865568ff02 mod_log_json: Add UDP support
Kim Alvefur <zash@zash.se>
parents: 3734
diff changeset
23 end
3732
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 return function (source, level, message, ...)
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 local args = pack(...);
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 for i = 1, args.n do
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 if args[i] == nil then
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 args[i] = json.null;
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 elseif type(args[i]) ~= "string" or type(args[i]) ~= "number" then
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 args[i] = tostring(args[i]);
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 end
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 end
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33 args.n = nil;
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 local payload = {
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35 datetime = datetime(),
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 source = source,
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 level = level,
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38 message = message,
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 args = array(args);
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40 };
3746
bc865568ff02 mod_log_json: Add UDP support
Kim Alvefur <zash@zash.se>
parents: 3734
diff changeset
41 send(json.encode(payload));
3732
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42 end
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 end
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44
3758
900ea02ab00b mod_log_json: Deregister log sink on unload
Kim Alvefur <zash@zash.se>
parents: 3748
diff changeset
45 function module.unload()
900ea02ab00b mod_log_json: Deregister log sink on unload
Kim Alvefur <zash@zash.se>
parents: 3748
diff changeset
46 -- deregister
900ea02ab00b mod_log_json: Deregister log sink on unload
Kim Alvefur <zash@zash.se>
parents: 3748
diff changeset
47 require"core.loggingmanager".register_sink_type("json", nil);
900ea02ab00b mod_log_json: Deregister log sink on unload
Kim Alvefur <zash@zash.se>
parents: 3748
diff changeset
48 end
900ea02ab00b mod_log_json: Deregister log sink on unload
Kim Alvefur <zash@zash.se>
parents: 3748
diff changeset
49
3732
21cfbdaac767 mod_log_json: JSON log sink
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50 require"core.loggingmanager".register_sink_type("json", sink_maker);