Inheritance: extends Mage_Cron_Model_Schedule
コード例 #1
0
 /**
  * Run
  *
  * @param Aoe_Scheduler_Model_Schedule $schedule
  * @return string
  * @throws Exception
  */
 public function run(Aoe_Scheduler_Model_Schedule $schedule)
 {
     // in case you're interested how often this was repeated so far...
     $currentRepetition = $schedule->getRepetition();
     $numberOfMessagesToFetch = 10;
     // [...]
     $result = $sqsClient->receiveMessage(['AttributeNames' => ['All'], 'MaxNumberOfMessages' => $numberOfMessagesToFetch, 'QueueUrl' => $queueUrl]);
     $messages = $result->search('Messages[]');
     if (count($messages) == 0) {
         $schedule->setStatus(Aoe_Scheduler_Model_Schedule::STATUS_DIDNTDOANYTHING);
         return;
     }
     // process messages
     foreach ($messages as $message) {
         // do something with the message
         // [...]
         $sqsClient->deleteMessage(['QueueUrl' => $queueUrl, 'ReceiptHandle' => $message['ReceiptHandle']]);
     }
     if (count($messages) == $numberOfMessagesToFetch) {
         // there might be more messages on the queue
         $schedule->setStatus(Aoe_Scheduler_Model_Schedule::STATUS_REPEAT);
     } else {
         $schedule->setStatus(Aoe_Scheduler_Model_Schedule::STATUS_SUCCESS);
     }
 }
コード例 #2
0
ファイル: Grid.php プロジェクト: jerome-breton/Aoe_Scheduler
 /**
  * Decorate message
  *
  * @param string                       $value
  * @param Aoe_Scheduler_Model_Schedule $row
  *
  * @return string
  */
 public function decorateMessages($value, Aoe_Scheduler_Model_Schedule $row)
 {
     $return = '';
     if (!empty($value)) {
         $return .= '<a href="#" onclick="$(\'messages_' . $row->getScheduleId() . '\').toggle(); return false;">' . $this->__('Message') . '</a>';
         $return .= '<div class="schedule-message" id="messages_' . $row->getScheduleId() . '" style="display: none; width: 300px; overflow: auto; font-size: small;"><pre>' . $value . '</pre></div>';
     }
     return $return;
 }
コード例 #3
0
ファイル: Schedule.php プロジェクト: ferrazdj/Aoe_Scheduler
 /**
  * @test
  * @depends checkClass
  */
 public function runTask(Aoe_Scheduler_Model_Schedule $schedule)
 {
     $jobCode = 'aoescheduler_testtask';
     $schedule->setJobCode($jobCode);
     $schedule->runNow(false);
     $scheduleId = $schedule->getId();
     $this->assertTrue(intval($schedule->getId()) > 0);
     $loadedSchedule = Mage::getModel('cron/schedule')->load($scheduleId);
     /* @var $loadedSchedule Aoe_Scheduler_Model_Schedule */
     $this->assertEquals($scheduleId, $loadedSchedule->getId());
     $this->assertEquals(gethostname(), $loadedSchedule->getHost());
     $this->assertEquals(getmypid(), $loadedSchedule->getPid());
     $this->assertEquals(Mage_Cron_Model_Schedule::STATUS_SUCCESS, $loadedSchedule->getStatus());
     $this->assertEventDispatched(array('cron_after', 'cron_after_success', 'cron_' . $jobCode . '_after', 'cron_' . $jobCode . '_after_success', 'cron_before', 'cron_' . $jobCode . '_before'));
 }
コード例 #4
0
 /**
  * Reindex community indexers
  *
  * @param Aoe_Scheduler_Model_Schedule $schedule
  * @return Aoe_EeIndexerStats_Model_Observer
  */
 public function reindexCeIndexer(Aoe_Scheduler_Model_Schedule $schedule)
 {
     if ($parameters = $schedule->getParameters()) {
         $codes = json_decode($parameters);
         foreach ($codes as $code) {
             if ($process = Mage::getModel('index/indexer')->getProcessByCode($code)) {
                 /* @var $process Mage_Index_Model_Process */
                 $process->reindexAll();
             }
         }
     } else {
         throw new Enterprise_Index_Exception('Set the cron parameters (Ex. ["catalog_category_flat","catalog_product_flat"]) to run the indexing');
     }
     return $this;
 }
