Exemple #1
0
    def create_and_init(self, step_begin, step_end, sysadmin, email, password):
        log.v('start database create and initialization process.\n')

        if self.db_type == self.DB_TYPE_SQLITE:
            db_path = os.path.dirname(self.sqlite_file)
            if not os.path.exists(db_path):
                tp_make_dir(db_path)
                if not os.path.exists(db_path):
                    log.e(
                        'can not create folder `{}` to store database file.\n'.
                        format(db_path))
                    return False
            # 创建一个空数据文件,这样才能进行connect。
            if not os.path.exists(self.sqlite_file):
                try:
                    with open(self.sqlite_file, 'w') as f:
                        pass
                except:
                    log.e('can not create db file `{}`.\n'.format(
                        self.sqlite_file))
                    return False

        if DatabaseInit(self, step_begin,
                        step_end).do_create_and_init(sysadmin, email,
                                                     password):
            log.v('database created.\n')
            self.need_create = False
            self.load_system_config()
            return True
        else:
            log.e('database create and initialize failed.\n')
            return False
Exemple #2
0
    def _do_exec(self, conn, sql, args):
        for retry in range(2):
            cursor = conn.cursor()
            try:
                cursor.execute(sql, args)
                conn.commit()
                return True
            except pymysql.err.OperationalError as e:
                errno, _ = e.args
                if retry == 1 or errno not in [2006, 2013]:
                    log.v('[mysql] SQL={}\n'.format(sql))
                    log.e('[mysql] _do_exec() failed: {}\n'.format(
                        e.__str__()))
                    return None
                conn = self._reconnect()
                if conn is None:
                    return None

            except pymysql.err.InterfaceError as e:
                if retry == 1:
                    log.v('[mysql] SQL={}\n'.format(sql))
                    log.e('[mysql] _do_exec() failed: {}\n'.format(
                        e.__str__()))
                    return None
                conn = self._reconnect()
                if conn is None:
                    return None

            except Exception as e:
                log.e('[mysql] _do_exec() failed: {}\n'.format(e.__str__()))
                log.e('[mysql] SQL={}'.format(sql))
                return None
            finally:
                cursor.close()
Exemple #3
0
    def _do_exec(self, conn, sql, args):
        for retry in range(2):
            cursor = conn.cursor()
            try:
                cursor.execute(sql, args)
                conn.commit()
                return True
            except pymysql.err.OperationalError as e:
                errno, _ = e.args
                if retry == 1 or errno not in [2006, 2013]:
                    log.v('[mysql] SQL={}\n'.format(sql))
                    log.e('[mysql] _do_exec() failed: {}\n'.format(e.__str__()))
                    return None
                conn = self._reconnect()
                if conn is None:
                    return None

            except pymysql.err.InterfaceError as e:
                if retry == 1:
                    log.v('[mysql] SQL={}\n'.format(sql))
                    log.e('[mysql] _do_exec() failed: {}\n'.format(e.__str__()))
                    return None
                conn = self._reconnect()
                if conn is None:
                    return None

            except Exception as e:
                log.e('[mysql] _do_exec() failed: {}\n'.format(e.__str__()))
                log.e('[mysql] SQL={}'.format(sql))
                return None
            finally:
                cursor.close()
Exemple #4
0
    def create_and_init(self, step_begin, step_end, sysadmin, email, password):
        log.v('start database create and initialization process.\n')

        if self.db_type == self.DB_TYPE_SQLITE:
            db_path = os.path.dirname(self.sqlite_file)
            if not os.path.exists(db_path):
                tp_make_dir(db_path)
                if not os.path.exists(db_path):
                    log.e('can not create folder `{}` to store database file.\n'.format(db_path))
                    return False
            # 创建一个空数据文件,这样才能进行connect。
            if not os.path.exists(self.sqlite_file):
                try:
                    with open(self.sqlite_file, 'w') as f:
                        pass
                except:
                    log.e('can not create db file `{}`.\n'.format(self.sqlite_file))
                    return False

        if DatabaseInit(self, step_begin, step_end).do_create_and_init(sysadmin, email, password):
            log.v('database created.\n')
            self.need_create = False
            self.load_system_config()
            return True
        else:
            log.e('database create and initialize failed.\n')
            return False
Exemple #5
0
    def _thread_func_recv_ping_result(self):
        while not self._need_stop:
            event = select.select([self._socket_ping], [], [], 1)
            if not event[0]:
                continue
            data, _ = self._socket_ping.recvfrom(128)  # data-length=60
            if len(data) < 28:
                continue
            _type, _code, _checksum, _pkg_id, _sequence = struct.unpack(
                ">BBHHH", data[20:28])
            if _type != 0 or _sequence != 1:
                continue

            time_now = int(time.time())
            with self._lock:
                if _pkg_id not in self._ping_pkg_id_list:
                    continue

                target_host = self._ping_pkg_id_list[_pkg_id]
                del self._ping_pkg_id_list[_pkg_id]

                time_used = time_now - self._states[target_host]['last_check']
                if time_used <= HostAlive.PING_TIMEOUT:
                    self._states[target_host]['last_online'] = time_now

        log.v('thread for receive PING result stopped.\n')
Exemple #6
0
 def upgrade_database(self, step_begin, step_end):
     log.v('start database upgrade process.\n')
     if DatabaseUpgrade(self, step_begin, step_end).do_upgrade():
         log.v('database upgraded.\n')
         self.need_upgrade = False
         return True
     else:
         log.e('database upgrade failed.\n')
         return False
Exemple #7
0
 def stop(self):
     self._stop_flag = True
     self.join()
     log.v('{} stopped.\n'.format(self.name))