import os import subprocess from database import app class AdminService: def __init__(self, database): app.logger.debug("------------------------------------------------------------") app.logger.debug(" Admin Service [init]") app.logger.debug("------------------------------------------------------------") self.__database = database self.limit_nr = 20 app.logger.debug("------------------------------------------------------------") app.logger.info(" Admin Service [ready]") def task_database_drop_create(self): self.run_admin_database_dump() return self def run_admin_database_dump(self): app.logger.info(" run database dump [begin]") app.logger.info("------------------------------------------------------------") user = app.config['SQLALCHEMY_POSTGRES_USER'] url = app.config['SQLALCHEMY_POSTGRES_URL'] db = app.config['SQLALCHEMY_POSTGRES_DB'] cmd = 'pg_dump -U '+user+' -h '+url+' '+db\ +' --compress=9 --clean --if-exists --no-tablespaces '\ +' --on-conflict-do-nothing --rows-per-insert=200 --column-inserts '\ +' --quote-all-identifiers --no-privileges > '\ + '..'+os.sep+'data'+os.sep+'db'+os.sep+'covid19data.sql.gz' app.logger.info(" start: "+str(cmd)) returncode = self.__run_ome_shell_command(cmd) app.logger.info(" result: " + str(returncode)) app.logger.info(" run database dump [done]") app.logger.info("------------------------------------------------------------") return self @classmethod def __run_ome_shell_command(cls, cmd): args = [cmd] app.logger.info(" start: " + str(cmd)) returncode = 0 try: result = subprocess.run(args, shell=True, check=True, capture_output=True, encoding='UTF-8') returncode = result.returncode except subprocess.CalledProcessError as error: app.logger.warning("WARN: AdminService.__run_ome_shell_command") app.logger.warning("cmd :::" + cmd + ":::") app.logger.warning("error :::" + str(error) + ":::") app.logger.warning("WARN: AdminService.__run_ome_shell_command") return returncode def run_admin_database_dump_reimport(self): app.logger.info(" run database dump reimport [begin]") app.logger.info("------------------------------------------------------------") user = app.config['SQLALCHEMY_POSTGRES_USER'] url = app.config['SQLALCHEMY_POSTGRES_URL'] db = app.config['SQLALCHEMY_POSTGRES_DB'] file_path = '..' + os.sep + '..' + os.sep + 'data' + os.sep + 'db' + os.sep + 'covid19data.sql' cmd_list = [ 'gunzip ' + file_path + '.gz', 'pgsql -U ' + user + ' -h ' + url + ' ' + db + ' < ' + file_path, 'gzip ' + file_path ] for cmd in cmd_list: returncode = self.__run_ome_shell_command(cmd) msg = '[ returncode: ' + str(returncode) + '] ' + cmd app.logger.info(msg) app.logger.info(" run database dump reimport [done]") app.logger.info("------------------------------------------------------------") return self def run_admin_database_drop(self): app.logger.info(" run database drop and create [begin]") app.logger.info("------------------------------------------------------------") self.__database.drop_all() self.__database.create_all() app.logger.info("") app.logger.info(" run database drop and create [done]") app.logger.info("------------------------------------------------------------") return self