GSS.Client.Limiter (elixir_google_spreadsheets v0.3.0)
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
Callback implementation for GenStage.handle_events/3.
Ask new events if needed
Callback implementation for GenStage.handle_subscribe/4.
Callback implementation for GenStage.init/1.
Starts an limiter manager linked to the current process.
Link to this section Types
options()
Specs
state()
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
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 \\ [])
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:intervalmilliseconds.:max_demand- count of maximum requests per:maximum_interval:max_interval- maximum time that allowed in:max_demandrequests:clients- list of clients with partition options. For example[{GSS.Client, partition: :read}}].