public function actionIndex() { $scheduleSeconds = (int) Yii::app()->params['csb']['checkScriptSchedule']; $fromCheckPointTime = date('Y-m-d H:i:s', strtotime("-{$scheduleSeconds} seconds")); $this->_verbose('Check long interval requests...'); CsbRequest::model()->checkLongIntervals(); // clear data CsbRequest::model()->deleteAll('time < :time', array(':time' => $fromCheckPointTime)); CsbIpInfo::model()->deleteAll('till_time < :time', array(':time' => date('Y-m-d H:i:s'))); $this->_sendNotification($fromCheckPointTime); }
public function testLongRequest() { $ip = '2.2.2.2'; // test 100 requests per 600 last seconds for ($i = 1; $i <= 100; $i++) { $request = new CsbRequest(); $request->ip = ip2long($ip); $request->time = date('Y-m-d H:i:s', strtotime("-" . $i * 5 . " second")); $request->save(); } CsbRequest::model()->checkLongIntervals(); // check logs $this->assertEquals(1, CsbIpInfo::model()->count('ip = :ip', array(':ip' => ip2long($ip)))); $this->assertEquals(1, CsbLog::model()->count('ip = :ip', array(':ip' => ip2long($ip)))); }
/** * Get request count for ip for last time * @param $ip * @param $minusSecond * @return string */ public static function getRequestCount($ip, $minusSecond) { return CsbRequest::model()->count('ip = :ip AND time > :time', array(':ip' => ip2long($ip), ':time' => date('Y-m-d H:i:s', strtotime("- {$minusSecond} second")))); }