五实验室 / 诊断
用于诊断应用的库。
Requires
- php: ^8.2
- ext-json: *
- symfony/event-dispatcher: ~5.4 | ~6.0 | ~7.0
Requires (Dev)
- ext-amqp: *
- ext-curl: *
- ext-mongodb: *
- ext-pdo: *
- ext-redis: *
- ext-sockets: *
- aws/aws-sdk-php: ~3.0
- composer/semver: ~1.0
- doctrine/annotations: ~1.13
- doctrine/dbal: ~2.2 | ~3.0
- doctrine/orm: ~2.6
- elasticsearch/elasticsearch: ~7.0
- escapestudios/symfony2-coding-standard: ~3.5.0
- fivelab/ci-rules: dev-master
- guzzlehttp/guzzle: ~7.0
- guzzlehttp/psr7: ~1.6
- http-interop/http-factory-guzzle: ~1.2
- illuminate/database: ~10.0
- opensearch-project/opensearch-php: ^2.0
- php-amqplib/php-amqplib: ^3.0
- php-http/discovery: ~1.18
- php-http/guzzle7-adapter: ~1.0
- php-http/httplug: ~2.4
- php-http/message: ~1.16
- phpmetrics/phpmetrics: ^2.0
- phpstan/phpstan: ~1.11
- phpunit/phpunit: ~10.1
- predis/predis: ~1.1
- react/promise: ~2.3
- symfony/cache: ~5.4 | ~6.0 | ~7.0
- symfony/console: ~5.4 | ~6.0 | ~7.0
- symfony/dependency-injection: ~5.4 | ~6.0 | ~7.0
- symfony/mailer: ~5.4 | ~6.0 | ~7.0
Suggests
- ext-pdo: For check connection via PDO.
- aws/aws-sdk-php: For check AWS services.
- composer/semver: For compare versions.
- doctrine/dbal: For check connect to database via DBAL connection.
- doctrine/orm: For check access to tables.
- elasticsearch/elasticsearch: For check connect and existence some indices/templates/etc... in elasticsearch.
- illuminate/database: For check connect to database via illuminate components.
- opensearch-project/opensearch-php: For check connect and existence some indices/templates/etc... in opensearch.
- psr/http-client-implementation: For HTTP checks resources
- psr/http-message-implementation:: For HTTP checks resources.
- symfony/console: For run diagnostic commands
- symfony/dependency-injection: Add diagnostic checks by tag to container.
README
#StandWithUkraine诊断
用于诊断应用的库。
为什么?
这个库帮助开发者和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
- 列出所有可用组的命令。
开发
为了轻松开发,您可以使用 Docker
和 Docker 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/