class BlackManager(object): def __init__(self,**conf): self.blackr = RedisClient(db='black', **conf) self.ranger = MagicShow(**conf) def addbl(self,data): expire = data['expire'] hosts = self.ranger.load(data['range']).show() if hosts == 'all': key = 'black_%s_%s' % (data['policy'],host) self.blackr.set(key,'black',ex=expire) else: for host in hosts: key = 'black_%s_%s' % (data['policy'],host) self.blackr.set(key,'black',ex=expire) def delbl(self,data): print data policy = data['policy'] hosts = self.ranger.load(data['range']).show() for host in hosts: if policy != 'all': key = 'black_%s_%s' % (policy,host) self.blackr.delete(key) else: keys = self.blackr.keys('black_*_%s' % host) for key in keys: self.blackr.delete(key) def check(self,host,policy=None): keys = list() key = 'black_all_%s' % (host) keys.append(key) if policy: keys.append('black_%s_%s' % (policy,host)) keys.append('black_%s_all' % (policy)) for key in keys: if self.blackr.exists(key): return True return False def show(self): keys = self.blackr.keys('black*') for k in keys: try: typer,policy,host = k.split('_') ttl = self.blackr.pttl(k) except: print "=================", k else: print "策略:%s, 主机:%s, 剩余时间:%s 秒" % (policy,host,int(ttl/1000))
def load_host(conf): dbconf = conf url = "server/api/servers" username = "******" password = "******" data_dict = {} data = Ldapapi.get_wrapper(url,username,password,data_dict) data_set = dict() i=0 for block in data: i+=1 idc = None if 'idc' not in block else block['idc'].encode('utf-8') hostname = block['hostname'].encode('utf-8') product = None if 'product' not in block or not block['product'] else \ block['product'].encode('utf-8') service = None if 'service' not in block or not block['service'] else block['service'] if isinstance(service,list): for s in service: s = s.encode('utf-8') key = '%s:%s:%s:%s' % ('server',idc,product,s) if key.lower() not in data_set: data_set[key.lower()]=list() data_set[key.lower()].append(hostname) else: key = '%s:%s:%s:%s' % ('server',idc,product,service) if key.lower() not in data_set: data_set[key.lower()]=list() data_set[key.lower()].append(hostname) print "all server total:%s" % i # check servers of the key host_r = RedisClient(db='hosts', **dbconf) range_r = RedisClient(db='range', **dbconf) server_info = dict() for key in data_set: new_server = data_set[key] if range_r.exists(key): old_servers = range_r.smembers(key) need_add = [x for x in new_server if x not in old_servers] need_del = [x for x in old_servers if x not in new_server] if need_add: print "%s set add new server ret: %s" % (key,range_r.sadd(key,*need_add)) if need_del: print "%s set del old server ret: %s" % (key,range_r.srem(key,*need_del)) else: print "new %s set add new server ret: %s" %(key,range_r.sadd(key,*new_server)) (start,idc,product,service)=key.split(':') for s in new_server: if s not in server_info:server_info[s] = dict() server_info[s]['idc'] = idc server_info[s]['production'] = product server_info[s]['service'] = service # del key which not contain in data_set keys = range_r.keys('server:*') delKey = [ x for x in keys if x not in data_set.keys() ] if delKey: print 'delete keys from range db %s ' % range_r.delete(*delKey) old_server = host_r.keys('*') del_server = [ x for x in old_server if x not in server_info ] for s,v in server_info.items(): host_r.hmset(s,v) if del_server: print "delete old servers not in new server, %s " % host_r.delete(*del_server)