コード例 #1
0
ファイル: black.py プロジェクト: qinguoan/rambo
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))
コード例 #2
0
ファイル: load_group.py プロジェクト: qinguoan/rambo
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():
コード例 #3
0
ファイル: loadhost.py プロジェクト: qinguoan/rambo
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)