mirror of
https://github.com/agent-substrate/substrate.git
synced 2026-10-02 03:24:42 +08:00
Step 3 of #1748. Vocabulary only: nothing emits the event or sets the epoch yet. **Event.** `ate.actor.usage_sampled` in `actorevent`, sixteen required keys via `ateattr`: identity, pool, sandbox class, source, `ate.stats.kind` (periodic, initial, final), the four measurements, observation time, epoch. Measurement names follow the `ate.actor.stats.*` instruments; units are in the registry briefs. Body is `Actor usage sampled`, the accepted stdout shape change. **Scope.** The usage stream has its own instrumentation scope, the lifecycle scope with `/usage` appended, so a consumer can sample or drop it without touching lifecycle records. `NewEmitter` takes the scope; the package-level `Log` keeps the lifecycle one, so ateapi is unchanged. **Epoch.** `ate.actor.epoch` and `WorkloadStatsSample.epoch_unix_nano`: the unix-nano time an activation began. CPU time is per activation for every source; lifetime is the sum over epochs of each epoch's highest value. Memory usage and working set are absolute; peak is as the source reports it. An ateom that leaves the epoch at zero still sends the raw guest counter. The measurement comments on fields 8 to 11 say all of this. **Registry.** Event group in `events.yaml`, seven attributes in `metrics.yaml`, `ate.actor.epoch` in the no-actor-identity forbidden list. The one-record-one-place rule and the collector guide now name both scopes. Left for step 4: the event's code anchor moves to the ateom emit site, atelet's poller comments and the guide's stdout usage section get rewritten, and the controller starts passing `OTEL_LOGS_EXPORTER` to worker pods.