Events
Catalog, under Telemetry: Events (with event_type:read, covered by every viewer’s *:read floor) is the
fleet’s occurrence catalog: the directory of the discrete happenings the fleet can assert.
An event is an occurrence, something that happened at a moment (a call started, a cable
came unplugged), not a value something holds; a value is a
property and a numeric quantity is a
metric, the two sample lanes with their own catalogs and their own
pages. Here, an event type is a name plus an optional label, description, and
payload schema. The name is its canonical identifier, a single lowercase kebab segment, and the
same event type is the same happening wherever it appears: registering call-started once means
every endpoint’s call, however it is detected, lands under one name.
An event type is used in two moves, and this page walks both: the catalog names the happening, and an occurrence asserts it happened, typed by its catalog entry. There is no contract lane here: unlike a property or a metric, an event is not declared on a product or a standard, it simply occurs.
The console page lives at /event-types, and the nav says why: the address reserves /events
for the events instance surface when it lands, so the catalog keeps the type-named route.
The catalog is fleet-wide reference data, not a scoped resource, so every event type is visible to every reader; the write gates decide who may change it.
-
The directory lists every event type sorted by name, each showing its name (the canonical identifier, with its label on the line above it) and origin (official or custom). name filters by the name or its label; official narrows the list.
-
New event type (with
event_type:create, granted to operators) opens a create drawer: give it a name (a single lowercase kebab segment, for examplecall-startedorcable-unplugged), and optionally add a label and description. An invalid name (an uppercase letter, an underscore, a leading hyphen, a dot) is refused with a message. The drawer deliberately omits the payload schema; set it through the API for now. -
Pick a row to open its detail blade. The footer Edit pencil (with
event_type:update) edits the label and description; the name is fixed at creation, since it is what every occurrence and every push is typed by. Delete (withevent_type:delete) removes a custom event type, behind a confirm. A verb you lack greys just that button, its hover reason naming the permission (Requires event_type:update,Requires event_type:delete); the pair never disappears. -
An event type can carry a payload schema (a JSON Schema for the occurrence payload, for example a
requiredcall id oncall-started), shown read-only on the blade. Editing the schema in the console is a follow-up; set it through the API for now. A schema whoserequiredlist names a property itspropertiesblock does not declare is refused with the name: the validator would never enforce it, and the catalog does not store a schema that means less than it says. -
An official event type is always read-only: the blade keeps the Edit and Delete pair in place, greyed, with the reason on hover: “Official: ships with Omniglass and updates with it.” The shared vocabulary is the same from install to install, the same deliberate exception to the operator-owned rule the Properties catalog makes, and for the same reason: an event type name is the vocabulary a driver and a rule map onto, so a release has to be able to correct it (the seed model).
The baseline ships this catalog, rendered from the seed itself (
make gen) so the list cannot drift from the binary:Name Description call-startedA conferencing endpoint entered an active call. A caught occurrence when the device reports it natively (an xAPI event), or a derived one when a rule infers it from other signals. command-issuedA command was issued to a component (the caused event a command records). It opens the intended value the command sets and is the lineage cause of that intended value. call-endedA conferencing endpoint left an active call: call-started's closing half, caught natively or derived. The pair brackets a session for usage reads. input-changedA display or switcher moved to a different source input. Caught natively where the device reports it; a frequent, benign occurrence that teaches the event lane's volume without implying a fault. -
A duplicate name is refused (409), and an attempt to change an official event type is refused too. The refusal reaches across lanes: the metric, property, and event catalogs share one namespace, so a name one of them holds cannot be registered in another, which is what keeps per-lane routing unambiguous.
The catalog is also the ingest vocabulary: a pushed occurrence lands only if its name is registered here; an unregistered name is rejected and reported in the push response, not silently dropped and not invented.
The occurrences behind the catalog
Section titled “The occurrences behind the catalog”An occurrence is a stored row typed by its catalog entry (the row keeps the entry’s id, so the name resolves through the catalog), stamped with when it happened, a message, an optional structured payload, and an origin, the four-way vocabulary for how it arrived: caught, caused, derived, or scheduled (events). Two origins have writers today:
- A caught occurrence is one the device published natively (an xAPI event, a trap), arriving through the telemetry push. Its payload validates against the entry’s payload schema at ingest: a violating payload is refused with the reason, so a schema on the catalog entry is a real contract, not advice.
- A caused occurrence is the record a command writes when it is
issued: every invocation lands a
command-issuedevent beside the command row.
derived (a rule infers the happening from other signals) and scheduled (the clock fires) complete the vocabulary; nothing writes them yet.
A component’s detail carries an Events panel reading its recent occurrences, newest first
over the last 24 hours; the same read is GET /components/{name}/events, gated by
component:read, and a component outside your read scope is a non-disclosing 404.
From the CLI, the catalog is omniglass event-type list|get|create|update|delete, and the
occurrence read is omniglass component event list (see the CLI reference).