-
-
Save n00rm/32f1334b1dd2efc40122fee36551ef17 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3 | |
# Notify via Discord | |
import os | |
import requests | |
import sys | |
USERNAME = "check_mk" | |
AVATARURL = "https://checkmk.com/favicon-96x96.png" | |
COLORS = { | |
"CRITICAL": "15597568", | |
"DOWN": "15597568", | |
"WARNING": "16768256", | |
"OK": "52224", | |
"UP": "52224", | |
"UNKNOWN": "13421772", | |
"UNREACHABLE": "13421772", | |
} | |
def discord_msg(context): | |
"""Build the message for discord""" | |
facts = [] | |
if context.get('WHAT', None) == "SERVICE": | |
state = context["SERVICESTATE"] | |
color = COLORS.get(state) | |
subtitle = "Service Notification" | |
facts.append({"name": "Service:", "value": context["SERVICEDESC"]}) | |
output = context["SERVICEOUTPUT"] if context["SERVICEOUTPUT"] else "" | |
else: | |
state = context["HOSTSTATE"] | |
color = COLORS.get(state) | |
subtitle = "Host Notification" | |
output = context["HOSTOUTPUT"] if context["HOSTOUTPUT"] else "" | |
facts.extend([ | |
{ | |
"name": "Host:", | |
"value": context["HOSTNAME"] | |
}, | |
{ | |
"name": "State:", | |
"value": state | |
} | |
]) | |
return { | |
"username": USERNAME, | |
"avatar_url": AVATARURL, | |
"embeds": [ | |
{ | |
"title": subtitle, | |
"color": color, | |
"fields": facts, | |
"footer": { | |
"text": output | |
} | |
} | |
] | |
} | |
def collect_context(): | |
return { | |
var[7:]: value | |
for (var, value) in os.environ.items() | |
if var.startswith("NOTIFY_") | |
} | |
def post_request(message_constructor, success_code=204): | |
context = collect_context() | |
url = context.get("PARAMETERS") | |
r = requests.post(url=url, json=message_constructor(context)) | |
if r.status_code == success_code: | |
sys.exit(0) | |
else: | |
sys.stderr.write( | |
"Failed to send notification. Status: %i, Response: %s\n" % (r.status_code, r.text)) | |
sys.exit(2) | |
if __name__ == "__main__": | |
post_request(discord_msg) |
Would it be possible to make a switch so notifications become more condensed ?
Meaning the discord message becomes more lean and displays as following:
Service Notification: (carriage return here) Service: service name (carriage return here) Host: Hostname (carriage return here) State: State_here (carriage return here) Detail: detail msg here (carriage return here)
Why : when you have a large amount of hosts it is preferable to see the messages in a more condensed way (saves scrolling).
Hope to hear back from you :)
Also one thing i did change in the script was the value of AVATARURL.
For some reason it never took hold, and got the default 'Wumpus' avatar witth the notifications.
After some digging i changed it to : "https://checkmk.com/android-chrome-192x192.png" - which works and shows the logo of CMK as avatar.
Inspired by your plugin I also extended it a lot for my homelab an pushed all changes to a dedicated repo in case someone else wants to use it: https://github.com/fschlag/cmk_discord
Inspired by your plugin I also extended it a lot for my homelab an pushed all changes to a dedicated repo in case someone else wants to use it: https://github.com/fschlag/cmk_discord
Thanks @fschlag! Looks good and future development should and will be done in your project.
Doh!