A Kohana port of Action Throtller (for Rails): http://github.com/fredwu/action_throttler
PHP
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
classes Added @package for Kohana's API docs. Aug 29, 2010
config Initial commit. Jul 28, 2010
README.md StillMaintained? Jan 24, 2011
kthrottler_logs_db.sql Initial commit. Jul 28, 2010

README.md

KThrottler

There is also a Ruby version (for Rails), see here: http://github.com/fredwu/action_throttler

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.

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 (http://fredwu.me) and Wuit, released under the MIT license