diff --git a/modules/weko-search-ui/weko_search_ui/admin.py b/modules/weko-search-ui/weko_search_ui/admin.py index 84a2a1fc96..f155eb7e2a 100644 --- a/modules/weko-search-ui/weko_search_ui/admin.py +++ b/modules/weko-search-ui/weko_search_ui/admin.py @@ -537,6 +537,8 @@ def get_status(self): """Get status of import process.""" data = request.get_json() result = [] + success_count = 0 + fail_count = 0 if data and data.get("tasks"): status = "done" for task_item in data.get("tasks"): @@ -568,9 +570,25 @@ def get_status(self): if not (task.successful() or task.failed()) or status == "doing" else "done" ) - response_object = {"status": status, "result": result} + if task and isinstance(task.result, dict) \ + and task.result.get("success"): + success_count += 1 + if task and isinstance(task.result, dict) \ + and "error_id" in task.result: + fail_count += 1 + response_object = { + "status": status, + "result": result, + "success_count": success_count, + "fail_count": fail_count + } else: - response_object = {"status": "error", "result": result} + response_object = { + "status": "error", + "result": result, + "success_count": success_count, + "fail_count": fail_count + } return jsonify(response_object) @expose("/export_import", methods=["POST"]) diff --git a/modules/weko-search-ui/weko_search_ui/static/js/weko_search_ui/import.js b/modules/weko-search-ui/weko_search_ui/static/js/weko_search_ui/import.js index d60aba2187..71edd263a1 100644 --- a/modules/weko-search-ui/weko_search_ui/static/js/weko_search_ui/import.js +++ b/modules/weko-search-ui/weko_search_ui/static/js/weko_search_ui/import.js @@ -40,7 +40,11 @@ const end_date = document.getElementById("end_date").value; const importResult = document.getElementById("import_result").value; const end = document.getElementById("end").value; const statusLabel = document.getElementById("status").value; +const action = document.getElementById("action").value; +const workflow_status = document.getElementById("workflow_status").value; const done = document.getElementById("done").value; +const to_do = document.getElementById("to_do").value; +const doing = document.getElementById("doing").value; const processing = document.getElementById("processing").value; const waiting = document.getElementById("waiting").value; const result_label = document.getElementById("result").value; @@ -86,6 +90,29 @@ function showErrorMsg(msg) { '×' + msg + ''); } +function getResultErrorMsg(error_id) { + let msg = ''; + switch (error_id) { + case 'is_duplicated_doi': + msg = is_duplicated_doi; + break; + case 'is_withdraw_doi': + msg = is_withdraw_doi; + break; + case 'item_is_deleted': + msg = item_is_deleted; + break; + case 'item_is_being_edit': + msg = item_is_being_edit; + break; + } + if (msg === '') { + return error_id; + } else { + return 'Error msg : ' + msg; + } +} + function getTaskResult(task_result) { if (!task_result) return ''; if (task_result.success) return succses; @@ -146,7 +173,9 @@ class MainLayout extends React.Component { is_import: true, import_status: false, isShowMessage: false, - isChecking: false + isChecking: false, + success_count: 0, + fail_count: 0 } this.handleChangeTab = this.handleChangeTab.bind(this) this.handleCheck = this.handleCheck.bind(this) @@ -338,7 +367,9 @@ class MainLayout extends React.Component { .done((res) => { that.setState({ - tasks: res.result + tasks: res.result, + success_count: res.success_count, + fail_count: res.fail_count }) if (res.status === 'done') { that.setState({ @@ -356,7 +387,7 @@ class MainLayout extends React.Component { } render() { - const { tab, tabs, list_record, is_import, tasks, import_status, isShowMessage, isChecking } = this.state; + const { tab, tabs, list_record, is_import, tasks, import_status, isShowMessage, isChecking, success_count, fail_count } = this.state; return (
| {item.end_date ? item.end_date : ''} | {item.item_id || ''} + | + {item.task_result ? (item.task_result.success ? end : (item.task_status && item.task_status === "STARTED") ? "Started" : Error) : "Start"} + | ++ {item.task_status ? + item.task_status === "PENDING" ? to_do : + item.task_status === "STARTED" ? doing : + (item.task_status === "SUCCESS" && item.task_result && item.task_result.success) ? done : + (item.task_status === "SUCCESS" && item.task_result && !item.task_result.success) ? getResultErrorMsg(item.task_result.error_id) : + item.task_status === "FAILURE" ? "FAILURE" : + '' : + ''} | {getTaskStatusLabel(item.task_status)} | {getTaskResult(item.task_result)} | diff --git a/modules/weko-search-ui/weko_search_ui/tasks.py b/modules/weko-search-ui/weko_search_ui/tasks.py index f59e2826f0..1007a5d148 100644 --- a/modules/weko-search-ui/weko_search_ui/tasks.py +++ b/modules/weko-search-ui/weko_search_ui/tasks.py @@ -152,13 +152,14 @@ def check_rocrate_import_items_task( @shared_task(ignore_results=False) def import_item(item, request_info): """Import Item.""" + start_date = datetime.now().strftime("%Y-%m-%d %H:%M:%S") try: - start_date = datetime.now().strftime("%Y-%m-%d %H:%M:%S") result = import_items_to_system(item, request_info) or dict() result["start_date"] = start_date return result - except Exception: + except Exception as ex: current_app.logger.error(traceback.format_exc()) + return {"success": False, "start_date": start_date, "error_id": 'Internal server error'} @shared_task diff --git a/modules/weko-search-ui/weko_search_ui/templates/weko_search_ui/admin/import.html b/modules/weko-search-ui/weko_search_ui/templates/weko_search_ui/admin/import.html index 262e0132d0..4d97c97581 100644 --- a/modules/weko-search-ui/weko_search_ui/templates/weko_search_ui/admin/import.html +++ b/modules/weko-search-ui/weko_search_ui/templates/weko_search_ui/admin/import.html @@ -86,7 +86,11 @@ + + + + diff --git a/modules/weko-search-ui/weko_search_ui/utils.py b/modules/weko-search-ui/weko_search_ui/utils.py index b28b88f683..ac0602f211 100644 --- a/modules/weko-search-ui/weko_search_ui/utils.py +++ b/modules/weko-search-ui/weko_search_ui/utils.py @@ -2321,15 +2321,7 @@ def import_items_to_system( remarks=tb_info[0], request_info=request_info, ) - error_id = None - if ( - ex.args - and len(ex.args) - and isinstance(ex.args[0], dict) - and ex.args[0].get("error_id") - ): - error_id = ex.args[0].get("error_id") - + error_id = "sqlalchemy error: {}".format(type(ex).__name__) return {"success": False, "error_id": error_id} except ConnectionError as ex: current_app.logger.error("elasticsearch error: %s", ex) @@ -2395,15 +2387,7 @@ def import_items_to_system( remarks=tb_info[0], request_info=request_info, ) - error_id = None - if ( - ex.args - and len(ex.args) - and isinstance(ex.args[0], dict) - and ex.args[0].get("error_id") - ): - error_id = ex.args[0].get("error_id") - + error_id = "redis error: {}".format(type(ex).__name__) return {"success": False, "error_id": error_id} except Exception as ex: current_app.logger.error("Unexpected error: %s", ex) @@ -2428,15 +2412,7 @@ def import_items_to_system( remarks=tb_info[0], request_info=request_info, ) - error_id = None - if ( - ex.args - and len(ex.args) - and isinstance(ex.args[0], dict) - and ex.args[0].get("error_id") - ): - error_id = ex.args[0].get("error_id") - + error_id = "Unexpected error: {}".format(type(ex).__name__) return {"success": False, "error_id": error_id} return {"success": True, "recid": item["id"]}