public function setUp() { $this->_model = new Mage_Cron_Model_Observer(); $this->_model->dispatch('this argument is not used'); }
public function setUp() { $this->_model = Mage::getModel('Mage_Cron_Model_Observer'); $this->_model->dispatch('this argument is not used'); }
/** * 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; }