diff --git a/workflow/engine/bin/cron.php b/workflow/engine/bin/cron.php index c94808056..4e0932e73 100755 --- a/workflow/engine/bin/cron.php +++ b/workflow/engine/bin/cron.php @@ -54,33 +54,47 @@ $bCronIsRunning = false; $sLastExecution = null; $processcTimeProcess = 0; $processcTimeStart = 0; -if (file_exists(PATH_DATA . "cron")) { - $force = false; - for ($i = 1; $i <= count($argv) - 1; $i++) { - if (strpos($argv[$i], "+force") !== false) { - $force = true; - unset($argv[$i]); - break; - } - } - if (!$force) { - $arrayCron = unserialize(trim(@file_get_contents(PATH_DATA . "cron"))); - $bCronIsRunning = (boolean)($arrayCron["bCronIsRunning"]); - $sLastExecution = $arrayCron["sLastExecution"]; - $processcTimeProcess = (isset($arrayCron["processcTimeProcess"]))? intval($arrayCron["processcTimeProcess"]) : 10; //Minutes - $processcTimeStart = (isset($arrayCron["processcTimeStart"]))? $arrayCron["processcTimeStart"] : 0; - } else { - G::rm_dir(PATH_DATA . "cron"); - } -} -if ($bCronIsRunning && $processcTimeStart != 0) { - if ((time() - $processcTimeStart) > ($processcTimeProcess * 60)) { - //Cron finished his execution for some reason - $bCronIsRunning = false; + +$force = false; +$osIsLinux = strtoupper(substr(PHP_OS, 0, 3)) != "WIN"; + +for ($i = 1; $i <= count($argv) - 1; $i++) { + if (strpos($argv[$i], "+force") !== false) { + $force = true; + unset($argv[$i]); + break; } } -if (!$bCronIsRunning) { +if (!$force && file_exists(PATH_DATA . "cron")) { + //Windows flag + //Get data of cron file + $arrayCron = unserialize(trim(file_get_contents(PATH_DATA . "cron"))); + + $bCronIsRunning = (boolean)($arrayCron["bCronIsRunning"]); + $sLastExecution = $arrayCron["sLastExecution"]; + $processcTimeProcess = (isset($arrayCron["processcTimeProcess"]))? (int)($arrayCron["processcTimeProcess"]) : 10; //Minutes + $processcTimeStart = (isset($arrayCron["processcTimeStart"]))? $arrayCron["processcTimeStart"] : 0; +} + +if (!$force && $osIsLinux) { + //Linux flag + //Check if cron it's running + exec("ps -fea | grep cron.php | grep -v grep", $arrayOutput); + + if (count($arrayOutput) > 1) { + $bCronIsRunning = true; + } +} + +//if (!$force && $bCronIsRunning && $processcTimeStart != 0) { +// if ((time() - $processcTimeStart) > ($processcTimeProcess * 60)) { +// //Cron finished his execution for some reason +// $bCronIsRunning = false; +// } +//} + +if ($force || !$bCronIsRunning) { //Start cron $arrayCron = array("bCronIsRunning" => "1", "sLastExecution" => date("Y-m-d H:i:s")); @file_put_contents(PATH_DATA . "cron", serialize($arrayCron)); diff --git a/workflow/engine/bin/reindex_solr.php b/workflow/engine/bin/reindex_solr.php index 907019db4..561ff13bc 100644 --- a/workflow/engine/bin/reindex_solr.php +++ b/workflow/engine/bin/reindex_solr.php @@ -1,6 +1,6 @@ 3) { if($argv [$argNumber] == '-appuid') { //use skip option $appUid = $argv [$argNumber + 1]; - } + } } else { print $commandLineSyntaxMsg; @@ -106,7 +106,7 @@ if (! defined ('PATH_HOME')) { array_pop ($docuroot); $pathOutTrunk = implode (PATH_SEP, $docuroot) . PATH_SEP; // to do: check previous algorith for Windows $pathTrunk = "c:/home/"; - + define ('PATH_HOME', $pathhome); define ('PATH_TRUNK', $pathTrunk); define ('PATH_OUTTRUNK', $pathOutTrunk); @@ -176,20 +176,6 @@ if (! defined ('PATH_HOME')) { // G::loadClass('pmScript'); -// //default values -// $bCronIsRunning = false; -// $sLastExecution = ''; -// if ( file_exists(PATH_DATA . 'cron') ) { -// $aAux = unserialize( trim( @file_get_contents(PATH_DATA . 'cron')) ); -// $bCronIsRunning = (boolean)$aAux['bCronIsRunning']; -// $sLastExecution = $aAux['sLastExecution']; -// } -// else { -// //if not exists the file, just create a new one with current date -// @file_put_contents(PATH_DATA . 'cron', serialize(array('bCronIsRunning' => -// '1', 'sLastExecution' => date('Y-m-d H:i:s')))); -// } - print "PATH_HOME: " . PATH_HOME . "\n"; print "PATH_DB: " . PATH_DB . "\n"; print "PATH_CORE: " . PATH_CORE . "\n"; @@ -199,19 +185,19 @@ if (! defined ('SYS_SYS')) { $sObject = $workspaceName; $sNow = ''; // $argv[2]; $sFilter = ''; - + for ($i = 3; $i < count ($argv); $i++) { $sFilter .= ' ' . $argv [$i]; } - + $oDirectory = dir (PATH_DB); - + if (is_dir (PATH_DB . $sObject)) { saveLog ('main', 'action', "checking folder " . PATH_DB . $sObject); if (file_exists (PATH_DB . $sObject . PATH_SEP . 'db.php')) { - + define ('SYS_SYS', $sObject); - + // **************************************** // read initialize file require_once PATH_HOME . 'engine' . PATH_SEP . 'classes' . PATH_SEP . 'class.system.php'; @@ -219,16 +205,16 @@ if (! defined ('SYS_SYS')) { define ('MEMCACHED_ENABLED', $config ['memcached']); define ('MEMCACHED_SERVER', $config ['memcached_server']); define ('TIME_ZONE', $config ['time_zone']); - + date_default_timezone_set (TIME_ZONE); print "TIME_ZONE: " . TIME_ZONE . "\n"; print "MEMCACHED_ENABLED: " . MEMCACHED_ENABLED . "\n"; print "MEMCACHED_SERVER: " . MEMCACHED_SERVER . "\n"; // **************************************** - + include_once (PATH_HOME . 'engine' . PATH_SEP . 'config' . PATH_SEP . 'paths_installed.php'); include_once (PATH_HOME . 'engine' . PATH_SEP . 'config' . PATH_SEP . 'paths.php'); - + // ***************** PM Paths DATA ************************** define ('PATH_DATA_SITE', PATH_DATA . 'sites/' . SYS_SYS . '/'); define ('PATH_DOCUMENT', PATH_DATA_SITE . 'files/'); @@ -238,7 +224,7 @@ if (! defined ('SYS_SYS')) { define ('PATH_DYNAFORM', PATH_DATA_SITE . 'xmlForms/'); define ('PATH_IMAGES_ENVIRONMENT_FILES', PATH_DATA_SITE . 'usersFiles' . PATH_SEP); define ('PATH_IMAGES_ENVIRONMENT_USERS', PATH_DATA_SITE . 'usersPhotographies' . PATH_SEP); - + // server info file if (is_file (PATH_DATA_SITE . PATH_SEP . '.server_info')) { $SERVER_INFO = file_get_contents (PATH_DATA_SITE . PATH_SEP . '.server_info'); @@ -250,10 +236,10 @@ if (! defined ('SYS_SYS')) { else { eprintln ("WARNING! No server info found!", 'red'); } - + // read db configuration $sContent = file_get_contents (PATH_DB . $sObject . PATH_SEP . 'db.php'); - + $sContent = str_replace ('', '', $sContent); @@ -261,7 +247,7 @@ if (! defined ('SYS_SYS')) { $sContent = str_replace ("('", "$", $sContent); $sContent = str_replace ("',", '=', $sContent); $sContent = str_replace (");", ';', $sContent); - + eval ($sContent); $dsn = $DB_ADAPTER . '://' . $DB_USER . ':' . $DB_PASS . '@' . $DB_HOST . '/' . $DB_NAME; $dsnRbac = $DB_ADAPTER . '://' . $DB_RBAC_USER . ':' . $DB_RBAC_PASS . '@' . $DB_RBAC_HOST . '/' . $DB_RBAC_NAME; @@ -293,7 +279,7 @@ if (! defined ('SYS_SYS')) { fclose ($oFile); Propel::init (PATH_CORE . 'config/_databases_.php'); // Creole::registerDriver('dbarray', 'creole.contrib.DBArrayConnection'); - + eprintln ("Processing workspace: " . $sObject, 'green'); try { processWorkspace (); @@ -312,10 +298,6 @@ else { processWorkspace (); } -// finally update the file -// @file_put_contents(PATH_DATA . 'cron', serialize(array('bCronIsRunning' => -// '0', 'sLastExecution' => date('Y-m-d H:i:s')))); - function processWorkspace() { global $sLastExecution; @@ -323,16 +305,16 @@ function processWorkspace() global $SkipRecords; global $TrunkSize; global $appUid; - + try { - + if (($solrConf = System::solrEnv (SYS_SYS)) !== false) { G::LoadClass ('AppSolr'); print "Solr Configuration file: " . PATH_DATA_SITE . "env.ini\n"; print "solr_enabled: " . $solrConf ['solr_enabled'] . "\n"; print "solr_host: " . $solrConf ['solr_host'] . "\n"; print "solr_instance: " . $solrConf ['solr_instance'] . "\n"; - + $oAppSolr = new AppSolr ($solrConf ['solr_enabled'], $solrConf ['solr_host'], $solrConf ['solr_instance']); if ($ScriptAction == "reindexall") { $oAppSolr->reindexAllApplications ($SkipRecords, $TrunkSize); @@ -353,7 +335,7 @@ function processWorkspace() else { print "Incomplete Solr configuration. See configuration file: " . PATH_DATA_SITE . "env.ini"; } - + } catch (Exception $oError) { saveLog ("main", "error", "Error processing workspace : " . $oError->getMessage () . "\n"); @@ -366,7 +348,7 @@ function saveLog($sSource, $sType, $sDescription) global $isDebug; if ($isDebug) print date ('H:i:s') . " ($sSource) $sType $sDescription
\n"; - + G::verifyPath (PATH_DATA . 'log' . PATH_SEP, true); $message = '(' . $sSource . ') ' . $sDescription . "\n"; if ($sType == 'action') { @@ -386,7 +368,7 @@ function setExecutionMessage($m) $len = strlen ($m); $linesize = 60; $rOffset = $linesize - $len; - + eprint ("* $m"); for ($i = 0; $i < $rOffset; $i++) eprint ('.'); diff --git a/workflow/engine/bin/verify_solr.php b/workflow/engine/bin/verify_solr.php index b56a788de..9d1103a3a 100644 --- a/workflow/engine/bin/verify_solr.php +++ b/workflow/engine/bin/verify_solr.php @@ -1,6 +1,6 @@ 2) && ((count ($argv) % 2) != 0))) { +if ( (count ($argv) < 2) || ((count ($argv) > 2) && ((count ($argv) % 2) != 0))) { print $commandLineSyntaxMsg; die (); } @@ -43,7 +43,7 @@ $workspaceName = $argv [1]; $usrUid = ""; if((count ($argv) > 2)){ - $usrUid = $argv [3]; + $usrUid = $argv [3]; } ini_set ('display_errors', 1); @@ -70,13 +70,13 @@ if (! defined ('PATH_HOME')) { array_pop ($docuroot); $pathOutTrunk = implode (PATH_SEP, $docuroot) . PATH_SEP; // to do: check previous algorith for Windows $pathTrunk = "c:/home/"; - + define ('PATH_HOME', $pathhome); define ('PATH_TRUNK', $pathTrunk); define ('PATH_OUTTRUNK', $pathOutTrunk); - + require_once (PATH_HOME . 'engine' . PATH_SEP . 'config' . PATH_SEP . 'paths.php'); - + G::LoadThirdParty ('pear/json', 'class.json'); G::LoadThirdParty ('smarty/libs', 'Smarty.class'); G::LoadSystem ('error'); @@ -107,20 +107,6 @@ require_once 'classes/model/AppEvent.php'; require_once 'classes/model/CaseScheduler.php'; // G::loadClass('pmScript'); -// //default values -// $bCronIsRunning = false; -// $sLastExecution = ''; -// if ( file_exists(PATH_DATA . 'cron') ) { -// $aAux = unserialize( trim( @file_get_contents(PATH_DATA . 'cron')) ); -// $bCronIsRunning = (boolean)$aAux['bCronIsRunning']; -// $sLastExecution = $aAux['sLastExecution']; -// } -// else { -// //if not exists the file, just create a new one with current date -// @file_put_contents(PATH_DATA . 'cron', serialize(array('bCronIsRunning' => -// '1', 'sLastExecution' => date('Y-m-d H:i:s')))); -// } - print "PATH_HOME: " . PATH_HOME . "\n"; print "PATH_DB: " . PATH_DB . "\n"; print "PATH_CORE: " . PATH_CORE . "\n"; @@ -131,19 +117,19 @@ if (! defined ('SYS_SYS')) { $sNow = ''; // $argv[2]; /* $sFilter = ''; - + for ($i = 3; $i < count ($argv); $i++) { $sFilter .= ' ' . $argv [$i]; }*/ - + $oDirectory = dir (PATH_DB); - + if (is_dir (PATH_DB . $sObject)) { saveLog ('main', 'action', "checking folder " . PATH_DB . $sObject); if (file_exists (PATH_DB . $sObject . PATH_SEP . 'db.php')) { - + define ('SYS_SYS', $sObject); - + // **************************************** // read initialize file require_once PATH_HOME . 'engine' . PATH_SEP . 'classes' . PATH_SEP . 'class.system.php'; @@ -151,16 +137,16 @@ if (! defined ('SYS_SYS')) { define ('MEMCACHED_ENABLED', $config ['memcached']); define ('MEMCACHED_SERVER', $config ['memcached_server']); define ('TIME_ZONE', $config ['time_zone']); - + date_default_timezone_set (TIME_ZONE); print "TIME_ZONE: " . TIME_ZONE . "\n"; print "MEMCACHED_ENABLED: " . MEMCACHED_ENABLED . "\n"; print "MEMCACHED_SERVER: " . MEMCACHED_SERVER . "\n"; // **************************************** - + include_once (PATH_HOME . 'engine' . PATH_SEP . 'config' . PATH_SEP . 'paths_installed.php'); include_once (PATH_HOME . 'engine' . PATH_SEP . 'config' . PATH_SEP . 'paths.php'); - + // ***************** PM Paths DATA ************************** define ('PATH_DATA_SITE', PATH_DATA . 'sites/' . SYS_SYS . '/'); define ('PATH_DOCUMENT', PATH_DATA_SITE . 'files/'); @@ -170,7 +156,7 @@ if (! defined ('SYS_SYS')) { define ('PATH_DYNAFORM', PATH_DATA_SITE . 'xmlForms/'); define ('PATH_IMAGES_ENVIRONMENT_FILES', PATH_DATA_SITE . 'usersFiles' . PATH_SEP); define ('PATH_IMAGES_ENVIRONMENT_USERS', PATH_DATA_SITE . 'usersPhotographies' . PATH_SEP); - + // server info file if (is_file (PATH_DATA_SITE . PATH_SEP . '.server_info')) { $SERVER_INFO = file_get_contents (PATH_DATA_SITE . PATH_SEP . '.server_info'); @@ -182,10 +168,10 @@ if (! defined ('SYS_SYS')) { else { eprintln ("WARNING! No server info found!", 'red'); } - + // read db configuration $sContent = file_get_contents (PATH_DB . $sObject . PATH_SEP . 'db.php'); - + $sContent = str_replace ('', '', $sContent); @@ -193,7 +179,7 @@ if (! defined ('SYS_SYS')) { $sContent = str_replace ("('", "$", $sContent); $sContent = str_replace ("',", '=', $sContent); $sContent = str_replace (");", ';', $sContent); - + eval ($sContent); $dsn = $DB_ADAPTER . '://' . $DB_USER . ':' . $DB_PASS . '@' . $DB_HOST . '/' . $DB_NAME; $dsnRbac = $DB_ADAPTER . '://' . $DB_RBAC_USER . ':' . $DB_RBAC_PASS . '@' . $DB_RBAC_HOST . '/' . $DB_RBAC_NAME; @@ -225,7 +211,7 @@ if (! defined ('SYS_SYS')) { fclose ($oFile); Propel::init (PATH_CORE . 'config/_databases_.php'); // Creole::registerDriver('dbarray', 'creole.contrib.DBArrayConnection'); - + eprintln ("Processing workspace: " . $sObject, 'green'); try { processWorkspace (); @@ -244,10 +230,6 @@ else { processWorkspace (); } -// finally update the file -// @file_put_contents(PATH_DATA . 'cron', serialize(array('bCronIsRunning' => -// '0', 'sLastExecution' => date('Y-m-d H:i:s')))); - function processWorkspace() { global $sLastExecution; @@ -255,11 +237,11 @@ function processWorkspace() //global $SkipRecords; //global $TrunkSize; global $usrUid; - + try { - + //if $usrUid is not set get all the users - + //verify inbox verifyInboxList($usrUid); @@ -351,10 +333,10 @@ function displayMissingCases($aAppUidsDB, $aAppUidsSolr) foreach($casesInDBNotSolr as $caseDB){ print " ". $caseDB . " \n"; } - print " Cases in Solr but not in DB: \n"; + print " Cases in Solr but not in DB: \n"; foreach($casesInSolrNotDB as $caseSolr){ print " ". $caseSolr . " \n"; - } + } } function getListUids($usrUid, $action) @@ -365,21 +347,21 @@ function getListUids($usrUid, $action) print "solr_enabled: " . $solrConf ['solr_enabled'] . "\n"; print "solr_host: " . $solrConf ['solr_host'] . "\n"; print "solr_instance: " . $solrConf ['solr_instance'] . "\n"; - + $oAppSolr = new AppSolr ($solrConf ['solr_enabled'], $solrConf ['solr_host'], $solrConf ['solr_instance']); G::LoadClass("applications"); $apps = new Applications(); } else { - print "Incomplete Solr configuration. See configuration file: " . PATH_DATA_SITE . "env.ini"; + print "Incomplete Solr configuration. See configuration file: " . PATH_DATA_SITE . "env.ini"; return; - } + } //get the list of id's $userUid = $usrUid; $start = 0; $limit = 1; - $action = $action; //todo, + $action = $action; //todo, $filter = ''; $search = ''; $process = ''; @@ -392,7 +374,7 @@ function getListUids($usrUid, $action) $dir = 'DESC'; $sort = 'APP_NUMBER'; $category = ''; - + $dataSolr = $oAppSolr->getAppGridData( $userUid, $start, @@ -411,7 +393,7 @@ function getListUids($usrUid, $action) $sort ); - + $dataDB = $apps->getAll( $userUid, $start, @@ -443,7 +425,7 @@ function getListUids($usrUid, $action) $start = $i * $trunkSize; $limit = $trunkSize; //print " Loop $start to " . (String)($start + $trunkSize) . " \n"; - + $dataDB = $apps->getAll( $userUid, $start, @@ -461,7 +443,7 @@ function getListUids($usrUid, $action) $dir, $sort, $category - ); + ); foreach($dataDB["data"] as $caseDB){ $aAppUidsDB[] = $caseDB["APP_UID"]; } @@ -475,7 +457,7 @@ function getListUids($usrUid, $action) $start = $i * $trunkSize; $limit = $trunkSize; //print " Loop $start to " . (String)($start + $trunkSize) . " \n"; - + $dataSolr = $oAppSolr->getAppGridData( $userUid, $start, @@ -515,7 +497,7 @@ function saveLog($sSource, $sType, $sDescription) global $isDebug; if ($isDebug) print date ('H:i:s') . " ($sSource) $sType $sDescription
\n"; - + G::verifyPath (PATH_DATA . 'log' . PATH_SEP, true); $message = '(' . $sSource . ') ' . $sDescription . "\n"; if ($sType == 'action') { @@ -535,7 +517,7 @@ function setExecutionMessage($m) $len = strlen ($m); $linesize = 60; $rOffset = $linesize - $len; - + eprint ("* $m"); for ($i = 0; $i < $rOffset; $i++) eprint ('.'); diff --git a/workflow/engine/methods/setup/cron.php b/workflow/engine/methods/setup/cron.php index 7d8fcd224..9df8e9237 100644 --- a/workflow/engine/methods/setup/cron.php +++ b/workflow/engine/methods/setup/cron.php @@ -14,23 +14,38 @@ if ($RBAC->userCanAccess("PM_SETUP") != 1) { $bCronIsRunning = false; $sLastExecution = null; $processcTimeProcess = 0; -$processcTimeStart = 0; +$processcTimeStart = 0; -if (file_exists( PATH_DATA . "cron" )) { - $arrayCron = unserialize( trim( @file_get_contents( PATH_DATA . "cron" ) ) ); - $bCronIsRunning = (boolean) ($arrayCron["bCronIsRunning"]); +$osIsLinux = strtoupper(substr(PHP_OS, 0, 3)) != "WIN"; + +if (file_exists(PATH_DATA . "cron")) { + //Windows flag + //Get data of cron file + $arrayCron = unserialize(trim(file_get_contents(PATH_DATA . "cron"))); + + $bCronIsRunning = (boolean)($arrayCron["bCronIsRunning"]); $sLastExecution = $arrayCron["sLastExecution"]; - $processcTimeProcess = (isset( $arrayCron["processcTimeProcess"] )) ? intval( $arrayCron["processcTimeProcess"] ) : 10; - $processcTimeStart = (isset( $arrayCron["processcTimeStart"] )) ? $arrayCron["processcTimeStart"] : 0; + $processcTimeProcess = (isset($arrayCron["processcTimeProcess"]))? (int)($arrayCron["processcTimeProcess"]) : 10; //Minutes + $processcTimeStart = (isset($arrayCron["processcTimeStart"]))? $arrayCron["processcTimeStart"] : 0; } -if ($bCronIsRunning && $processcTimeStart != 0) { - if ((time() - $processcTimeStart) > ($processcTimeProcess * 60)) { - //Cron finished his execution for some reason - $bCronIsRunning = false; +if ($osIsLinux) { + //Linux flag + //Check if cron it's running + exec("ps -fea | grep cron.php | grep -v grep", $arrayOutput); + + if (count($arrayOutput) > 0) { + $bCronIsRunning = true; } } +//if ($bCronIsRunning && $processcTimeStart != 0) { +// if ((time() - $processcTimeStart) > ($processcTimeProcess * 60)) { +// //Cron finished his execution for some reason +// $bCronIsRunning = false; +// } +//} + //Data $c = new Configurations(); $configPage = $c->getConfiguration( "cronList", "pageSize", null, $_SESSION["USER_LOGGED"] );