def __init__(self, server_list, monitor_config): print("__init__") self.interval = monitor_config['interval'] self.recipients = monitor_config['recipients'] self.servers = self.get_servers(server_list) self.heartbeatFile = monitor_config['heartbeatFile'] self.heartbeatHours = monitor_config['heartbeatHours'] self.repeat_timer = RepeatTimer(self.interval, self.check_servers, *args, **kwargs) self.learn_ip() #pibrella.button.pressed(self.btnPress) self.heartbeat()
class Link(): def __init__(self, conn, chan, command, args): self.conn = conn self.chan = chan self.command = command self.args = args self.queue = [] def start(self): self.pid, self.child = pty.fork() if self.pid == 0: #is child process? finalargs = self.args if self.args == []: finalargs = [""] os.execv(self.command, finalargs) else: self.intimer = RepeatTimer(1, self.syncin) self.outtimer = Timer(1, self.syncout) self.intimer.start() self.outtimer.start() def stop(self): self.intimer.cancel() self.outtimer.cancel() os.kill(self.pid, signal.SIGKILL) def syncin(self): if self.queue != []: for line in self.queue: os.write(self.child, line + "\r\n") self.queue = [] def syncout(self): try: readstr = os.read(self.child, 1024) lines = itertools.groupby(readstr.splitlines()) for line in lines: if line[0] != "": self.conn.privmsg(self.chan, "[%s] %s" % (self.command, line[0])) self.outtimer = Timer(2, self.syncout) self.outtimer.start() except OSError: self.conn.privmsg(self.chan, "[] %s terminated" % self.command)
def start(self): self.pid, self.child = pty.fork() if self.pid == 0: #is child process? finalargs = self.args if self.args == []: finalargs = [""] os.execv(self.command, finalargs) else: self.intimer = RepeatTimer(1, self.syncin) self.outtimer = Timer(1, self.syncout) self.intimer.start() self.outtimer.start()
def __init__(self, server_list, monitor_config): print ("__init__") self.interval = monitor_config['interval'] self.recipients = monitor_config['recipients'] self.servers = self.get_servers(server_list) self.heartbeatFile = monitor_config['heartbeatFile'] self.heartbeatHours = monitor_config['heartbeatHours'] self.repeat_timer = RepeatTimer(self.interval, self.check_servers, *args, **kwargs) self.learn_ip() pibrella.button.pressed(self.btnPress) self.heartbeat()
class Monitor(object): def __init__(self, server_list, monitor_config): print("__init__") self.interval = monitor_config['interval'] self.recipients = monitor_config['recipients'] self.servers = self.get_servers(server_list) self.heartbeatFile = monitor_config['heartbeatFile'] self.heartbeatHours = monitor_config['heartbeatHours'] self.repeat_timer = RepeatTimer(self.interval, self.check_servers, *args, **kwargs) self.learn_ip() #pibrella.button.pressed(self.btnPress) self.heartbeat() def learn_ip(self): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(("gmail.com", 80)) ip = s.getsockname()[0] s.close() for recipient in self.recipients: mail(recipient, 'Pi Monitor Started Successfully', 'Pi Monitor initialized on ip: %s' % (ip)) def run(self): print("run: ") self.repeat_timer.start() def check_servers(self, *args, **kwargs): """""" print("check_servers: ") self.heartbeat() for server in self.servers: print(server.name) thread.start_new_thread(server.check_status, ()) # email message about down servers time.sleep(5) down_servers = self.get_down_servers() if len(down_servers) > 0: self.send_down_servers_email(down_servers) else: self.reset() up_servers = self.get_up_servers() if len(up_servers) > 0: self.send_up_servers_email(up_servers) def get_down_servers(self): down_servers = [] for server in self.servers: if server.status != 'OK' and server.fails >= server.max_fails and server.notified_fail == False: down_servers.append(server) return down_servers def get_up_servers(self): up_servers = [] for server in self.servers: if server.status == 'OK' and server.notified_fail == True: up_servers.append(server) return up_servers def send_down_servers_email(self, down_servers): self.alarm() print("send_down_servers_email") message = '' for server in down_servers: text = "%s %s %s - %s\n" % (server.name, server.last_checked, server.url, server.status) message += text server.notified_fail = True for recipient in self.recipients: mail(recipient, 'Pi Monitor', message) def send_up_servers_email(self, down_servers): print("send_up_servers_email") message = '' for server in down_servers: text = "%s %s %s - %s\n" % (server.name, server.last_checked, server.url, server.status) message += text server.notified_fail = False for recipient in self.recipients: mail(recipient, 'Pi Monitor', message) def get_servers(self, server_list): """takes list of dicts and return list of Server objects""" print("get_servers: ") servers = [] for server in server_list: servers.append( Server(name=server['name'], url=server['url'], timeout=server['timeout'], max_fails=server['max_fails'], assert_string=server['assert_string'])) return servers def btnPress(self, pin): self.reset() for server in self.servers: #server.notified_fail = False server.fails = 0 server.status = 'OK' server.assert_pass = True def reset(self): #pibrella.light.stop() #pibrella.buzzer.stop() pass def alarm(pin): #pibrella.light.pulse() #pibrella.buzzer.buzz(50) pass def heartbeat(self): filePath = self.heartbeatFile if (os.path.isfile(filePath)): f = open(filePath, "r") last = f.readline() f.close() print(last) dt_last = datetime.strptime(last, '%b %d %Y %I:%M%p') hours = math.floor( ((datetime.now() - dt_last).total_seconds()) / 3600) print(hours) if (hours > self.heartbeatHours): for recipient in self.recipients: mail(recipient, 'Pi Monitor Still Running', 'Pi Monitor still running fine') self.writeHeartbeat() else: self.writeHeartbeat() def writeHeartbeat(self): filePath = self.heartbeatFile f = open(filePath, "w") f.write(datetime.now().strftime('%b %d %Y %I:%M%p')) f.close()
html += '<tr><td><a href=\'' + server.url + '\'>' + server.url + '</a></td><td><font color=' + scolor + '>' + str(server.status_code) + ' ' + server.status + '</font></td><td>' + server.assert_string + '</td><td><font color=' + acolor + '>' + str(server.assert_pass) + '</font></td><td>' + str(server.last_checked) + '</td></tr>' html += """</table>""" html += """<form method="POST" action=""> <input type="submit" value="Check Status"/> </form> </body></html>""" return html def POST(self): """ Manual check """ check_servers() raise web.seeother('/') if __name__ == "__main__": if len(sys.argv) == 3: lines = (line.rstrip('\n') for line in open(sys.argv[2])) for line in lines: url, assert_string = string.split(line,',') print url + " " + assert_string servers.append(Server(url, assert_string)) else: for url,assert_string in zip(sys.argv[2::2], sys.argv[3::2]): print url + " " + assert_string servers.append(Server(url, assert_string)) check_servers() timerName = RepeatTimer(poll_interval, check_servers) # Repeatedly check servers timerName.start() app.run()
class Monitor(object): def __init__(self, server_list, monitor_config): print ("__init__") self.interval = monitor_config['interval'] self.recipients = monitor_config['recipients'] self.servers = self.get_servers(server_list) self.heartbeatFile = monitor_config['heartbeatFile'] self.heartbeatHours = monitor_config['heartbeatHours'] self.repeat_timer = RepeatTimer(self.interval, self.check_servers, *args, **kwargs) self.learn_ip() pibrella.button.pressed(self.btnPress) self.heartbeat() def learn_ip(self): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(("gmail.com",80)) ip = s.getsockname()[0] s.close() for recipient in self.recipients: mail(recipient, 'Pi Monitor Started Successfully','Pi Monitor initialized on ip: %s' % (ip)) def run(self): print ("run: ") self.repeat_timer.start() def check_servers(self, *args, **kwargs): """""" print ("check_servers: ") self.heartbeat() for server in self.servers: print (server.name) thread.start_new_thread(server.check_status, ()) # email message about down servers time.sleep(5) down_servers = self.get_down_servers() if len(down_servers) > 0: self.send_down_servers_email(down_servers) else: self.reset() def get_down_servers(self): down_servers = [] for server in self.servers: if server.status != 'OK' and server.fails >= server.max_fails and server.notified_fail == False: down_servers.append(server) return down_servers def send_down_servers_email(self, down_servers): self.alarm() print ("send_down_servers_email") message = '' for server in down_servers: text = "%s %s %s - %s\n" % (server.name, server.last_checked, server.url, server.status) message += text server.notified_fail = True for recipient in self.recipients: mail(recipient, 'Pi Monitor', message) def get_servers(self, server_list): """takes list of dicts and return list of Server objects""" print ("get_servers: ") servers = [] for server in server_list: servers.append(Server(name=server['name'], url=server['url'], timeout=server['timeout'], max_fails=server['max_fails'], assert_string=server['assert_string'])) return servers def btnPress(self,pin): self.reset() for server in self.servers: server.notified_fail = False server.fails = 0 server.status = 'OK' server.assert_pass = True def reset(self): pibrella.light.stop() pibrella.buzzer.stop() def alarm(pin): pibrella.light.pulse() pibrella.buzzer.buzz(50) def heartbeat(self): filePath = self.heartbeatFile if(os.path.isfile(filePath)): f = open(filePath,"r") last = f.readline() f.close() print(last) dt_last = datetime.strptime(last, '%b %d %Y %I:%M%p') hours = math.floor(((datetime.now() - dt_last).total_seconds()) / 3600) print(hours) if(hours > self.heartbeatHours): for recipient in self.recipients: mail(recipient, 'Pi Monitor Still Running','Pi Monitor still running fine') self.writeHeartbeat() else: self.writeHeartbeat() def writeHeartbeat(self): filePath = self.heartbeatFile f = open(filePath,"w") f.write(datetime.now().strftime('%b %d %Y %I:%M%p')) f.close()
from repeattimer import RepeatTimer from pyvoice import GoogleVoice from Growl import GrowlNotifier from Growl import Image as GrowlImage def notify(): unread_messages = gv.get_unread_messages() for msg in unread_messages: growlifier.notify(noteType="update", title="New GV Message!", description=("%s- %s" % (msg.elapsedTimeSincePlaced, msg.phoneNumber))) icon_path = "txt.icon.png" if (__name__ == "__main__"): growl_icon = GrowlImage.imageFromPath(icon_path) growlifier = GrowlNotifier(applicationName="Google Voice", notifications=['update'], applicationIcon=growl_icon) growlifier.register() gv = GoogleVoice("*****@*****.**", "laner8") #check for new messages, and update with new Growl alert every 10 minutes timer = RepeatTimer(interval=600, function=notify) timer.run()