def get_runs() -> Response: """ This list should be provided in a stable ordering. (The actual ordering is implementation dependent.) When paging through the list, the client should not make assumptions about live updates, but should assume the contents of the list reflect the workflow list at the moment that the first page is requested. To monitor a specific workflow run, use GetRunStatus or GetRunLog. """ if current_app.config["GET_RUNS"] is False: abort(403, "This endpoint `GET /runs` is unavailable because the " "service provider didn't allow the request to this endpoint " "when sapporo was started.") res_body: RunListResponse = { "runs": [], "next_page_token": "" } for run_id in get_all_run_ids(): res_body["runs"].append({ "run_id": run_id, "state": get_state(run_id).name # type: ignore }) response: Response = jsonify(res_body) response.status_code = GET_STATUS_CODE return response
def get_run_log(run_id: str) -> RunLog: run_log: RunLog = { "run_id": run_id, "request": read_file(run_id, "run_request"), "state": get_state(run_id).name, # type: ignore "run_log": get_log(run_id), "task_logs": read_file(run_id, "task_logs"), "outputs": read_file(run_id, "outputs") } return run_log
def get_runs_id_status(run_id: str) -> Response: """ This provides an abbreviated (and likely fast depending on implementation) status of the running workflow, returning a simple result with the overall state of the workflow run (e.g. RUNNING, see the State section). """ validate_run_id(run_id) res_body: RunStatus = { "run_id": run_id, "state": get_state(run_id).name # type: ignore } response: Response = jsonify(res_body) response.status_code = GET_STATUS_CODE return response
def cancel_run(run_id: str) -> None: state: State = get_state(run_id) if state == State.RUNNING: write_file(run_id, "state", State.CANCELING.name) pid: int = int(read_file(run_id, "pid")) os.kill(pid, signal.SIGUSR1)