BUG 9630 "cron.php script can have several instances running..." SOLVED

- cron.php script can have several instances running at the same time
- Problem solved, added validation in cron.php script to avoid run
  several times
- Variable time added to control execution of cron
* Available from version 2.0.44
This commit is contained in:
Victor Saisa Lopez
2012-09-03 11:32:52 -04:00
parent a8ec47dd0d
commit 331cb04a2c
8 changed files with 159 additions and 94 deletions

View File

@@ -1377,7 +1377,7 @@ class AppCacheView extends BaseAppCacheView
return $aRows;
}
public function appTitleByTaskCaseLabelUpdate($taskUid, $lang)
public function appTitleByTaskCaseLabelUpdate($taskUid, $lang, $cron=0)
{
$taskDefTitle = null;
@@ -1409,6 +1409,12 @@ class AppCacheView extends BaseAppCacheView
$rsCriteriaAPPCV->setFetchmode(ResultSet::FETCHMODE_ASSOC);
while ($rsCriteriaAPPCV->next()) {
if ($cron == 1) {
$arrayCron = unserialize(trim(@file_get_contents(PATH_DATA . "cron")));
$arrayCron["processcTimeStart"] = time();
@file_put_contents(PATH_DATA . "cron", serialize($arrayCron));
}
$row = $rsCriteriaAPPCV->getRow();
$appcvAppUid = $row["APP_UID"];

View File

@@ -284,7 +284,7 @@ class AppDelegation extends BaseAppDelegation {
return ( $date1 - $date2 ) / 3600;
}
function calculateDuration()
public function calculateDuration($cron=0)
{
try {
//patch rows with initdate = null and finish_date
@@ -304,6 +304,12 @@ class AppDelegation extends BaseAppDelegation {
$row = $rs->getRow();
while (is_array($row)) {
if ($cron == 1) {
$arrayCron = unserialize(trim(@file_get_contents(PATH_DATA . "cron")));
$arrayCron["processcTimeStart"] = time();
@file_put_contents(PATH_DATA . "cron", serialize($arrayCron));
}
$oAppDel = AppDelegationPeer::retrieveByPk($row['APP_UID'], $row['DEL_INDEX'] );
if ( isset ($row['DEL_FINISH_DATE']) )
$oAppDel->setDelInitDate($row['DEL_FINISH_DATE']);
@@ -354,6 +360,12 @@ class AppDelegation extends BaseAppDelegation {
$now = strtotime ( 'now' );
while ( is_array($row) ) {
if ($cron == 1) {
$arrayCron = unserialize(trim(@file_get_contents(PATH_DATA . "cron")));
$arrayCron["processcTimeStart"] = time();
@file_put_contents(PATH_DATA . "cron", serialize($arrayCron));
}
$fTaskDuration = $row['TAS_DURATION'];
$iDelegateDate = strtotime ( $row['DEL_DELEGATE_DATE'] );
$iInitDate = strtotime ( $row['DEL_INIT_DATE'] );

View File

@@ -160,7 +160,7 @@ class AppEvent extends BaseAppEvent {
$aConditions[] = array(AppDelegationPeer::PRO_UID, 'C4.CON_ID');
$aConditions[] = array('C4.CON_CATEGORY', $del . 'PRO_TITLE' . $del);
$aConditions[] = array('C4.CON_LANG', $del . SYS_LANG . $del);
$oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN);
$oCriteria->add(AppEventPeer::EVN_UID, '', Criteria::NOT_EQUAL);
if($sProcessUid != ''){
@@ -188,7 +188,7 @@ class AppEvent extends BaseAppEvent {
}
}
function executeEvents($sNow, $debug=false, &$log=array()) {
public function executeEvents($sNow, $debug=false, &$log=array(), $cron=0) {
require_once 'classes/model/Configuration.php';
require_once 'classes/model/Triggers.php';
@@ -236,6 +236,11 @@ class AppEvent extends BaseAppEvent {
$c = 0;
while ($oDataset->next()){
if ($cron == 1) {
$arrayCron = unserialize(trim(@file_get_contents(PATH_DATA . "cron")));
$arrayCron["processcTimeStart"] = time();
@file_put_contents(PATH_DATA . "cron", serialize($arrayCron));
}
$c++;
$aRow = $oDataset->getRow();

View File

@@ -254,7 +254,7 @@ class CaseScheduler extends BaseCaseScheduler {
$aProcessRow = $oProcess->load ( $aRow ['PRO_UID'] );
$aRows [$k] = array_merge ( $aRow, array (
'PRO_TITLE' => $aProcessRow ['PRO_TITLE']
'PRO_TITLE' => $aProcessRow ['PRO_TITLE']
) );
}
return $aRows;
@@ -280,9 +280,9 @@ class CaseScheduler extends BaseCaseScheduler {
$aTaskRow = $oTask->load ( $aRow ['TAS_UID'] );
$aRows [$k] = array_merge ( $aRow, array (
'TAS_TITLE' => $aTaskRow ['TAS_TITLE']
'TAS_TITLE' => $aTaskRow ['TAS_TITLE']
), array (
'PRO_UID' => $aTaskRow ['PRO_UID']
'PRO_UID' => $aTaskRow ['PRO_UID']
) );
}
@@ -293,7 +293,7 @@ class CaseScheduler extends BaseCaseScheduler {
}
function caseSchedulerCron($date, &$log=array()) {
public function caseSchedulerCron($date, &$log=array(), $cron=0) {
G::LoadClass ( 'dates' );
require_once ('classes/model/LogCasesScheduler.php');
@@ -323,6 +323,12 @@ class CaseScheduler extends BaseCaseScheduler {
$sStartDay = '';
$sMonths = '';
while ( $aRow = $oDataset->getRow () ) {
if ($cron == 1) {
$arrayCron = unserialize(trim(@file_get_contents(PATH_DATA . "cron")));
$arrayCron["processcTimeStart"] = time();
@file_put_contents(PATH_DATA . "cron", serialize($arrayCron));
}
$sSchedulerUid = $aRow ['SCH_UID'];
$sOption = $aRow ['SCH_OPTION'];
switch ($sOption) {
@@ -375,8 +381,8 @@ class CaseScheduler extends BaseCaseScheduler {
$client = new SoapClient ( $defaultEndpoint );
$params = array (
'userid' => $user,
'password' => 'md5:' . $pass
'userid' => $user,
'password' => 'md5:' . $pass
);
$result = $client->__SoapCall ( 'login', array (
$params
@@ -390,22 +396,22 @@ class CaseScheduler extends BaseCaseScheduler {
$newRouteLog = new LogCasesScheduler ();
$variables = Array ();
$params = array (
'sessionId' => $sessionId,
'processId' => $processId,
'taskId' => $taskId,
'variables' => $variables
'sessionId' => $sessionId,
'processId' => $processId,
'taskId' => $taskId,
'variables' => $variables
);
$paramsLog = array (
'PRO_UID' => $processId,
'TAS_UID' => $taskId,
'SCH_UID' => $sSchedulerUid,
'USR_NAME' => $user,
'RESULT' => '',
'EXEC_DATE' => date ( 'Y-m-d' ),
'EXEC_HOUR' => date ( 'H:i:s' ),
'WS_CREATE_CASE_STATUS' => '',
'WS_ROUTE_CASE_STATUS' => ''
'PRO_UID' => $processId,
'TAS_UID' => $taskId,
'SCH_UID' => $sSchedulerUid,
'USR_NAME' => $user,
'RESULT' => '',
'EXEC_DATE' => date ( 'Y-m-d' ),
'EXEC_HOUR' => date ( 'H:i:s' ),
'WS_CREATE_CASE_STATUS' => '',
'WS_ROUTE_CASE_STATUS' => ''
);
$sw_transfer_control_plugin=false;//This SW will be true only if a plugin is allowed to continue the action
@@ -469,9 +475,9 @@ class CaseScheduler extends BaseCaseScheduler {
$paramsLogResult = 'SUCCESS';
$params = array (
'sessionId' => $sessionId,
'caseId' => $caseId,
'delIndex' => "1"
'sessionId' => $sessionId,
'caseId' => $caseId,
'delIndex' => "1"
);
eprint(" - Routing the case #$caseNumber..............");
$result = $client->__SoapCall ( 'RouteCase', array (
@@ -530,7 +536,7 @@ class CaseScheduler extends BaseCaseScheduler {
$Fields ['SCH_STATE'] = 'PROCESSED';
$this->Update ( $Fields );
} else {
}
} else if ($sActualDataHour == $dActualSysHour && $sActualDataMinutes <= $dActualSysMinutes) {
@@ -546,8 +552,8 @@ class CaseScheduler extends BaseCaseScheduler {
$client = new SoapClient ( $defaultEndpoint );
$params = array (
'userid' => $user,
'password' => 'md5:' . $pass
'userid' => $user,
'password' => 'md5:' . $pass
);
$result = $client->__SoapCall ( 'login', array (
$params
@@ -562,22 +568,22 @@ class CaseScheduler extends BaseCaseScheduler {
$newRouteLog = new LogCasesScheduler ();
$variables = Array ();
$params = array (
'sessionId' => $sessionId,
'processId' => $processId,
'taskId' => $taskId,
'variables' => $variables
'sessionId' => $sessionId,
'processId' => $processId,
'taskId' => $taskId,
'variables' => $variables
);
$paramsLog = array (
'PRO_UID' => $processId,
'TAS_UID' => $taskId,
'SCH_UID' => $sSchedulerUid,
'USR_NAME' => $user,
'RESULT' => '',
'EXEC_DATE' => date ( 'Y-m-d' ),
'EXEC_HOUR' => date ( 'H:i:s' ),
'WS_CREATE_CASE_STATUS' => '',
'WS_ROUTE_CASE_STATUS' => ''
'PRO_UID' => $processId,
'TAS_UID' => $taskId,
'SCH_UID' => $sSchedulerUid,
'USR_NAME' => $user,
'RESULT' => '',
'EXEC_DATE' => date ( 'Y-m-d' ),
'EXEC_HOUR' => date ( 'H:i:s' ),
'WS_CREATE_CASE_STATUS' => '',
'WS_ROUTE_CASE_STATUS' => ''
);
$result = $client->__SoapCall ( 'NewCase', array (
@@ -594,9 +600,9 @@ class CaseScheduler extends BaseCaseScheduler {
$paramsLogResult = 'SUCCESS';
$params = array (
'sessionId' => $sessionId,
'caseId' => $caseId,
'delIndex' => "1"
'sessionId' => $sessionId,
'caseId' => $caseId,
'delIndex' => "1"
);
$result = $client->__SoapCall ( 'RouteCase', array (
$params
@@ -648,7 +654,7 @@ class CaseScheduler extends BaseCaseScheduler {
}
}
$nSchTimeNextRun = $dEstimatedDate;
$this->updateDate ( $sSchedulerUid, $nSchTimeNextRun, $nSchLastRunTime );
} elseif ($sOption != '5'){
$Fields = $this->Load ( $sSchedulerUid );
@@ -665,8 +671,8 @@ class CaseScheduler extends BaseCaseScheduler {
$nextRun = $Fields ['SCH_REPEAT_EVERY']*60*60;
$nSchTimeNextRun += $nextRun;
$nSchTimeNextRun = date("Y-m-d H:i", $nSchTimeNextRun );
$this->updateDate ( $sSchedulerUid, $nSchTimeNextRun, $nSchLastRunTime );
}
}
@@ -718,13 +724,13 @@ class CaseScheduler extends BaseCaseScheduler {
$nFirstDay = $aWeeks [0];
$aDaysWeek = array (
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday',
'Sunday'
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday',
'Sunday'
);
$nFirstDay = $nFirstDay - 1;
// echo "¨¨".$nFirstDay."¨¨";
@@ -821,27 +827,27 @@ class CaseScheduler extends BaseCaseScheduler {
break;
case '2' :
$aMontsShort = array (
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec'
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec'
);
$aWeeksShort = array (
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday',
'Sunday'
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday',
'Sunday'
);
$sNumDayWeek = $aStartDay [1];
$sDayWeek = ($aStartDay [2] == 7 ? 0 : $aStartDay [2]);