Software /
code /
prosody-modules
Annotate
mod_sentry/mod_sentry.lua @ 4515:2e33eeafe962
mod_muc_markers: Prevent any markers from reaching the archive, even if untracked
Original intention was to leave alone things that this module isn't
handling. However markers in archives are just problematic without
more advanced logic about what is markable and what is not. It also
requires a more advanced query in mod_muc_rai to determine the latest
markable message instead of the latest archived message.
I'd rather keep the "is archivable" and "is markable" definition the
same for simplicity. I don't want to introduce yet another set of rules
for no reason.
No markers in MAM.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Mon, 22 Mar 2021 15:55:02 +0000 |
parent | 4290:2c73544e33ea |
child | 4995:cb3de818ff55 |
rev | line source |
---|---|
4283
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 module:set_global(); |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 local sentry_lib = module:require "sentry"; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 local hostname; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 local have_pposix, pposix = pcall(require, "util.pposix"); |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 if have_pposix and pposix.uname then |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 hostname = pposix.uname().nodename; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 end |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 local loggingmanager = require "core.loggingmanager"; |
4290
2c73544e33ea
mod_sentry: Automatically attach exceptions for errors used in log parameters
Matthew Wild <mwild1@gmail.com>
parents:
4283
diff
changeset
|
12 local errors = require "util.error"; |
4283
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 local format = require "util.format".format; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 local default_config = assert(module:get_option("sentry"), "Please provide a 'sentry' configuration option"); |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 default_config.server_name = default_config.server_name or hostname or "prosody"; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 local sentry = assert(sentry_lib.new(default_config)); |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 local log_filters = { |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 source = function (filter_source, name) |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 local source = name:match(":(.+)$") or name; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 if filter_source == source then |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 return true; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 end |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 end; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 message_pattern = function (pattern, _, _, message) |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 return not not message:match(pattern); |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 end; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 }; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 local function sentry_error_handler(e) |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 module:log("error", "Failed to submit event to sentry: %s", e); |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 end |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 local function sentry_log_sink_maker(sink_config) |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 local filters = sink_config.ignore or {}; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 local n_filters = #filters; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 local submitting; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 return function (name, level, message, ...) |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 -- Ignore any log messages that occur during sentry submission |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 -- to avoid loops |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 if submitting then return; end |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 for i = 1, n_filters do |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 local filter = filters[i]; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 local matched; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 for filter_name, filter_value in pairs(filter) do |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 local f = log_filters[filter_name]; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 if f and f(filter_value, name, level, message) then |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 matched = true; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 else |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 matched = nil; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 break; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 end |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 end |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 if matched then |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 return; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 end |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 end |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 if level == "warn" then |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 level = "warning"; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 end |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 |
4290
2c73544e33ea
mod_sentry: Automatically attach exceptions for errors used in log parameters
Matthew Wild <mwild1@gmail.com>
parents:
4283
diff
changeset
|
65 local event = sentry:event(level, name):message(format(message, ...)); |
2c73544e33ea
mod_sentry: Automatically attach exceptions for errors used in log parameters
Matthew Wild <mwild1@gmail.com>
parents:
4283
diff
changeset
|
66 |
2c73544e33ea
mod_sentry: Automatically attach exceptions for errors used in log parameters
Matthew Wild <mwild1@gmail.com>
parents:
4283
diff
changeset
|
67 local params = { ... }; |
2c73544e33ea
mod_sentry: Automatically attach exceptions for errors used in log parameters
Matthew Wild <mwild1@gmail.com>
parents:
4283
diff
changeset
|
68 for i = 1, select("#", ...) do |
2c73544e33ea
mod_sentry: Automatically attach exceptions for errors used in log parameters
Matthew Wild <mwild1@gmail.com>
parents:
4283
diff
changeset
|
69 if errors.is_error(params[i]) then |
2c73544e33ea
mod_sentry: Automatically attach exceptions for errors used in log parameters
Matthew Wild <mwild1@gmail.com>
parents:
4283
diff
changeset
|
70 event:add_exception(params[i]); |
2c73544e33ea
mod_sentry: Automatically attach exceptions for errors used in log parameters
Matthew Wild <mwild1@gmail.com>
parents:
4283
diff
changeset
|
71 end |
2c73544e33ea
mod_sentry: Automatically attach exceptions for errors used in log parameters
Matthew Wild <mwild1@gmail.com>
parents:
4283
diff
changeset
|
72 end |
2c73544e33ea
mod_sentry: Automatically attach exceptions for errors used in log parameters
Matthew Wild <mwild1@gmail.com>
parents:
4283
diff
changeset
|
73 |
4283
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 submitting = true; |
4290
2c73544e33ea
mod_sentry: Automatically attach exceptions for errors used in log parameters
Matthew Wild <mwild1@gmail.com>
parents:
4283
diff
changeset
|
75 event:send():catch(sentry_error_handler); |
4283
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
76 submitting = false; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
77 end; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
78 end |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
79 |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 loggingmanager.register_sink_type("sentry", sentry_log_sink_maker); |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
81 |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
82 function new(conf) --luacheck: ignore 131/new |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
83 conf = conf or {}; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
84 for k, v in pairs(default_config) do |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
85 if conf[k] == nil then |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
86 conf[k] = v; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
87 end |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
88 end |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
89 return sentry_lib.new(conf); |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
90 end |