I've done something that sounds vaguely similar to what you're wanting to do (this one keeps a log (using another model 'controller') to flag users who are possibly up to no good) using the CI Throttle filter:
Code:
class Throttle implements FilterInterface
{
public function before(RequestInterface $request)
{
$throttler = Services::throttler();
// Restrict an IP address to no more than set requests per MINUTE across the site
if ($throttler->check($request->getIPAddress(), THROTTLER_REQUESTS_PER_MIN_LIMIT, MINUTE) === FALSE) {
$userAuditModel = new \App\Models\UserAuditModel();
$userAuditModel->audit_throttle_count_increment(); // keep a record of this user's throttling
return Services::response()->setStatusCode(429); // will result in a Server Time-Out Error modal being shown
}
}
...
... not sure if this helps?