Merge branch 'master' of git.wrede.ca:andreas/heartbeat
commit2
This commit is contained in:
@@ -4,11 +4,28 @@
|
||||
#
|
||||
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
|
||||
|
||||
|
||||
SEND_EMAIL=False
|
||||
SEND_PUSHOVER=True
|
||||
|
||||
False = 0
|
||||
True = 1
|
||||
LOGFILE = "/home/andreas/public_html/messages/andreas"
|
||||
@@ -118,31 +135,45 @@ class Host:
|
||||
|
||||
|
||||
def email(s, msg):
|
||||
ret = "OK"
|
||||
toaddrs = AEMAIL
|
||||
fromaddr = "aew.heartbeat@wrede.ca"
|
||||
subj = "Info from %s: %s" % (NAME, s)
|
||||
date = time.strftime("%a, %d %b %Y %H:%M:%S %z", time.localtime())
|
||||
body = "To: %s\nFrom: %s\nSubject: %s\nDate: %s\n\n%s" % (toaddrs[0], fromaddr, subj, date, msg)
|
||||
try:
|
||||
server = smtplib.SMTP(SMTPSERVER)
|
||||
if DEBUG:
|
||||
server.set_debuglevel(1)
|
||||
server.sendmail(fromaddr, toaddrs, body)
|
||||
except smtplib.SMTPRecipientsRefused, errs:
|
||||
log("cannot send email: %s\n" % (errs))
|
||||
ret = "Fail"
|
||||
except:
|
||||
print("smtp error: "+traceback.format_exc())
|
||||
saveandrestart()
|
||||
try:
|
||||
server.quit()
|
||||
except:
|
||||
pass
|
||||
return ret
|
||||
if not SEND_EMAIL:
|
||||
return
|
||||
ret = "OK"
|
||||
toaddrs = AEMAIL
|
||||
fromaddr = "aew.heartbeat@wrede.ca"
|
||||
subj = "Info from %s: %s" % (NAME, s)
|
||||
date = time.strftime("%a, %d %b %Y %H:%M:%S %z", time.localtime())
|
||||
body = "To: %s\nFrom: %s\nSubject: %s\nDate: %s\n\n%s" % (toaddrs[0], fromaddr, subj, date, msg)
|
||||
try:
|
||||
server = smtplib.SMTP(SMTPSERVER)
|
||||
if DEBUG:
|
||||
server.set_debuglevel(1)
|
||||
server.sendmail(fromaddr, toaddrs, body)
|
||||
except smtplib.SMTPRecipientsRefused, errs:
|
||||
log("cannot send email: %s\n" % (errs))
|
||||
ret = "Fail"
|
||||
except:
|
||||
print("smtp error: "+traceback.format_exc())
|
||||
saveandrestart()
|
||||
try:
|
||||
server.quit()
|
||||
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
|
||||
# return: None if ok, else error text
|
||||
def nsupdate(hostname, newip):
|
||||
@@ -176,7 +207,6 @@ answer
|
||||
return output
|
||||
|
||||
|
||||
#
|
||||
#
|
||||
def dur(sec):
|
||||
sec = int(sec)
|
||||
@@ -190,7 +220,6 @@ def dur(sec):
|
||||
return "0:%02d" % s
|
||||
|
||||
|
||||
#
|
||||
#
|
||||
def addhost(name, addr):
|
||||
sname = shortname(name)
|
||||
@@ -268,6 +297,7 @@ def checkoverdue():
|
||||
m = "%s is overdue" % h
|
||||
if h in watchhosts:
|
||||
email("overdue", m)
|
||||
pushover(m)
|
||||
hosts[h].newstate(Host.overdue, grace)
|
||||
log(m)
|
||||
|
||||
@@ -383,6 +413,7 @@ def fromaddr(name, addr, boot, interval, acks):
|
||||
log(m)
|
||||
if name in watchhosts:
|
||||
email("address change", m)
|
||||
pushover(m)
|
||||
|
||||
host.lastbeat = now
|
||||
if host.getstate() != Host.up and interval > 0:
|
||||
@@ -392,6 +423,7 @@ def fromaddr(name, addr, boot, interval, acks):
|
||||
log(m)
|
||||
if name in watchhosts:
|
||||
email("back", name)
|
||||
pushover("%s is back" % name)
|
||||
host.upcount += 1
|
||||
|
||||
|
||||
@@ -448,17 +480,21 @@ def readsock(sock):
|
||||
log(m)
|
||||
if name in watchhosts:
|
||||
email("booted", m)
|
||||
pushover(m)
|
||||
if msg:
|
||||
m = "%s msg: %s" % (name, msg)
|
||||
log(m, service=service)
|
||||
if name in watchhosts:
|
||||
email("msg", m)
|
||||
pushover(m)
|
||||
|
||||
fromaddr(name, addr[0], boot, interval, acks)
|
||||
if shutdown:
|
||||
m = "%s shutdown" % name
|
||||
log(m)
|
||||
if name in watchhosts:
|
||||
email("shutdown", m)
|
||||
pushover(m)
|
||||
try:
|
||||
hosts[name].newstate(Host.down)
|
||||
except:
|
||||
@@ -472,7 +508,9 @@ def readsock(sock):
|
||||
rmsg="ACK"
|
||||
if len(hosts[name].cmds):
|
||||
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]
|
||||
log("%s command initiated" % name)
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user