用于诊断应用的库。

v2.0.3 2024-09-20 07:53 UTC

README

 #StandWithUkraine 

诊断

用于诊断应用的库。

Build Status

为什么?

这个库帮助开发者和DevOps设置任何应用程序。

如果开发者正确配置所有诊断(路径、服务等...),DevOps在运行我们的应用程序实例之前仅运行诊断,可以看到所有问题(如果存在)。

主要问题

开发者可以向应用程序添加任何参数或服务。例如,添加Redis服务以在运行时使用。但是,在发布应用程序之前没有提供此类信息。DevOps(或开发者)发布新版本的应用程序,而系统没有任何问题。但是,我们有一个重大问题,因为Redis仅在运行时使用,而没有在部署过程中处理。

DevOps将此实例添加到负载均衡器(如果存在),然后在下一次运行时应用程序不能正常工作;(

解决方案

在将实例添加到负载均衡器(或处理范围)之前,DevOps运行诊断,可以看到所有主要问题。

限制

如果您想使用此机制,您必须将诊断检查添加到所有端点。例如

  • 您使用缓存吗?您必须添加检查以验证对缓存目录的访问。
  • 您使用日志吗?您必须添加检查以验证对日志目录的访问。
  • 您使用数据库吗?您必须添加检查以连接到数据库。
  • 您使用Redis吗?您必须添加检查以连接到Redis。
  • 您使用任何HTTP客户端进行连接吗?您必须添加检查以连接到此端点。
  • 等等...

注意:DevOps(基础设施团队、发布经理、开发者)不是魔术师,不能通过星星看到所有所需的服务。

配置和运行

为了轻松配置诊断,您可以使用 \FiveLab\Component\Diagnostic\Check\Definition\DefinitionCollectionBuilder

<?php

declare(strict_types = 1);

namespace Example;

use FiveLab\Component\Diagnostic\Check\Definition\CheckDefinitionsBuilder;
use FiveLab\Component\Diagnostic\Check\Definition\Filter\CheckDefinitionsInGroupFilter;
use FiveLab\Component\Diagnostic\Check\Definition\Filter\OrXFilter;
use FiveLab\Component\Diagnostic\Check\PathReadableCheck;
use FiveLab\Component\Diagnostic\Check\PathWritableCheck;
use FiveLab\Component\Diagnostic\Runner\Runner;

$builder = new CheckDefinitionsBuilder();

$builder->addCheck('cache_dir', new PathWritableCheck('./var/cache'), 'system_dir');
$builder->addCheck('logs_dir', new PathWritableCheck('./var/logs'), 'system_dir');

$builder->addCheck('shared_dir', new PathWritableCheck('./var/shared'), 'shared_dir');
$builder->addCheck('shared_efs', new PathReadableCheck('./var/shared/.efs'), 'shared_dir');

$builder->addCheck('tmp_dir', new PathWritableCheck('./var/tmp'), ['tmp_dir', 'system_dir']);

$definitions = $builder->build();

$runner = new Runner();

// Run all checks
$success = $runner->run($definitions);

// Run only for system dirs
$definitions = $definitions->filter(new CheckDefinitionsInGroupFilter('system_dir'));
$success = $runner->run($definitions);

// Run tmp dir and shared dir
$definitions = $definitions->filter(new OrXFilter(
    new CheckDefinitionsInGroupFilter('tmp_dir'),
    new CheckDefinitionsInGroupFilter('shared_dir')
));

$success = $runner->run($definitions);

与应用程序集成

依赖注入

您可以轻松地将此库集成到Symfony应用程序中,或具有DependencyInjection支持的应用程序中。

为了集成,您可以将编译器传递添加到您的容器构建器中

<?php

namespace Example;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use FiveLab\Component\Diagnostic\DependencyInjection\AddDiagnosticToBuilderCheckPass;

$containerBuilder = new ContainerBuilder();
$containerBuilder->addCompilerPass(new AddDiagnosticToBuilderCheckPass());

$containerBuilder->compile();

添加检查服务

services:
    diagnostic.check.cache_dir:
        class: \FiveLab\Component\Diagnostic\Check\PathWritableCheck
        arguments: [ '%kernel.cache_dir%' ]
        tags:
            - { name: diagnostic.check }

    diagnostic.check.logs_dir:
        class: \FiveLab\Component\Diagnostic\Check\PathWritableCheck
        arguments: [ '%kernel.logs_dir%' ]
        tags:
            - { name: diagnostic.check }

标签 diagnostic.check 支持以下属性

  • key - 检查的唯一键(默认是服务名称)。
  • group - 此检查的组(默认为null)。
  • error_on_failure - 如果为false,系统不会从进程返回错误代码(忽略失败,默认为true)。

控制台命令

我们提供控制台命令以轻松集成到任何应用程序中

  • \FiveLab\Component\Diagnostic\Command\RunDiagnosticCommand - 运行诊断的命令。
  • \FiveLab\Component\Diagnostic\Command\ListChecksCommand - 列出所有可用检查的命令。
  • \FiveLab\Component\Diagnostic\Command\ListGroupsCommand - 列出所有可用组的命令。

开发

为了轻松开发,您可以使用 DockerDocker compose

docker compose up
docker compose exec diagnostic bash

在成功运行并附加到容器后,您必须安装供应商

composer install

在创建PR或合并到develop之前,请运行以下命令以验证代码

./bin/phpunit

./bin/phpcs --config-set show_warnings 0
./bin/phpcs --standard=vendor/escapestudios/symfony2-coding-standard/Symfony/ src/
./bin/phpcs --standard=tests/phpcs-ruleset.xml tests/