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))
from Utils import BreakHere from Radix import MagicShow from Radix import CharSet parm = { 'fname=s' : 'a conf info data file, yaml format' } options = OptConf( **parm ) opt = options.opt args = options.args conf = options.conf if 'fname' not in opt: options.help() alertr = RedisClient(db='alert', **conf['database']) print "redis connect stat: %s" % alertr.ping() pfile = opt['fname'] data = yaml.load(open(pfile)) groups = alertr.keys('group:*') old_data = dict() for group in groups: try: v = alertr.get(group) except: pass old_data[group] = v for p in data: name = 'group:'+p.pop('name') old_data[name] = json.dumps(p) print "设置%s : %s\n" % (name, old_data[name]) for i, v in old_data.items():
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)