Mercurial > prosody-modules
annotate mod_sentry/mod_sentry.lua @ 5416:2393dbae51ed
mod_http_oauth2: Add option for specifying TTL of registered clients
Meant to simplify configuration, since TTL vs ignoring expiration is
expected to be the main thing one would want to configure.
Unsure what the implications of having unlimited lifetime of clients
are, given no way to revoke them currently, short of rotating the
signing secret.
On one hand, it would be annoying to have the client expire.
On the other hand, it is trivial to re-register it.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 04 May 2023 18:41:33 +0200 |
parents | cb3de818ff55 |
children |
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 |
4995
cb3de818ff55
mod_sentry: Log warning when server returns unexpected response
Matthew Wild <mwild1@gmail.com>
parents:
4290
diff
changeset
|
32 local serialize = require "util.serialization".serialize; |
cb3de818ff55
mod_sentry: Log warning when server returns unexpected response
Matthew Wild <mwild1@gmail.com>
parents:
4290
diff
changeset
|
33 |
4283
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 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
|
35 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
|
36 end |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 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
|
39 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
|
40 local n_filters = #filters; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 local submitting; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 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
|
44 -- 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
|
45 -- to avoid loops |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 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
|
47 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
|
48 local filter = filters[i]; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 local matched; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 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
|
51 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
|
52 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
|
53 matched = true; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 else |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 matched = nil; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 break; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 end |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 end |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 if matched then |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 return; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 end |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 end |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 if level == "warn" then |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 level = "warning"; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
65 end |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 |
4290
2c73544e33ea
mod_sentry: Automatically attach exceptions for errors used in log parameters
Matthew Wild <mwild1@gmail.com>
parents:
4283
diff
changeset
|
67 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
|
68 |
2c73544e33ea
mod_sentry: Automatically attach exceptions for errors used in log parameters
Matthew Wild <mwild1@gmail.com>
parents:
4283
diff
changeset
|
69 local params = { ... }; |
2c73544e33ea
mod_sentry: Automatically attach exceptions for errors used in log parameters
Matthew Wild <mwild1@gmail.com>
parents:
4283
diff
changeset
|
70 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
|
71 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
|
72 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
|
73 end |
2c73544e33ea
mod_sentry: Automatically attach exceptions for errors used in log parameters
Matthew Wild <mwild1@gmail.com>
parents:
4283
diff
changeset
|
74 end |
2c73544e33ea
mod_sentry: Automatically attach exceptions for errors used in log parameters
Matthew Wild <mwild1@gmail.com>
parents:
4283
diff
changeset
|
75 |
4283
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
76 submitting = true; |
4290
2c73544e33ea
mod_sentry: Automatically attach exceptions for errors used in log parameters
Matthew Wild <mwild1@gmail.com>
parents:
4283
diff
changeset
|
77 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
|
78 submitting = false; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
79 end; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 end |
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 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
|
83 |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
84 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
|
85 conf = conf or {}; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
86 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
|
87 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
|
88 conf[k] = v; |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
89 end |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
90 end |
2ae71126e379
mod_sentry: New module to forward errors to a Sentry server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
91 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
|
92 end |