Add a runs screen: a table, a run in full, and curves side by side
This commit is contained in:
@@ -14,9 +14,11 @@ from fluksio.flow.dashboards import (
|
||||
DashboardNotFound,
|
||||
DashboardsPublic,
|
||||
default_dashboard,
|
||||
results_dashboard,
|
||||
results_name,
|
||||
)
|
||||
from fluksio.flow.events import event_bus
|
||||
from fluksio.flow.store import StaleVersion
|
||||
from fluksio.flow.store import FlowNotFound, StaleVersion
|
||||
from fluksio.models import Message
|
||||
|
||||
router = APIRouter(
|
||||
@@ -73,6 +75,40 @@ async def create_dashboard(name: str, store: DashboardStoreDep) -> Any:
|
||||
return await run_in_threadpool(store.write_draft, defn, 0)
|
||||
|
||||
|
||||
@router.post("/from-flow/{flow}", response_model=DashboardDef)
|
||||
async def generate_results_dashboard(
|
||||
flow: str,
|
||||
store: DashboardStoreDep,
|
||||
controller: FlowControllerDep,
|
||||
) -> Any:
|
||||
"""Draw a batch flow's results as a dashboard, from the ports it declares.
|
||||
|
||||
Published straight away rather than left as a draft: there is nothing to
|
||||
review that the flow did not already say, and what makes it useful is
|
||||
being able to open it against a run immediately. It is an ordinary
|
||||
dashboard afterwards — editing it is how it stops being generic.
|
||||
"""
|
||||
try:
|
||||
definition = await run_in_threadpool(controller.store.read_flow, flow)
|
||||
except FlowNotFound:
|
||||
raise HTTPException(status_code=404, detail=f"No flow named '{flow}'")
|
||||
if definition.mode != "batch":
|
||||
raise HTTPException(
|
||||
status_code=422,
|
||||
detail=f"'{flow}' is a live flow; a results dashboard is a run's view",
|
||||
)
|
||||
name = results_name(flow)
|
||||
if await run_in_threadpool(store.exists, name):
|
||||
raise HTTPException(status_code=409, detail=f"'{name}' already exists")
|
||||
|
||||
written = await run_in_threadpool(store.write, results_dashboard(definition))
|
||||
await run_in_threadpool(_apply_history_limits, store, controller)
|
||||
event_bus.publish(
|
||||
{"type": "dashboard_changed", "dashboard": name, "ts": time.time()}
|
||||
)
|
||||
return written
|
||||
|
||||
|
||||
@router.put("/{name}", response_model=DashboardDef)
|
||||
async def save_dashboard(
|
||||
name: str,
|
||||
|
||||
Reference in New Issue
Block a user