diff --git a/src/app/Console/Commands/Status/Health.php b/src/app/Console/Commands/Status/Health.php index e40e561..7a63f63 100644 --- a/src/app/Console/Commands/Status/Health.php +++ b/src/app/Console/Commands/Status/Health.php @@ -1,207 +1,182 @@ line($exception); return false; } } private function checkOpenExchangeRates() { try { OpenExchangeRates::healthcheck(); return true; } catch (\Exception $exception) { $this->line($exception); return false; } } private function checkMollie() { try { return Mollie::healthcheck(); } catch (\Exception $exception) { $this->line($exception); return false; } } private function checkLDAP() { try { LDAP::healthcheck(); return true; } catch (\Exception $exception) { $this->line($exception); return false; } } private function checkIMAP() { try { IMAP::healthcheck(); return true; } catch (\Exception $exception) { $this->line($exception); return false; } } private function checkRoundcube() { try { //TODO maybe run a select? Roundcube::dbh(); return true; } catch (\Exception $exception) { $this->line($exception); return false; } } private function checkRedis() { try { Redis::connection(); return true; } catch (\Exception $exception) { $this->line($exception); return false; } } private function checkMeet() { try { $urls = \config('meet.api_urls'); foreach ($urls as $url) { $this->line("Checking $url"); $client = new \GuzzleHttp\Client( [ 'http_errors' => false, // No exceptions from Guzzle 'base_uri' => $url, 'verify' => \config('meet.api_verify_tls'), 'headers' => [ 'X-Auth-Token' => \config('meet.api_token'), ], 'connect_timeout' => 10, 'timeout' => 10, 'on_stats' => function (\GuzzleHttp\TransferStats $stats) { $threshold = \config('logging.slow_log'); if ($threshold && ($sec = $stats->getTransferTime()) > $threshold) { $url = $stats->getEffectiveUri(); $method = $stats->getRequest()->getMethod(); \Log::warning(sprintf("[STATS] %s %s: %.4f sec.", $method, $url, $sec)); } }, ] ); $response = $client->request('GET', "ping"); if ($response->getStatusCode() != 200) { $this->line("Backend not available: " . var_export($response, true)); return false; } } return true; } catch (\Exception $exception) { $this->line($exception); return false; } } /** * Execute the console command. * * @return mixed */ public function handle() { - $this->line("Checking DB..."); - if ($this->checkDB()) { - $this->info("OK"); - } else { - $this->error("Not found"); - } - $this->line("Checking Redis..."); - if ($this->checkRedis()) { - $this->info("OK"); - } else { - $this->error("Not found"); - } - $this->line("Checking LDAP..."); - if ($this->checkLDAP()) { - $this->info("OK"); - } else { - $this->error("Not found"); - } - $this->line("Checking IMAP..."); - if ($this->checkIMAP()) { - $this->info("OK"); - } else { - $this->error("Not found"); - } - $this->line("Checking Roundcube..."); - if ($this->checkRoundcube()) { - $this->info("OK"); - } else { - $this->error("Not found"); - } - $this->line("Checking Meet..."); - if ($this->checkMeet()) { - $this->info("OK"); - } else { - $this->error("Not found"); - } - $this->line("Checking OpenExchangeRates..."); - if ($this->checkOpenExchangeRates()) { - $this->info("OK"); - } else { - $this->error("Not found"); + $result = 0; + $steps = [ + 'DB', 'Redis', 'IMAP', 'Roundcube', 'Meet', 'Mollie', 'OpenExchangeRates', + ]; + + if (\config('app.with_ldap')) { + array_unshift($steps, 'LDAP'); } - $this->line("Checking Mollie..."); - if ($this->checkMollie()) { - $this->info("OK"); - } else { - $this->error("Not found"); + + foreach ($steps as $step) { + $func = "check{$step}"; + + $this->line("Checking {$step}..."); + + if ($this->{$func}()) { + $this->info("OK"); + } else { + $this->error("Not found"); + $result = 1; + } } + + return $result; } } diff --git a/src/tests/Feature/Console/Status/HealthTest.php b/src/tests/Feature/Console/Status/HealthTest.php new file mode 100644 index 0000000..a6a3f2d --- /dev/null +++ b/src/tests/Feature/Console/Status/HealthTest.php @@ -0,0 +1,24 @@ +assertSame(0, $code); + } +}