From d0f0fb69f67db34040e1030deca4c5342ca223f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikul=C3=A1=C5=A1=20D=C3=ADt=C4=9B?= Date: Thu, 13 Apr 2017 18:50:22 +0200 Subject: [PATCH] =?UTF-8?q?Upozorn=C4=9Bn=C3=AD=20na=20n=C3=A1vrat=20k=20o?= =?UTF-8?q?=C4=8Dek=C3=A1van=C3=A9=20hodnot=C4=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Záměrně prolamuje lock timeout, aby upozornění na recovery přišlo co nejdříve. --- app/Check/Check.php | 2 ++ .../Commands/SlackCheckStatusesCommand.php | 27 ++++++++++++++++--- .../2017-04-13-184410-notify-on-recovery.sql | 2 ++ 3 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 migrations/structures/2017-04-13-184410-notify-on-recovery.sql diff --git a/app/Check/Check.php b/app/Check/Check.php index 95f36acc..39ea857d 100644 --- a/app/Check/Check.php +++ b/app/Check/Check.php @@ -8,6 +8,7 @@ * @property SlackNotifyLock $locks {1:m SlackNotifyLock::$check, cascade=[persist, remove]} * @property int $type {enum ICheck::TYPE_*} * @property int $status {virtual} + * @property bool $awaitingRecovery * @property \DateTime|NULL $lastCheck * @property bool $paused {default TRUE} * @property string|NULL $name @@ -35,6 +36,7 @@ public function __construct() parent::__construct(); $this->status = ICheck::STATUS_ERROR; + $this->awaitingRecovery = FALSE; } diff --git a/app/Check/Commands/SlackCheckStatusesCommand.php b/app/Check/Commands/SlackCheckStatusesCommand.php index 9ce42718..d2256a45 100644 --- a/app/Check/Commands/SlackCheckStatusesCommand.php +++ b/app/Check/Commands/SlackCheckStatusesCommand.php @@ -2,6 +2,8 @@ namespace Pd\Monitoring\Check\Commands; +use Pd\Monitoring\Check\ICheck; + class SlackCheckStatusesCommand extends \Symfony\Component\Console\Command\Command { @@ -90,6 +92,24 @@ protected function execute( } } + $url = $this->linkGenerator->link('DashBoard:Project:', [$check->project->id]); + $checkStatusMessage = $check->statusMessage; + + if ($check->awaitingRecovery && $check->status === ICheck::STATUS_OK) { + $message = sprintf( + 'Pro <%s|projekt %s> se kontrola vrátila do normálu: %s%s', + $url, + $check->project->name, + $check->fullName, + $checkStatusMessage ? ': ' . $checkStatusMessage : '' + ); + + $this->slackNotifier->notify($message, 'good'); + $check->awaitingRecovery = FALSE; + $this->checksRepository->persistAndFlush($check); + continue; + } + $conditions = [ 'check' => $check, ]; @@ -101,8 +121,6 @@ protected function execute( continue; } - $url = $this->linkGenerator->link('DashBoard:Project:', [$check->project->id]); - switch ($check->status) { case \Pd\Monitoring\Check\ICheck::STATUS_ALERT: $color = 'warning'; @@ -118,9 +136,10 @@ protected function execute( $lock->locked = $this->dateTimeProvider->getDateTime(); $lock->status = $check->status; $lock->check = $check; - $this->slackNotifyLocksRepository->persistAndFlush($lock); + $this->slackNotifyLocksRepository->persist($lock); - $checkStatusMessage = $check->statusMessage; + $check->awaitingRecovery = TRUE; + $this->checksRepository->persistAndFlush($check); $message = sprintf( 'Pro <%s|projekt %s> je zaznamenán problém v kontrole %s%s', diff --git a/migrations/structures/2017-04-13-184410-notify-on-recovery.sql b/migrations/structures/2017-04-13-184410-notify-on-recovery.sql new file mode 100644 index 00000000..d75615d7 --- /dev/null +++ b/migrations/structures/2017-04-13-184410-notify-on-recovery.sql @@ -0,0 +1,2 @@ +ALTER TABLE `checks` +ADD `awaiting_recovery` tinyint NOT NULL DEFAULT 0;