def run(self): num_r = 0 op = Operation() while True: self._report = {} chk_timestamp = int(time.time()) utils.appendFile('Time: ' + time.asctime(time.localtime()) + ' >> ' + str(num_r) + '\n', self._params['logfile']) self.check_host(chk_timestamp) self.check_vm(chk_timestamp) utils.appendFile('Total: ' + str(len(self._report)) + ' hosts\n', self._params['logfile']) if self._report != None and len(self._report) != 0: for host in self._report: utils.appendFile('Host: ' + host + ' -- Status: [' + self._report[host]['status'] + '], vm: ' + str(len(self._report[host]['vm_list'])) + '\n', self._params['logfile']) if self._report[host]['status'] != 'ALIVE': utils.appendFile(' - TODO: Migration...\n', self._params['logfile']) else: for vm in self._report[host]['vm_list']: utils.appendFile(' - ' + vm['vm'] + ' [' + vm['status'] + ' - ' + str(vm['repeat_num']) + '][' + vm['status-ori'] + ']\n', self._params['logfile']) if vm['status'] == 'WAITING' and vm['repeat_num'] > self._params['reboot']: op.reboot_ins(vm['vm']) time.sleep(self._params['intvl']) num_r = num_r + 1
def check_host(self, chk_timestamp): # rc = RunCommand() tmp = self._rc.run("nova-manage service list ") tmps = tmp.strip().split('\n') host_list = {} for line in tmps[1:len(tmps)]: term = utils.rmSp(line).split(' ') state_str = '' if term[len(term)-3] == ':-)': state_str = 'ALIVE' else: state_str = 'NON-ALIVE' if host_list.has_key(term[1]): host_list[term[1]]['SERVICE'].append({'NAME':term[0], 'STATE':state_str}) else: temp = {} temp['SERVICE'] = [] temp['CHECK_TIMESTAMP'] = chk_timestamp # temp['SERVICE'].append({'NAME':term[0], 'STATE':term[len(term)-3], 'STATUS':term[len(term)-4]}) temp['SERVICE'].append({'NAME':term[0], 'STATE':state_str}) host_list[term[1]] = temp # Update global host_list _tmp_host_list = list(set(self._host_list.keys()).union(set(host_list.keys()))) for host in _tmp_host_list: self._report[host] = {} # old if self._host_list.has_key(host) and host_list.has_key(host): self._host_list[host] = copy.deepcopy(host_list.get(host)) self._host_list[host]['AVAILABLE'] = True # new elif (not self._host_list.has_key(host)) and host_list.has_key(host): self._host_list[host] = copy.deepcopy(host_list.get(host)) self._host_list[host]['AVAILABLE'] = True # Not available elif self._host_list.has_key(host) and (not host_list.has_key(host)): self._host_list[host] = {} self._host_list[host]['AVAILABLE'] = False _host_state = 'ALIVE' for serv in self._host_list[host]['SERVICE']: if serv['STATE'] == 'NON-ALIVE': _host_state = 'NON-ALIVE' break self._report[host]['status'] = _host_state self._report[host]['vm_list'] = []
def __init__(self, stdin='/dev/stdin', stdout='/dev/stdout', stderr='/dev/stderr', configfile='/home/cnic/vmrebirth_sj/vmmonitor/vmmonitor.config'): self._params = utils.readParameters(configfile) # utils.printDict(self._params) if self._params != None: Daemon.__init__(self, self._params['pidfile'], stdin, stdout, stderr) self._rc = RunCommand() self._host_list = {} self._vm_list = {} self._report = {} else: print 'Read parameters error!!!' exit(2)