Sumup.Telemetry (Sumup v1.0.0)

Copy Markdown View Source

Sumup instruments every HTTP call with :telemetry spans (default prefix [:sumup, :request], configurable via Sumup.Config.t/0's :telemetry_prefix).

Events

  • [:sumup, :request, :start] — emitted before a request is sent. Measurements: %{system_time: integer()}. Metadata: %{method: atom(), path: String.t(), resource: atom(), operation: atom(), attempt: pos_integer()}.

  • [:sumup, :request, :stop] — emitted after a request completes (successfully or not). Measurements: %{duration: integer()} (native time units). Metadata: everything from :start plus %{status: pos_integer() | nil, result: :ok | :error, retryable: boolean() | nil}.

  • [:sumup, :request, :exception] — emitted if the request raises. Measurements: %{duration: integer()}. Metadata: everything from :start plus %{kind: :error | :exit | :throw, reason: term(), stacktrace: list()}.

  • [:sumup, :request, :retry] — emitted once per retry attempt, before the backoff sleep. Measurements: %{delay: pos_integer()}. Metadata: %{attempt: pos_integer(), status: pos_integer() | nil, resource: atom(), operation: atom()}.

Example: attach a logger handler

:telemetry.attach_many(
  "sumup-logger",
  [
    [:sumup, :request, :start],
    [:sumup, :request, :stop],
    [:sumup, :request, :exception]
  ],
  &MyApp.SumupLogger.handle_event/4,
  nil
)

If you configure a custom :telemetry_prefix in Sumup.Config, replace :sumup above with your prefix's first element accordingly (the second and third elements, :request and the event name, stay the same).