fullpipe / check-them
外部服务的健康检查
1.0.1
2021-03-08 08:24 UTC
Requires
- php: >=7.2.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- phpunit/phpunit: ^9.4
- predis/predis: ^1.1
- symfony/console: ^5.1
README
安装
composer require fullpipe/check-them
用法
use Fullpipe\CheckThem\Checks\PDOCheck; $mysqlCheck = new PDOCheck('mysql:dbname=test_db;host=127.0.0.1:3306', 'username', 'password'); $status = $mysqlCheck->getStatus(); if(!$status->isUp()) { $this->logger->warn('Mysql server is down', $status->getError()); exit; }
或使用AllInOneCheck
use Fullpipe\CheckThem\Checks\AllInOneCheck; use Fullpipe\CheckThem\Checks\PDOCheck; use Fullpipe\CheckThem\Checks\HttpCheck; use Fullpipe\CheckThem\Checks\RedisChecker; ... $allInOne = new AllInOneCheck(); $allInOne->add(new PDOCheck('mysql:dbname=test_db;host=127.0.0.1:3306', 'username', 'password')); $allInOne->add(new HttpCheck('user_service:8080')); $allInOne->add(new RedisChecker('redis:6379')); $status = $allInOne->getStatus(); if(!$status->isUp()) { $this->logger->warn('Something is down', $status->getError()); exit; } // everything is fine
可用检查
PDOCheck
它只是对php.PDO的一个简单包装。它具有与PDO
类相同的构造函数签名。理论上,它可以与所有PDO驱动程序一起工作,但仅针对MySQL和Postgres进行了测试。
示例
use Fullpipe\CheckThem\Checks\PDOCheck; ... $mysqlCheck = new PDOCheck('mysql:dbname=test_db;host=127.0.0.1:3306', 'username', 'password'); $pgCheck = new PDOCheck('pgsql:host=localhost;port=8002;dbname=test_db', 'username', 'password');
HttpCheck
通过http请求检查外部服务。服务状态为up
时,应返回200
http状态码。
示例
use Fullpipe\CheckThem\Checks\HttpCheck; ... $userCheck = new HttpCheck('http://user_service:8080/healthz'); $webCheck = new HttpCheck('https://google.com/');
配置
$check = (new HttpCheck('http://user_service:8080/healthz')) ->setConnectionTimeout(3) // change connection timeout, default 1 second ;
RedisCheck
通过PING
-> PONG
请求检查redis服务器。
示例
use Fullpipe\CheckThem\Checks\RedisCheck; ... $check = new RedisCheck('tcp://10.0.0.1:6379'); $check = new RedisCheck('unix:/path/to/redis.sock');
配置
$check = (new RedisCheck('redis:6379')) ->setAuth('test_pass') // use password if required ->setConnectionTimeout(4) // timeout for server connection, default 1 second ->setStreamTimeout(3) // timeout for socket read/write operations, default 1 second ;
PredisCheck
如果您已经在使用predis与redis一起工作,您可以使用predis客户端进行PING
检查。
示例
use Fullpipe\CheckThem\Checks\PredisCheck; ... $client = new Predis\Client([ 'scheme' => 'tcp', 'host' => '10.0.0.1', 'port' => 6379, ]); $check = new PredisCheck($client);
SocketCheck
通过socket连接连接到服务,并等待从服务接收单个字符。
示例
use Fullpipe\CheckThem\Checks\SocketCheck; ... // you could use this check for mysql, // it work fine and you don't need a password $check = new SocketCheck('mysql:3306');
配置
$check = (new SocketCheck('mysql:3306')) ->setConnectionTimeout(4) // timeout for server connection, default 1 second ->setStreamTimeout(3) // timeout for socket read/write operations, default 1 second ;
SocketConnectionCheck
仅检查socket连接是否正常工作。这不是一个可以信赖的检查。
示例
use Fullpipe\CheckThem\Checks\SocketConnectionCheck; ... $check = new SocketConnectionCheck('rabbitmq:5672');
配置
$check = (new SocketConnectionCheck('mysql:3306')) ->setConnectionTimeout(4) // timeout for server connection, default 1 second ;
AllInOneCheck
检查所有子项是否可用。
示例
use Fullpipe\CheckThem\Checks\AllInOneCheck; use Fullpipe\CheckThem\Checks\SocketCheck; use Fullpipe\CheckThem\Checks\RedisCheck; ... $check = (new AllInOneCheck()) ->add(new SocketCheck('mysql:3306')) ->add((new RedisCheck('tcp://10.0.0.1:6379'))->setAuth('redisPass')) ;
测试
composer install docker-compose -f tests/docker-compose.yml up -d ./vendor/bin/phpunit
或如果您想玩服务可用性
docker-compose -f tests/docker-compose.yml up -d php ./tests/realtime_test.php docker-compose -f tests/docker-compose.yml restart mysql57