Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
90.91% |
30 / 33 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 1 |
| HostConnectionChecker | |
90.91% |
30 / 33 |
|
0.00% |
0 / 2 |
6.03 | |
0.00% |
0 / 1 |
| checkDbConnection | |
87.50% |
14 / 16 |
|
0.00% |
0 / 1 |
2.01 | |||
| checkApiConnection | |
94.12% |
16 / 17 |
|
0.00% |
0 / 1 |
4.00 | |||
| 1 | <?php |
| 2 | |
| 3 | declare(strict_types=1); |
| 4 | |
| 5 | namespace App\Infrastructure\Host\Service; |
| 6 | |
| 7 | use App\Domain\Host\Entity\HostApiConfig; |
| 8 | use App\Domain\Host\Entity\HostDbConfig; |
| 9 | use App\Domain\Host\Service\HostConnectionCheckerInterface; |
| 10 | use PDO; |
| 11 | use PDOException; |
| 12 | |
| 13 | class HostConnectionChecker implements HostConnectionCheckerInterface |
| 14 | { |
| 15 | public function checkDbConnection(HostDbConfig $config): bool |
| 16 | { |
| 17 | try { |
| 18 | $dsn = sprintf( |
| 19 | '%s:host=%s;port=%d;dbname=%s;charset=utf8mb4', |
| 20 | $config->getDriver(), |
| 21 | $config->getHost(), |
| 22 | $config->getPort(), |
| 23 | $config->getDbName() |
| 24 | ); |
| 25 | |
| 26 | // Ustawienie krótkiego timeoutu na potrzeby szybkiego sprawdzania statusów na liście |
| 27 | $options = [ |
| 28 | PDO::ATTR_TIMEOUT => 2, |
| 29 | PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, |
| 30 | ]; |
| 31 | |
| 32 | $pdo = new PDO($dsn, $config->getUsername(), $config->getPassword(), $options); |
| 33 | |
| 34 | // Wykonujemy trywialne zapytanie aby upewnić się, że połączenie działa |
| 35 | $pdo->query('SELECT 1'); |
| 36 | return true; |
| 37 | } catch (PDOException $e) { |
| 38 | return false; |
| 39 | } |
| 40 | } |
| 41 | |
| 42 | public function checkApiConnection(HostApiConfig $config): bool |
| 43 | { |
| 44 | $url = rtrim($config->getBaseUrl(), '/') . '/api/v1/health'; |
| 45 | |
| 46 | $ch = curl_init($url); |
| 47 | if ($ch === false) { |
| 48 | return false; |
| 49 | } |
| 50 | |
| 51 | $timeout = $config->getTimeout() > 0 ? $config->getTimeout() : 2; |
| 52 | |
| 53 | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); |
| 54 | curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); |
| 55 | curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); |
| 56 | curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); |
| 57 | curl_setopt($ch, CURLOPT_HTTPHEADER, [ |
| 58 | 'Authorization: Bearer ' . $config->getApiToken(), |
| 59 | 'Accept: application/json', |
| 60 | ]); |
| 61 | |
| 62 | curl_exec($ch); |
| 63 | $httpCode = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE); |
| 64 | curl_close($ch); |
| 65 | |
| 66 | return $httpCode >= 200 && $httpCode < 300; |
| 67 | } |
| 68 | } |