Changeset 5195


Ignore:
Timestamp:
Jun 16, 2017, 9:25:27 AM (18 months ago)
Author:
hectorgh
Message:

wip in triggers

File:
1 edited

Legend:

Unmodified
Added
Removed
  • n4d/trunk/fuentes/install-files/usr/share/n4d/python-plugins/VariablesManager.py

    r5186 r5195  
    3333                self.variables_clients={}
    3434                self.variables_triggers={}
     35                self.failed_servers={}
    3536                t=threading.Thread(target=self.check_clients,args=())
    3637                t.daemon=True
     
    7475
    7576                if "REMOTE_VARIABLES_SERVER" in self.variables:
    76                         self.register_n4d_instance_to_server()
     77                        t=threading.Thread(target=self.register_n4d_instance_to_server)
     78                        t.daemon=True
     79                        t.start()
    7780                       
    7881        #def startup
     
    166169        def register_n4d_instance_to_server(self):
    167170               
     171                while True:
     172               
     173                        try:
     174                                server_ip=socket.gethostbyname(self.variables["REMOTE_VARIABLES_SERVER"][u"value"])
     175                                if self.get_ip()!=server_ip:
     176                               
     177                                        c=xmlrpclib.ServerProxy("https://%s:9779"%server_ip)
     178                                        mac=self.get_mac_from_device(self.route_get_ip(server_ip))
     179                                        self.server_instance_id=c.register_instance("","VariablesManager","",mac)
     180                               
     181                        except Exception as e:
     182
     183                                self.server_instance_id=None
     184                                return None
     185                               
     186                        time.sleep(60*3)
     187
     188        #def register_n4d_instance_to_server
     189       
     190       
     191        def check_clients(self):
     192               
     193                while True:
     194                       
     195                        for mac in self.variables_clients:
     196                               
     197                                ip=self.variables_clients[item]["ip"]
     198                                t=threading.Thread(target=self.check_single_client,args=(mac,ip,))
     199                                t.daemon=True
     200                                t.start()
     201                       
     202                        time.sleep(60*3)
     203               
     204               
     205        #def check_clients
     206       
     207       
     208        def check_single_client(self,mac,ip):
     209               
     210                sys.stdout.write("[VariablesManager] Checking client { MAC:%s IP:%s } ... "%(mac,ip))
     211                c=xmlrpclib.ServerProxy("https://%s:9779"%ip)
    168212                try:
    169                         server_ip=socket.gethostbyname(self.variables["REMOTE_VARIABLES_SERVER"][u"value"])
    170                         if self.get_ip()!=server_ip:
    171                        
    172                                 c=xmlrpclib.ServerProxy("https://%s:9779"%server_ip)
    173                                 mac=self.get_mac_from_device(self.route_get_ip(server_ip))
    174                                 self.server_instance_id=c.register_instance("","VariablesManager","",mac)
    175                        
    176                 except Exception as e:
    177 
    178                         self.server_instance_id=None
    179                         return None
    180 
    181         #def register_n4d_instance_to_server   
    182        
    183        
    184         def check_clients(self):
    185                
    186                 while True:
    187                        
    188                         for item in self.variables_clients:
    189                                 ip=self.variables_clients[item]["ip"]
    190                                 sys.stdout.write("[VariablesManager] Checking client { MAC:%s IP:%s } ... "%(item,ip))
    191                                 c=xmlrpclib.ServerProxy("https://%s:9779"%ip)
    192                                 try:
    193                                         c.get_methods()
    194                                         self.variables_clients[item]["last_check"]=time.time()
    195                                         self.variables_clients[item]["missed_pings"]=0
    196                                         print("OK")
    197                                 except:
    198                                         self.variables_clients[item]["missed_pings"]+=1
    199                                         print("FAILED")
    200                                         if self.variables_clients[item]["missed_pings"] >=3:
    201                                                 print "[VariablesManager] Removing client due to too many missed pings."
    202                                                 self.variables_clients.pop(item)
    203                        
    204                         time.sleep(60*5)
    205                
    206                
    207         #def check_clients
     213                        c.get_methods()
     214                        self.variables_clients[mac]["last_check"]=time.time()
     215                        self.variables_clients[mac]["missed_pings"]=0
     216                        print("OK")
     217                except:
     218                        self.variables_clients[mac]["missed_pings"]+=1
     219                        print("FAILED")
     220                        if self.variables_clients[mac]["missed_pings"] >=3:
     221                                print "[VariablesManager] Removing client due to too many missed pings."
     222                                self.variables_clients.pop(mac)
     223               
     224        #def check_single_client
     225       
     226       
    208227       
    209228        def get_client_list(self):
     
    238257                if server_instance_id==self.server_instance_id:
    239258
    240                         if self.variables["REMOTE_VARIABLES_SERVER"] [u'value']!=autocompleted_server_ip:
    241                                 return False
    242 
    243259                        print "[VariablesManager] Server instance ID validated"
    244260
     
    251267                else:
    252268                       
     269                        if autocompleted_server_ip not in self.failed_servers:
     270                                self.failed_servers[autocompleted_server_ip]={}
     271                                self.failed_servers[autocompleted_server_ip]["failed_count"]=0
     272                       
     273                        sleep_time=0.1
     274                        self.failed_servers[autocompleted_server_ip]["failed_count"]+=1
     275                        time.sleep(sleep_time*self.failed_servers[autocompleted_server_ip]["failed_count"])
    253276                        return False
    254277               
Note: See TracChangeset for help on using the changeset viewer.