matrix-alerta/alerta_matrix.py

92 lines
2.5 KiB
Python

import logging
import os
import requests
import urllib
import json
from alerta.plugins import app
from alerta.plugins import PluginBase
LOG = logging.getLogger("alerta.plugins.matrix")
MATRIX_HOMESERVER_URL = [
os.environ.get("MATRIX_HOMESERVER") or app.config["MATRIX_HOMESERVER"],
"/_matrix/client/r0/rooms/",
urllib.parse.quote(os.environ.get("MATRIX_ROOM") or app.config["MATRIX_ROOM"], ":"),
"/send/m.room.message",
]
MATRIX_ACCESS_TOKEN = (
os.environ.get("MATRIX_ACCESS_TOKEN") or app.config["MATRIX_ACCESS_TOKEN"]
)
DASHBOARD_URL = os.environ.get("DASHBOARD_URL") or app.config.get("DASHBOARD_URL", "")
PRIORITY = {
"critical": "🔴 ",
"warning": "⚠️ ",
"ok": "",
"cleared": "",
"normal": "",
}
class PushMessage(PluginBase):
def pre_receive(self, alert):
return alert
def post_receive(self, alert):
if alert.repeat:
return
priority = PRIORITY.get(alert.severity, "")
body = "{}{}: {} alert for {} \n{} - {} - {} \n{} \nDate: {}".format(
priority,
alert.environment,
alert.severity.capitalize(),
",".join(alert.service),
alert.resource,
alert.event,
alert.value,
alert.text,
alert.create_time,
)
formatted_body = "{}<strong>{}: {} alert for {} </br>{} - {} - {} </strong></br>{} </br><strong>Date: </strong> {} | <a rel='noopener' href='{}/#/alert/{}'>View alert</a>".format(
priority,
alert.environment,
alert.severity.capitalize(),
",".join(alert.service),
alert.resource,
alert.event,
alert.value,
alert.text,
alert.create_time,
DASHBOARD_URL,
alert.id,
)
payload = {
"msgtype": "m.text",
"format": "org.matrix.custom.html",
"body": body,
"formatted_body": formatted_body,
}
LOG.debug("Matrix: %s", payload)
try:
r = requests.post(
"".join(MATRIX_HOMESERVER_URL),
headers={"Authorization": "Bearer " + MATRIX_ACCESS_TOKEN},
data=json.dumps(payload).encode("utf-8"),
timeout=2,
)
except Exception as e:
raise RuntimeError("Matrix: ERROR - %s" % e)
LOG.debug("Matrix: %s - %s", r.status_code, r.text)
def status_change(self, alert, status, text):
return