Stage and service logs
Step output of the workspace. Without `follow`, the history as NDJSON (`application/x-ndjson`, one `LogEntry` per line, oldest first, at most `limit` lines) from the log backend. With `follow=true`, a `text/event-stream`: the agents' ring buffers since `since`, then live lines, each `event: log` with a `LogEntry` as data; `event: end` when the followed run finished; a `: ping` comment every 25 s. Filters combine; `replica` is a pod name. Needs `workspace.view`.
openapi/harthelm.yaml at v1.5.0__Host-harthelm_session<token>Browser session of the UI (12 h idle, 7 days absolute). State-changing requests also need the header
Harthelm-CSRF: 1 and a matching Origin.
ws*integerNumeric resource id.
int641 <= valuestage?stringOnly this stage's steps.
"prepare""test""run"service?stringA service name, or ide for prepare and test.
length <= 32replica?stringOnly this pod's lines (a pod name).
length <= 253step?integerOnly this step's lines (the step's index).
0 <= valuesince?stringOnly lines at or after this time; default the start of the latest run of the stage.
date-timefollow?booleanStream live lines as server-sent events instead of answering the history.
falselimit?integerHistory only; the newest lines win when there are more.
1 <= value <= 100001000The log lines.
- response
time*stringdate-timestage*StageName"prepare""test""run"step?integer0 <= valueservice*stringreplica*stringrun_id?IDNumeric resource id.
int641 <= valuestream*LogStreamsystem lines come from the agent (step started, exited with 1, restarting in 4 s).
"stdout""stderr""system"msg*stringcurl -X GET 'https://console.example.com/api/v1/workspaces/1/logs'{ "time": "2019-08-24T14:15:22Z", "stage": "prepare", "step": 0, "service": "string", "replica": "string", "run_id": 1, "stream": "stdout", "msg": "string"}Write harthelm.yml
Writes the profile's file through the IDE agent, the one file write the console has. `If-Match` is the quoted SHA-256 the editor read; `If-None-Match: *` creates a file that must not exist yet; neither is 428. A file whose hash is not `If-Match` (or that exists under `If-None-Match: *`) is 412 with problem `config-changed`: the editor re-reads and offers *Save and override*, which sends the new hash. The agent writes atomically (a temporary file in `/data/app` renamed over the old one, mode kept) and does not validate: a file with a syntax error is saved as written, and the next Plan answers 422 `invalid-config`. The content is UTF-8 without NUL bytes (422 with pointer `/content`), at most 1 MiB (413). Nothing else changes: the synced landscape keeps running until a Sync. Needs `workspace.code`; audited as `landscape.config_write` (profile and the new hash).
Create a standalone managed service
Needs `team.managed_services` (every team member). Checks the request against the provider's definition: the provider is offered to the team and available on the cluster (409 `provider-unavailable`), the plan exists, `resources` override only parameters that are not read-only and stay within their bounds, `config` and `secrets` validate against `fields.config` and `fields.secrets` (defaults applied; 422 with pointers `/config/<k>`, `/secrets/<k>`, `/resources/<k>`, `/plan`). 409 `name-taken` when a standalone instance of the team that is not deleted has the name, `one-per-team`, `quota-exceeded` (the plan's CPU and memory against the team quota). The instance starts in `creating`; follow `managed_service.updated`. Secret values are write-only: the console generates passwords in the browser and shows them once. `public` (1.4): as for `PATCH /managed-services/{ms}` (422 at `/public`, 409 `public-hosts-disabled`).