modernmcguire/overwatch

通过 RESTful 端点配置并提供可定制的 Stripe 数据。

1.3.0 2024-05-07 14:10 UTC

README

Downloads on Packagist Latest Version on Packagist

此软件包允许您为 Laravel 应用程序定义自定义指标,并通过 HTTP 请求或命令获取它们。

安装

您可以通过 composer 安装此软件包

composer require modernmcguire/overwatch

要为您的应用程序创建新的 overwatch 密钥,请使用以下命令

php artisan overwatch:generate

您可以使用以下命令发布配置文件

php artisan vendor:publish --tag="overwatch-config"

这是发布后的配置文件内容,其中默认包含 Laravel 和 PHP 版本

<?php

use Modernmcguire\Overwatch\Metrics\PhpVersion;
use Modernmcguire\Overwatch\Metrics\LaravelVersion;

return [

    'secret' => env('OVERWATCH_SECRET'),

    'metrics' => [
        PhpVersion::class,
        LaravelVersion::class,
    ],
];

用法

Overwatch 通过查询您的应用程序以获取您要跟踪的指标来工作。您可以通过扩展 Metric 类并实现 handle() 方法来创建自己的指标。

<?php

namespace App\Metrics;

use Modernmcguire\Overwatch\Metric;

class TotalUsers extends Metric
{
    public function handle()
    {
        return User::count();
    }
}

默认情况下,指标将以蛇形命名并作为字符串返回。您可以通过在指标中提供常量 KEY 来自定义此功能。

<?php

namespace App\Metrics;

use Modernmcguire\Overwatch\Metric;

class TotalUsers extends Metric
{
    const KEY = 'app_users';

    public function handle()
    {
        return User::count();
    }
}

现在您有一个新的指标要监控,让我们将其添加到您的配置中。

<?php

use App\Metric\TotalUsers;
use Modernmcguire\Overwatch\Metrics\PhpVersion;
use Modernmcguire\Overwatch\Metrics\LaravelVersion;

return [
    'metrics' => [
        PhpVersion::class,
        LaravelVersion::class,

        TotalUsers::class,
    ],
];

安全

为了保护敏感指标,Overwatch 需要提供请求中的密钥。此密钥用于加密有效负载并验证请求是否来自可信来源。

要生成密钥,请使用以下命令

php artisan overwatch:generate

这将生成一个新的密钥并将其存储在您的 .env 文件中。您也可以通过将以下内容添加到您的 .env 文件中来手动设置密钥

OVERWATCH_SECRET=your-secret-key

获取数据

要获取已安装 Overwatch 的应用程序的指标数据,您可以向 /overwatch 路由发送 POST 请求。有效负载应使用为您的应用程序生成的密钥加密。

<?php

use Illuminate\Encryption\Encrypter;

$newEncrypter = new Encrypter(
    $super_secret_key,
    strtolower(config('app.cipher'))
);

// adding a timestamp to the payload helps prevent replay attacks
$payload = json_encode([
    'timestamp' => now()->toDateTimeString()
]);

$metrics = Http::asJson()->post('https://awesome-application.com/overwatch', [
    'payload' => $newEncrypter->encrypt($payload),
])->json();

命令

您还可以使用 overwatch:metrics 命令从命令行检索指标。

php artisan overwatch:metrics

这将返回一个表格响应,显示您的配置中定义的所有指标。

+----------------+---------------------+
| Metric         | Value               |
+----------------+---------------------+
| php_version    | 8.0.3               |
| laravel_version| 8.40.0              |
| app_users      | 10                  |
+----------------+---------------------+

或者,您可以通过传递 --json 标志来获取 JSON 响应。

php artisan overwatch:metrics --json
{"php_version": "8.0.3", "laravel_version": "8.40.0", "app_users": 10}

测试

vendor/bin/pest

变更日志

有关最近更改的更多信息,请参阅 变更日志

贡献

有关详细信息,请参阅 贡献指南

安全漏洞

有关如何报告安全漏洞的详细信息,请参阅 我们的安全策略

致谢

许可

MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件