NAME
RateLimitations::Pluggable - pluggabe manager of per-service rate limitations
STATUS
SYNOPSIS
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!
DESCRIPTION
The module access to build-in time
function every time you invoke within_rate_limits
method, and checks whether limits are hits or not.
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.
ATTRIBUTES
limits
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.
getter->($service, $consumer)
Mandatory coderef which returns an array of hits for the service and some consumer
.
setter->($service, $consumer, $hits)
Optional callback for storing per service/consumer array of hits.
METHODS
within_rate_limits
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
SOURCE CODE
AUTHOR
binary.com, <perl at binary.com>
BUGS
Please report any bugs or feature requests to https://github.com/binary-com/perl-RateLimitations-Pluggable/issues.