Skip to content
Snippets Groups Projects
telegram-bot.py.j2 2.17 KiB
Newer Older
#!/usr/bin/env python3
import os
import sys
from dateutil import parser
import telegram, json, logging
from flask import Flask, request

listenPort = 29119
listenIP = '::1'
botToken = '{{ prometheus_alertmanager.telegrambot }}'

app = Flask(__name__)
app.secret_key = os.urandom(128)

bot = telegram.Bot(token=botToken)

@app.route('/<chatID>/alert', methods = ['POST'])
def postAlertmanager(chatID):

	try:
		content = json.loads(request.get_data())
		for alert in content['alerts']:
			message = "Status: "+alert['status']+"\n"
			if 'name' in alert['labels']:
				message += "Instance: "+alert['labels'].get('instance', 'unknown')+"("+alert['labels']['name']+")\n"
				message += "Instance: "+alert['labels'].get('instance', 'unknown')+"\n"
			if 'info' in alert['annotations']:
				message += "Info: "+alert['annotations']['info']+"\n"
			if 'summary' in alert['annotations']:
				message += "Summary: "+alert['annotations']['summary']+"\n"
			if 'description' in alert['annotations']:
				message += "Description: "+alert['annotations']['description']+"\n"
			if alert['status'] == "resolved":
				correctDate = parser.parse(alert['endsAt']).strftime('%Y-%m-%d %H:%M:%S')
				message += "Resolved: "+correctDate+"\n"
			elif alert['status'] == "firing":
				correctDate = parser.parse(alert['startsAt']).strftime('%Y-%m-%d %H:%M:%S')
				message += "Started: "+correctDate+"\n"
nd's avatar
nd committed
			message += "labels: \n"
			message = telegram.utils.helpers.escape_markdown(message, version=2) + "```\n"
			labels = ""
			for l in alert['labels']:
nd's avatar
nd committed
				labels += l + " : "+alert['labels'][l] + "\n"
			message += telegram.utils.helpers.escape_markdown(labels, version=2) + "```"
			bot.sendMessage(chat_id=chatID, text=message, parse_mode=telegram.ParseMode.MARKDOWN_V2)
nd's avatar
nd committed
		return "Alert OK", 200
	except Exception as error:	   
		bot.sendMessage(chat_id=chatID, text="Error to read json: "+str(error))
		app.logger.info("\t%s",error)
		return "Alert fail", 200

if __name__ == '__main__':
	if len(sys.argv) == 1:
		logging.basicConfig(level=logging.INFO)
		app.run(host=listenIP, port=listenPort)
	else:
		from gevent.pywsgi import WSGIServer
		http_server = WSGIServer((listenIP, listenPort), app)
		http_server.serve_forever()