Esempio n. 1
0
 public function addAction()
 {
     $form = new Zetta_Form(Zend_Registry::get('config')->Cron->form->task);
     /* заполняем выпадающие списки данными */
     $minute = $form->getElement('minute');
     for ($i = -1; $i <= 59; $i++) {
         $i == -1 ? $minute->addMultiOption('*', '*') : $minute->addMultiOption($i, $i);
     }
     $hour = $form->getElement('hour');
     for ($i = -1; $i <= 23; $i++) {
         $i == -1 ? $hour->addMultiOption('*', '*') : $hour->addMultiOption($i, sprintf('%02d', $i));
     }
     $day = $form->getElement('day');
     for ($i = 0; $i <= 31; $i++) {
         $i == 0 ? $day->addMultiOption('*', '*') : $day->addMultiOption($i, sprintf('%02d', $i));
     }
     $month = $form->getElement('month');
     for ($i = 0; $i <= 12; $i++) {
         if ($i == 0) {
             $month->addMultiOption('*', '*');
         } else {
             $month_str = Zend_Locale_Data::getContent(new Zend_Locale(), 'month', array('gregorian', 'stand-alone', 'wide', intval($i)));
             $month->addMultiOption($i, $month_str);
         }
     }
     $week = $form->getElement('week_day');
     $array_weekDay = array('', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun');
     for ($i = 0; $i <= 7; $i++) {
         if ($i == 0) {
             $week->addMultiOption('*', '*');
         } else {
             $week_str = Zend_Locale_Data::getContent(new Zend_Locale(), 'day', array('gregorian', 'format', 'wide', $array_weekDay[$i]));
             $week->addMultiOption($i, $week_str);
         }
     }
     if ($cron_id = $this->getParam('cron_id')) {
         $this->view->cron_id = $cron_id;
         $editData = $this->_model->fetchRow($this->_model->select()->where('cron_id = ?', $cron_id))->toArray();
         $form->setDefaults($editData);
     }
     if (!sizeof($_POST) || !$form->isValid($_POST)) {
         $this->view->form = $form;
     } else {
         $arrayData = array('minute' => $form->getValue('minute'), 'hour' => $form->getValue('hour'), 'day' => $form->getValue('day'), 'month' => $form->getValue('month'), 'week_day' => $form->getValue('week_day'), 'task' => $form->getValue('task'), 'active' => (bool) $form->getValue('active') == true ? '1' : new Zend_Db_Expr('NULL'));
         if ($cron_id) {
             $this->_model->update($arrayData, $this->_model->getAdapter()->quoteInto('cron_id = ?', $cron_id));
         } else {
             $this->_model->insert($arrayData);
         }
         $this->renderScript('admin/addComplete.ajax.phtml');
     }
 }
Esempio n. 2
0
 public static function RunTasks(array $tasks)
 {
     ini_set('max_execution_time', 60);
     if (sizeof($tasks)) {
         $async = new AsyncHttp_Client();
         $task_id = array();
         $model = new Modules_Cron_Model_Cron();
         foreach ($tasks as $task) {
             if ($task instanceof Zend_Db_Table_Row) {
                 // Стартуем
                 $time_start = microtime(true);
                 $model->update(array('in_progress' => 1, 'last_run_start' => new Zend_Db_Expr('NOW()'), 'last_run_finish' => new Zend_Db_Expr('NULL')), $model->getAdapter()->quoteInto('cron_id = ?', $task->cron_id));
                 $taskUrl = HTTP_HOST . $task->task . '?secret_key=' . Zend_Registry::get('config')->Db->staticSalt;
                 $id = $async->get($taskUrl);
                 $task_id[$id] = $task;
             }
         }
         while (($threads = $async->iteration()) !== false) {
             foreach ($threads as $id) {
                 $result = $async->getThread($id);
                 if ($result) {
                     // записываем успешное выполнение
                     $model->update(array('in_progress' => new Zend_Db_Expr('NULL'), 'last_run_finish' => new Zend_Db_Expr('NOW()')), $model->getAdapter()->quoteInto('cron_id = ?', $task_id[$id]->cron_id));
                     $time = microtime(true) - $time_start;
                     Zend_Registry::get('Logger')->info($str = 'Cron: ' . $task_id[$id]->task . ' завершено за ' . round($time, 3) . ' сек.');
                 }
             }
         }
         foreach ($tasks as $task) {
             // записываем успешное выполнение для всех остальных которые не успели попасть в поток
             $model->update(array('in_progress' => new Zend_Db_Expr('NULL'), 'last_run_finish' => new Zend_Db_Expr('NOW()')), $model->getAdapter()->quoteInto('cron_id = ?', $task->cron_id));
             $time = microtime(true) - $time_start;
             Zend_Registry::get('Logger')->info($str = 'Cron: ' . $task->task . ' завершено за ' . round($time, 3) . ' сек.');
         }
     }
 }