Explorar o código

#3268 Record last run time, how long did it take and how much memory to run for each cron job and other improvements

Alex Trofimov %!s(int64=5) %!d(string=hai) anos
pai
achega
885bbe0330

+ 6 - 0
inc/classes/BxDolCronQuery.php

@@ -46,6 +46,12 @@ class BxDolCronQuery extends BxDolDb implements iBxDolSingleton
     	return $this->fromCache('sys_cron_jobs', 'getAll', "SELECT * FROM `sys_cron_jobs`");
     	return $this->fromCache('sys_cron_jobs', 'getAll', "SELECT * FROM `sys_cron_jobs`");
     }
     }
 
 
+    public function updateJob($iId, $aFields = array())
+    {
+    	$sQuery = $this->prepare("UPDATE `sys_cron_jobs` SET " . $this->arrayToSQL($aFields) . " WHERE `id` = ?", $iId);
+        return $this->query($sQuery);
+    }
+
     public function addTransientJobClass($sName, $sClass, $sFile)
     public function addTransientJobClass($sName, $sClass, $sFile)
     {
     {
     	$sQuery = $this->prepare("INSERT INTO `sys_cron_jobs` SET `name`=?, `time`='transient', `class`=?, `file`=?", $sName, $sClass, $sFile);
     	$sQuery = $this->prepare("INSERT INTO `sys_cron_jobs` SET `name`=?, `time`='transient', `class`=?, `file`=?", $sName, $sClass, $sFile);

+ 4 - 1
install/sql/system.sql

@@ -2033,6 +2033,8 @@ CREATE TABLE `sys_cron_jobs` (
   `class` varchar(128) NOT NULL default '',
   `class` varchar(128) NOT NULL default '',
   `file` varchar(255) NOT NULL default '',
   `file` varchar(255) NOT NULL default '',
   `service_call` text NOT NULL default '', 
   `service_call` text NOT NULL default '', 
+  `ts` int(11) NOT NULL,
+  `timing` float NOT NULL,
   PRIMARY KEY  (`id`)
   PRIMARY KEY  (`id`)
 );
 );
 
 
@@ -5366,7 +5368,8 @@ INSERT INTO `sys_objects_logs` (`object`, `module`, `logs_storage`, `title`, `ac
 ('sys_debug', 'system', 'Auto', '_sys_log_debug', 1, '', ''),
 ('sys_debug', 'system', 'Auto', '_sys_log_debug', 1, '', ''),
 ('sys_twilio', 'system', 'Auto', '_sys_log_twilio', 1, '', ''),
 ('sys_twilio', 'system', 'Auto', '_sys_log_twilio', 1, '', ''),
 ('sys_push', 'system', 'Auto', '_sys_log_push', 1, '', ''),
 ('sys_push', 'system', 'Auto', '_sys_log_push', 1, '', ''),
-('sys_payments', 'system', 'Auto', '_sys_log_payments', 1, '', '');
+('sys_payments', 'system', 'Auto', '_sys_log_payments', 1, '', ''),
+('sys_cron_jobs', 'system', 'Auto', '_sys_log_cron_jobs', 0, '', '');
 
 
 
 
 -- --------------------------------------------------------
 -- --------------------------------------------------------

+ 1 - 0
modules/boonex/english/data/langs/system/en.xml

@@ -2665,6 +2665,7 @@ If it is not enabled then please consider implement this optimization, since it
     <string name="_sys_log_twilio"><![CDATA[System: Twilio]]></string>
     <string name="_sys_log_twilio"><![CDATA[System: Twilio]]></string>
     <string name="_sys_log_push"><![CDATA[System: PUSH]]></string>
     <string name="_sys_log_push"><![CDATA[System: PUSH]]></string>
 	<string name="_sys_log_payments"><![CDATA[System: Payments]]></string>
 	<string name="_sys_log_payments"><![CDATA[System: Payments]]></string>
+	<string name="_sys_log_cron_jobs"><![CDATA[System: Cron jobs]]></string>
     <string name="_sys_macros_malformed"><![CDATA[Error: malformed macros]]></string>
     <string name="_sys_macros_malformed"><![CDATA[Error: malformed macros]]></string>
     <string name="_sys_macros_unsafe"><![CDATA[Error: unsafe macros]]></string>
     <string name="_sys_macros_unsafe"><![CDATA[Error: unsafe macros]]></string>
     <string name="_sys_macros_output_not_displayable"><![CDATA[Error: output isn't displayable]]></string>
     <string name="_sys_macros_output_not_displayable"><![CDATA[Error: output isn't displayable]]></string>

+ 1 - 0
modules/boonex/russian/data/langs/system/ru.xml

@@ -2649,6 +2649,7 @@
     <string name="_sys_log_twilio"><![CDATA[Система: Twilio]]></string>
     <string name="_sys_log_twilio"><![CDATA[Система: Twilio]]></string>
     <string name="_sys_log_push"><![CDATA[Система: PUSH]]></string>
     <string name="_sys_log_push"><![CDATA[Система: PUSH]]></string>
 	<string name="_sys_log_payments"><![CDATA[Система: Платежи]]></string>
 	<string name="_sys_log_payments"><![CDATA[Система: Платежи]]></string>
+	<string name="_sys_log_cron_jobs"><![CDATA[System: Задания Cron]]></string>
     <string name="_sys_macros_malformed"><![CDATA[Ошибка: некорректный макрос]]></string>
     <string name="_sys_macros_malformed"><![CDATA[Ошибка: некорректный макрос]]></string>
     <string name="_sys_macros_unsafe"><![CDATA[Ошибка: небезопасный макрос]]></string>
     <string name="_sys_macros_unsafe"><![CDATA[Ошибка: небезопасный макрос]]></string>
     <string name="_sys_macros_output_not_displayable"><![CDATA[Ошибка: некорректный вывод макроса]]></string>
     <string name="_sys_macros_output_not_displayable"><![CDATA[Ошибка: некорректный вывод макроса]]></string>

+ 8 - 1
periodic/cron.php

@@ -109,14 +109,21 @@ function checkCronJob($sPeriods, $aDate = array())
 
 
 function runJob($aJob)
 function runJob($aJob)
 {
 {
+    $fStart = microtime(true);
+    $oDb = BxDolCronQuery::getInstance();
+    $oDb->updateJob($aJob['id'], array('ts' => time(), 'timing' => 0));
+
     if (!empty($aJob['file']) && !empty($aJob['class']) && file_exists(BX_DIRECTORY_PATH_ROOT . $aJob['file'])) {
     if (!empty($aJob['file']) && !empty($aJob['class']) && file_exists(BX_DIRECTORY_PATH_ROOT . $aJob['file'])) {
         if (!class_exists($aJob['class'], false))
         if (!class_exists($aJob['class'], false))
             require_once(BX_DIRECTORY_PATH_ROOT . $aJob['file']);
             require_once(BX_DIRECTORY_PATH_ROOT . $aJob['file']);
 
 
         $oHandler = new $aJob['class']();
         $oHandler = new $aJob['class']();
         $oHandler->processing();
         $oHandler->processing();
-    } else if (!empty($aJob['service_call']) && BxDolService::isSerializedService($aJob['service_call']))
+    } else if (!empty($aJob['service_call']) && BxDolService::isSerializedService($aJob['service_call'])) {
         BxDolService::callSerialized($aJob['service_call']);
         BxDolService::callSerialized($aJob['service_call']);
+    }
+    bx_log('sys_cron_jobs', $aJob['name'] . ' / timing: ' . (microtime(true) - $fStart) . ' / memory: ' . memory_get_usage());
+    $oDb->updateJob($aJob['id'], array('timing' => microtime(true) - $fStart));
 }
 }
 
 
 bx_import('BxDolCronQuery');
 bx_import('BxDolCronQuery');