mirror of
https://github.com/hastagAB/Awesome-Python-Scripts.git
synced 2025-02-17 13:58:07 +00:00
Added ZabbixAPI program to get events happened in last 24 hours
This commit is contained in:
parent
2c1cfb62f5
commit
ddb5f4822d
272
zabbix_api/dailyAlertMail.py
Normal file
272
zabbix_api/dailyAlertMail.py
Normal file
|
@ -0,0 +1,272 @@
|
||||||
|
|
||||||
|
import requests, json, sys
|
||||||
|
import time
|
||||||
|
from datetime import datetime, date, timedelta
|
||||||
|
import pprint
|
||||||
|
import smtplib
|
||||||
|
from email.mime.multipart import MIMEMultipart
|
||||||
|
from email.mime.text import MIMEText
|
||||||
|
import os, operator
|
||||||
|
from jinja2 import Environment, FileSystemLoader
|
||||||
|
|
||||||
|
#####################################################################
|
||||||
|
### Properties and Variables
|
||||||
|
#####################################################################
|
||||||
|
|
||||||
|
PATH = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
TEMPLATE_ENVIRONMENT = Environment(
|
||||||
|
autoescape=False,
|
||||||
|
loader=FileSystemLoader(os.path.join(PATH, 'templates')),
|
||||||
|
trim_blocks=False)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
url = sys.argv[1]
|
||||||
|
headers = {'content-type': 'application/json'}
|
||||||
|
|
||||||
|
pp = pprint.PrettyPrinter(indent=4)
|
||||||
|
hostIDs = []
|
||||||
|
hostDict = {}
|
||||||
|
zabbixHostWiseCount = {}
|
||||||
|
zabbixAlertWiseCount = {}
|
||||||
|
context = {}
|
||||||
|
|
||||||
|
totalCount = 0
|
||||||
|
|
||||||
|
logFile = "/tmp/dailyAlertMail.log"
|
||||||
|
logFH = open(logFile, 'a')
|
||||||
|
|
||||||
|
mailFrom = "no-reply@localdomain.com"
|
||||||
|
|
||||||
|
mailToStr = "me@example.com"
|
||||||
|
mailToList = ["me@example.com"]
|
||||||
|
|
||||||
|
###################################################################
|
||||||
|
### Functions
|
||||||
|
###################################################################
|
||||||
|
|
||||||
|
def render_template(template_filename, context):
|
||||||
|
|
||||||
|
return TEMPLATE_ENVIRONMENT.get_template(template_filename).render(context)
|
||||||
|
|
||||||
|
def getAuthToken():
|
||||||
|
|
||||||
|
authPayload = {
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"method": "user.login",
|
||||||
|
"params": {
|
||||||
|
"user": "admin",
|
||||||
|
"password": "zabbix"
|
||||||
|
},
|
||||||
|
"id": 1,
|
||||||
|
"auth": None
|
||||||
|
}
|
||||||
|
|
||||||
|
authToken = requests.post(url, data = json.dumps(authPayload), headers=headers).json()
|
||||||
|
if authToken.has_key('error'):
|
||||||
|
return [False, authToken['error']['data']]
|
||||||
|
else:
|
||||||
|
return [True, authToken['result']]
|
||||||
|
|
||||||
|
def getAllHostList():
|
||||||
|
|
||||||
|
authResult = getAuthToken()
|
||||||
|
|
||||||
|
if not authResult[0]:
|
||||||
|
# Authentication failed. Retry...
|
||||||
|
authResult = getAuthToken()
|
||||||
|
|
||||||
|
if authResult[0]:
|
||||||
|
gethosts = {
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"method": "host.get",
|
||||||
|
"params": {
|
||||||
|
"output": "extend"
|
||||||
|
},
|
||||||
|
"auth": authResult[1],
|
||||||
|
"id": 1
|
||||||
|
}
|
||||||
|
|
||||||
|
hostlist = requests.post(url, data=json.dumps(gethosts), headers=headers).json()
|
||||||
|
|
||||||
|
hostDict = {}
|
||||||
|
hostIDs = []
|
||||||
|
|
||||||
|
for hostObj in hostlist['result']:
|
||||||
|
|
||||||
|
hostDict[hostObj['hostid']] = hostObj['host']
|
||||||
|
hostIDs.append(hostObj['hostid'])
|
||||||
|
|
||||||
|
return hostIDs, hostDict
|
||||||
|
|
||||||
|
else:
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
def getTime():
|
||||||
|
|
||||||
|
yesterday = date.today() - timedelta(1)
|
||||||
|
reqTime = time.mktime(datetime.strptime(yesterday.strftime('%d/%m/%Y'), "%d/%m/%Y").timetuple())
|
||||||
|
return reqTime
|
||||||
|
|
||||||
|
|
||||||
|
#######################################################################
|
||||||
|
### Sending mail
|
||||||
|
#######################################################################
|
||||||
|
|
||||||
|
hostIDs, hostDict = getAllHostList()
|
||||||
|
reqTime = getTime()
|
||||||
|
|
||||||
|
pp.pprint(hostDict)
|
||||||
|
for hostid in hostIDs:
|
||||||
|
|
||||||
|
#zabbixAlerts[hostDict[hostid]] = {}
|
||||||
|
#zabbixAlerts[hostDict[hostid]]['alertWiseCount'] = {}
|
||||||
|
|
||||||
|
#zabbixHostWiseCount[hostDict[hostid]] = {}
|
||||||
|
print "working on host = " + hostDict[hostid]
|
||||||
|
zabbixAlertWiseCount[hostDict[hostid]] = {}
|
||||||
|
#zabbixAlertWiseHost[hostDict[hostid]]['alertWiseCount'] = {}
|
||||||
|
|
||||||
|
|
||||||
|
#hostWiseAlerts[hostDict[hostid]] = {}
|
||||||
|
|
||||||
|
### Get Alerts Details
|
||||||
|
|
||||||
|
authResult = getAuthToken()
|
||||||
|
|
||||||
|
if not authResult[0]:
|
||||||
|
# Authentication failed. Retry...
|
||||||
|
authResult = getAuthToken()
|
||||||
|
|
||||||
|
if authResult[0]:
|
||||||
|
|
||||||
|
alertPayload = {
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"method": "alert.get",
|
||||||
|
"params": {
|
||||||
|
"output": "extend",
|
||||||
|
"time_from": reqTime,
|
||||||
|
"hostids": hostid
|
||||||
|
},
|
||||||
|
"auth": authResult[1],
|
||||||
|
"id": 1
|
||||||
|
}
|
||||||
|
|
||||||
|
alertList = requests.post(url, data=json.dumps(alertPayload), headers=headers).json()
|
||||||
|
|
||||||
|
### Get Events Details
|
||||||
|
|
||||||
|
eventPayload = {
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"method": "event.get",
|
||||||
|
"params": {
|
||||||
|
"output": "extend",
|
||||||
|
"time_from": reqTime,
|
||||||
|
"hostids": hostid
|
||||||
|
},
|
||||||
|
"auth": authResult[1],
|
||||||
|
"id": 1
|
||||||
|
}
|
||||||
|
|
||||||
|
eventList = requests.post(url, data=json.dumps(eventPayload), headers=headers).json()
|
||||||
|
|
||||||
|
## get only PROBLEM EVENTS
|
||||||
|
|
||||||
|
problemEvents = []
|
||||||
|
for prob in eventList['result']:
|
||||||
|
|
||||||
|
if prob['source'] == '0' and prob['value'] == '1':
|
||||||
|
problemEvents.append(prob['eventid'])
|
||||||
|
|
||||||
|
#zabbixAlerts[hostDict[hostid]]['totalAlertCount'] = len(problemEvents)
|
||||||
|
zabbixHostWiseCount[hostDict[hostid]] = len(problemEvents)
|
||||||
|
totalCount += len(problemEvents)
|
||||||
|
|
||||||
|
print "total alerts for host: " + str(zabbixHostWiseCount[hostDict[hostid]])
|
||||||
|
|
||||||
|
for alert in alertList['result']:
|
||||||
|
|
||||||
|
#key = alert['eventid']
|
||||||
|
|
||||||
|
#if alert['eventid'] in problemEvents and not alertDict.has_key(key):
|
||||||
|
|
||||||
|
# alertDict[key] = {}
|
||||||
|
# alertDict[key]['host'] = hostDict[hostid]
|
||||||
|
# alertDict[key]['message'] = alert['subject']
|
||||||
|
# alertDict[key]['time'] = datetime.fromtimestamp(int(alert['clock'])).strftime('%Y-%m-%d %H:%M:%S')
|
||||||
|
|
||||||
|
if alert['eventid'] in problemEvents:
|
||||||
|
|
||||||
|
# hostWiseAlerts[hostDict[hostid]][alert['subject']] = hostWiseAlerts[hostDict[hostid]].get(alert['subject'], 0) + 1
|
||||||
|
|
||||||
|
#zabbixAlerts[hostDict[hostid]]['alertWiseCount'][alert['subject']] = zabbixAlerts[hostDict[hostid]]['alertWiseCount'].get(alert['subject'], 0) + 1
|
||||||
|
|
||||||
|
zabbixAlertWiseCount[hostDict[hostid]][alert['subject']] = zabbixAlertWiseCount[hostDict[hostid]].get(alert['subject'], 0) + 1
|
||||||
|
|
||||||
|
#pp.pprint(zabbixAlerts[hostDict[hostid]])
|
||||||
|
|
||||||
|
## Get Host wise count
|
||||||
|
#hostWiseCount[hostDict[hostid]] = len(problemEvents)
|
||||||
|
|
||||||
|
print "alerts for this host: "
|
||||||
|
pp.pprint(zabbixAlertWiseCount[hostDict[hostid]])
|
||||||
|
|
||||||
|
if len(zabbixAlertWiseCount[hostDict[hostid]].keys()) == 0:
|
||||||
|
# No alerts for this host. Delete it
|
||||||
|
del zabbixAlertWiseCount[hostDict[hostid]]
|
||||||
|
|
||||||
|
|
||||||
|
else:
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
|
||||||
|
#######################################################################
|
||||||
|
### Sending mail
|
||||||
|
#######################################################################
|
||||||
|
|
||||||
|
yesterday = date.today() - timedelta(1)
|
||||||
|
yesterdayTime = yesterday.strftime('%d/%m/%Y')
|
||||||
|
|
||||||
|
msg = MIMEMultipart('alternative')
|
||||||
|
msg['Subject'] = "Zabbix alerts for " + yesterdayTime
|
||||||
|
msg['From'] = mailFrom
|
||||||
|
msg['To'] = mailToStr
|
||||||
|
|
||||||
|
context['count'] = totalCount
|
||||||
|
#context['zabbixAlerts'] = {}
|
||||||
|
|
||||||
|
context['zabbixHostWiseCount'] = {}
|
||||||
|
context['zabbixHostWiseCount'] = zabbixHostWiseCount
|
||||||
|
|
||||||
|
context['zabbixAlertWiseCount'] = {}
|
||||||
|
context['zabbixAlertWiseCount'] = zabbixAlertWiseCount
|
||||||
|
|
||||||
|
html = render_template('email_template.html', context)
|
||||||
|
|
||||||
|
html = MIMEText(html, 'html')
|
||||||
|
msg.attach(html)
|
||||||
|
|
||||||
|
|
||||||
|
# Send using postflix
|
||||||
|
s = smtplib.SMTP('localhost')
|
||||||
|
s.sendmail(mailFrom, mailToList, msg.as_string())
|
||||||
|
#s.sendmail("digitalgoldzabbix@local.com", ['sunny1.gupta@paytm.com'], msg.as_string())
|
||||||
|
s.quit()
|
||||||
|
|
||||||
|
|
||||||
|
logText = "{0} events occured on {1}".format(totalCount, yesterdayTime)
|
||||||
|
logFH.write(logText)
|
||||||
|
logFH.write('\n')
|
||||||
|
|
||||||
|
logFH.write(str(zabbixHostWiseCount))
|
||||||
|
logFH.write('\n')
|
||||||
|
|
||||||
|
logFH.write(str(zabbixAlertWiseCount))
|
||||||
|
logFH.write('\n')
|
||||||
|
|
||||||
|
logText = "Mail Sent"
|
||||||
|
logFH.write(logText)
|
||||||
|
logFH.write('\n')
|
||||||
|
logFH.write("====================================")
|
||||||
|
|
||||||
|
logFH.close()
|
41
zabbix_api/templates/email_template.html
Normal file
41
zabbix_api/templates/email_template.html
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<center>
|
||||||
|
<h1>Total Zabbix alerts {{ count }}</h1>
|
||||||
|
<br>
|
||||||
|
</center>
|
||||||
|
<ol align="left">
|
||||||
|
Host Wise count:
|
||||||
|
<br>
|
||||||
|
{% for host, count in zabbixHostWiseCount.items() %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ host }}</td>
|
||||||
|
<td>{{ count }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<br>
|
||||||
|
Alerts:
|
||||||
|
<br>
|
||||||
|
|
||||||
|
{% for host in zabbixAlertWiseCount.keys() %}
|
||||||
|
|
||||||
|
Host: {{ host }}
|
||||||
|
<tr>
|
||||||
|
<td>Alert</td>
|
||||||
|
<td>Count</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
{% for hostAlertMessage, count in zabbixAlertWiseCount[host].items() %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ hostAlertMessage }}</td>
|
||||||
|
<td>{{ count }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
<br>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user