diff --git a/docker-compose.yml b/docker-compose.yml index 8d157b8..83a0571 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -77,7 +77,7 @@ services: WORKERS: 1 DEBUG: 1 REDIS_HOST: redis - POSTGRES_HOST: postgres + DB_HOST: postgres JWT_SIGNING_KEY: a-string-secret-at-least-256-bits-long redis: diff --git a/src/Controllers/HealthcheckController.php b/src/Controllers/HealthcheckController.php index 9bbc6f4..f1e10a5 100644 --- a/src/Controllers/HealthcheckController.php +++ b/src/Controllers/HealthcheckController.php @@ -4,20 +4,43 @@ declare(strict_types=1); namespace Siteworxpro\App\Controllers; +use Illuminate\Database\PostgresConnection; use Nyholm\Psr7\ServerRequest; use Psr\Http\Message\ResponseInterface; use Siteworxpro\App\Http\JsonResponseFactory; +use Siteworxpro\App\Models\Model; +use Siteworxpro\App\Services\Facades\Redis; +use Siteworxpro\HttpStatus\CodesEnum; class HealthcheckController extends Controller { - /** * @throws \JsonException */ public function get(ServerRequest $request): ResponseInterface { + try { + /** @var PostgresConnection $conn */ + $conn = Model::getConnectionResolver()->connection(); + $conn->getPdo()->exec('SELECT 1'); + + $response = Redis::ping(); + if ($response->getPayload() !== 'PONG') { + throw new \Exception('Redis ping failed'); + } + } catch (\Exception $e) { + return JsonResponseFactory::createJsonResponse( + [ + 'status_code' => CodesEnum::SERVICE_UNAVAILABLE->value, + 'message' => 'Healthcheck Failed', + 'error' => $e->getMessage(), + ], + CodesEnum::SERVICE_UNAVAILABLE + ); + } + return JsonResponseFactory::createJsonResponse( ['status_code' => 200, 'message' => 'Healthcheck OK'] ); } -} \ No newline at end of file +} diff --git a/src/Services/Facades/Redis.php b/src/Services/Facades/Redis.php index 9ff4c5b..5667109 100644 --- a/src/Services/Facades/Redis.php +++ b/src/Services/Facades/Redis.php @@ -18,6 +18,7 @@ use Siteworxpro\App\Services\Facade; * @method static Status|null set(string $key, $value, $expireResolution = null, $expireTTL = null, $flag = null) * @method static array keys(string $pattern) * @method static int del(string $key) + * @method static Status ping() */ class Redis extends Facade {