Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions platform/control-plane/access-control/access-explorer.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ The result has two sections:
| Section | What it lists |
|---|---|
| **Workspaces** | Each workspace the principal belongs to, with the workspace role and where it comes from. |
| **Shared objects** | Each object shared with the principal: the kind (**dashboard**, **folder**, and so on), the name, the workspace, the role, the **allow** or deny effect and the source. |
| **Shared objects** | Each object shared with the principal: the kind (**dashboard**, **folder**, and so on), the name, the workspace, the role, the **Allow** or **Deny** effect and the source. |

The source reads **direct** for access given to the person, or **via \<group\>** when it comes through a group. For example, alice.nguyen@egret.local holds `ws_admin` on *Docs sandbox* and *Finance analytics* directly, `ws_editor` on *Finance analytics* and `finance_reporter` on *Docs sandbox* via `finance-analysts`, and sees an app shared with that group.

Expand All @@ -39,7 +39,7 @@ The result lists every principal that can reach the object. The header shows the
|---|---|
| **Principal** | A **User** or **Group**. |
| **Access** | The role: `platform_admin`, `ws_editor`, `ws_viewer`. |
| **Effect** | **allow** (or deny for a blocked principal). |
| **Effect** | **Allow** (or **Deny** for a blocked principal). |
| **Source** | **platform admin**, **direct grant**, or **via workspace \<slug\>**. |

The same person can appear several times when they reach the object by more than one route, for example a group that has both a direct grant and a workspace role.
Expand Down
6 changes: 3 additions & 3 deletions platform/control-plane/access-control/users.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ A summary strip counts **users**, **active** and **disabled**. Two filters narro
|---|---|
| **User** | Avatar, display name and email. |
| **Provider** | `local` for accounts created in egret, `oidc` for people who sign in through SSO. |
| **Status** | **active** or **disabled**. A disabled user cannot sign in. |
| **Status** | **Active** or **Disabled**. A disabled user cannot sign in. |
| **Roles** | Platform roles granted to the user directly, or a dash. A role the user holds through a group is not shown (KI-260). |
| **Groups** | How many groups the user belongs to. |

Expand Down Expand Up @@ -51,7 +51,7 @@ Prefer SSO for people. A local account has its own password and does not follow

## The user page

Select a user to open their page. The header shows the avatar, name, status, provider and email, with **Disable** (or **Enable**) and **Delete**. A local account also has **Reset password**: *Set a new password for this local account. Their existing sessions are signed out immediately.*
Select a user to open their page. The header shows the name, status, provider and email, with **Disable** (or **Enable**) and **Delete**. A local account also has **Reset password**: *Set a new password for this local account. Their existing sessions are signed out immediately.*

![The page of Farid Haddad: details, his directly granted platform role and one group](/img/platform/admin/cp-user-detail.png)

Expand All @@ -75,7 +75,7 @@ The table lists **Role** and **Scope** with a remove button. With none it reads

## Disable and delete

**Disable** blocks sign-in without removing anything and signs the user out. It asks first: *Disable \<email\>?* (*They are signed out at once and cannot sign in until the account is enabled again. Their memberships and role grants are kept.*), with **Cancel** and **Disable user**. The status becomes **disabled**. **Enable** reverses it at once, without a confirmation. **Delete** asks *Delete "\<email\>"?* (*This user, their sessions, group memberships, and role grants will be permanently removed. This cannot be undone.*) and needs you to type `delete`. Prefer disabling: grants and shares that name a deleted user become unmatched names (see [People & groups](../../data-governance/people-and-groups/index.md)).
**Disable** blocks sign-in without removing anything and signs the user out. It asks first: *Disable \<email\>?* (*They are signed out at once and cannot sign in until the account is enabled again. Their memberships and role grants are kept.*), with **Cancel** and **Disable user**. The status becomes **Disabled**. **Enable** reverses it at once, without a confirmation. **Delete** asks *Delete "\<email\>"?* (*This user, their sessions, group memberships, and role grants will be permanently removed. This cannot be undone.*) and needs you to type `delete`. Prefer disabling: grants and shares that name a deleted user become unmatched names (see [People & groups](../../data-governance/people-and-groups/index.md)).

## Limits and known issues

