Index: branches/5.2.x/core/kernel/event_manager.php =================================================================== diff -u -N -r13840 -r14092 --- branches/5.2.x/core/kernel/event_manager.php (.../event_manager.php) (revision 13840) +++ branches/5.2.x/core/kernel/event_manager.php (.../event_manager.php) (revision 14092) @@ -1,6 +1,6 @@ Application->ConfigValue('UseCronForRegularEvent')) return ; + if (defined('IS_INSTALL')) { + return ; + } + if (!$from_cron && $this->Application->ConfigValue('UseCronForRegularEvent')) { + // if RegularEvents are set to run from cron + return ; + } + $agents = $this->getRegularEvents(); $events_source = $agents[$event_type]; @@ -748,57 +753,67 @@ foreach ($events_source as $short_name => $event_data) { $next_run = $event_data['NextRunOn']; - $last_run = $event_data['LastRunOn']; if ($next_run && ($next_run > adodb_mktime())) { continue; } - else { - $event = new kEvent($event_data['EventName']); - if (!$this->Application->prefixRegistred($event->Prefix)) { - // don't process agents, left from disabled modules - continue; - } - $start_time = adodb_mktime(); - $fields_hash = Array ( - 'LastRunOn' => $start_time, - 'LastRunStatus' => AGENT_LAST_RUN_RUNNING, - 'NextRunOn' => $start_time + $event_data['RunInterval'], - ); + $event_data['AgentName'] = $short_name; + $this->runAgent($event_data); + } - $this->Conn->doUpdate( - $fields_hash, - $this->Application->getUnitOption('agent', 'TableName'), - 'AgentName = ' . $this->Conn->qstr($short_name) - ); + $this->Application->StoreVar('user_id', $user_id, true); // true for optional + } - $event->redirect = false; - $this->Application->HandleEvent($event); + function runAgent($agent_data) + { + $event = new kEvent($agent_data['EventName']); - $now = adodb_mktime(); - $next_run = $event_data['RunInterval'] ? $start_time + $event_data['RunInterval'] : $now; + if (!$this->Application->prefixRegistred($event->Prefix)) { + // don't process agents, left from disabled modules + return false; + } - while ($next_run < $now) { - // in case event execution took longer, then RunInterval (don't use <=, because RunInterval can be 0) - $next_run += $event_data['RunInterval']; - } + $start_time = adodb_mktime(); - $fields_hash = Array ( - 'NextRunOn' => $next_run, - 'RunTime' => round(($now - $start_time) / 60), - 'LastRunStatus' => $event->status == erSUCCESS ? AGENT_LAST_RUN_SUCCEDED : AGENT_LAST_RUN_FAILED, - ); + // remember, when agent execution started + $fields_hash = Array ( + 'LastRunOn' => $start_time, + 'LastRunStatus' => AGENT_LAST_RUN_RUNNING, + 'NextRunOn' => $start_time + $agent_data['RunInterval'], + ); - $this->Conn->doUpdate( - $fields_hash, - $this->Application->getUnitOption('agent', 'TableName'), - 'AgentName = ' . $this->Conn->qstr($short_name) - ); - } + $this->Conn->doUpdate( + $fields_hash, + $this->Application->getUnitOption('agent', 'TableName'), + 'AgentName = ' . $this->Conn->qstr($agent_data['AgentName']) + ); + + $event->redirect = false; + $this->Application->HandleEvent($event); + + $now = adodb_mktime(); + $next_run = $agent_data['RunInterval'] ? $start_time + $agent_data['RunInterval'] : $now; + + while ($next_run < $now) { + // in case event execution took longer, then RunInterval (don't use <=, because RunInterval can be 0) + $next_run += $agent_data['RunInterval']; } - $this->Application->StoreVar('user_id', $user_id, true); // true for optional + // remember, when agent execution ended + $fields_hash = Array ( + 'NextRunOn' => $next_run, + 'RunTime' => round(($now - $start_time) / 60), + 'LastRunStatus' => $event->status == erSUCCESS ? AGENT_LAST_RUN_SUCCEDED : AGENT_LAST_RUN_FAILED, + ); + + $this->Conn->doUpdate( + $fields_hash, + $this->Application->getUnitOption('agent', 'TableName'), + 'AgentName = ' . $this->Conn->qstr($agent_data['AgentName']) + ); + + return true; } /**