class check_moniting_state(threading.Thread): """ check moniting state for instance """ def __init__(self): super(check_moniting_state,self).__init__() self.daemon = True self.session = Session() def run(self): while 1: #try: ins = queue_moniting.get(True) instance_result = dict() moniting_state = eval(ins['moniting_state']) ipaddress = eval(ins['ipaddress']) ping = moniting_state['ping'] arp = moniting_state['arp'] tcp = moniting_state['tcp'] udp = moniting_state['udp'] if ipaddress: instance_result['uuid'] = ins['uuid'] for ip in ipaddress: instance_result[ip] = dict() if ping: instance_result[ip]['ping'] = 1 if icmp_checker.check_icmp(ip) == True else 0 if arp: instance_result[ip]['arp'] = 1 if arp_checker.check_arp(ip) == True else 0 if tcp: instance_result[ip]['tcp'] = dict() if isinstance(tcp,unicode): # if tcp is unicode string, means that's only one port. port = tcp instance_result[ip]['tcp'][port] = 1 if tcp_checker.check_tcp(ip,int(port)) == True else 0 else: for port in tcp: instance_result[ip]['tcp'][port] = 1 if tcp_checker.check_tcp(ip,int(port)) == True else 0 if udp: instance_result[ip]['udp'] = dict() if isinstance(udp,unicode): # if tcp is unicode string, means that's only one port. port = udp instance_result[ip]['udp'][port] = 1 if udp_checker.checker_udp(ip,int(port)) == True else 0 else: for port in udp: instance_result[ip]['udp'][port] = 1 if udp_checker.checker_udp(ip,int(port)) == True else 0 # send notification to user, use http or sms send_notification(instance_result,'moniting') # save last notification, used in next time save_one_notification(instance_result,'moniting') q = self.session.query(Instances).filter(Instances.uuid==ins['uuid']) if q.all(): q.update( {Instances.moniting_state:simplejson.dumps(instance_result)} ) self.session.commit() #except: # pass # dont forget to close session at the end self.session.close()