nadi-pro/nadi-php

Nadi (http://nadi.pro) 的 PHP SDK

1.1.4 2024-08-25 03:36 UTC

This package is auto-updated.

Last update: 2024-09-25 03:48:51 UTC


README

Build Status

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,
];

类图

抽样

以下是由默认提供的抽样策略

  1. 基本抽样
  2. 固定速率抽样
  3. 间隔抽样
  4. 峰值负载抽样
  5. 动态速率抽样

使用

以下是如何构造 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;
    }
}