示例#1
0
    def update_redis_uve_list(self, redis_uve_list):
        newlist = set(redis_uve_list)
        chg = False
        # if some redis instances are gone, remove them from our map
        for test_elem in self._redis_uve_map.keys():
            if test_elem not in newlist:
                chg = True
                r_ip = test_elem[0]
                r_port = test_elem[1]
                del self._redis_uve_map[test_elem]
                ConnectionState.delete(ConnectionType.REDIS_UVE,\
                    r_ip+":"+str(r_port)) 
        
        # new redis instances need to be inserted into the map
        for test_elem in newlist:
            if test_elem not in self._redis_uve_map:
                chg = True
                r_ip = test_elem[0]
                r_port = test_elem[1]
                self._redis_uve_map[test_elem] = None
                ConnectionState.update(ConnectionType.REDIS_UVE,\
                    r_ip+":"+str(r_port), ConnectionStatus.INIT)
        if chg:
            self._logger.error("updated redis_uve_list %s" % str(self._redis_uve_map)) 

        # Exercise redis connections to update health
        if len(newlist):
            self.get_uve("ObjectCollectorInfo:__NONE__", False, None)
示例#2
0
    def update_redis_uve_list(self, redis_uve_list):
        newlist = set(redis_uve_list)
        chg = False
        # if some redis instances are gone, remove them from our map
        for test_elem in self._redis_uve_map.keys():
            if test_elem not in newlist:
                chg = True
                r_ip = test_elem[0]
                r_port = test_elem[1]
                del self._redis_uve_map[test_elem]
                ConnectionState.delete(ConnectionType.REDIS_UVE,\
                    r_ip+":"+str(r_port))

        # new redis instances need to be inserted into the map
        for test_elem in newlist:
            if test_elem not in self._redis_uve_map:
                chg = True
                r_ip = test_elem[0]
                r_port = test_elem[1]
                self._redis_uve_map[test_elem] = None
                ConnectionState.update(ConnectionType.REDIS_UVE,\
                    r_ip+":"+str(r_port), ConnectionStatus.INIT)
        if chg:
            self._logger.error("updated redis_uve_list %s" %
                               str(self._redis_uve_map))

        # Exercise redis connections to update health
        if len(newlist):
            self.get_uve("ObjectCollectorInfo:__NONE__", False, None)
