OtlpShipper.Retry (otlp_shipper v0.1.1)

Copy Markdown View Source

Pure retry timing helpers. Delays and timestamps use milliseconds.

Summary

Functions

Calculates capped exponential backoff with caller-supplied jitter in [0, 1].

Parses Retry-After seconds or an IMF-fixdate relative to an explicit clock.

Functions

backoff(attempt, base, maximum, jitter)

Calculates capped exponential backoff with caller-supplied jitter in [0, 1].

iex> OtlpShipper.Retry.backoff(2, 100, 1000, 0.5)
400
iex> OtlpShipper.Retry.backoff(20, 100, 1000, 1.0)
1000

retry_after(value, now)

@spec retry_after(String.t(), DateTime.t()) :: {:ok, non_neg_integer()} | :error

Parses Retry-After seconds or an IMF-fixdate relative to an explicit clock.

iex> OtlpShipper.Retry.retry_after("2", ~U[2026-09-12 12:00:00Z])
{:ok, 2000}
iex> OtlpShipper.Retry.retry_after("Sat, 12 Sep 2026 12:00:03 GMT", ~U[2026-09-12 12:00:00Z])
{:ok, 3000}
iex> OtlpShipper.Retry.retry_after("invalid", ~U[2026-09-12 12:00:00Z])
:error