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; }