mirror of
https://github.com/hastagAB/Awesome-Python-Scripts.git
synced 2024-11-27 14:01:09 +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