private function _run_steps($task_id, $task_settings) { $task_id = (int) $task_id; if (!$task_id) { return false; } $this->_update_task_state($task_id, array('status' => 2)); //change status of task to "active" while it run //get steps $steps = $this->getScheduledTaskSteps($task_id); $task_result = 0; $steps_count = sizeof($steps); // total count of steps to calculate percentage (for future) $k = 0; foreach ($steps as $step) { $this->toLog('Tried to run step #' . $step['step_id'] . ' of task #' . $task_id); //change status to active $this->_update_step_state($step['step_id'], array('result' => 1, 'last_time_run' => date('Y-m-d H:i:s'), 'status' => 2)); //change status of step to active while it run try { $dd = new ADispatcher($step['controller'], $step_settings['params']); $response = $dd->dispatchGetOutput($step['controller']); } catch (AException $e) { } $result = $response['result'] == true ? 0 : 1; $this->_update_step_state($step['step_id'], array('result' => $result, 'last_time_run' => date('Y-m-d H:i:s'), 'status' => 1)); if (!$result) { $this->log->write('Sheduled step #' . $step['step_id'] . ' of task #' . $task_id . ' failed during process'); //interrupt task if need if ($task_settings['interrupt_on_step_fault'] === true) { $this->_update_task_state($task_id, array('result' => 1, 'last_time_run' => date('Y-m-d H:i:s'), 'status' => 1)); return false; } $task_result = 1; $this->toLog('Step #' . $step['step_id'] . ' of task #' . $task_id . ' failed.'); } $this->toLog('Step #' . $step['step_id'] . ' of task #' . $task_id . ' finished.'); $this->_update_task_state($task_id, array('progress' => ceil($k * 100 / $steps_count))); } $this->_update_task_state($task_id, array('result' => $task_result, 'last_time_run' => date('Y-m-d H:i:s'), 'status' => 1)); return true; }