コード例 #5
0
ファイル: Test.php プロジェクト: aoepeople/aoe_scheduler
 /**
  * General purpose test task.
  * Behavior can be controlled via parameters
  *
  * @param Aoe_Scheduler_Model_Schedule $schedule
  * @return string
  * @throws Exception
  */
 public function run(Aoe_Scheduler_Model_Schedule $schedule)
 {
     $parameters = $schedule->getParameters();
     if ($parameters) {
         $parameters = json_decode($parameters, true);
     }
     // fake duration
     $duration = 0;
     if ($parameters && isset($parameters['duration'])) {
         $duration = $parameters['duration'];
     }
     sleep($duration);
     /* // testing the error log feature...
        array_keys('ssdsd');
        error_log( "Hello, errors!" );
        $t = I_AM_NOT_DEFINED;
        */
     if ($parameters && $parameters['outcome'] == 'error') {
         return 'ERROR: This schedule has failed.';
     }
     if ($parameters && $parameters['outcome'] == 'nothing') {
         return 'NOTHING: Did not do anything';
     }
     if ($parameters && $parameters['outcome'] == 'repeat') {
         return 'REPEAT';
     }
     if ($parameters && $parameters['outcome'] == 'exception') {
         throw new Exception('This is a dummy exception');
     }
     // Simulating ETA;
     //        $starttime = time();
     //        // $endtime = $starttime + rand(180, 360);
     //        $endtime = $starttime + $duration;
     //        $schedule
     //            ->setEta(strftime('%Y-%m-%d %H:%M:%S', $endtime))
     //            ->save();
     //        while ($endtime > time()) {
     //            sleep(5);
     //            $schedule
     //                ->setProgressMessage('Work in progress. Time spent: ' . (time() - $starttime))
     //                ->setEta(strftime('%Y-%m-%d %H:%M:%S', $endtime))
     //                ->save();
     //        }
     //
     //        $schedule
     //            ->setProgressMessage('')
     //            ->save();
 }
コード例 #6
0
ファイル: TestTask.php プロジェクト: ferrazdj/Aoe_Scheduler
 /**
  * Run a test task
  *
  * @param Aoe_Scheduler_Model_Schedule $schedule
  */
 public function run(Aoe_Scheduler_Model_Schedule $schedule)
 {
     $starttime = time();
     // $endtime = $starttime + rand(180, 360);
     $endtime = $starttime + 5;
     $schedule->setEta(strftime('%Y-%m-%d %H:%M:%S', $endtime))->save();
     while ($endtime > time()) {
         sleep(5);
         $schedule->setProgressMessage('Work in progress. Time spent: ' . (time() - $starttime))->setEta(strftime('%Y-%m-%d %H:%M:%S', $endtime))->save();
     }
     $schedule->setProgressMessage('')->save();
     /*
     if (rand(0, 1) == 0) {
         throw new Exception('This is a dummy exception');
     }
     */
 }
コード例 #7
0
 /**
  * Get attributes for div representing a gantt element
  *
  * @param Aoe_Scheduler_Model_Schedule $schedule
  * @return string
  */
 public function getGanttDivAttributes(Aoe_Scheduler_Model_Schedule $schedule)
 {
     if ($schedule->getStatus() == Mage_Cron_Model_Schedule::STATUS_RUNNING) {
         $duration = time() - strtotime($schedule->getExecutedAt());
     } else {
         $duration = $schedule->getDuration() ? $schedule->getDuration() : 0;
     }
     $duration = $duration / $this->zoom;
     $duration = ceil($duration / 4) * 4 - 1;
     // round to numbers dividable by 4, then remove 1 px border
     $duration = max($duration, 3);
     $offset = (strtotime($schedule->getStarttime()) - $this->starttime) / $this->zoom;
     if ($offset < 0) {
         // cut bar
         $duration += $offset;
         $offset = 0;
     }
     return sprintf('class="task %s" id="id_%s" style="width: %spx; left: %spx;"', $schedule->getStatus(), $schedule->getScheduleId(), $duration, $offset);
 }