https://github.com/fredwu/kthrottler
A Kohana port of Action Throtller (for Rails): http://github.com/fredwu/action_throttler
https://github.com/fredwu/kthrottler
Last synced: 9 months ago
JSON representation
A Kohana port of Action Throtller (for Rails): http://github.com/fredwu/action_throttler
- Host: GitHub
- URL: https://github.com/fredwu/kthrottler
- Owner: fredwu
- Created: 2010-07-28T06:48:48.000Z (almost 16 years ago)
- Default Branch: master
- Last Pushed: 2011-01-24T22:14:48.000Z (over 15 years ago)
- Last Synced: 2025-04-09T05:06:22.488Z (about 1 year ago)
- Language: PHP
- Homepage: http://fredwu.me/
- Size: 97.7 KB
- Stars: 14
- Watchers: 3
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
[](http://stillmaintained.com/fredwu/kthrottler)
# KThrottler
There is also a Ruby version (for [Rails](http://rubyonrails.org/)), see here:
## Introduction
KThrottler is an easy to use Kohana module to quickly throttle application actions based on configurable duration and limit.
Brought to you by [Wuit](http://wuit.com).
## Features
* Easy to use, easy to configure
* Lightweight
* Supports Kohana v3
## Prerequisites
* Kohana's built-in DB module
## Usage
### Download and install the module
git clone git://github.com/fredwu/kthrottler.git
### Enable the module
In your bootstrap file (`application/bootstrap.php`), enable KThrottler like this:
Kohana::modules(array(
'database' => MODPATH.'database',
'kthrottler' => MODPATH.'kthrottler',
));
### Set up the database table
Import the `kthrottler_logs_db.sql` file supplied.
### Configure the actions
The configuration file is located at `config/kthrottler.php`. Please copy it to your `application/config` folder.
The configuration array looks like this:
return array
(
'mail' => array
(
'duration' => '1 hour',
'limit' => 10,
),
);
You can add as many configuration elements as you like, just make sure you label them properly (i.e. like `mail` in the example).
In the example, we are setting the `mail` action to perform at most 10 times within 1 hour duration.
### Register the actions in your app
Now we will need to register the actions so they are recorded in the database.
To simply run an action, in your app (presumably somewhere in the controller), do this:
KThrottler::actions()->run('mail');
`KThrottler::actions()->run()` will return true or false depending on whether or not the action is being throttled.
`KThrottler::actions()->run()` has an alias `KThrottler::actions()->can_run()` and a negative alias `KThrottler::actions()->cannot_run()`.
Typically, we would want to produce feedback to the user when an action is throttled, you can do so by:
if (`KThrottler::actions()->cannot_run('mail')`)
// tell the user that this action is not performed
end
`KThrottler::actions()->run()` also takes an optional reference parameter:
`KThrottler::actions()->run('mail', $current_user)`
The reference parameter is very useful because we can track and throttle the action based on a reference, such as a user. The parameter accepts a String, an Integer or an ORM object.
Note that `KThrottler::actions()->run()` and its aliases will perform the action when possible. If you only want to check to see if an action can be performed, you can do this:
`KThrottler::actions()->can_be_run('mail', $current_user)`
`KThrottler::actions()->can_be_run()` returns true or false without performing the action, and it also has a negative alias, `KThrottler::actions()->cannot_be_run()`.
## Author
Copyright (c) 2010 Fred Wu () and [Wuit](http://wuit.com), released under the MIT license