nadi-pro / nadi-php
Nadi (http://nadi.pro) 的 PHP SDK
1.1.4
2024-08-25 03:36 UTC
Requires
- php: ^7.4 || ^8.0 || ^8.1 || ^8.2 || ^8.3
- guzzlehttp/guzzle: ^6.3.1|^7.0.1
- hisorange/browser-detect: ^4.5
- illuminate/support: ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0
- ramsey/uuid: ^3.0 | ^4.7
Requires (Dev)
- laravel/pint: ^1.15
- mockery/mockery: ^1.5
- phpunit/phpunit: ^8.0 || ^9.0 || ^10.1
README
Nadi PHP 客户端
Nadi 是一个简单的跟踪器,用于监控您应用程序的崩溃。本包为 PHP 开发。
安装
composer require nadi-pro/nadi-php
添加新指标
您可以根据需要将新指标添加到您的应用程序/框架中。
请注意,所有指标都将转换为关联数组。
为了创建自己的指标,您需要扩展类 Nadi\Metric\Base
并在 metrics()
方法中实现您的指标详细信息,该方法总是返回一个数组。您可能需要在您的指标中使用点表示法。
然而,Nadi 会将其转换为关联数组。
以下是一个捕获 Laravel 框架 HTTP 请求的示例。
<?php namespace App\Metric; use Nadi\Support\Arr; use Nadi\Metric\Base; use Illuminate\Support\Str; class Http extends Base { public function metrics(): array { $startTime = defined('LARAVEL_START') ? LARAVEL_START : request()->server('REQUEST_TIME_FLOAT'); return [ 'http.client.duration' => $startTime ? floor((microtime(true) - $startTime) * 1000) : null, 'http.scheme' => request()->getScheme(), 'http.route' => request()->getRequestUri(), 'http.method' => request()->getMethod(), 'http.status_code' => http_response_code(), 'http.query' => request()->getQueryString(), 'http.uri' => str_replace(request()->root(), '', request()->fullUrl()) ?: '/', 'http.headers' => Arr::undot(collect(request()->headers->all()) ->map(function ($header) { return $header[0]; }) ->reject(function ($header, $key) { return in_array($key, [ 'authorization', config('nadi.header-key'), 'nadi-key', ]); }) ->toArray()), ]; } }
一旦您已声明了您的指标,您就可以在您的应用程序中使用它
use App\Metrics\Http; use Nadi\Metric\Metric; $metric = new Metric(); $metric->add(new Http()); $metric->toArray();
如果您是从 Laravel 框架添加的,您只需在 config/nadi.php
中添加即可
'metrics' => [ \App\Metrics\Http::class, ];
类图
抽样
以下是由默认提供的抽样策略
使用
以下是如何构造 Sample Config
use Nadi\Sampling\Config; $config = new Config( samplingRate: 0.1, baseRate: 0.05, loadFactor: 1.0, intervalSeconds: 60 );
然后基于可用的抽样策略,构建抽样对象
use Nadi\Sampling\FixedRateSampling; $samplingStrategy = new FixedRateSampling($config);
您可以直接使用抽样
if($samplingStrategy->shouldSample()) { // do something }
或者您需要 Sampling Manager
use Nadi\Sampling\SamplingManager; $samplingManager = new SamplingManager($samplingStrategy); if($samplingManager->shouldSample()) { // do something }
如果您依赖于动态使用抽样策略,请使用抽样管理器。
创建您自己的抽样策略
要创建自己的抽样策略
namespace App\Sampling; use Nadi\Sampling\Contract; use Nadi\Sampling\Config; class CustomSampling implements Contract { public function __construct(protected Config $config) {} public function shouldSample(): bool { // do your logic hhere return true; } }