-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkibitzr_sentry.py
62 lines (49 loc) · 1.65 KB
/
kibitzr_sentry.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
"""
Send errors from Kibitzr checks to Sentry.
To setup this extension add following configuration to kibitzr-creds.yml:
```
sentry:
dsn: "https://123:[email protected]/789"
level: error
```
Note quotes aroung URL, they are required to disambiguate
YAML parser from parsing collon symbol as key-value mapping.
"""
import logging
from raven.handlers.logging import SentryHandler
from raven.conf import setup_logging
from kibitzr.conf import settings
logger = logging.getLogger(__name__)
LOG_LEVEL_CODES = {
'CRITICAL': logging.CRITICAL,
'ERROR': logging.ERROR,
'WARN': logging.WARNING,
'WARNING': logging.WARNING,
'INFO': logging.INFO,
'DEBUG': logging.DEBUG,
'NOTSET': logging.NOTSET,
}
def setup_sentry_handler(sentry_dsn, level=None):
"""
Setup Sentry logging handler.
https://docs.sentry.io/clients/python/integrations/logging/
"""
handler = SentryHandler(sentry_dsn)
handler.setLevel(level or logging.ERROR)
setup_logging(handler)
def on_before_start(*_args, **_kwargs):
"""Function to be called from Kibitzr using entrypoints"""
sentry_dsn = settings().creds.get('sentry', {}).get('dsn')
if sentry_dsn:
level_name = settings().creds['sentry'].get('level', '').upper()
level = None
if level_name:
level = LOG_LEVEL_CODES.get(level_name)
if level is None:
logger.warning(
"Unknown sentry.level: %s. "
"Choose one of the existing levels: %s",
level_name,
', '.join(sorted(LOG_LEVEL_CODES)),
)
setup_sentry_handler(sentry_dsn, level=level)