Merge branch 'master' of git.wrede.ca:andreas/heartbeat

commit2
This commit is contained in:
2014-11-08 10:51:28 -05:00
+65 -27
View File
@@ -4,11 +4,28 @@
# #
VER = 1.52 VER = 1.52
import time, os, string, sys, socket, atexit, select, SocketServer, getopt, signal, cPickle, smtplib, traceback, urllib import time
import os
import string
import sys
import socket
import atexit
import select
import SocketServer
import getopt
import signal
import cPickle
import smtplib
import traceback
import urllib
import httplib
from subprocess import Popen, STDOUT, PIPE from subprocess import Popen, STDOUT, PIPE
SEND_EMAIL=False
SEND_PUSHOVER=True
False = 0 False = 0
True = 1 True = 1
LOGFILE = "/home/andreas/public_html/messages/andreas" LOGFILE = "/home/andreas/public_html/messages/andreas"
@@ -118,31 +135,45 @@ class Host:
def email(s, msg): def email(s, msg):
ret = "OK" if not SEND_EMAIL:
toaddrs = AEMAIL return
fromaddr = "aew.heartbeat@wrede.ca" ret = "OK"
subj = "Info from %s: %s" % (NAME, s) toaddrs = AEMAIL
date = time.strftime("%a, %d %b %Y %H:%M:%S %z", time.localtime()) fromaddr = "aew.heartbeat@wrede.ca"
body = "To: %s\nFrom: %s\nSubject: %s\nDate: %s\n\n%s" % (toaddrs[0], fromaddr, subj, date, msg) subj = "Info from %s: %s" % (NAME, s)
try: date = time.strftime("%a, %d %b %Y %H:%M:%S %z", time.localtime())
server = smtplib.SMTP(SMTPSERVER) body = "To: %s\nFrom: %s\nSubject: %s\nDate: %s\n\n%s" % (toaddrs[0], fromaddr, subj, date, msg)
if DEBUG: try:
server.set_debuglevel(1) server = smtplib.SMTP(SMTPSERVER)
server.sendmail(fromaddr, toaddrs, body) if DEBUG:
except smtplib.SMTPRecipientsRefused, errs: server.set_debuglevel(1)
log("cannot send email: %s\n" % (errs)) server.sendmail(fromaddr, toaddrs, body)
ret = "Fail" except smtplib.SMTPRecipientsRefused, errs:
except: log("cannot send email: %s\n" % (errs))
print("smtp error: "+traceback.format_exc()) ret = "Fail"
saveandrestart() except:
try: print("smtp error: "+traceback.format_exc())
server.quit() saveandrestart()
except: try:
pass server.quit()
return ret except:
pass
return ret
def pushover(msg):
if not SEND_PUSHOVER:
return
conn = httplib.HTTPSConnection("api.pushover.net:443")
conn.request("POST", "/1/messages.json",
urllib.urlencode({
"token": "ac7NLX2rPjXFareeDgLpXNoDf4iFmf",
"user": "uDhH33UjQQDYtNzJb1ThRiWb9ingGK",
"message": msg,
}), { "Content-type": "application/x-www-form-urlencoded" })
conn.getresponse()
#
# nsupdate: set the DNS A record for a fqdn # nsupdate: set the DNS A record for a fqdn
# return: None if ok, else error text # return: None if ok, else error text
def nsupdate(hostname, newip): def nsupdate(hostname, newip):
@@ -176,7 +207,6 @@ answer
return output return output
#
# #
def dur(sec): def dur(sec):
sec = int(sec) sec = int(sec)
@@ -190,7 +220,6 @@ def dur(sec):
return "0:%02d" % s return "0:%02d" % s
#
# #
def addhost(name, addr): def addhost(name, addr):
sname = shortname(name) sname = shortname(name)
@@ -268,6 +297,7 @@ def checkoverdue():
m = "%s is overdue" % h m = "%s is overdue" % h
if h in watchhosts: if h in watchhosts:
email("overdue", m) email("overdue", m)
pushover(m)
hosts[h].newstate(Host.overdue, grace) hosts[h].newstate(Host.overdue, grace)
log(m) log(m)
@@ -383,6 +413,7 @@ def fromaddr(name, addr, boot, interval, acks):
log(m) log(m)
if name in watchhosts: if name in watchhosts:
email("address change", m) email("address change", m)
pushover(m)
host.lastbeat = now host.lastbeat = now
if host.getstate() != Host.up and interval > 0: if host.getstate() != Host.up and interval > 0:
@@ -392,6 +423,7 @@ def fromaddr(name, addr, boot, interval, acks):
log(m) log(m)
if name in watchhosts: if name in watchhosts:
email("back", name) email("back", name)
pushover("%s is back" % name)
host.upcount += 1 host.upcount += 1
@@ -448,17 +480,21 @@ def readsock(sock):
log(m) log(m)
if name in watchhosts: if name in watchhosts:
email("booted", m) email("booted", m)
pushover(m)
if msg: if msg:
m = "%s msg: %s" % (name, msg) m = "%s msg: %s" % (name, msg)
log(m, service=service) log(m, service=service)
if name in watchhosts: if name in watchhosts:
email("msg", m) email("msg", m)
pushover(m)
fromaddr(name, addr[0], boot, interval, acks) fromaddr(name, addr[0], boot, interval, acks)
if shutdown: if shutdown:
m = "%s shutdown" % name m = "%s shutdown" % name
log(m) log(m)
if name in watchhosts: if name in watchhosts:
email("shutdown", m) email("shutdown", m)
pushover(m)
try: try:
hosts[name].newstate(Host.down) hosts[name].newstate(Host.down)
except: except:
@@ -472,7 +508,9 @@ def readsock(sock):
rmsg="ACK" rmsg="ACK"
if len(hosts[name].cmds): if len(hosts[name].cmds):
rmsg=hosts[name].cmds[0] rmsg=hosts[name].cmds[0]
email("%s cmd exec" % name, "command '%s' initiated" % hosts[name].cmds[0]) msg="command '%s' initiated" % hosts[name].cmds[0]
email("%s cmd exec" % name, msg)
pushover(msg)
del hosts[name].cmds[0] del hosts[name].cmds[0]
log("%s command initiated" % name) log("%s command initiated" % name)
try: try: