GSS.Client.Limiter (elixir_google_spreadsheets v0.3.2)

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

This process is a ProducerConsumer for this GenStage pipeline.

Link to this section 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.

Link to this section Types

Specs

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

Specs

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()
}

Link to this section Functions

Link to this function

ask_and_schedule(state)

Check to reach limit.

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

Link to this function

handle_demand(demand, state)

Gives events for the next stage to process when requested

Link to this function

handle_events(events, from, state)

Callback implementation for GenStage.handle_events/3.

Link to this function

handle_info(atom, state)

Ask new events if needed

Link to this function

handle_subscribe(atom, arg2, from, state)

Callback implementation for GenStage.handle_subscribe/4.

Callback implementation for GenStage.init/1.

Link to this function

start_link(options \\ [])

Specs

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}}].