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()
def check_moniting_state_icmp(i):
    while 1:
        #try:
        session = Session()
        ins = queue_moniting.get(True)
        print "Greenlets %s got : %s" % (i,time.asctime()), " " , ins
        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_gevent.check_icmp(ip) == True else 0
                #if arp:
                #    instance_result[ip]['arp'] = 1 if arp_checker_gevent.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_gevent.check_tcp(ip,int(port)) == True else 0
                #    else:
                #        for port in tcp:
                #            instance_result[ip]['tcp'][port] = 1 if tcp_checker_gevent.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
        
        print "Greenlets moniting %s got : %s" % (i,time.asctime()) , instance_result
        # 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 = session.query(Instances).filter(Instances.uuid==ins['uuid'])
        if q.all():
            q.update(
                {Instances.moniting_state:simplejson.dumps(instance_result)}
            )
            session.commit()
            nics_rx_bytes_max.append(int(v['rx_bytes']))
            nics_tx_bytes_max.append(int(v['tx_bytes']))
        rx_bytes_max = max(nics_rx_bytes_max)
        tx_bytes_max = max(nics_tx_bytes_max)
        
        if (rx_bytes_max > bandwidth_usage_warnning and rx_bytes_max < bandwidth_usage_critical) or \
            (tx_bytes_max > bandwidth_usage_warnning and tx_bytes_max < bandwidth_usage_critical):
            notification_result['bandwidth_usage'] = 1
        if rx_bytes_max <= bandwidth_usage_warnning or tx_bytes_max <= bandwidth_usage_warnning:
            notification_result['bandwidth_usage'] = 0
        if rx_bytes_max >= bandwidth_usage_critical or tx_bytes_max >= bandwidth_usage_critical:
            notification_result['bandwidth_usage'] = 2
    # send notification to user, use http or sms
    send_notification(notification_result,'notification')
    # save last notification, used in next time
    save_one_notification(notification_result,'monitifaction')
    
    return notification_result



def send_notification(result,result_type):
    """
    process message from moniting and notification and send to sms or http.
    """
    # process for notification message
    if result_type == "notification":
        s_data = dict()
        failed_item = 0
        s_data['type'] = 'notification'
        s_data['notification_type'] = 0