Merge branch 'master' of git.wrede.ca:andreas/heartbeat
commit2
This commit is contained in:
@@ -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,6 +135,8 @@ class Host:
|
|||||||
|
|
||||||
|
|
||||||
def email(s, msg):
|
def email(s, msg):
|
||||||
|
if not SEND_EMAIL:
|
||||||
|
return
|
||||||
ret = "OK"
|
ret = "OK"
|
||||||
toaddrs = AEMAIL
|
toaddrs = AEMAIL
|
||||||
fromaddr = "aew.heartbeat@wrede.ca"
|
fromaddr = "aew.heartbeat@wrede.ca"
|
||||||
@@ -142,7 +161,19 @@ def email(s, msg):
|
|||||||
return ret
|
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:
|
||||||
|
|||||||
Reference in New Issue
Block a user