Operations-Focused Routers#
Routers primarily serving observatory automation with critical operations buffering.
Executed Obs Units Router#
Path: /executed_obs_units
Purpose: Record actual telescope observations
Key endpoints:
POST /start- Start observation (buffered)PUT /{id}/finish- Finish observation (buffered)GET /{obs_unit_id}- Query observations (smart query)
Example from code:
Characteristics:
@critical_operationdecoratorPre-generated UUIDs
Smart queries merge buffer + database
High reliability requirement
Raw Data Files Router#
Path: /raw_data_files
Purpose: Register data files produced by instruments
Key endpoints:
POST /- Register file (buffered)POST /bulk- Register multiple files (buffered)GET /{id}- Get file metadata
Example:
@router.post("/bulk")
@critical_operation
async def register_files_bulk(
files: List[RawDataFileCreate],
_transaction_builder = Depends(get_transaction_builder)
):
# Bulk create step
files_step = _transaction_builder.bulk_create(
model_class=models.RawDataFile,
data_list=[f.dict() for f in files],
step_id="bulk_create_files"
)
return {"count": len(files), "status": "buffered"}
Raw Data Package Router#
Path: /raw_data_package
Purpose: Group related data files
Key endpoints:
POST /- Create package (buffered)GET /{id}- Get package with filesPUT /{id}/finalize- Mark complete
Characteristics:
Groups files by observation
Size limits (50GB max recommended)
Status tracking (building → complete)
Staging Router#
Path: /staging
Purpose: Data staging for transfer
Key endpoints:
POST /stage- Request staging (buffered)GET /status/{id}- Check statusDELETE /{id}- Cancel staging
Next Steps#
Shared Routers - Shared routers
Recording Observations - Using in scripts