# `Worldpay.Telemetry`
[🔗](https://github.com/iamkanishka/worldpay/blob/v1.0.0/lib/worldpay/telemetry.ex#L1)

Telemetry integration for all Worldpay API calls.

## Events

All events live under the `[:worldpay, :request, *]` prefix.

| Event | Measurements | Metadata |
|---|---|---|
| `[:worldpay, :request, :start]` | `%{system_time: integer}` | `%{api: atom, operation: atom}` |
| `[:worldpay, :request, :stop]` | `%{duration: integer}` | `%{api: atom, operation: atom, status: integer, outcome: :ok | :error}` |
| `[:worldpay, :request, :exception]` | `%{duration: integer}` | `%{api: atom, operation: atom, kind: atom, reason: term}` |

## Attaching handlers

    :telemetry.attach_many(
      "worldpay-logger",
      [
        [:worldpay, :request, :start],
        [:worldpay, :request, :stop],
        [:worldpay, :request, :exception]
      ],
      &Worldpay.Telemetry.log_handler/4,
      nil
    )

# `child_spec`

Returns a specification to start this module under a supervisor.

See `Supervisor`.

# `exception`

```elixir
@spec exception(atom(), atom(), integer(), atom(), term()) :: :ok
```

Emit exception event.

# `log_handler`

```elixir
@spec log_handler(list(), map(), map(), term()) :: :ok
```

Default structured logger handler — attach in your application if desired.

# `start`

```elixir
@spec start(atom(), atom(), map()) :: integer()
```

Emit the start event and return a monotonic start time.

# `start_link`

```elixir
@spec start_link(keyword()) :: GenServer.on_start()
```

# `stop`

```elixir
@spec stop(atom(), atom(), integer(), non_neg_integer(), :ok | :error) :: :ok
```

Emit stop event.

---

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