58 lines
2 KiB
Django/Jinja
Executable file
58 lines
2 KiB
Django/Jinja
Executable file
#!/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"
|
|
message += "labels: \n```\n"
|
|
for l in alert['labels']:
|
|
message += l + " : "+alert['labels'][l] + "\n"
|
|
message += "```"
|
|
bot.sendMessage(chat_id=chatID, text=telegram.utils.helpers.escape_markdown(message, version=2), parse_mode=telegram.ParseMode.MARKDOWN_V2)
|
|
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()
|