Task 007 add agent job admin runner follow-up

This commit is contained in:
2026-05-21 19:33:24 +03:00
parent 4fd837349f
commit 8aa92ea728
16 changed files with 826 additions and 29 deletions
@@ -1,6 +1,7 @@
from __future__ import annotations
import json
import os
import shutil
import time
from pathlib import Path
@@ -90,6 +91,34 @@ def run_fake_runner_once(
)
def run_fake_runner_loop(
*,
backend_url: str,
workspace_root: Path,
poll_interval_seconds: float,
) -> None:
backend_client = HttpBackendJobClient(backend_url)
while True:
try:
run_fake_runner_once(backend_client, workspace_root=workspace_root)
except Exception:
pass
time.sleep(poll_interval_seconds)
def get_backend_url() -> str:
backend_url = os.environ.get("BACKEND_URL")
if not backend_url:
raise RuntimeError("BACKEND_URL is required for fake runner")
return backend_url
def get_workspace_root() -> Path:
return Path(
os.environ.get("RUNNER_WORKSPACE_ROOT", "/tmp/pipeline-runner-workspaces")
)
def materialize_fake_workspace(
job: dict[str, Any],
*,
+33 -1
View File
@@ -6,7 +6,13 @@ import threading
from http import HTTPStatus
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
from src.application.fake_runner import get_backend_url, get_workspace_root, run_fake_runner_loop
from src.application.fake_runner import (
HttpBackendJobClient,
get_backend_url,
get_workspace_root,
run_fake_runner_loop,
run_fake_runner_once,
)
class HealthHandler(BaseHTTPRequestHandler):
@@ -22,6 +28,32 @@ class HealthHandler(BaseHTTPRequestHandler):
self.end_headers()
self.wfile.write(body)
def do_POST(self) -> None:
if self.path != "/run-once":
self.send_error(HTTPStatus.NOT_FOUND)
return
try:
result = run_fake_runner_once(
HttpBackendJobClient(get_backend_url()),
workspace_root=get_workspace_root(),
)
except Exception as error:
body = json.dumps({"status": "error", "detail": str(error)}).encode("utf-8")
self.send_response(HTTPStatus.INTERNAL_SERVER_ERROR)
self.send_header("Content-Type", "application/json")
self.send_header("Content-Length", str(len(body)))
self.end_headers()
self.wfile.write(body)
return
body = json.dumps({"status": "ok", "job": result}, default=str).encode("utf-8")
self.send_response(HTTPStatus.OK)
self.send_header("Content-Type", "application/json")
self.send_header("Content-Length", str(len(body)))
self.end_headers()
self.wfile.write(body)
def log_message(self, format: str, *args: object) -> None:
return