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
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()
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()
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
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')
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
def stop(self): self._stop_flag = True self.join() log.v('{} stopped.\n'.format(self.name))