跟踪应用状态变化 - 实时统计数据库动态

跟踪应用状态变化 - 实时统计数据库动态

laravel-statsEasily track application stats like orders, subscriptions and users and their change over time项目地址:https://gitcode.com/gh_mirrors/lar/laravel-stats

最新版本 测试 总下载量

Spatie/laravel-stats 是一个轻量级的解决方案,用于实时追踪和总结数据库中数据的变化。以下是一个快速示例,展示如何跟踪订阅与取消订阅的数量。

首先,创建一个统计类:

use Spatie\Stats\BaseStats;

class SubscriptionStats extends BaseStats {}

然后,当有人订阅时调用 increase 方法,当有人取消订阅时调用 decrease 方法。

SubscriptionStats::increase(); // 在订阅发生时执行
SubscriptionStats::decrease(); // 在取消订阅时执行

设置完成后,可以查询统计数据。例如,获取过去两个月内,按周分组的订阅统计信息:

use Spatie\Stats\StatsQuery;

$stats = SubscriptionStats::query()
    ->start(now()->subMonths(2))
    ->end(now()->subSecond())
    ->groupByWeek()
    ->get();

这将返回一个数组,如下所示:

[
    [
        'start' => '2020-01-01',
        'end' => '2020-01-08',
        'value' => 102,
        'increments' => 32,
        'decrements' => 20,
        'difference' => 12,
    ],
    [
        'start' => '2020-01-08',
        'end' => '2020-01-15',
        'value' => 114,
        'increments' => 63,
        'decrements' => 30,
        'difference' => 33,
    ],
]

支持我们

我们投入大量资源开发一流的开源软件包。您可以购买我们的付费产品以支持我们。详情请访问 官方网站

我们非常欣赏您从家乡寄来的明信片,告诉我们正在使用的哪个包。您可以在 我们的联系页面 找到我们的地址。所有收到的明信片都会在 我们的虚拟明信片墙上 展出。

安装

通过 Composer 进行安装:

composer require spatie/laravel-stats

发布并运行迁移文件:

php artisan vendor:publish --provider="Spatie\Stats\StatsServiceProvider" --tag="stats-migrations"
php artisan migrate

使用方法

步骤1:创建统计类

首先创建统计类。该类负责配置统计数据的存储方式。默认情况下,无需任何配置。

use Spatie\Stats\BaseStats;

class SubscriptionStats extends BaseStats {}

默认使用类名作为在数据库中存储统计数据的键。若要自定义键名,请使用 getName() 方法。

use Spatie\Stats\BaseStats;

class SubscriptionStats extends BaseStats
{
    public function getName() : string{
        return 'my-custom-name'; // 使用名称 'my-custom-name' 存储统计
    }
}

步骤2:增加或减少统计值,或设置固定值

调用 increasedecrease 方法来改变统计值。在这个例子中,当有人订阅时调用 increase,有人取消订阅时调用 decrease

SubscriptionStats::increase(); // 在订阅发生时执行
SubscriptionStats::decrease(); // 在取消订阅时执行

代替手动增加和减少,可以直接设置统计值。这对于统计不在自己应用内计算但存储在别处的情况特别有用。比如,假设订阅信息存储在其他地方,可以通过 API 获取计数。

$count = AnAPi::getSubscriptionCount();

SubscriptionStats::set($count);

默认情况下,increasedecreaseset 方法假定导致统计变化的事件发生在现在。可选地,这些方法的第二个参数可以是日期时间,记录的统计变化会显示为发生在那时。

SubscriptionStats::increase(1, $subscription->created_at); 

步骤3:查询统计

有了以上设置后,就可以查询统计。你可以获取特定时间段内的统计,并按照分钟、小时、天、周、月或年来进行分组。

以下是如何获取过去两个月内,按周分组的订阅统计信息的示例:

$stats = SubscriptionStats::query()
    ->start(now()->subMonths(2))
    ->end(now()->subSecond())
    ->groupByWeek()
    ->get();

这将返回一个包含可遍历 Spatie\Stats\DataPoint 对象的数组。这些对象可以像这样转换为数组:

// $stats 的数组形式:
[
    [
        'start' => '2020-01-01',
        'end' => '2020-01-08',
        'value' => 102,
        'increments' => 32,
        'decrements' => 20,
        'difference' => 12,
    ],
    [
        'start' => '2020-01-08',
        'end' => '2020-01-15',
        'value' => 114,
        'increments' => 63,
        'decrements' => 30,
        'difference' => 33,
    ],
]

应用场景与拓展功能

自定义模型读写
  • 创建新表,包含 type (string)value (bigint)created_atupdated_at 字段。
  • 创建模型并添加 HasStats 特性。
StatsWriter::for(MyCustomModel::class)->set(123)
StatsWriter::for(MyCustomModel::class, ['custom_column' => '123'])->increment(1)
StatsWriter::for(MyCustomModel::class, ['another_column' => '234'])->decrement(1, now()->subDay())

$stats = StatsQuery::for(MyCustomModel::class)
    ->start(now()->subMonths(2))
    ->end(now()->subSecond())
    ->groupByWeek()
    ->get();
    
// 或者

$stats = StatsQuery::for(MyCustomModel::class, ['additional_column' => '123'])
    ->start(now()->subMonths(2))
    ->end(now()->subSecond())
    ->groupByWeek()
    ->get(); 
关联关系读写
$tenant = Tenant::find(1) 

StatsWriter::for($tenant->orderStats(), ['payment_type_column' => 'recurring'])->increment(1)

$stats = StatsQuery::for($tenant->orderStats(), , ['payment_type_column' => 'recurring'])
    ->start(now()->subMonths(2))
    ->end(now()->subSecond())
    ->groupByWeek()
    ->get();

测试

composer test

更新日志

请查看 更新日志 了解最近的更改。

贡献

请参阅 贡献指南

安全漏洞

请参考 安全策略 来报告安全漏洞。

许可证

MIT 许可。更多信息请见 许可证文件

laravel-statsEasily track application stats like orders, subscriptions and users and their change over time项目地址:https://gitcode.com/gh_mirrors/lar/laravel-stats

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲍凯印Fox

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值