eqs/health-check-provider

提供符合IETF健康检查草稿RFC的健康检查端点

0.1.1 2024-01-26 08:53 UTC

This package is auto-updated.

Last update: 2024-09-01 04:29:40 UTC


README

提供符合IETF健康检查草稿RFC的健康检查端点结构

关于

本软件包提供的端点符合IETF健康检查RFC草稿06版本

集成

我们提供以下集成,但通过重用CallableHealthChecker实现自己的集成非常简单。

  • HTTP请求
  • Doctrine连接

安装

使用Composer将此软件包作为依赖项安装。

composer require eqs/health-check-provider

使用方法

此库提供PSR-15 HTTP服务器请求处理器,这保证了与广泛PHP框架的兼容性。如果您的框架原生不支持它,您可以找到一个支持它的PSR桥接器

Symfony框架示例控制器

对于此示例,除了标准的symfony软件包外,您还需要php-http/discoverysymfony/psr-http-message-bridge软件包。

use Doctrine\DBAL\Connection;
use GuzzleHttp\Psr7\HttpFactory;
use EQS\HealthCheckProvider\DTO\CheckDetails;
use EQS\HealthCheckProvider\DTO\HealthResponse;
use EQS\HealthCheckProvider\HealthChecker\CallableHealthChecker;
use EQS\HealthCheckProvider\HealthChecker\DoctrineConnectionHealthChecker;
use EQS\HealthCheckProvider\HealthChecker\HttpHealthChecker;
use EQS\HealthCheckProvider\RequestHandler;
use Psr\Http\Client\ClientInterface;
use Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory;
use Symfony\Bridge\PsrHttpMessage\Factory\PsrHttpFactory;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\Attribute\Autowire;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Messenger\Transport\Receiver\MessageCountAwareInterface;
use Symfony\Component\Messenger\Transport\TransportInterface;
use Symfony\Component\Routing\Annotation\Route;

class GetHealthCheckController extends AbstractController
{
    public function __construct(
        #[Autowire(service: 'messenger.transport.amqp_dc_user_update')]
        private MessageCountAwareInterface&TransportInterface $transport,
        private Connection $connection,
        private ClientInterface $httpClient,
    ) {}

    #[Route(path: '/api/health_check')]
    public function __invoke(Request $request): Response
    {
        $psr17Factory = new HttpFactory();
        $psrBridge = new HttpFoundationFactory();

        return $psrBridge->createResponse(
            (new RequestHandler(
                new HealthResponse(),
                [
                    new CallableHealthChecker(new CheckDetails('AMQP', true), fn () => $this->transport->getMessageCount()),
                    new DoctrineConnectionHealthChecker(new CheckDetails('Database', true), $this->connection),
                    new HttpHealthChecker(
                        new CheckDetails('External API', false),
                        $this->httpClient,
                        new \GuzzleHttp\Psr7\Request('GET', 'https://www.google.com'),
                    ),
                ],
                $psr17Factory,
                $psr17Factory,
            ))
                ->handle((new PsrHttpFactory($psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory))
                    ->createRequest($request)),
        );
    }
}

贡献

欢迎贡献!要贡献,请熟悉CONTRIBUTING.md

版权和许可

eqs/health-check-provider版权© EQS Group,根据MIT许可证(MIT)许可使用。有关更多信息,请参阅LICENSE