Notify msteams throws error (import requests, no named module) - but it´s allready installed

of course…

#!/usr/bin/env python3
# MS-Teams
# Author : ricardoftribeiro@gmail.com @krfribeiro

import os, sys
import requests
import json
import re

context = dict([ (var[7:], value)
                  for (var, value) in os.environ.items()
                  if var.startswith("NOTIFY_")])

map_states = {
        "OK":           ("ok.png","2eb886" ),
        "WARNING":      ("warning.png","daa038" ),
        "CRITICAL":     ("critical.png","a30200" ),
        "UNKNOWN":      ("unknown.png","cccccc" ),
        "DOWN":         ("critical.png","a30200" ),
        "UP":           ("ok.png","2eb886" ),
}

regexp = re.compile(r'CRITICAL|WARNING|UNKNOWN|OK|DOWN|UP')

if 'PARAMETER_WEBHOOK' in context:
        msteams_path = context["PARAMETER_WEBHOOK"]
else:
        sys.stderr.write("Webhook URL not set\n")
        sys.exit(2)

if 'PARAMETER_URL_PREFIX' in context:
    baseURL=re.sub('/$','',context['PARAMETER_URL_PREFIX'])
else:
    baseURL="https://" + context['MONITORING_HOST'] + "/" + context['OMD_SITE']

icons_path = "https://github.com/krfribeiro/check_mk/raw/master/local/share/check_mk/web/images/"

headers = {"Content-type": "application/json", "Accept": "text/plain"}
message = context['NOTIFICATIONTYPE']  + ' | Hostname : ' + context['HOSTNAME'] + " "
authorText = ""

if context['WHAT'] == 'SERVICE':
    message += "| Service: " + context['SERVICEDESC']
    context['DETAILS_OUTPUT'] = context['SERVICEOUTPUT']
    infoURL = baseURL + context['SERVICEURL']
    if context['NOTIFICATIONAUTHOR'] != '':
        authorText += "Triggered by **" + context['NOTIFICATIONAUTHOR'] + "** - *" + context['NOTIFICATIONCOMMEN>    if context['NOTIFICATIONTYPE'] == 'DOWNTIMESTART':
        icon = "downtime.png"
        colour = "439FE0"
        message += " - Downtime started"
    elif context['NOTIFICATIONTYPE'] == 'DOWNTIMEEND':
        icon = "downtime.png"
        colour = "33cccc"
        message += " - Downtime ended"
    elif context['NOTIFICATIONTYPE'] == 'ACKNOWLEDGEMENT':
        icon = "acknowledge.png"
        colour = "8f006b"
        message += " | " + context['SERVICEACKCOMMENT']
    elif regexp.search(context['SERVICESTATE']):
        icon, colour = map_states.get(context['SERVICESTATE'])
        message += " is " + context['SERVICESTATE']
    else:
        icon = "cmk.png"
else:
    message += "is " + context['HOSTSTATE']
    context['DETAILS_OUTPUT'] = context['HOSTOUTPUT']
    infoURL = baseURL + context['HOSTURL']
    if context['NOTIFICATIONAUTHOR'] != '':
        authorText += "Triggered by **" + context['NOTIFICATIONAUTHOR'] + "** - *" + context['NOTIFICATIONCOMMEN>    if context['NOTIFICATIONTYPE'] == 'DOWNTIMESTART':
        icon = "downtime.png"
        colour = "439FE0"
        message += " - Downtime started"
    elif context['NOTIFICATIONTYPE'] == 'DOWNTIMEEND':
        icon = "downtime.png"
        colour = "33cccc"
        message += " - Downtime ended"
    elif context['NOTIFICATIONTYPE'] == 'ACKNOWLEDGEMENT':
        icon = "acknowledge.png"
        colour = "8f006b"
        message += " | " + context['HOSTACKCOMMENT']
    elif regexp.search(context['HOSTSTATE']):
        icon, colour = map_states.get(context['HOSTSTATE'])
    else:
        icon = "cmk.png"

sections = {
        "activitySubtitle": authorText,
        "activityImage": icons_path + icon,
        "facts": [{
            "name": "Detail",
            "value": context['DETAILS_OUTPUT']
        }, {
            "name": "Affected groups",
            "value": context['HOSTGROUPNAMES']
        }],
        "markdown": "True"
    }


data = {
    "@type": "MessageCard",
    "@context": "http://schema.org/extensions",
        "title": message,
    "themeColor": colour,
    "summary": message,
    "sections": [sections],
    "potentialAction": [{
        "@type": "OpenUri",
        "name": "Alarm Details",
        "targets": [{
            "os": "default",
            "uri": infoURL
        }]
    }]
}

conn = requests.post(msteams_path, data = json.dumps(data))

if conn.status_code == 200:
        sys.exit(0)
else:
        sys.stderr.write(conn.text)
        sys.exit(2)
1 Like