public function onEventCreate(NewEventEvent $event)
 {
     $currentEvent = $event->getEvent();
     $lastEvent = $event->getLastEvent();
     if ($currentEvent->getType() == self::TOOL_IDENTIFIER) {
         return;
     }
     if (!is_null($lastEvent) && $currentEvent->getStatus() == $lastEvent->getStatus()) {
         return;
     }
     $system = $currentEvent->getEventIdentifier()->getSystem();
     if (is_null($system)) {
         return;
     }
     $tool = $currentEvent->getEventIdentifier()->getTool();
     $status = Event::STATUS_SUCCESS;
     $message = '';
     if ($system->getThreshold() == 0 || $currentEvent->getStatus() == Event::STATUS_SUCCESS) {
         $healthStatus = max(0, $system->getHealthStatus() - $tool->getScore());
     } else {
         $healthStatus = $system->getHealthStatus() + $tool->getScore();
         if ($healthStatus >= $system->getThreshold()) {
             $status = Event::STATUS_FAILURE;
             $message = 'The health status of "' . $system->getName() . '" is critical.';
         }
     }
     $system->setHealthStatus($healthStatus);
     $this->doctrineManager->persist($system);
     $this->doctrineManager->flush();
     $rawEvent = new RawEvent();
     $rawEvent->setSystem($system->getIdentifier());
     $rawEvent->setType(self::TOOL_IDENTIFIER);
     $rawEvent->setUnique(false);
     $rawEvent->setValue($healthStatus);
     $rawEvent->setStatus($status);
     $rawEvent->setMessage($message);
     $rawEvent->setIdentifier(self::TOOL_IDENTIFIER . '_' . $system->getIdentifier());
     $this->container->get('koalamon.project.helper')->addRawEvent($rawEvent, $currentEvent->getEventIdentifier()->getProject());
 }
 public function addEvent(Event $event)
 {
     $event = $this->processAliasSystem($event);
     $event->setStatus($this->evaluateStatus($event));
     $project = $event->getEventIdentifier()->getProject();
     $lastEvent = $event->getEventIdentifier()->getLastEvent();
     if ($this->isStatusChange($event, $lastEvent)) {
         $event->setIsStatusChange(true);
         if ($lastEvent) {
             $statusChangeEvent = new EventStatusChangeEvent($event, $lastEvent);
         } else {
             $statusChangeEvent = new EventStatusChangeEvent($event);
         }
         $this->eventDispatcher->dispatch('koalamon.event.statuschange', $statusChangeEvent);
         $this->setOpenIncidentCount($event, $project, !is_null($lastEvent));
         if ($event->getStatus() == Event::STATUS_SUCCESS) {
             // remove know issue status when closing
             if ($event->getEventIdentifier()->isKnownIssue()) {
                 $event->getEventIdentifier()->setKnownIssue(false);
             }
             if (is_null($event->getEventIdentifier()->getLastEvent())) {
                 $occurrenceLastEvent = $event->getCreated();
             } else {
                 $occurrenceLastEvent = $event->getEventIdentifier()->getLastEvent()->getLastStatusChange();
             }
             $occurrenceCurrentEvent = $event->getCreated();
             $timeToRecover = abs(($occurrenceCurrentEvent->getTimestamp() - $occurrenceLastEvent->getTimestamp()) / 60);
             $event->getEventIdentifier()->addNewFailure($timeToRecover);
         }
         $project->setLastStatusChange($event->getCreated());
         $event->setLastStatusChange($event->getCreated());
     } else {
         $event->setLastStatusChange($lastEvent->getLastStatusChange());
     }
     if ($event->getEventIdentifier()->getStatus() == EventIdentifier::STATUS_RUNNING) {
         $event->getEventIdentifier()->setStatus(EventIdentifier::STATUS_NONE);
         $project->setLastStatusChange($event->getCreated());
     }
     $event->getEventIdentifier()->setLastEvent($event);
     $event->getEventIdentifier()->setCurrentState($event->getStatus());
     $event->getEventIdentifier()->incEventCount();
     if ($event->getStatus() == Event::STATUS_FAILURE) {
         $event->getEventIdentifier()->incFailedEventCount();
     }
     $this->storeData($event, $project);
     if ($lastEvent) {
         $this->handleIncident($event, $lastEvent);
     } else {
         $this->handleIncident($event);
     }
     $dispatcherEvent = new NewEventEvent($event);
     if ($lastEvent) {
         $dispatcherEvent->setLastEvent($lastEvent);
     }
     $this->eventDispatcher->dispatch('koalamon.event.create', $dispatcherEvent);
     return $event;
 }