alerta-contrib/plugins/msteams/alerta_msteams.py
Anton d8a49cd6ed Support for sending notifications to MS Teams (#180)
* Initial version of MS Teams plugin

* Removed old debug

* Readme and minor changes

* Changed name of web hook url.

* Renamed webhook parameter
2018-04-02 12:34:49 +02:00

86 lines
2.8 KiB
Python

import json
import logging
import os
import pymsteams
try:
from alerta.plugins import app # alerta >= 5.0
except ImportError:
from alerta.app import app # alerta < 5.0
from alerta.plugins import PluginBase
LOG = logging.getLogger('alerta.plugins.msteams')
MS_TEAMS_WEBHOOK_URL = os.environ.get('MS_TEAMS_WEBHOOK_URL') or app.config.get('MS_TEAMS_WEBHOOK_URL')
MS_TEAMS_SUMMARY_FMT = os.environ.get('MS_TEAMS_SUMMARY_FMT') or app.config.get('MS_TEAMS_SUMMARY_FMT', None) # Message summary format
DASHBOARD_URL = os.environ.get('DASHBOARD_URL') or app.config.get('DASHBOARD_URL', '')
try:
from jinja2 import Template
except Exception as e:
LOG.error('MS Teams: ERROR - Jinja template error: %s, template functionality will be unavailable', e)
class SendConnectorCardMessage(PluginBase):
def pre_receive(self, alert):
return alert
def post_receive(self, alert):
if alert.repeat:
return
if MS_TEAMS_SUMMARY_FMT:
try:
template = Template(MS_TEAMS_SUMMARY_FMT)
except Exception as e:
LOG.error('MS Teams: ERROR - Template init failed: %s', e)
return
try:
template_vars = {
'alert': alert,
'config': app.config
}
summary = template.render(**template_vars)
except Exception as e:
LOG.error('MS Teams: ERROR - Template render failed: %s', e)
return
else:
summary = ('<b>[{status}] {environment} {service} {severity} - <i>{event} on {resource}</i></b>').format(
status=alert.status.capitalize(),
environment=alert.environment.upper(),
service=','.join(alert.service),
severity=alert.severity.capitalize(),
event=alert.event,
resource=alert.resource
)
url = "%s/#/alert/%s" % (DASHBOARD_URL, alert.id)
if alert.severity == 'critical':
color = "D8122A"
elif alert.severity == 'major':
color = "EA680F"
elif alert.severity == 'minor':
color = "FFBE1E"
elif alert.severity == 'warning':
color = "BA2222"
else:
color = "00AA5A"
LOG.debug('MS Teams payload: %s', summary)
try:
msTeamsMessage = pymsteams.connectorcard(MS_TEAMS_WEBHOOK_URL)
msTeamsMessage.title(summary)
msTeamsMessage.text(alert.text)
msTeamsMessage.addLinkButton("Open in Alerta", url)
msTeamsMessage.color(color)
msTeamsMessage.send()
except Exception as e:
raise RuntimeError("MS Teams: ERROR - %s", e)
def status_change(self, alert, status, text):
return