/**
  *  Handles the event MonitoringEventsMap::MONITOR_QUERY
  *
  *  @access public
  *  @return void
  *  @param MonitoringQueryEvent $event
  */
 public function onMonitorQuery(MonitoringQueryEvent $event)
 {
     try {
         $query = $this->gateway->selectQuery()->start();
         if ($event->getStart() instanceof DateTime) {
             $query->andWhereCoverDateAfter($event->getStart());
         }
         if ($event->getEnd() instanceof DateTime) {
             $query->andWhereCoverDateBefore($event->getEnd());
         }
         if ($event->getLimit() !== null) {
             $query->limit($event->getLimit());
         }
         if ($event->getOffset() !== null) {
             $query->offset($event->getOffset());
         }
         if ($event->getIncludeCalculating() === false) {
             # only going to restrict if to not include calculating
             $query->andWhereCalculated();
         }
         $query->orderMonitorDate($event->getOrder());
         $event->setResult($query->end()->find());
     } catch (DBALGatewayException $e) {
         throw new LaterJobException($e->getMessage(), 0, $e);
     }
 }
 /**
  *  Log events that occur from queue
  *
  *  @access public
  *  @param MonitoringQueryEvent $event 
  */
 public function logMonitorQueryEvent(MonitoringQueryEvent $event)
 {
     $this->log->info('MonitoringEvent:: Monitor running query with params', array('limit' => $event->getLimit(), 'offset' => $event->getOffset(), 'order' => $event->getOrder(), 'start' => $event->getStart(), 'end' => $event->getEnd(), 'include_calculating' => $event->getIncludeCalculating()));
 }
 public function testMonitoringQueryEvent()
 {
     $start = new DateTime();
     $end = new DateTime();
     $result = new \ArrayIterator(array());
     $limit = 2;
     $offset = 0;
     $order = 'ASC';
     $calculating = true;
     $event = new MonitoringQueryEvent($offset, $limit, $order, $start, $end, $calculating);
     $event->setResult($result);
     $this->assertEquals($end, $event->getEnd());
     $this->assertEquals($start, $event->getStart());
     $this->assertEquals($result, $event->getResult());
     $this->assertEquals($limit, $event->getLimit());
     $this->assertEquals($offset, $event->getOffset());
     $this->assertEquals($order, $event->getOrder());
     $this->assertEquals($calculating, $event->getIncludeCalculating());
 }