diff options
| author | Stefan Boberg <[email protected]> | 2026-03-23 12:23:19 +0100 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2026-03-23 12:23:19 +0100 |
| commit | 26aa50677403e4c5ad053b221bc7264fe1d249f2 (patch) | |
| tree | de196528390e8875b0551d52071038120d969f73 /docs/sessions.md | |
| parent | Process management improvements (#881) (diff) | |
| download | zen-26aa50677403e4c5ad053b221bc7264fe1d249f2.tar.xz zen-26aa50677403e4c5ad053b221bc7264fe1d249f2.zip | |
Documentation updates (#882)
Restructured the docs folder in preparation for more docs. Improved the contents a bit.
Diffstat (limited to 'docs/sessions.md')
| -rw-r--r-- | docs/sessions.md | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/docs/sessions.md b/docs/sessions.md new file mode 100644 index 000000000..593c95283 --- /dev/null +++ b/docs/sessions.md @@ -0,0 +1,96 @@ +# Sessions + +The Sessions service tracks client connections to zenserver. Each session +represents a logical connection from a client application — an Unreal Editor +instance, a build agent, a CLI tool, or any other process interacting with the +server. + +## Concepts + +### Session + +A session is identified by a unique OID and carries: + +- **AppName** — the name of the connecting application (e.g. `UnrealEditor`, + `zen`) +- **Mode** — the operational mode of the client +- **JobId** — an optional job identifier for build farm scenarios +- **Metadata** — arbitrary key-value data attached by the client +- **Timestamps** — creation, last update, and end times + +### Session Log + +Each session has an associated log stream that can receive entries from the +client or from zenserver itself. The server's own session captures internal log +output, making it visible in the web dashboard. + +Log entries contain a timestamp, severity level (`debug`, `info`, `warn`, +`error`), a message string, and optional structured data fields. + +Logs are kept in memory with a maximum of 10,000 entries per session. When the +limit is exceeded, the oldest entries are evicted. + +## API + +**Base URI:** `/sessions/` + +### Listing Sessions + +``` +GET /sessions/ # Active sessions (default) +GET /sessions/?status=ended # Ended sessions +GET /sessions/?status=all # All sessions +``` + +### Managing Sessions + +``` +POST /sessions/{id} # Create or update a session +PUT /sessions/{id} # Update session metadata +DELETE /sessions/{id} # End and remove a session +GET /sessions/{id} # Get session details +``` + +When creating a session, the request body should contain: + +- `appname` — application name +- `mode` — operational mode +- `jobid` — optional job identifier +- `metadata` — optional key-value metadata + +### Session Logs + +``` +GET /sessions/{id}/log # Retrieve log entries +POST /sessions/{id}/log # Append log entries +``` + +**Retrieving logs** supports two modes: + +- **Cursor-based** (recommended): pass `?cursor=N` where N is the cursor value + from the previous response. Returns only entries appended since that cursor. +- **Offset/limit**: pass `?offset=N&limit=M` for traditional pagination. + +**Appending logs** accepts: + +- **Plain text** — each line becomes a separate log entry +- **JSON** — a single log object or `{"entries": [...]}` array, each with + `level`, `message`, and optional `data` fields + +### Live Updates + +``` +GET /sessions/ws # WebSocket connection +``` + +The WebSocket endpoint pushes the full session list to connected clients +periodically. This powers the real-time session table in the web dashboard. + +## Web Dashboard + +The Sessions page in the dashboard provides: + +- A table of active, ended, or all sessions with sorting and pagination +- Session detail panel showing metadata and properties +- Live log viewer with follow mode, newest-first ordering, and text filtering +- The server's own session is selected by default on page load |