68publishers / health-check
检查应用程序服务的状态。
v1.0.1
2023-01-05 00:44 UTC
Requires
- php: ^8.1
- ext-json: *
Requires (Dev)
- ext-pdo: *
- ext-redis: *
- friendsofphp/php-cs-fixer: ^3.13
- mockery/mockery: ^1.5
- nette/application: ^3.1.4
- nette/bootstrap: ^3.1
- nette/di: ^3.0.6
- nette/http: ^3.2
- nette/tester: ^2.4.3
- phpstan/phpstan: ^1.9
- phpstan/phpstan-nette: ^1.1
- roave/security-advisories: dev-latest
- symfony/console: ^5.4 || ^6.0
- symfony/dotenv: ^6.2
Suggests
- nette/di: For an integration with Nette Framework.
- symfony/console: If you want to use a console command.
Conflicts
- nette/di: <3.0.6
- nette/http: <3.2
- nette/schema: <1.1
- symfony/console: <5.4
README
💗 对应用程序重要的外部服务的健康检查。
安装
安装 68publishers/health-check
的最佳方式是使用 Composer
$ composer require 68publishers/health-check
独立使用
use SixtyEightPublishers\HealthCheck\ExportMode; use SixtyEightPublishers\HealthCheck\HealthChecker; use SixtyEightPublishers\HealthCheck\ServiceChecker\PDOServiceChecker; use SixtyEightPublishers\HealthCheck\ServiceChecker\RedisServiceChecker; $checker = new HealthChecker(); $checker->addServiceChecker(new PDOServiceChecker('pgsql:host=127.0.0.1;port=5432;dbname=example', 'user', 'password')); $checker->addServiceChecker(new RedisServiceChecker()) # check all services $result = $checker->check(); # you can throw an exception if (!$result->isOk()) { throw $result->getError(); } # or covert the result into a JSON echo json_encode($result); # check Redis only $result = $checker->check(['redis']); # check in the "Full" mode. The default mode is "Simple". $result = $checker->check(NULL, ExportMode::Full); # the result now contains detailed information about each service echo json_encode($result);
可用的服务检查器
- PDO -
SixtyEightPublishers\HealthCheck\ServiceChecker\PDOServiceChecker
- Redis -
SixtyEightPublishers\HealthCheck\ServiceChecker\RedisServiceChecker
- Http -
SixtyEightPublishers\HealthCheck\ServiceChecker\HttpServiceChecker
您可以创建自己的服务检查器。只需创建一个实现 ServiceCheckerInterface
接口的类。
集成到 Nette 框架中
该包提供编译器扩展,便于与 Nette 框架集成。
配置示例
extensions: 68publishers.health_check: SixtyEightPublishers\HealthCheck\Bridge\Nette\DI\HealthCheckExtension 68publishers.health_check: service_checkers: - SixtyEightPublishers\HealthCheck\ServiceChecker\RedisServiceChecker() - SixtyEightPublishers\HealthCheck\ServiceChecker\PDOServiceChecker::fromParams([ driver: pgsql host: '127.0.0.1' port: 5432 dbname: example user: user password: password ]) - MyCustomServiceChecker('foo') export_mode: full_if_debug # This is the default value. Supported values are "full_if_debug", "full", "simple" or custom service that implements an interface "ExportModeResolverInterface".
现在服务类型 SixtyEightPublishers\HealthCheck\HealthCheckerInterface
可在 DIC 中访问。
使用 Symfony 控制台进行健康检查
extensions: 68publishers.health_check: SixtyEightPublishers\HealthCheck\Bridge\Nette\DI\HealthCheckExtension 68publishers.health_check.console: SixtyEightPublishers\HealthCheck\Bridge\Nette\DI\HealthCheckConsoleExtension
现在您可以运行此命令
$ bin/console health-check [<services>] [--export-mode <mode>]
使用 Nette 应用程序进行健康检查
extensions: 68publishers.health_check: SixtyEightPublishers\HealthCheck\Bridge\Nette\DI\HealthCheckExtension 68publishers.health_check.application: SixtyEightPublishers\HealthCheck\Bridge\Nette\DI\HealthCheckApplicationExtension 68publishers.health_check.application: route: '/health-check' # The default value. You can change it or set it as "false".
该扩展自动将健康检查路由添加到您的 RouteList 中。如果您想禁用此行为,请将选项 route
设置为 false
并手动将路由添加到您的路由工厂中,例如。
<?php namespace App; use Nette\Application\Routers\RouteList; use SixtyEightPublishers\HealthCheck\Bridge\Nette\Application\HealthCheckRoute; class RouteFactory { public static function create(): RouteList { $router = new RouteList(); $router->add(new HealthCheckRoute('/health-check')); # ... other routes ... return $router; } }
现在您可以通过端点 your-domain.com/health-check
检查您的服务。如果一切正常,端点返回状态码 200
;如果某些服务检查失败,则返回状态码 503
。
贡献
在打开拉取请求之前,请使用以下命令检查您的更改
$ make init # to pull and start all docker images
$ make cs.check
$ make stan
$ make tests.all