68publishers/health-check

检查应用程序服务的状态。

v1.0.1 2023-01-05 00:44 UTC

This package is auto-updated.

Last update: 2024-09-05 04:57:50 UTC


README

💗 对应用程序重要的外部服务的健康检查。

Checks Coverage Status Total Downloads Latest Version PHP Version

安装

安装 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