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'); } }
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) . ' сек.'); } } }