コード例 #1
0
ファイル: MonitorDemo.py プロジェクト: kevinjs/vmrebirth
    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
コード例 #2
0
ファイル: MonitorDemo.py プロジェクト: kevinjs/vmrebirth
    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'] = []
コード例 #3
0
ファイル: MonitorDemo.py プロジェクト: kevinjs/vmrebirth
    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)