Bind visualization status to snapshot freshness
This commit is contained in:
parent
24bd13f9d9
commit
176b2d2784
9 changed files with 627 additions and 43 deletions
|
|
@ -9,6 +9,8 @@ import resource
|
|||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import threading
|
||||
import time
|
||||
from collections.abc import Callable, Mapping
|
||||
from pathlib import Path
|
||||
from typing import cast
|
||||
|
|
@ -24,7 +26,7 @@ from docforge.index import ProjectIndex
|
|||
from docforge.mcp_server import DocForgeService
|
||||
from docforge.project import Project
|
||||
from docforge.rendering import RenderService
|
||||
from docforge.viewer_manager import ViewerManagerClient
|
||||
from docforge.viewer_manager import ViewerManager, ViewerManagerClient
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
ZERO_WORK_COUNTERS = (
|
||||
|
|
@ -107,10 +109,6 @@ def _benchmark(root: Path, node_count: int, samples: int) -> dict[str, object]:
|
|||
ProjectIndex(project).build()
|
||||
RenderService(project).render("manual")
|
||||
service = DocForgeService(project, diagnostics=True)
|
||||
service.visualization = ViewerManagerClient(
|
||||
service.index,
|
||||
state_path=root / ".docforge" / "missing-viewer-manager.json",
|
||||
)
|
||||
target = synthetic_node_id(node_count - 1)
|
||||
operations = {
|
||||
"warm_no_change_synchronize": _operation(
|
||||
|
|
@ -164,13 +162,49 @@ def _benchmark(root: Path, node_count: int, samples: int) -> dict[str, object]:
|
|||
samples=samples,
|
||||
p95_limit_ms=50,
|
||||
),
|
||||
"visualization_unavailable_status": _operation(
|
||||
}
|
||||
state_path = root / ".docforge" / "benchmark-viewer-manager.json"
|
||||
manager = ViewerManager(state_path, check_interval_seconds=0.02)
|
||||
manager_thread = threading.Thread(target=manager.serve_forever, daemon=True)
|
||||
manager_thread.start()
|
||||
deadline = time.monotonic() + 2
|
||||
while not state_path.exists() and time.monotonic() < deadline:
|
||||
time.sleep(0.01)
|
||||
if not state_path.exists():
|
||||
manager.shutdown()
|
||||
manager_thread.join(timeout=2)
|
||||
raise RuntimeError("Viewer manager did not start")
|
||||
service.visualization = ViewerManagerClient(service.index, state_path=state_path)
|
||||
try:
|
||||
service.visualization.start()
|
||||
operations["visualization_current_status"] = _operation(
|
||||
service.visualization_status,
|
||||
samples=samples,
|
||||
p95_limit_ms=50,
|
||||
expected_status="error",
|
||||
),
|
||||
}
|
||||
)
|
||||
with service.index.path.open("ab") as stream:
|
||||
stream.write(b"\n")
|
||||
operations["visualization_stale_status"] = _operation(
|
||||
service.visualization_status,
|
||||
samples=samples,
|
||||
p95_limit_ms=50,
|
||||
)
|
||||
service.stop_visualization()
|
||||
operations["visualization_not_running_status"] = _operation(
|
||||
service.visualization_status,
|
||||
samples=samples,
|
||||
p95_limit_ms=50,
|
||||
)
|
||||
finally:
|
||||
manager.shutdown()
|
||||
manager_thread.join(timeout=2)
|
||||
service.visualization = ViewerManagerClient(service.index, state_path=state_path)
|
||||
operations["visualization_unavailable_status"] = _operation(
|
||||
service.visualization_status,
|
||||
samples=samples,
|
||||
p95_limit_ms=50,
|
||||
expected_status="error",
|
||||
)
|
||||
return {
|
||||
"fixture": {
|
||||
"kind": "synthetic_generic",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue