diff --git a/BUILD b/BUILD index 121b8e5..b31513e 100644 --- a/BUILD +++ b/BUILD @@ -1 +1 @@ -a94bf02 +92d3b88 \ No newline at end of file diff --git a/src/user_workspaces_server/controllers/resources/slurm_api_resource.py b/src/user_workspaces_server/controllers/resources/slurm_api_resource.py index e64dd39..9db9708 100644 --- a/src/user_workspaces_server/controllers/resources/slurm_api_resource.py +++ b/src/user_workspaces_server/controllers/resources/slurm_api_resource.py @@ -112,6 +112,12 @@ def get_resource_job(self, job): if len(resource_job["errors"]): raise APIException(resource_job["errors"]) resource_job = resource_job["jobs"][0] + + if resource_job["job_state"] == "TIMEOUT": + logger.error( + f"Workspaces Job {job.id}/Slurm job {job.resource_job_id} has timed out." + ) + resource_job["status"] = self.translate_status(resource_job["job_state"]) end_time = resource_job.get("end_time") if end_time is not None: diff --git a/src/user_workspaces_server/tasks.py b/src/user_workspaces_server/tasks.py index 5d4ea1a..6694313 100644 --- a/src/user_workspaces_server/tasks.py +++ b/src/user_workspaces_server/tasks.py @@ -80,7 +80,7 @@ def update_job_status(job_id): # TODO: At some point we will have metrics returned by resource_job_info job.job_details["current_job_details"].update( - resource_job_info["current_job_details"] + resource_job_info.get("current_job_details", {}) ) if job.job_details["current_job_details"].get("connection_details", {}): diff --git a/src/user_workspaces_server/views/job_view.py b/src/user_workspaces_server/views/job_view.py index 35603f3..68b5c3d 100644 --- a/src/user_workspaces_server/views/job_view.py +++ b/src/user_workspaces_server/views/job_view.py @@ -28,9 +28,12 @@ def get(self, request, job_id=None): job = list(job.all().values(*models.Job.get_dict_fields())) - return JsonResponse( - {"message": "Successful.", "success": True, "data": {"jobs": job}} - ) + if job: + return JsonResponse( + {"message": "Successful.", "success": True, "data": {"jobs": job}} + ) + else: + raise NotFound("Job matching given parameters could not be found.") def put(self, request, job_id, put_type): try: diff --git a/src/user_workspaces_server/views/workspace_view.py b/src/user_workspaces_server/views/workspace_view.py index b6d8128..5538315 100644 --- a/src/user_workspaces_server/views/workspace_view.py +++ b/src/user_workspaces_server/views/workspace_view.py @@ -34,13 +34,16 @@ def get(self, request, workspace_id=None): workspaces = list(workspace.all().values(*models.Workspace.get_dict_fields())) - return JsonResponse( - { - "message": "Successful.", - "success": True, - "data": {"workspaces": workspaces}, - } - ) + if workspaces: + return JsonResponse( + { + "message": "Successful.", + "success": True, + "data": {"workspaces": workspaces}, + } + ) + else: + raise NotFound("Workspace matching given parameters could not be found.") def post(self, request): try: @@ -57,7 +60,9 @@ def post(self, request): raise ParseError("Workspace details not JSON.") request_workspace_details = { - "files": [file["name"] for file in workspace_details.get("files", [])], + "files": [ + {"name": file["name"]} for file in workspace_details.get("files", []) + ], "symlinks": workspace_details.get("symlinks", []), }