Domain-level :telemetry events emitted by the SDK facade.
Tesla already emits HTTP-level events for every request; these spans sit
above that, at the level operations dashboards actually chart — sandbox
lifecycle, command execution, file transfer. Each operation emits the
standard :telemetry.span/3 triple:
[:ex_daytona, <area>, <op>, :start]— measurements%{monotonic_time, system_time}[:ex_daytona, <area>, <op>, :stop]— measurements%{duration, monotonic_time}(durationin native units)[:ex_daytona, <area>, <op>, :exception]— when the operation raised
Events
| Event prefix | Start metadata | Extra stop metadata |
|---|---|---|
[:ex_daytona, :sandbox, :create] | — | sandbox_id |
[:ex_daytona, :sandbox, :start] | sandbox_id | |
[:ex_daytona, :sandbox, :stop] | sandbox_id | |
[:ex_daytona, :sandbox, :delete] | sandbox_id | |
[:ex_daytona, :sandbox, :exec] | sandbox_id | exit_code |
[:ex_daytona, :sandbox, :run_code] | sandbox_id, language | exit_code |
[:ex_daytona, :session, :run] | sandbox_id, session_id | exit_code |
[:ex_daytona, :fs, :upload] | sandbox_id | bytes |
[:ex_daytona, :fs, :download] | sandbox_id | bytes |
[:ex_daytona, :snapshot, :create] | name | snapshot_id |
[:ex_daytona, :snapshot, :build] | name | snapshot_id |
[:ex_daytona, :snapshot, :delete] | snapshot_id |
Every :stop event's metadata also carries the outcome:
outcome—:okor:errorerror_code— the provider's error code string (ornil)error_status— the HTTP status of the failure (ornil)
The :fs events cover the constant-memory transfer engine
(upload_stream/upload_file, download_stream/download_file,
stream!).
Metadata is deliberately redaction-safe: identifiers, languages, exit codes, and byte counts only — never command lines, file paths, environment values, or payloads.
:telemetry.attach(
"ex-daytona-exec-timing",
[:ex_daytona, :sandbox, :exec, :stop],
fn _event, %{duration: duration}, meta, _config ->
ms = System.convert_time_unit(duration, :native, :millisecond)
Logger.info("exec on #{meta.sandbox_id}: #{meta.outcome} in #{ms}ms")
end,
nil
)