class BackupWorkerMethod(BaseBackupWorker):

    def __init__(self):
        BaseBackupWorker.__init__(self)
        self.zkOper = Requests_ZkOpers()

    def _get_usable_ips(self):
        online_node_list = self.zkOper.retrieve_started_nodes()
        if not online_node_list:
            raise UserVisiableException('not started node, please check zk node!')

        url_system_path = "/node/stat/workload"
        url_disk_path = "/node/stat/disk/available"
        url_memory_path = "/node/stat/memory/available"
        url_diskenough_path = "/node/stat/disk/enough"

        try:
            system_loads = self._retrieve_nodes_load(online_node_list, url_system_path)
            available_spaces = self._retrieve_nodes_load(online_node_list, url_disk_path)
            available_memory = self._retrieve_nodes_load(online_node_list, url_memory_path)
            disk_enough = self._retrieve_nodes_load(online_node_list, url_diskenough_path)

            usable_ips = self._analysis_usable_backup_node(system_loads, available_spaces, available_memory, disk_enough)

        except Exception, e:
            self.zkOper.write_backup_backup_info({'error': traceback.format_exc()})
            raise UserVisiableException(e)

        return usable_ips
Пример #2
0
    def post(self):
        incr_basedir = self.get_argument("incr_basedir", None)
        backup_type = self.get_argument("backup_type")
        if not backup_type:
            raise HTTPAPIErrorException(
                "backup params is not given, please check 'backup_type' params.",
                status_code=417)

        zkOper = Requests_ZkOpers()
        zkOper.write_backup_backup_info({"backup type": "backup is building"})
        worker = DispatchBackupWorker(backup_type, incr_basedir)
        worker.start()

        result = {}
        result.setdefault("message",
                          "backup process is running, please waiting")
        self.finish(result)
Пример #3
0
class BackupWorkers(threading.Thread):
    def __init__(self, backup_mode='full', incr_basedir=None):

        self._backup_mode = backup_mode
        self.backup_record = {}
        threading.Thread.__init__(self)
        self.zkOpers = Requests_ZkOpers()
        self.dba_opers = DBAOpers()

        if self._backup_mode == "full":
            self.backupOpers = FullBackupOpers()
        else:
            self.backupOpers = IncrementBackupOpers(incr_basedir)

    def run(self):
        isLock, lock = self.zkOpers.lock_backup_action()
        if not isLock:
            logging.info('zk is not lock')
            return

        try:
            _password = retrieve_monitor_password()
            conn = self.dba_opers.get_mysql_connection(user="******",
                                                       passwd=_password)
            if None == conn:
                raise UserVisiableException("Can\'t connect to mysql server")

            db_status = self.dba_opers.show_status(conn)
            if 'Synced' != db_status[-14][1]:
                self.backup_record[
                    'error: '] = 'Mcluster is not start %s' % datetime.datetime.now(
                    ).strftime(TIME_FORMAT)
                self.backupOpers._write_info_to_local(
                    self.backupOpers.path, self.backupOpers.file_name,
                    self.backup_record)
                self.zkOpers.write_backup_backup_info(self.backup_record)
                return

            if '0' == self.__run_comm(CHECK_DMP_DATA_CMD):
                self.backup_record[
                    'error: '] = 'No have /data partition %s' % datetime.datetime.now(
                    ).strftime(TIME_FORMAT)
                self.backupOpers._write_info_to_local(
                    self.backupOpers.path, self.backupOpers.file_name,
                    self.backup_record)
                self.zkOpers.write_backup_backup_info(self.backup_record)
                return

            self.backupOpers.create_backup_directory()
            self.backupOpers.remove_expired_backup_file()

            self.backupOpers.backup_action(self.zkOpers)
            self.backupOpers.trans_backup_file(self.zkOpers)

            record = {
                "recently_backup_ip: ": str(get_localhost_ip()),
                'time: ': datetime.datetime.now().strftime(TIME_FORMAT),
                'backup_type: ': self._backup_mode
            }
            self.zkOpers.write_backup_backup_info(record)

        except Exception, e:
            record = {
                "error: ": 'backup is wrong, please check it!',
                'time:': datetime.datetime.now().strftime(TIME_FORMAT),
                'backup_type: ': self._backup_mode
            }
            self.zkOpers.write_backup_backup_info(record)
            logging.error(e, exc_info=True)

        finally: