Exemple #1
0
 public function setUp()
 {
     $this->_model = new Mage_Cron_Model_Observer();
     $this->_model->dispatch('this argument is not used');
 }
Exemple #2
0
 public function setUp()
 {
     $this->_model = Mage::getModel('Mage_Cron_Model_Observer');
     $this->_model->dispatch('this argument is not used');
 }
Exemple #3
0
 /**
  * Clean up the history of tasks
  * This override deals with custom states added in Aoe_Scheduler
  *
  * @return Mage_Cron_Model_Observer
  */
 public function cleanup()
 {
     // check if history cleanup is needed
     $lastCleanup = Mage::app()->loadCache(self::CACHE_KEY_LAST_HISTORY_CLEANUP_AT);
     if ($lastCleanup > time() - Mage::getStoreConfig(self::XML_PATH_HISTORY_CLEANUP_EVERY) * 60) {
         return $this;
     }
     $startTime = microtime(true);
     $history = Mage::getModel('cron/schedule')->getCollection()->addFieldToFilter('status', array('in' => array(Aoe_Scheduler_Model_Schedule::STATUS_KILLED, Aoe_Scheduler_Model_Schedule::STATUS_DISAPPEARED, Aoe_Scheduler_Model_Schedule::STATUS_DIDNTDOANYTHING)))->load();
     $historyLifetimes = array(Aoe_Scheduler_Model_Schedule::STATUS_KILLED => Mage::getStoreConfig(self::XML_PATH_HISTORY_SUCCESS) * 60, Aoe_Scheduler_Model_Schedule::STATUS_DISAPPEARED => Mage::getStoreConfig(self::XML_PATH_HISTORY_FAILURE) * 60, Aoe_Scheduler_Model_Schedule::STATUS_DIDNTDOANYTHING => Mage::getStoreConfig(self::XML_PATH_HISTORY_SUCCESS) * 60);
     $now = time();
     foreach ($history->getIterator() as $record) {
         /* @var $record Aoe_Scheduler_Model_Schedule */
         if (strtotime($record->getExecutedAt()) < $now - $historyLifetimes[$record->getStatus()]) {
             $record->delete();
         }
     }
     parent::cleanup();
     // delete successful tasks
     $maxNo = Mage::getStoreConfig(self::XML_PATH_HISTORY_MAXNO);
     if ($maxNo) {
         $history = Mage::getModel('cron/schedule')->getCollection()->addFieldToFilter('status', Mage_Cron_Model_Schedule::STATUS_SUCCESS)->setOrder('finished_at', 'desc')->load();
         $counter = array();
         foreach ($history->getIterator() as $record) {
             /* @var $record Aoe_Scheduler_Model_Schedule */
             $jobCode = $record->getJobCode();
             if (!isset($counter[$jobCode])) {
                 $counter[$jobCode] = 0;
             }
             $counter[$jobCode]++;
             if ($counter[$jobCode] > $maxNo) {
                 $record->delete();
             }
         }
     }
     if ($logFile = Mage::getStoreConfig('system/cron/logFile')) {
         $duration = microtime(true) - $startTime;
         Mage::log('History cleanup (Duration: ' . round($duration, 2) . ' sec)', null, $logFile);
     }
     return $this;
 }
 /**
  * Generate cron schedule.
  * Rewrites the original method to remove duplicates afterwards (that exists because of a bug)
  *
  * @return Mage_Cron_Model_Observer
  */
 public function generate()
 {
     $result = parent::generate();
     $cron_schedule = Mage::getSingleton('core/resource')->getTableName('cron_schedule');
     $conn = Mage::getSingleton('core/resource')->getConnection('core_read');
     $results = $conn->fetchAll("\r\n\t\t\tSELECT\r\n\t\t\t\tGROUP_CONCAT(schedule_id) AS ids,\r\n\t\t\t\tCONCAT(job_code, scheduled_at) AS jobkey,\r\n\t\t\t\tcount(*) AS qty\r\n\t\t\tFROM {$cron_schedule}\r\n\t\t\tWHERE status = 'pending'\r\n\t\t\tGROUP BY jobkey\r\n\t\t\tHAVING qty > 1;\r\n\t\t");
     foreach ($results as $row) {
         $ids = explode(',', $row['ids']);
         $removeIds = array_slice($ids, 1);
         foreach ($removeIds as $id) {
             Mage::getModel('cron/schedule')->load($id)->delete();
         }
     }
     return $result;
 }