gurmanalexander/laravel-metrics

1.0.5 2018-08-30 16:07 UTC

This package is not auto-updated.

Last update: 2024-09-29 02:15:35 UTC


README

此包可以帮助您管理应用程序指标(例如时间、计数、金钱)

目录

安装

使用composer安装此包

composer require gurmanalexander/laravel-metrics:1.*

更新composer后,将ServiceProvider添加到config/app.php中的providers数组

Laravel 5.5使用包自动发现,因此不需要您手动添加ServiceProvider

Laravel 5.x

GurmanAlexander\Metrics\MetricsServiceProvider::class,

使用发布命令将包配置复制到本地配置

php artisan vendor:publish --provider="GurmanAlexander\Metrics\MetricsServiceProvider"

您可以使用metrics:table命令生成具有正确表模式的迁移

php artisan metrics:table

然后迁移

php artisan migrate

用法

创建指标

您可以创建新的指标(默认为CountMetrics),但您可以使用参数--time将其更改为TimeMetrics

php artisan make:metrics PageViewCountMetrics

创建TimeMetrics示例

php artisan make:metrics FirstPaymentMetrics

这将创建一个新类在app/Metrics/文件夹中

class FirstPaymentMetrics extends CountMetrics
{

}

指标用法

现在您可以开始监视您的指标。您需要将特质Metricable添加到您要监视的模型(例如User)中

use GurmanAlexander\Metrics\Metricable;
class User extends Model
{
    use Metricable;
    ...
}

启动指标

要启动指标

在CountMetrics的第一个参数- $user(属于指标的用戶,默认null),第二个参数- admin(调用指标的用戶,默认null),第三个参数- $count(增加指标的量。例如,您可以使用金钱指标。默认1

在TimeMetrics中只有两个参数- $user$admin

// For example, when creating user start Metrics
$user = User::create(['email', 'password']);
$user->startMetrics(new FirstPaymentMetrics($user));

// when user view some news
$user = auth()->user();
$news->startMetrics(new PageViewCountMetrics($user));

停止指标

要停止指标

// when user make some payment
$user->paySomething();
$user->closeMetrics(new FirstPaymentMetrics($user));

// when user logout
$user = auth()->user();
$news->closeMetrics(new PageViewCountMetrics($user));
auth()->logout();

一次性指标

要触发一次性指标

$user = auth()->user();
$user->onceMetrics(new SomeOnceMetrics());

统计信息

要获取统计信息,您可以使用MetricsStatistics

示例

// to get total payments
$stats = new MetricsStatistics(new FirstPaymentMetrics());

方法

user

通过$user(用户模型,用户数组或用户集合)过滤统计信息

$user - 属于指标的用戶。

// model
$stats->user(auth()->user());

// array
$stats->user([auth()->user(), User:first()]);

// collection
$stats->user(User::where('is_active', 1)->get());

admin

admin过滤,就像按user过滤一样

admin - 调用指标的用戶。

startAt

$start_at日期过滤

根据end_at字段(指标停止时)计算指标统计信息

$start_at = Carbon::now()->startOfMonth();
$stats->startAt($start_at);

endAt

过滤到$end_at日期

根据end_at字段(指标停止时)计算指标统计信息

$end_at = Carbon::now()->endOfMonth();
$stats->endAt($end_at);

betweenAt

$start_at$end_at日期过滤

根据end_at字段(指标停止时)计算指标统计信息

$start_at = Carbon::now()->startOfMonth();
$end_at = Carbon::now()->endOfMonth();
$stats->betweenAt($start_at, $end_at);

period

按时间段分组计算统计信息

$stats->hourly();
$stats->daily();
$stats->weekly();
$stats->monthly();
$stats->yearly();

// result example
$stats->hourly()->count()->toArray();

// [
//     0 => [
//         "count" => 23,
//         "date" => "2017-06-30",
//         "period" => "hour",
//         "hour" => 9
//     ],
//     1 => [
//         "count" => 15,
//         "date" => "2017-06-30",
//         "period" => "hour",
//         "hour" => 8
//     ],
//     2 => [
//         "count" => 32,
//         "date" => "2017-06-30",
//         "period" => "hour",
//         "hour" => 7
//     ],
// ]

getBuilder

返回用于自定义计算的Builder

结果

以获取结果

count

返回数据库中所有过滤指标的总数

返回指标集合

sum

返回数据库中所有过滤指标的总和

如果是TimeMetrics - 指标的总秒数

avg

返回数据库中所有过滤指标的平均值

如果是TimeMetrics - 指标的平均秒数

min

返回数据库中所有过滤指标的最小值

如果是TimeMetrics - 指标的最小秒数

max

返回数据库中所有过滤指标的最大值

如果是TimeMetrics - 指标的最大秒数

示例

// to get total payments
$stats = new MetricsStatistics(new FirstPaymentMetrics());

// to get average time from user registration to first payment (in seconds)
$stats = new MetricsStatistics(new FirstPaymentMetrics())->hourly()->avg()->toArray();

// [
//     0 => [
//         "avg" => 12.13,
//         "date" => "2017-06-30",
//         "period" => "hour",
//         "hour" => 9
//     ],
//     1 => [
//         "avg" => 8.00,
//         "date" => "2017-06-30",
//         "period" => "hour",
//         "hour" => 8
//     ],
//     2 => [
//         "avg" => 5.34,
//         "date" => "2017-06-30",
//         "period" => "hour",
//         "hour" => 7
//     ],
// ]