Expand Down
4 changes: 2 additions & 2 deletions platform/control-plane/audit-log.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ The page shows a table with six columns:
| **Actor** | The user's email, or a short id for an actor that is not a user who still exists (for example a deleted account or a service account). |
| **Action** | What was attempted, in the form `thing:action`, for example `secret:read`, `member:add`, `perm_rule:create`. |
| **Resource** | What it was about: the resource type and id, for example `workspace (e76a8865-…)` or `platform`. |
| **Decision** | **allow** or **deny** for an authorization decision, a dash for a recorded change. |
| **Decision** | **Allow** or **Deny** for an authorization decision, a dash for a recorded change. |
| **Detail** | The reason, or the JSON detail of a change, for example the grants that allowed a decision (`grant-0`) or the fields of an update. |

Every page loads 100 rows. **Load more** fetches the next 100 using a keyset cursor. Changing any filter starts again from the newest row.
Expand All @@ -29,7 +29,7 @@ Every page loads 100 rows. **Load more** fetches the next 100 using a keyset cur

| Kind | What it records | Decision | Example |
|---|---|---|---|
| **Decision** | An authorization check: the actor asked to do something and the policy engine answered. | **allow** or **deny**, with the grants that decided. | `secret:read` on `platform`, **allow**, `grant-0` |
| **Decision** | An authorization check: the actor asked to do something and the policy engine answered. | **Allow** or **Deny**, with the grants that decided. | `secret:read` on `platform`, **Allow**, `grant-0` |
| **Mutation** | A change that was made. | A dash. | `member:add`, `object_grant:put`, `perm_rule:create`, `tag:assign` |

Decisions are recorded for the platform's role-based checks. Impersonation is recorded as the mutations `impersonation.start` (with the reason) and `impersonation.end`, with the admin as the actor; the decisions made while impersonating are recorded under the impersonated user, with nothing that names the admin. Governance changes also appear on the Governance overview's **Recent changes**; the audit log keeps the raw entries. A workspace pre-registration is recorded as `member:invite` and `member:uninvite`, and its redemption at the person's first sign-in as `member:add` with the inviting admin as the actor and `"via": "pre-registration"` in the detail.
Expand Down
2 changes: 1 addition & 1 deletion platform/control-plane/catalogs/catalog-detail.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ For an egret warehouse the tab says *egret manages this catalog's configuration
2. Optionally press **Test** to check the catalog first. For a catalog with a host, egret only checks that it can open a TCP connection, for example *Reachability check — egret could not open a TCP connection to finance-db.internal:5432. Even a connection that had succeeded would not verify credentials, TLS or permissions.* Once the catalog is attached to a provisioned Trino engine, **Test** runs a query there instead.
3. Press **Attach**.

The table lists the engine with its status badge, its type, whether it is **Primary**, and the **Apply** and **Applied** states, with **Retry** and **Detach**. An external engine shows the state *declared*: egret recorded that the engine serves the catalog and applied nothing. A provisioned engine shows whether the apply succeeded (*applied*).
The table lists the engine with its status badge, its type, whether it is **Primary**, and the **Apply** and **Applied** states, with **Retry** and **Detach**. An external engine shows the state *declared*: egret recorded that the engine serves the catalog and applied nothing. A provisioned engine shows whether the apply succeeded (*Applied*).

:::note
**Apply** is this catalog's state on that engine, not the engine's own health. An engine that has since failed still reads applied here, because the catalog did apply before it broke.
Expand Down
10 changes: 5 additions & 5 deletions platform/control-plane/query-engines/engine-detail.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ If the engine cannot start the page shows *The engine failed to start.* with the

To attach another, choose it in **Catalog to attach** and press **Attach**. With nothing left the form says *Every catalog egret can show you is already on this engine.*

*Apply is this catalog's state on this engine, not a check that it still works*: a catalog that reached the engine before the engine broke is still recorded as **applied**.
*Apply is this catalog's state on this engine, not a check that it still works*: a catalog that reached the engine before the engine broke is still recorded as **Applied**.

### Workspaces

