Data Models

May 2, 2026 · View on GitHub

Script

{
    "id": "UUID",
    "name": "string",
    "slug": "string (unique)",
    "description": "string",
    "created_at": "datetime",
    "updated_at": "datetime",
    "user_id": "UUID",
    "status": "string",           # PENDING, UPLOADED, SUCCESS, FAILED
    "public": "boolean",
    "restricted": "boolean",
    "allowed_roles": ["string"],
    "allowed_users": ["UUID"],
    "cpu_reservation": "integer",
    "cpu_limit": "integer",
    "memory_reservation": "integer",
    "memory_limit": "integer",
    "environment": "string",
    "environment_version": "string",
    "compute_type": "string",     # gee, openeo, batch
    "uses_gee": "boolean",
    "build_error": "string",      # populated on build failure
    # Batch-specific (compute_type == "batch" only)
    "batch_job_definition": "string",
    "batch_job_queue": "string",
    "batch_image": "string",
    # openEO-specific
    "openeo_backend_url": "string"
}

Execution

{
    "id": "UUID",
    "start_date": "datetime",
    "end_date": "datetime",
    "status": "string",           # PENDING, READY, RUNNING, FINISHED, FAILED, CANCELLED, CANCELLING
    "progress": "integer",        # 0-100
    "params": "object",
    "results": "object",
    "script_id": "UUID",
    "user_id": "UUID",
    "queued_at": "datetime",      # set when queued due to concurrency limit
    "dispatched_at": "datetime",  # set when docker_run Celery task starts processing
    "duration": "float"           # seconds, only when included via ?include=duration
}

Execution Lifecycle

User submits → PENDING (queued_at set if over concurrent limit)
                 ↓ (queue_processor dispatches via Celery)
              PENDING (docker_run task picked up, dispatched_at set)
                 ↓ (Docker service created)
              READY
                 ↓ (container starts executing)
              RUNNING

              FINISHED or FAILED or CANCELLING → CANCELLED

Non-admin users default to a maximum of 3 concurrent executions (MAX_CONCURRENT_PER_USER). Admin users bypass queueing.

User

{
    "id": "UUID",
    "created_at": "datetime",
    "email": "string (unique)",
    "role": "string",             # USER, ADMIN, SUPERADMIN
    "name": "string",
    "country": "string",
    "institution": "string",
    "max_concurrent_executions": "integer"
}

Status Log

{
    "id": "integer",
    "timestamp": "datetime",
    "executions_pending": "integer",
    "executions_ready": "integer",
    "executions_running": "integer",
    "executions_finished": "integer",
    "executions_failed": "integer",
    "executions_cancelled": "integer",
    # Set only for status-change events (null for periodic snapshots):
    "status_from": "string",
    "status_to": "string",
    "execution_id": "UUID"
}

Status logs are created automatically whenever an execution status changes (event-driven, not periodic polling). Accessible via GET /api/v1/status (Admin+ only).