RateLimitations::Pluggable - pluggabe manager of per-service rate limitations
my $storage = {}; my $rl = RateLimitations::Pluggable->new({ limits => { sample_service => { 60 => 2, # per minute limits 3600 => 5, # per hour limits } }, # define an subroutine where hits are stored: redis, db, file, in-memory, cookies getter => sub { my ($service, $consumer) = @_; return $storage->{$service}->{$consumer}; }, # optional, notify back when hits are updated setter => sub { my ($service, $consumer, $hits) = @_; $storage->{$service}->{$consumer} = $hits; }, }); $rl->within_rate_limits('sample_service', 'some_client_id'); # true! $rl->within_rate_limits('sample_service', 'some_client_id'); # true! $rl->within_rate_limits('sample_service', 'some_client_id'), # false!
The module access to build-in time function every time you invoke within_rate_limits method, and checks whether limits are hits or not.
time
within_rate_limits
Each time the method within_rate_limits is invoked it appends to the array of hit current time. It check that array will not grow endlessly, and holds in per $service (or per $service/$consumer) upto max_time integers.
The array can be stored anywhere (disk, redis, DB, in-memory), hence the module name is.
Defines per-service limits. Below
{ service_1 => { 60 => 20, # up to 20 service_1 invocations per 1 minute 3600 => 50, # OR up to 50 service_1 invocations per 1 hour }, service_2 => { 60 => 25, 3600 => 60, } }
Mandatory.
Mandatory coderef which returns an array of hits for the service and some consumer.
consumer
Optional callback for storing per service/consumer array of hits.
within_rate_limits($service, $consumer)
Appends service/consumer hits array with additional hit.
Returns true if the service limits aren't exhausted.
The $service string must be defined in the limits attribute; the $consumer string is arbitrary object defined by application logic. Cannot be undef
$service
limits
$consumer
undef
GitHub
binary.com, <perl at binary.com>
<perl at binary.com>
Please report any bugs or feature requests to https://github.com/binary-com/perl-RateLimitations-Pluggable/issues.
To install RateLimitations::Pluggable, copy and paste the appropriate command in to your terminal.
cpanm
cpanm RateLimitations::Pluggable
CPAN shell
perl -MCPAN -e shell install RateLimitations::Pluggable
For more information on module installation, please visit the detailed CPAN module installation guide.