Expand All @@ -51,7 +51,7 @@ The engine then appears in that workspace's SQL Lab as a database named after th
2. Press **Save changes**. The **Review changes** dialog lists only what changes, for example *1 field will change.* with the old and new value, and says *Saving re-provisions (rolls) the engine pods; running queries are interrupted.* (on Docker: *Saving recreates the engine's containers; running queries are interrupted.*).
3. Press **Save changes** in the dialog to apply, or **Cancel** to save nothing.

On the demo stack the save recreated the coordinator container within a minute while the header kept showing **running**, and the new value was in effect: `SHOW SESSION LIKE 'query_max_run_time'` reported the default `2.00h`.
On the demo stack the save recreated the coordinator container within a minute while the header kept showing **Running**, and the new value was in effect: `SHOW SESSION LIKE 'query_max_run_time'` reported the default `2.00h`.

With **Expose via ingress** on and no **Host**, the field says *Enter the host the ingress serves, or turn off Expose via ingress.* and **Save changes** stays disabled. The Docker provisioner refuses an ingress whatever the host (see [Provision an engine](./provision.md#kubernetes-and-docker)), although the section is still offered there (KI-264).

Expand All @@ -73,9 +73,9 @@ The node list comes from Trino's `GET /v1/node` where the coordinator serves it.

### Restart

**Restart** asks *Restart engine?* (*This rolls the coordinator and worker pods; running queries are interrupted.* On the Docker provisioner: *This restarts the coordinator and worker containers; running queries are interrupted.*). For a Trino engine it adds *If the pods (containers) are gone, they are created again.* On the demo stack the status went to **provisioning** and back to **running** in 38 seconds, and the container was recreated.
**Restart** asks *Restart engine?* (*This rolls the coordinator and worker pods; running queries are interrupted.* On the Docker provisioner: *This restarts the coordinator and worker containers; running queries are interrupted.*). For a Trino engine it adds *If the pods (containers) are gone, they are created again.* On the demo stack the status went to **Provisioning** and back to **Running** in 38 seconds, and the container was recreated.

A Trino engine that has run before and now has no pod or container at all, for example after `just demo-down` and `just demo-up` on the demo stack, is created again from its stored settings when you press **Restart**. An engine that is still being created (status **provisioning**) is left to finish.
A Trino engine that has run before and now has no pod or container at all, for example after `just demo-down` and `just demo-up` on the demo stack, is created again from its stored settings when you press **Restart**. An engine that is still being created (status **Provisioning**) is left to finish.

### Delete

Expand Down Expand Up @@ -164,7 +164,7 @@ A Trino apply rebuilds the engine's entire catalog configuration. When one catal
## Limits and known issues

- An external engine's page has no health status or restart. Egret cannot see the cluster.
- On the Docker provisioner, a save interrupted by the browser disconnecting (a closed tab, a dropped connection) can stop the old containers without creating new ones; the engine shows **failed** until the next save (KI-263).
- On the Docker provisioner, a save interrupted by the browser disconnecting (a closed tab, a dropped connection) can stop the old containers without creating new ones; the engine shows **Failed** until the next save (KI-263).
- The Ingress section is offered on Docker engines, which refuse any ingress (KI-264).
- On an engine with impersonation and a Ranger policy, the monitor's `egret-monitor` account probably sees only its own queries (KI-265, not verified).
- Delete is permanent. After a delete the Engines list can keep the row until you reload.
Expand Down
2 changes: 1 addition & 1 deletion platform/control-plane/query-engines/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ A summary strip counts **engines**, how many are **running** and **not running**
| **Name** | The engine name. It links to the engine page. |
| **Type** | `trino` or `starrocks`. |
| **Endpoint** | The `host:port` a workspace connection to the engine dials: for example `docs-trino-trino.egret-engines.svc:8443` for a provisioned Trino engine with JWT delegation, the host and port you entered (for example `trino-demo:8080`) for an external one. |
| **Status** | The lifecycle status of a provisioned engine (**provisioning**, **running**, **failed**). **External** for a registered one: egret does not monitor it. |
| **Status** | The lifecycle status of a provisioned engine (**Provisioning**, **Running**, **Failed**). **External** for a registered one: egret does not monitor it. |
| Actions | **Details** opens the engine. |

## Add an engine
Expand Down
4 changes: 2 additions & 2 deletions platform/control-plane/query-engines/provision.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ You need **engine:create** and **engine:provision**. Egret runs the engine where
4. Under **Configuration**, adjust what you need. Leave a field blank to use the default.
5. Press **Create engine**.

The engine page opens with the status **provisioning**. It turns **running** when the coordinator answers. Measured on the demo stack: 72 seconds for the first engine on a Docker host that already had the image, and 38 seconds for a restart.
The engine page opens with the status **Provisioning**. It turns **Running** when the coordinator answers. Measured on the demo stack: 72 seconds for the first engine on a Docker host that already had the image, and 38 seconds for a restart.

:::tip Single-node engine
For a small engine, open **Worker** and set **Replicas** to `0`: the coordinator then schedules the work itself, and the Overview strip shows *Worker 0*. Left blank, the engine gets one worker: on the demo stack a blank value started one worker container next to the coordinator.
Expand Down Expand Up @@ -70,7 +70,7 @@ A StarRocks engine has its own configuration screen with sections such as **Repl
## What happens next

1. Egret starts the cluster, creates a **policy profile** with the engine's name (for example `docs-trino`, with the tag service `docs-trino_tag`) and binds it.
2. The attached catalogs are applied to the engine (state **applied** on the **Catalogs** tab).
2. The attached catalogs are applied to the engine (state **Applied** on the **Catalogs** tab).
3. Assign the engine to a workspace on its **Workspaces** tab. It then appears in the workspace's SQL Lab as a database with the engine's name, and in **Workspace settings → Engines** under **Provisioned by egret**.
4. The Governance area lists the engine under **Engine & policy**, and grants on its catalogs reach it.

Expand Down
4 changes: 2 additions & 2 deletions platform/control-plane/workspaces/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ The strip counts **total**, **active** and **archived** workspaces. **Status** f
| **Workspace** | The display name above its slug, for example `default`. Select it to open the workspace. |
| **Owner** | The user who owns the workspace. |
| **Created** | When it was created, relative. |
| **Status** | **active** or **archived**. |
| **Status** | **Active** or **Archived**. |

## Create a workspace

Expand Down Expand Up @@ -58,7 +58,7 @@ The dialog says *Reassign this workspace to another user. They will be added as
1. Open the workspace and press **Archive**.
2. Confirm *Archive workspace?* The dialog says *\<name\> will be archived and hidden from active lookups. You can restore it later.*

An archived workspace shows **archived** in the list and the button on its page becomes **Restore**. Nothing is deleted: the archived workspace keeps its members, resources and content. Press **Restore** to bring it back. **Rename** and **Transfer owner** stay available while archived.
An archived workspace shows **Archived** in the list and the button on its page becomes **Restore**. Nothing is deleted: the archived workspace keeps its members, resources and content. Press **Restore** to bring it back. **Rename** and **Transfer owner** stay available while archived.

:::tip
Archive a workspace instead of deleting data. There is no delete button here.
Expand Down
2 changes: 1 addition & 1 deletion platform/control-plane/workspaces/workspace-detail.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ Pending requests to join this workspace, with the same **Approve** and **Deny**

## Activity

The audit entries recorded for this workspace: **Time**, **Action**, **Resource**, **Actor** and **Decision**. It is the workspace-scoped slice of the [Audit log](../audit-log.md), newest first. Most rows are authorization decisions such as `workspace:manage_members` (**allow** or **deny**), `query:run` or `dashboard:read`; changes such as `member:add` show a dash. A member who opens a page they may not use shows up as a **deny**. Actions done while a platform admin impersonated someone are listed under the impersonated person.
The audit entries recorded for this workspace: **Time**, **Action**, **Resource**, **Actor** and **Decision**. It is the workspace-scoped slice of the [Audit log](../audit-log.md), newest first. Most rows are authorization decisions such as `workspace:manage_members` (**Allow** or **Deny**), `query:run` or `dashboard:read`; changes such as `member:add` show a dash. A member who opens a page they may not use shows up as a **Deny**. Actions done while a platform admin impersonated someone are listed under the impersonated person.

## Limits and known issues

Expand Down
2 changes: 1 addition & 1 deletion platform/explore/apps/authoring.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ The page has an Egret header and the marimo notebook in an iframe below it.

| Header element | What it shows or does |
|---|---|
| Back arrow | Returns to the Apps list. |
| **Apps** (back link, with an arrow) | Returns to the Apps list. |
| App name and badge | **Draft only** until the first publish, then **Published vN**. |
| **Draft revision N** | The draft's revision number. It increases every time the draft is saved. The header re-reads it every 5 seconds. |
| *Save in the editor (Ctrl/⌘+S) before publishing.* | A reminder: publishing freezes the **saved** draft. |
Expand Down
2 changes: 1 addition & 1 deletion platform/explore/charts/the-chart-editor.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ The editor is where you build and change a chart. Settings are on the left, a li

The left panel is 400 px wide and scrolls on its own. From top to bottom it has:

1. **← Charts**: back to the list.
1. **Charts**, with an arrow: the back link to the list.
2. The current chart type with a **Change** button. **Change** opens **Change visualization**, the same gallery you see when you create a chart. Between bar, row, line, area, combo and scatter, which share one set of settings, the change keeps the fields, the display settings and the sort. A change to any other type keeps the dataset but clears the fields and the sort, so pick the type first.
3. The tabs. **Data** and **Display** are always there. **Axes** appears for the types that have axis settings (bar, row, line, area, scatter, combo, waterfall and box plot). **Conditional formatting** appears for [Table](./table) and [Pivot Table](./pivot-table) only. If you switch to a type that does not have the open tab, the editor falls back to **Display**.

Expand Down
Loading
Loading