feat(observatory): expose attempt-bound recorded progress
This commit is contained in:
@@ -1151,6 +1151,17 @@ def build_observatory_router(
|
||||
"authority": dict(_OBSERVATION_ONLY_AUTHORITY),
|
||||
}
|
||||
|
||||
@router.get("/api/v1/observatory/runs/{job_id}/progress")
|
||||
def get_observatory_progress(
|
||||
job_id: str = ApiPath(pattern=r"^observatory-run-[a-f0-9]{32}$"),
|
||||
) -> dict[str, object]:
|
||||
try:
|
||||
return recorded_job_queue.progress(job_id)
|
||||
except ObservatoryRecordedQueueNotFoundError as exc:
|
||||
raise HTTPException(status_code=404, detail="Расчёт не найден.") from exc
|
||||
except (ObservatoryRecordedQueueError, ValueError) as exc:
|
||||
raise HTTPException(status_code=503, detail="Прогресс недоступен.") from exc
|
||||
|
||||
@router.get("/api/v1/observatory/runs/{job_id}")
|
||||
def get_observatory_recorded_run(
|
||||
job_id: str = ApiPath(
|
||||
|
||||
@@ -51,6 +51,7 @@ from k1link.observatory.recorded_jobs import (
|
||||
ObservatoryRecordedQueueStaleClaimError,
|
||||
RecordedExecutorIdentity,
|
||||
)
|
||||
from k1link.observatory.recorded_progress import RecordedProgress
|
||||
|
||||
OBSERVATORY_WORKER_CAPABILITY_CLAIM_REQUEST_SCHEMA: Final = (
|
||||
"missioncore.observatory-worker-claim-request/v2"
|
||||
@@ -194,6 +195,12 @@ class ObservatoryWorkerRenewRequest(_StrictWorkerRequest):
|
||||
heartbeat_sequence: int = Field(ge=1)
|
||||
|
||||
|
||||
class ObservatoryWorkerProgressRequest(_StrictWorkerRequest):
|
||||
schema_version: Literal["missioncore.observatory-worker-progress-request/v1"]
|
||||
claim_token: str = Field(pattern=_CLAIM_TOKEN_PATTERN)
|
||||
progress: RecordedProgress
|
||||
|
||||
|
||||
class ObservatoryWorkerCheckpointRequest(_StrictWorkerRequest):
|
||||
schema_version: Literal["missioncore.observatory-worker-checkpoint-request/v1"]
|
||||
claim_token: str = Field(pattern=_CLAIM_TOKEN_PATTERN)
|
||||
@@ -333,6 +340,17 @@ def build_observatory_worker_router(
|
||||
)
|
||||
).as_dict()
|
||||
|
||||
@router.post("/recorded-jobs/{job_id}/progress", status_code=204)
|
||||
def report_job_progress(
|
||||
request: ObservatoryWorkerProgressRequest,
|
||||
job_id: Annotated[str, ApiPath(pattern=_JOB_ID_PATTERN)],
|
||||
) -> Response:
|
||||
_queue_call(lambda: queue.report_progress(
|
||||
job_id, claim_token=request.claim_token,
|
||||
claimant_id=authentication.contour_id, progress=request.progress,
|
||||
))
|
||||
return Response(status_code=204)
|
||||
|
||||
@router.post("/recorded-jobs/{job_id}/checkpoint")
|
||||
def checkpoint_job(
|
||||
request: ObservatoryWorkerCheckpointRequest,
|
||||
|
||||
Reference in New Issue
Block a user