Plexus.Budget (Plexus v0.1.0)

Copy Markdown View Source

Atomic per-run admission ledger.

The ledger tracks logical measure work, expansion work, token usage and live population. Limits may be integers or :infinity.

Summary

Types

limits()

@type limits() :: %{optional(meter()) => non_neg_integer() | :infinity}

meter()

@type meter() :: :measure | :expand | :tokens | :population

t()

@type t() :: %{atomics: :atomics.atomics_ref(), limits: limits()}

Functions

consume(arg1, meter, amount)

@spec consume(t(), meter(), non_neg_integer()) :: :ok

Record already-consumed work without admission checking (for observed token usage).

new(opts \\ [])

@spec new(keyword() | map()) :: t()

refund(arg1, meter, amount)

@spec refund(t(), meter(), non_neg_integer()) :: :ok

remaining(budget, meter)

@spec remaining(t(), meter()) :: non_neg_integer() | :infinity

reserve(arg1, meter, amount)

@spec reserve(t(), meter(), non_neg_integer()) :: :ok | {:error, :budget_exhausted}

snapshot(budget)

@spec snapshot(t()) :: map()

transfer(budget, meter, amount, fun)

@spec transfer(t(), meter(), non_neg_integer(), (-> term())) ::
  {:ok, term()} | {:error, :budget_exhausted}

used(map, meter)

@spec used(t(), meter()) :: non_neg_integer()