/** * @param int $task_id * @param array $data * @param null $continue_mid * @return array */ public function run_flow($task_id, $data = [], $continue_mid = null) { $pre_mid = null; $mids = $this->flow[Module_FlowManager_Main::FLOW_TYPE_MAIN]; foreach ($mids as $_mid) { if (!empty($continue_mid)) { if ($continue_mid == $_mid) { $continue_mid = null; if ($pre_mid) { $meta_data = self::read_meta($task_id, $pre_mid); if ($meta_data['errno'] !== Const_Err_Base::ERR_OK) { return $meta_data; } $data = $meta_data['data']; } } else { $pre_mid = $_mid; continue; } } // run main flow module $begin_time = microtime(true); $data = $this->_run_section($task_id, $_mid, $data); $end_time = microtime(true); Lib_Log::monitor("TIMER: task [%d] run module section [%d] at [%.4f], end at [%.4f], use [%.4f]", [Module_ControlCentre_Main::current_task_id(), $_mid, $begin_time, $end_time, $end_time - $begin_time]); if (!isset($data['errno'])) { Lib_Log::error("Call back return faild!. err: return data not has errno.\tdata:%s", json_encode($data)); return Lib_Helper::get_err_struct(Const_Err_Base::ERR_DATA_FORMAT, '模块[' . $_mid . ']返回数据错误'); } if ($data['errno'] !== Const_Err_Base::ERR_OK) { return $data; } $data = $data['data']; } return Lib_Helper::get_return_struct($data); }
/** * @param array $data * @param array $control_options * @return array */ public function run($data = [], $control_options = []) { $begin_time = microtime(true); Lib_Log::monitor("TIMER task [%d] begin at [%.4f]", [Module_ControlCentre_Main::current_task_id(), $begin_time]); $this->options = $control_options; $flow = Module_ControlCentre_FlowManager::get_instance()->get_current_flow(); // run before hooks $this->run_hooks(self::HOOK_TYPE_BEFORE_RUN, [$data]); // run $result = $flow->run($this->id, $data); // run after hook $this->run_hooks(self::HOOK_TYPE_AFTER_RUN, [$result]); $end_time = microtime(true); Lib_Log::monitor("TIMER task [%d] end at [%.4f], use [%.4f]", [Module_ControlCentre_Main::current_task_id(), $end_time, $end_time - $begin_time]); return $result; }