示例#1
0
    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()
示例#2
0
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)
示例#3
0
 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()
示例#4
0
    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()
示例#5
0
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()
  
示例#7
0
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()
示例#8
0
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()