# `Weavr.Telemetry`
[🔗](https://github.com/iamkanishka/weavr/blob/main/lib/weavr/telemetry.ex#L1)

Telemetry event dispatch used internally by `Weavr.HTTP`.

`weavr` integrates with the standard
[`:telemetry`](https://hexdocs.pm/telemetry) library used across the
Elixir ecosystem (Phoenix, Ecto, Tesla, Req, ...). If your application
already depends on `:telemetry` (directly, or transitively through
Phoenix/Ecto), Weavr.attach_default_logger/1 and your own
`:telemetry.attach/4` handlers work exactly as you'd expect — `weavr`
calls straight through to the real `:telemetry.execute/3`.

If `:telemetry` is not loaded at all (for example, in a minimal
script with no dependencies), this module falls back to a tiny
built-in dispatcher supporting the same `attach/4` and `execute/3`
contract, so `weavr` never requires `:telemetry` as a hard
dependency.

Events emitted by this library:

  * `[:weavr, :request, :start]` - measurements: `%{system_time: ...}`
  * `[:weavr, :request, :stop]` - measurements: `%{duration: native_time}`
  * `[:weavr, :request, :exception]` - measurements: `%{duration: native_time}`

All three carry metadata: `%{method:, url:, attempt:, status?:, error?:}`
plus anything passed via `:telemetry_metadata` on the request.

# `attach`

Attaches a handler function for a given telemetry event (a list of
atoms, e.g. `[:weavr, :request, :stop]`) or a list of such events.

Mirrors `:telemetry.attach/4`. Only used by the fallback dispatcher;
if real `:telemetry` is loaded, prefer calling `:telemetry.attach/4`
directly so other libraries' handlers can also observe these events.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
