in redash/destinations/slack.py [0:0]
def notify(self, alert, query, user, new_state, app, host, options):
# Documentation: https://api.slack.com/docs/attachments
fields = [
{
"title": "Query",
"value": "{host}/queries/{query_id}".format(
host=host, query_id=query.id
),
"short": True,
},
{
"title": "Alert",
"value": "{host}/alerts/{alert_id}".format(
host=host, alert_id=alert.id
),
"short": True,
},
]
if alert.custom_body:
fields.append({"title": "Description", "value": alert.custom_body})
if new_state == "triggered":
if alert.custom_subject:
text = alert.custom_subject
else:
text = alert.name + " just triggered"
color = "#c0392b"
else:
text = alert.name + " went back to normal"
color = "#27ae60"
payload = {"attachments": [{"text": text, "color": color, "fields": fields}]}
if options.get("username"):
payload["username"] = options.get("username")
if options.get("icon_emoji"):
payload["icon_emoji"] = options.get("icon_emoji")
if options.get("icon_url"):
payload["icon_url"] = options.get("icon_url")
if options.get("channel"):
payload["channel"] = options.get("channel")
try:
resp = requests.post(
options.get("url"), data=json_dumps(payload), timeout=5.0
)
logging.warning(resp.text)
if resp.status_code != 200:
logging.error(
"Slack send ERROR. status_code => {status}".format(
status=resp.status_code
)
)
except Exception:
logging.exception("Slack send ERROR.")