示例#3
0
    def run(self):
        exitrun = False
        while not exitrun:
            for rkey in self._redis_uve_map.keys():
                rinst = self._redis_uve_map[rkey]
                old_pid = rinst.collector_pid
                try:
                    # check if it is marked as deleted during sighup handling
                    if rinst.deleted == True:
                        r_ip = rkey[0]
                        r_port = rkey[1]
                        del self._redis_uve_map[rkey]
                        ConnectionState.delete(ConnectionType.REDIS_UVE,\
                            r_ip+":"+str(r_port))
                        continue

                    if rinst.redis_handle is None:
                        rinst.redis_handle = StrictRedisWrapper(
                            host=rkey.ip,
                            port=rkey.port,
                            password=self._redis_password,
                            db=1,
                            socket_timeout=30)
                        rinst.collector_pid = None

                    # check for known collector pid string
                    # if there's a mismatch, we must read it again
                    if rinst.collector_pid is not None:
                        if not rinst.redis_handle.sismember(
                                "NGENERATORS", rinst.collector_pid):
                            rinst.collector_pid = None

                    # read the collector pid string
                    if rinst.collector_pid is None:
                        for gen in rinst.redis_handle.smembers("NGENERATORS"):
                            module = gen.split(':')[2]
                            if module == "contrail-collector":
                                rinst.collector_pid = gen
                except gevent.GreenletExit:
                    self._logger.error('UVEServer Exiting on gevent-kill')
                    exitrun = True
                    break
                except Exception as e:
                    self._logger.error("redis/collector healthcheck failed %s for %s" \
                                   % (str(e), str(rkey)))
                    rinst.redis_handle = None
                    rinst.collector_pid = None
                finally:
                    # Update redis/collector health
                    if old_pid is None and rinst.collector_pid is not None:
                        ConnectionState.update(ConnectionType.REDIS_UVE,\
                                rkey.ip + ":" + str(rkey.port), ConnectionStatus.UP,
                        [rkey.ip+":"+str(rkey.port)])
                    if old_pid is not None and rinst.collector_pid is None:
                        ConnectionState.update(ConnectionType.REDIS_UVE,\
                                rkey.ip + ":" + str(rkey.port), ConnectionStatus.DOWN,
                        [rkey.ip+":"+str(rkey.port)])
            if not exitrun:
                gevent.sleep(self._freq)
    def run(self):
        exitrun = False
        while not exitrun:
            for rkey in self._redis_uve_map.keys():
                rinst = self._redis_uve_map[rkey]
                old_pid = rinst.collector_pid
                try:
                    # check if it is marked as deleted during sighup handling
                    if rinst.deleted == True:
                        r_ip = rkey[0]
                        r_port = rkey[1]
                        del self._redis_uve_map[rkey]
                        ConnectionState.delete(ConnectionType.REDIS_UVE,\
                            r_ip+":"+str(r_port))
                        continue

                    if rinst.redis_handle is None:
                        rinst.redis_handle = StrictRedisWrapper(
                            host=rkey.ip, port=rkey.port,
                            password=self._redis_password, db=1,
                            socket_timeout=30)
                        rinst.collector_pid = None

                    # check for known collector pid string
                    # if there's a mismatch, we must read it again
                    if rinst.collector_pid is not None:
                        if not rinst.redis_handle.sismember("NGENERATORS", rinst.collector_pid):
                            rinst.collector_pid = None

                    # read the collector pid string
                    if rinst.collector_pid is None:
                        for gen in rinst.redis_handle.smembers("NGENERATORS"):
                            module = gen.split(':')[2]
                            if module == "contrail-collector":
                                rinst.collector_pid = gen
                except gevent.GreenletExit:
                    self._logger.error('UVEServer Exiting on gevent-kill')
                    exitrun = True
                    break
                except Exception as e:
                    self._logger.error("redis/collector healthcheck failed %s for %s" \
                                   % (str(e), str(rkey)))
                    rinst.redis_handle = None
                    rinst.collector_pid = None
                finally:
                    # Update redis/collector health
                    if old_pid is None and rinst.collector_pid is not None:
	                ConnectionState.update(ConnectionType.REDIS_UVE,\
		                rkey.ip + ":" + str(rkey.port), ConnectionStatus.UP,
                        [rkey.ip+":"+str(rkey.port)])
                    if old_pid is not None and rinst.collector_pid is None:
	                ConnectionState.update(ConnectionType.REDIS_UVE,\
		                rkey.ip + ":" + str(rkey.port), ConnectionStatus.DOWN,
                        [rkey.ip+":"+str(rkey.port)])
            if not exitrun:
                gevent.sleep(self._freq)
    def update_redis_uve_list(self, redis_uve_list):
        newlist = set(redis_uve_list)

        # if some redis instances are gone, remove them from our map
        for test_elem in self._redis_uve_map.keys():
            if test_elem not in newlist:
                r_ip = test_elem[0]
                r_port = test_elem[1]
                del self._redis_uve_map[test_elem]
                ConnectionState.delete(ConnectionType.REDIS_UVE,\
                    r_ip+":"+str(r_port)) 
        
        # new redis instances need to be inserted into the map
        for test_elem in newlist:
            if test_elem not in self._redis_uve_map:
                r_ip = test_elem[0]
                r_port = test_elem[1]
                self._redis_uve_map[test_elem] = None
                ConnectionState.update(ConnectionType.REDIS_UVE,\
                    r_ip+":"+str(r_port), ConnectionStatus.INIT)
        # Exercise redis connections to update health
        if len(newlist):
            self.get_uve_list("ObjectCollectorInfo")
