public function onQueryActivity(QueueQueryActivityEvent $event)
 {
     try {
         $query = $this->gateway->selectQuery()->start();
         if ($event->getAfter() instanceof DateTime) {
             $query->filterOccuredAfter($event->getAfter());
         }
         if ($event->getBefore() instanceof DateTime) {
             $query->filterOccuredBefore($event->getBefore());
         }
         if ($event->getLimit() !== null) {
             $query->limit($event->getLimit());
         }
         if ($event->getOffset() !== null) {
             $query->offset($event->getOffset());
         }
         if ($event->getWorkerID() !== null) {
             $query->filterByWorker($event->getWorkerID());
         }
         if ($event->getJobID() !== null) {
             $query->filterByJob($event->getJobID());
         }
         # set the order by the date added
         $query->orderByOccured($event->getOrder());
         $event->setResult($query->end()->find());
     } catch (DBALGatewayException $e) {
         throw new LaterJobException($e->getMessage(), 0, $e);
     }
 }
 /**
  *  Handles the event MonitoringEventsMap::MONITOR_COMMIT
  *
  *  @access public
  *  @return void
  *  @param MonitoringEvent $event
  */
 public function onMonitorRun(MonitoringEvent $event)
 {
     try {
         $result = $event->getStats();
         # Get Queue Job Counts
         $counts = $this->activity_gateway->countQueueJobStates($result->getMonitorDate(), $event->getInterval());
         foreach ($counts as $state_count) {
             switch ($state_count['state_id']) {
                 case QueueConfig::STATE_ADD:
                     $result->setQueueJobsAdded($state_count['state_count']);
                     break;
                 case QueueConfig::STATE_START:
                     $result->setQueueJobsProcessing($state_count['state_count']);
                     break;
                 case QueueConfig::STATE_FINISH:
                     $result->setQueueJobsCompleted($state_count['state_count']);
                     break;
                 case QueueConfig::STATE_ERROR:
                     $result->setQueueJobsError($state_count['state_count']);
                     break;
                 case QueueConfig::STATE_FAIL:
                     $result->setQueueJobsFailed($state_count['state_count']);
                     break;
                 default:
                     throw new LaterJobException('Unknown job state can not continue');
             }
         }
         # get the queue Mean Max and Min Service Times
         $result->setJobMeanServiceTime($this->activity_gateway->getMeanServiceTime($result->getMonitorDate(), $event->getInterval()));
         $result->setJobMaxServiceTime($this->activity_gateway->getMaxServiceTime($result->getMonitorDate(), $event->getInterval()));
         $result->setJobMinServiceTime($this->activity_gateway->getMinServiceTime($result->getMonitorDate(), $event->getInterval()));
         # calculate worker stats
         $result->setWorkerMaxTime($this->activity_gateway->getWorkerMaxRunningTime($result->getMonitorDate(), $event->getInterval()));
         $result->setWorkerMinTime($this->activity_gateway->getWorkerMinRunningTime($result->getMonitorDate(), $event->getInterval()));
         $result->setWorkerMeanTime($this->activity_gateway->getWorkerMeanRunningTime($result->getMonitorDate(), $event->getInterval()));
         $result->setWorkerMeanThroughput($this->activity_gateway->getWorkerMeanThroughput($result->getMonitorDate(), $event->getInterval()));
         # calculate Utilization
         $result->setWorkerMeanUtilization($result->getWorkerMeanThroughput() / $result->getWorkerMaxThroughput());
         # completed successfuly
         $event->setResult(true);
     } catch (DBALGatewayException $e) {
         throw new LaterJobException($e->getMessage(), 0, $e);
     }
     return $event;
 }
 /**
  *  Save the transition to the database
  *
  *  @access public
  *  @return boolean
  *  @param WorkerTransitionEvent $event
  */
 protected function saveTransition(WorkerTransitionEvent $event)
 {
     try {
         $obj = $event->getTransition();
         $result = $this->gateway->insertQuery()->start()->addColumn('worker_id', $obj->getWorker())->addColumn('state_id', $obj->getState())->addColumn('dte_occured', $obj->getOccured())->addColumn('transition_msg', $obj->getMessage())->addColumn('process_handle', $obj->getProcessHandle())->end()->insert();
         # assign the id to the object
         $obj->setTransitionId($this->gateway->lastInsertId());
         if ($result === false) {
             throw new LaterJobException('Unable to save transition for Worker:: ' . $obj->getWorker() . ' It already exists');
         }
     } catch (DBALGatewayException $e) {
         throw new LaterJobException($e->getMessage(), 0, $e);
     }
 }