parm = { 'fname=s' : 'a conf info data file, one json per line' } options = OptConf( **parm ) opt = options.opt args = options.args conf = options.conf alertr = RedisClient(db='alert', **conf['database']) print "redis connect stat: %s" % alertr.ping() data = opt['fname'] data = yaml.load(open(data)) dict_obj = dict() for i in data: key = '%s' % i['name'] type = i['type'] if re.match('SYSTEM|SCRIPT|DEFAULT', type, re.I): name = 'client' elif re.match('HTTP', type, re.I): name = 'http' elif re.match('TCP', type, re.I): name = 'tcp' else: continue if not dict_obj.has_key(name): dict_obj[name] = dict() aa = json.dumps(i) dict_obj[name][key] = aa # save all config into one key. for name in dict_obj: key = 'total:%s:collector:configs' % name alertr.hmset(key, dict_obj[name])
dict_obj = dict() conf_type = ['client', 'http', 'tcp'] for p in data: policy_key = '' name = p['name'] collector = p['collector'] print "collector", collector type = '' for t in conf_type: key = 'total:%s:collector:configs' % t conf_name = alertr.hkeys(key) if collector in conf_name: type = t if type: policy_key = 'total:%s:policy:configs' % type elif name == 'client_status': policy_key = 'total:client:policy:configs' else: continue p = json.dumps(p) if not dict_obj.has_key(policy_key): dict_obj[policy_key] = dict() dict_obj[policy_key][name] = p for key, value in dict_obj.items(): print key, value alertr.hmset(key, value)
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)