示例#6
0
    def update_redis_uve_list(self, redis_uve_list):
        newlist = set(redis_uve_list)

        # if some redis instances are gone, remove them from our map
        for test_elem in self._redis_uve_map.keys():
            if test_elem not in newlist:
                r_ip = test_elem[0]
                r_port = test_elem[1]
                del self._redis_uve_map[test_elem]
                ConnectionState.delete(ConnectionType.REDIS_UVE,\
                    r_ip+":"+str(r_port))

        # new redis instances need to be inserted into the map
        for test_elem in newlist:
            if test_elem not in self._redis_uve_map:
                r_ip = test_elem[0]
                r_port = test_elem[1]
                self._redis_uve_map[test_elem] = None
                ConnectionState.update(ConnectionType.REDIS_UVE,\
                    r_ip+":"+str(r_port), ConnectionStatus.INIT)
        # Exercise redis connections to update health
        if len(newlist):
            self.get_uve_list("ObjectCollectorInfo")
示例#7
0
    def run(self):
        exitrun = False
        while not exitrun:
            for rkey in list(self._redis_uve_map.keys()):
                rinst = self._redis_uve_map[rkey]
                old_pid = rinst.collector_pid
                try:
                    # check if it is marked as deleted during sighup handling
                    if rinst.deleted == True:
                        r_ip = rkey[0]
                        r_port = rkey[1]
                        del self._redis_uve_map[rkey]
                        ConnectionState.delete(ConnectionType.REDIS_UVE,\
                            r_ip+":"+str(r_port))
                        continue

                    if rinst.redis_handle is None:
                        rinst.redis_handle = StrictRedisWrapper(
                            host=rkey.ip,
                            port=rkey.port,
                            password=self._redis_password,
                            db=1,
                            socket_timeout=30,
                            **self._redis_ssl_params)
                        rinst.collector_pid = None

                    # check for known collector pid string
                    # if there's a mismatch, we must read it again
                    if rinst.collector_pid is not None:
                        if not rinst.redis_handle.sismember(
                                "NGENERATORS", rinst.collector_pid):
                            rinst.collector_pid = None

                    # read the collector pid string
                    if rinst.collector_pid is None:
                        for gen in rinst.redis_handle.smembers("NGENERATORS"):
                            module = convert_to_string(gen).split(':')[2]
                            if module == "contrail-collector":
                                rinst.collector_pid = gen
                except gevent.GreenletExit:
                    self._logger.error('UVEServer Exiting on gevent-kill')
                    exitrun = True
                    break
                except Exception as e:
                    self._logger.debug("redis/collector healthcheck failed %s for %s" \
                                   % (str(e), str(rkey)))
                    rinst.redis_handle = None
                    rinst.collector_pid = None
                finally:
                    # Update redis/collector health
                    '''
                    when rinst.redis_handle is none, redis down
                    when rkey.ip not in collectors, collector down
                    if redis and collector are up or down, state should be up
                    if redis is up, state should be up
                    if redis is down but collector is up, the state shoue be down
                    '''
                    if rkey in list(self._redis_uve_map.keys()):
                        if rinst.redis_handle is None:
                            if rkey.ip != '127.0.0.1':
                                rkey_fqdn = socket.getfqdn(rkey.ip)
                            else:
                                rkey_fqdn = socket.getfqdn()
                            if (self._active_collectors is not None and
                                    rkey_fqdn not in self._active_collectors):
                                ConnectionState.update(ConnectionType.REDIS_UVE,\
                                    rkey.ip + ":" + str(rkey.port), ConnectionStatus.UP,
                                    [rkey.ip+":"+str(rkey.port)],"Redis Instance is Up")
                            else:
                                ConnectionState.update(ConnectionType.REDIS_UVE,\
                                    rkey.ip + ":" + str(rkey.port), ConnectionStatus.DOWN,
                                    [rkey.ip+":"+str(rkey.port)],"Redis Instance is Down")
                        else:
                            ConnectionState.update(ConnectionType.REDIS_UVE,\
                                rkey.ip + ":" + str(rkey.port), ConnectionStatus.UP,
                                [rkey.ip+":"+str(rkey.port)])
            if not exitrun:
                gevent.sleep(self._freq)
示例#8
0
 def _delete_conn_state(self, name, vcinfos):
     self._expected_vcinfos = vcinfos
     ConnectionState.delete(ConnectionType.TEST, name)
 def _delete_conn_state(self, name, vcinfos):
     self._expected_vcinfos = vcinfos
     ConnectionState.delete(ConnectionType.TEST, name)