41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
from alerta.models.alert import Alert
|
|
from alerta.webhooks import WebhookBase
|
|
|
|
|
|
class SentryWebhook(WebhookBase):
|
|
|
|
def incoming(self, query_string, payload):
|
|
|
|
# For Sentry v9
|
|
# Defaults to value before Sentry v9
|
|
if 'request' in payload.get('event'):
|
|
key = 'request'
|
|
else:
|
|
key = 'sentry.interfaces.Http'
|
|
|
|
if payload.get('event')[key]['env']['ENV'] == 'prod':
|
|
environment = 'Production'
|
|
else:
|
|
environment = 'Development'
|
|
|
|
if payload['level'] == 'error':
|
|
severity = 'critical'
|
|
else:
|
|
severity = 'ok'
|
|
|
|
return Alert(
|
|
resource=payload['culprit'],
|
|
event=payload['event']['event_id'],
|
|
environment=environment,
|
|
severity=severity,
|
|
service=[payload['project']],
|
|
group='Application',
|
|
value=payload['level'],
|
|
text='{} {}'.format(payload['message'], payload['url']),
|
|
tags=['{}={}'.format(k, v) for k, v in payload['event']['tags']],
|
|
attributes={'modules': ['{}=={}'.format(
|
|
k, v) for k, v in payload['event']['modules'].items()]},
|
|
origin='sentry.io',
|
|
raw_data=str(payload)
|
|
)
|