GSS.Client.Limiter (elixir_google_spreadsheets v0.4.0)

Model of Limiter request subscribed to Client with partition :write or :read

This process is a ProducerConsumer for this GenStage pipeline.

Summary

Functions

Check to reach limit.

Gives events for the next stage to process when requested

Ask new events if needed

Callback implementation for GenStage.init/1.

Starts an limiter manager linked to the current process.

Types

options()

@type options() :: [
  name: atom(),
  max_demand: pos_integer() | nil,
  max_interval: timeout() | nil,
  interval: timeout() | nil,
  clients: [{atom(), keyword()} | atom()]
]

state()

@type state() :: %GSS.Client.Limiter{
  interval: timeout(),
  max_demand: pos_integer(),
  max_interval: timeout(),
  producer: GenStage.from(),
  scheduled_at: pos_integer() | nil,
  taked_events: pos_integer()
}

Functions

ask_and_schedule(state)

Check to reach limit.

If limit not reached ask again after :interval timeout, otherwise ask after :max_interval timeout.

handle_demand(demand, state)

Gives events for the next stage to process when requested

handle_events(events, from, state)

Callback implementation for GenStage.handle_events/3.

handle_info(atom, state)

Ask new events if needed

handle_subscribe(atom, arg2, from, state)

Callback implementation for GenStage.handle_subscribe/4.

init(args)

Callback implementation for GenStage.init/1.

start_link(options \\ [])

@spec start_link(options()) :: GenServer.on_start()

Starts an limiter manager linked to the current process.

If the event manager is successfully created and initialized, the function returns {:ok, pid}, where pid is the PID of the server. If a process with the specified server name already exists, the function returns {:error, {:already_started, pid}} with the PID of that process.

Options

  • :name - used for name registration as described in the "Name registration" section of the module documentation
  • :interval - ask new events from producer after :interval milliseconds.
  • :max_demand - count of maximum requests per :maximum_interval
  • :max_interval - maximum time that allowed in :max_demand requests
  • :clients - list of clients with partition options. For example [{GSS.Client, partition: :read}}].