/**
  * Returns the data model based on the primary key given in the GET variable.
  * If the data model is not found, an HTTP exception will be raised.
  * @param integer the ID of the model to be loaded
  */
 public function loadModel($id)
 {
     $model = Scheduler::model()->findByPk($id);
     if ($model === null) {
         throw new CHttpException(404, 'The requested page does not exist.');
     }
     return $model;
 }
Пример #2
0
 public function actionIndex(array $task = array(), $manual = false)
 {
     foreach (Scheduler::model()->findAll(array('order' => '`order` ASC', 'condition' => 't.active=1' . (count($task) ? ' AND t.id IN (' . implode(',', $task) . ')' : ''))) as $schedule) {
         echo $schedule->module . "::" . $schedule->task . "Task()\n";
         if ($manual == false) {
             $data_value = array();
             preg_match('/^([0-9]+)([a-zA-Z]+)$/is', $schedule->period, $data_value);
             if (count($data_value) < 3 || empty($data_value[0]) || empty($data_value[1]) || empty($data_value[2])) {
                 continue;
             }
             switch ($data_value[2]) {
                 case 's':
                     $date_type = 'SECOND';
                     break;
                 case 'i':
                     $date_type = 'MINUTE';
                     break;
                 case 'h':
                     $date_type = 'HOUR';
                     break;
                 case 'd':
                     $date_type = 'DAY';
                     break;
                 case 'm':
                     $date_type = 'MONTH';
                     break;
                 case 'y':
                     $date_type = 'YEAR';
                     break;
                 default:
                     $date_type = 'HOUR';
             }
             $sql = "SELECT IF(DATE_ADD(last_run, INTERVAL " . intval($data_value[1]) . " " . $date_type . ")<=UTC_TIMESTAMP(), 'yes', 'no') as need_start FROM " . Scheduler::model()->tableName() . " WHERE id=" . $schedule->id;
             $need_start = Yii::app()->db->createCommand($sql)->queryScalar();
             if ($need_start == 'no') {
                 echo "no need start task\n\n";
                 continue;
             }
         }
         echo "start task\n";
         $module = $schedule->module . 'Scheduler';
         $task = $schedule->task . 'Task';
         $error = '';
         try {
             Yii::app()->{$module}->{$task}($schedule->data);
         } catch (CException $e) {
             $error = $e->getMessage();
         }
         if (!empty($error)) {
             echo "error with start task\nerror text: " . $error . "\n\ncontinued\n\n";
             continue;
         }
         if ($manual) {
             echo "task finished\n\n";
         } else {
             if ($schedule->task == 'exchangeRates' && $schedule->last_run == '1970-01-01 00:00:00') {
                 $utc_run = Yii::app()->db->createCommand("SELECT DATE_ADD(DATE_SUB(UTC_DATE(), INTERVAL 4 HOUR), INTERVAL 2 MINUTE)")->queryScalar();
                 $schedule->last_run = $utc_run;
             } else {
                 $schedule->last_run = new CDbExpression('UTC_TIMESTAMP()');
             }
             if ($schedule->save()) {
                 echo "task finished, last start date updated\n\n";
             } else {
                 echo "error with update task\n\n";
             }
         }
     }
 }