예제 #1
0
 protected function setUp()
 {
     $this->_objectManager = Mage::getObjectManager();
     // get existing indexer process
     $this->_model = $this->_objectManager->create('Mage_Index_Model_Process');
     $this->_model->load(self::INDEXER_CODE, 'indexer_code');
     if ($this->_model->isObjectNew()) {
         $this->markTestIncomplete('Can\'t run test without ' . self::INDEXER_CODE . ' indexer.');
     }
     // get new process file instance for current indexer
     /** @var $lockStorage Mage_Index_Model_Lock_Storage */
     $lockStorage = $this->_objectManager->create('Mage_Index_Model_Lock_Storage');
     $this->_processFile = $lockStorage->getFile($this->_model->getId());
 }
예제 #2
0
 /**
  * Set start time and end time based on current process data
  *
  * @param Mage_Index_Model_Process $process
  * @return $this
  */
 public function setDataFromProcess(Mage_Index_Model_Process $process)
 {
     $startTime = new DateTime($process->getStartedAt());
     $endTime = new DateTime($process->getEndedAt());
     $runningTime = $endTime->getTimestamp() - $startTime->getTimestamp();
     $this->setData(array('process_id' => $process->getId(), 'started_at' => $process->getStartedAt(), 'ended_at' => $process->getEndedAt(), 'running_time' => $runningTime));
     return $this;
 }
예제 #3
0
 /**
  * Add filter by process and status to events collection
  *
  * @param int|array|Mage_Index_Model_Process $process
  * @param string $status
  * @return Mage_Index_Model_Resource_Event_Collection
  */
 public function addProcessFilter($process, $status = null)
 {
     $this->_joinProcessEventTable();
     if ($process instanceof Mage_Index_Model_Process) {
         $this->addFieldToFilter('process_event.process_id', $process->getId());
     } elseif (is_array($process) && !empty($process)) {
         $this->addFieldToFilter('process_event.process_id', array('in' => $process));
     } else {
         $this->addFieldToFilter('process_event.process_id', $process);
     }
     if ($status !== null) {
         $this->addFieldToFilter('process_event.status', $status);
     }
     return $this;
 }
예제 #4
0
 /**
  * Update process end date
  *
  * @param Mage_Index_Model_Process $process
  * @return Mage_Index_Model_Resource_Process
  */
 public function updateProcessEndDate(Mage_Index_Model_Process $process)
 {
     $this->_updateProcessData($process->getId(), array('ended_at' => $this->formatDate(time())));
     return $this;
 }
 /**
  * Register process start
  *
  * @param   Mage_Index_Model_Process $process
  * @return  Mage_Index_Model_Mysql4_Process
  */
 public function startProcess(Mage_Index_Model_Process $process)
 {
     $data = array('status' => Mage_Index_Model_Process::STATUS_RUNNING, 'started_at' => $this->formatDate(time()));
     $this->_getWriteAdapter()->update($this->getMainTable(), $data, $this->_getWriteAdapter()->quoteInto('process_id=?', $process->getId()));
     return $this;
 }
예제 #6
0
 /**
  * Update process status field
  *
  *
  * @param Mage_Index_Model_Process $process
  * @param string $status
  * @return Mage_Index_Model_Resource_Process
  */
 public function updateStatus($process, $status)
 {
     $data = array('status' => $status);
     $this->_updateProcessData($process->getId(), $data);
     return $this;
 }
예제 #7
0
 /**
  * Retrieve unprocessed events list by specified process
  *
  * @param Mage_Index_Model_Process $process
  * @return array
  */
 public function getUnprocessedEvents($process)
 {
     $select = $this->_getReadAdapter()->select()->from($this->getTable('index/process_event'))->where('process_id = ?', $process->getId())->where('status = ?', Mage_Index_Model_Process::EVENT_STATUS_NEW);
     return $this->_getReadAdapter()->fetchAll($select);
 }
예제 #8
0
 /**
  * Get row edit url
  *
  * @param Mage_Index_Model_Process $row
  *
  * @return string
  */
 public function getRowUrl($row)
 {
     return $this->getUrl('*/*/edit', array('process' => $row->getId()));
 }
예제 #9
0
 /**
  * Get row edit url
  *
  * @param Mage_Index_Model_Process $row
  *
  * @return string
  */
 public function getRowUrl($row)
 {
     if (!$row->isEnterpriseProcess()) {
         return $this->getUrl('*/*/edit', array('process' => $row->getId()));
     }
     return '';
 }
예제 #10
0
 public function getProgress(Mage_Index_Model_Process $process)
 {
     $avgTime = Mage::getModel('hackathon_indexerstats_resource/history')->getAvg($process->getId());
     $currentTime = new DateTime();
     $startTime = new DateTime($process->getStartedAt());
     $estimatedEndTime = new DateTime($process->getStartedAt());
     $estimatedEndTime->add(new DateInterval('PT' . $avgTime . 'S'));
     $processDiff = $currentTime->getTimestamp() - $startTime->getTimestamp();
     if ($avgTime == 0) {
         return 1;
     }
     return $processDiff / $avgTime;
 }