Files
ome-cockpit/docs/API.md
T
mo c2bb0465d0 Document full architecture, design, API, features, deployment, and security.
Adds diagrams and expands the ATC demo path so the cockpit is fully described in-repo.
2026-07-17 04:04:32 +02:00

4.3 KiB

API reference

Base URL (lab): http://atc-portal01.dell-atc.lan:3090
Internal container port: 8090

All JSON unless noted. No auth middleware in lab build (protect at network edge).


Health & fleet

GET /api/health

{ "status": "ok", "updated_at": 1784252683.4, "pulse": 12 }

GET /api/fleet

Full in-memory snapshot:

Field Description
ome Appliance name/version/url
summary totals, connected, offline, watts, samples
devices[] normalized nodes
subnets[] /24 aggregates
groups[] OME groups (names)
models[] server model counts
alerts[] recent alert feed
events[] fleet deltas (incl. device_new/removed)
context alert_severity, hottest, notifications, …
gpu latest GPU matrix
pulse monotonic refresh counter
openwebui_url companion AI URL

WS /ws/fleet

  • On connect: immediate {type:"snapshot", data}
  • Then server pushes {type:"snapshot"} / {type:"gpu"} / {type:"error"}
  • Client may send any text ping; server mainly broadcasts

Devices

GET /api/devices/{device_id}

On-demand OME inventory enrichment.

Response highlights:

{
  "device": { "...fleet node..." },
  "power": { "watts": 320, "avg_watts": 300, "peak_watts": 400, "energy_kwh": 12.3 },
  "inventory_types": ["serverProcessors", "deviceSoftware", "..."],
  "inventory": { "deviceSoftware": [ /* raw OME rows */ ], "...": [] },
  "landscape": {
    "os": [],
    "software": [],
    "firmware": [],
    "drivers": [],
    "applications": [],
    "management": [],
    "licenses": []
  },
  "_ts": 1784252700.0
}

Cached ~300 seconds per device.


GPU

GET /api/gpu

Latest GPU sidecar payload (also present on fleet snapshot).


Chat & models

GET /api/models

{
  "default": "llama3-70b-gptq",
  "models": [
    { "id": "llama3-70b-gptq", "name": "llama3-70b-gptq", "source": "openwebui|vllm" },
    { "id": "ome-copilot", "name": "OME Copilot", "source": "openwebui" }
  ]
}

POST /api/chat

{
  "message": "List critical systems",
  "history": [{ "role": "user", "content": "..." }],
  "focus_device_id": 50374,
  "model": "llama3-70b-gptq"
}

Response:

{
  "reply": "...",
  "model": "llama3-70b-gptq",
  "backend": "vllm|openwebui",
  "gpu": {},
  "context_bytes": 4104
}

Errors: 502 with upstream detail (context length, auth, etc.).


Tickets (Ops desk)

Admins (fixed lab list): jody, laurens (+ names in API).

Method Path Purpose
GET /api/admins Admin directory
GET /api/tickets List tickets
POST /api/tickets Create
GET /api/tickets/{id} Detail + messages
POST /api/tickets/{id}/messages Add note
PATCH /api/tickets/{id} status / assignee / priority / accepted_by
DELETE /api/tickets/{id} Delete

SQLite file: $COCKPIT_DATA/ops.db (default /data/ops.db).


SSH

WS /ws/ssh

Message 1 (client → server):

{
  "type": "auth",
  "host": "10.0.41.50",
  "port": 22,
  "username": "jody",
  "password": "***",
  "cols": 120,
  "rows": 40,
  "term": "xterm-256color"
}

Server control messages: {type:"status|ready|error|pong", message?: string}
Thereafter: raw terminal bytes as WebSocket text.

Client control (optional JSON):

{ "type": "resize", "cols": 100, "rows": 30 }
{ "type": "ping" }

Constraints:

  • host must appear as a management IP in the current fleet snapshot
  • Max 25 concurrent bridges; max 3 per client IP
  • Idle timeout ~30 minutes

GET /api/ssh/sessions

Ops visibility (no secrets):

{ "active": 2, "max": 25, "sessions": [{ "id": "...", "client": "10.0.10.65", "host": "10.0.41.50", "user": "jody", "age_sec": 42 }] }

Static assets

Path File
/ ui/index.html (no-store cache)
/app.js /ops.js /ssh.js /styles.css UI
/vendor/xterm/* Terminal library
/dell.png etc. Branding

Environment (settings)

Mapped via pydantic-settings from .env (see .env.example):

OME_URL, OME_USER, OME_PASSWORD, POLL_INTERVAL, OPENWEBUI_URL, OPENWEBUI_EMAIL, OPENWEBUI_PASSWORD, GPU_METRICS_URL, VLLM_URL, VLLM_MODEL, VLLM_MAX_TOKENS, CHAT_SYSTEM_CHARS, COCKPIT_DATA, CORS_ORIGINS