diff --git a/src/covid19/blueprints/admin/admin_service.py b/src/covid19/blueprints/admin/admin_service.py index b889f3430488553fca46a5a27ee5e6e0b9618505..0384a39939ce5ff9b576778461e48973d6ca8aa0 100644 --- a/src/covid19/blueprints/admin/admin_service.py +++ b/src/covid19/blueprints/admin/admin_service.py @@ -24,27 +24,50 @@ class AdminService: 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+' --inserts > ..'+os.sep+'..'+os.sep+'data'+os.sep+'covid19data.sql' - args = [cmd] + 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+'..'+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: run_admin_database_dump [begin]") - app.logger.warning(":::"+str(error)+":::") - app.logger.warning("WARN: run_admin_database_dump [end]") - app.logger.info(" result: " + str(returncode)) - app.logger.info(" run database dump [done]") - app.logger.info("------------------------------------------------------------") - return self + 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_import(self): - app.logger.info(" run database import [begin]") + def run_admin_database_dump_reimport(self): + app.logger.info(" run database dump reimport [begin]") app.logger.info("------------------------------------------------------------") - app.logger.info("... TBD") - app.logger.info(" run database import [done]") + 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 diff --git a/src/covid19/blueprints/admin/admin_views.py b/src/covid19/blueprints/admin/admin_views.py index 7a8c007221361b36f008bb80aa1828f2107f025f..d7b33263cbe0e3aa1f2202e067823a513320b470 100644 --- a/src/covid19/blueprints/admin/admin_views.py +++ b/src/covid19/blueprints/admin/admin_views.py @@ -179,12 +179,12 @@ def url_admin_database_dump(): return redirect(url_for('app_admin.url_admin_tasks')) -@app_admin.route('/database/import') -def url_admin_database_import(): - app.logger.info("url_admin_database_import [start]") +@app_admin.route('/database/reimport') +def url_admin_database_dump_reimport(): + app.logger.info("url_admin_database_dump_reimport [start]") admin_service.run_admin_database_import() flash("admin_service.run_admin_database_import started") - app.logger.info("url_admin_database_import [done]") + app.logger.info("url_admin_database_dump_reimport [done]") return redirect(url_for('app_admin.url_admin_tasks')) diff --git a/src/covid19/blueprints/admin/templates/admin/admin_tasks.html b/src/covid19/blueprints/admin/templates/admin/admin_tasks.html index 5d541fc3df46f545d5e3acf251b1e3b5ca92826b..2cfee2cb1bab80b8d6535c67deb5e75ecf2542e6 100644 --- a/src/covid19/blueprints/admin/templates/admin/admin_tasks.html +++ b/src/covid19/blueprints/admin/templates/admin/admin_tasks.html @@ -11,15 +11,21 @@ <a class="btn btn-secondary btn-lg btn-block text-left" href="{{ url_for( 'app_admin.url_alive_message_start') }}" role="button">Admin :: alive message</a> + </div> + <p></p> + <div class="btn-group-vertical" role="group" aria-label="Views"> <a class="btn btn-primary btn-lg btn-block text-left" href="{{ url_for( 'app_admin.url_admin_database_dropcreate_only') }}" role="button">Admin :: database :: drop_create :: only</a> - <a class="btn btn-secondary btn-lg btn-block text-left" - href="{{ url_for( 'app_admin.url_admin_database_import') }}" - role="button">Admin :: database :: import</a> + </div> + <p></p> + <div class="btn-group-vertical" role="group" aria-label="Views"> <a class="btn btn-primary btn-lg btn-block text-left" href="{{ url_for( 'app_admin.url_admin_database_dump') }}" role="button">Admin :: database :: dump</a> + <a class="btn btn-primary btn-lg btn-block text-left" + href="{{ url_for( 'app_admin.url_admin_database_dump_reimport') }}" + role="button">Admin :: database :: dump :: reimport</a> </div> </div> <div class="col"> @@ -41,12 +47,6 @@ role="button">Admin :: all_files :: update fact_table :: initial</a> </div> <p></p> - <div class="btn-group-vertical" role="group" aria-label="Views"> - <a class="btn btn-primary btn-lg btn-block text-left" - href="{{ url_for( 'app_admin.url_admin_database_dump') }}" - role="button">Admin :: database :: dump</a> - </div> - <p></p> <div class="btn-group-vertical" role="group" aria-label="Views"> <a class="btn btn-success btn-lg btn-block text-left" href="{{ url_for( 'app_admin.url_admin_database_drop') }}"