Skip to content
Snippets Groups Projects
telegram-bot.py.j2 2.14 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/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']['instance']+"("+alert['labels']['name']+")\n"
    			else:
    				message += "Instance: "+alert['labels']['instance']+"\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()