godscodes/laravel-statistics

Statistics是一个轻量级但详细的包,用于跟踪和记录Laravel应用程序中的用户访问。每次请求只需一个简单查询,就能存储重要数据,之后通过cronjob将数字压碎,从大量数据中提取有意义的线索。

1.0.0 2023-12-29 10:29 UTC

This package is auto-updated.

Last update: 2024-09-29 12:10:35 UTC


README

感谢原始仓库 rinvex/laravel-statistics

Rinvex Statistics是一个轻量级但详细的包,用于跟踪和记录Laravel应用程序中的用户访问。每次请求只需一个简单查询,就能存储重要数据,之后通过cronjob将数字压碎,从大量数据中提取有意义的线索。

与其他严重损害项目性能的跟踪包不同(是的,我指的是你了解的那个包😅),我们的包采取了不同的方法,只在每个请求结束后执行一个查询,在用户得到响应后,通过自动附加中间件的terminate方法,然后使用先前插入数据库的原始数据来提取有意义的数字。这是基于随机抽奖请求或在计划的任务(推荐)中完成的,该任务可以排队以卸载繁重的计算工作。

Rinvex Statistics跟踪每个有效的请求,这意味着只有通过路由管道的请求,这也意味着任何导致NotFoundHttpException的错误的URL都不会被跟踪。如果请求的页面有未捕获的异常,也不会被跟踪。它跟踪用户的登录账户(如果有)、所有用户和访客的会话(如果有)、设备(家族、型号、品牌)、平台(家族、版本)、浏览器(代理、类型、家族、版本)、路径、路由(操作、中间件、参数)、主机、协议、IP地址、语言、状态码等,并且我们还有许多令人惊叹的功能计划在未来实现。

由于收集了如此庞大的数据,statistics_requests数据库表的大小将显著增加,尤其是如果你有很多访问量,因此建议定期清理它。其他重要数据将保持在其各自的表中,规范化和没有任何性能问题,因此只需要清理这个表。默认情况下,这将在每月自动完成。

Rinvex Statistics的默认实现无需配置即可直接使用,这意味着安装后即可使用。但是,建议更改默认设置并从配置文件中禁用“Statistics Crunching Lottery”,并用Scheduled Tasks替换,以获得更好的性能,如果您有大量的访问量。有关详细信息,请参阅用法

Packagist Scrutinizer Code Quality Travis StyleCI License

安装

  1. 通过composer安装包

    composer require godscodes/laravel-statistics
  2. 发布资源(迁移和配置文件)

    php artisan rinvex:publish:statistics
  3. 通过以下命令执行迁移

    php artisan rinvex:migrate:statistics
  4. 完成!

用法

这部分很有趣!Rinvex Statistics没有使用说明,因为它只需安装即可使用!你安装它,然后你就完成了!真的!!

无论如何,作为一个推荐的性能调整,你可以执行以下操作(可选)

  1. 通过以下命令发布配置文件

    php artisan rinvex:publish:statistics
    
  2. 从配置文件中禁用“Statistics Crunching Lottery”。

  3. 遵循默认的Laravel文档关于Scheduled Tasks的说明,然后安排\Rinvex\Statistics\Jobs\CrunchStatistics\Rinvex\Statistics\Jobs\CleanStatisticsRequests任务,以适当的间隔。

  4. 享受吧!

注意: Rinvex 统计 包含一个自动附加到 web 中间件组的 \Rinvex\Statistics\Http\Middleware\TrackStatistics 中间件,因此它无需配置即可直接使用。

数据检索

您可能需要构建自己的前端界面来浏览统计信息,为此,您可以像使用 Laravel Eloquent 一样使用任何内置的 eloquent 模型。

所有 eloquent 模型都是自我解释的

  • \Rinvex\Statistics\Models\Agent 浏览器代理模型
  • \Rinvex\Statistics\Models\Datum 原始统计数据(待处理)
  • \Rinvex\Statistics\Models\Device 用户设备模型
  • \Rinvex\Statistics\Models\Path 请求路径模型
  • \Rinvex\Statistics\Models\Platform 用户平台模型
  • \Rinvex\Statistics\Models\Request 请求数据模型(定期清理)
  • \Rinvex\Statistics\Models\Route 请求路由详情模型

所有模型都绑定到 服务容器,因此您可以从应用程序的任何位置轻松切换。除了默认的显式使用这些模型的方式外,您还可以使用以下示例中的相应服务名称

// Find first browser agent (any of these methods are valid and equivalent)
app('rinvex.statistics.agent')->first();
new \Rinvex\Statistics\Models\Agent::first();
app(\Rinvex\Statistics\Contracts\AgentContract::class)->first();

所有其他 eloquent 模型与此相同。

重要的计数

所有代理、设备、路径、平台、路由模型都有一个 count 属性,每次有新的请求被跟踪时,该属性都会自动更新。

count 属性反映了点击次数。为了说明清楚,让我们通过数据样本进行解释

代理

这意味着有 734 次通过 Chrome 浏览器、版本 63.0.3239、代理 (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36) 访问了我们的项目。

设备

这意味着有 83 次通过 iPhone 设备访问了我们的项目。

平台

这意味着有 615 次通过 Mac OS X 操作系统、版本 10.12.6 访问了我们的项目。

路径

这意味着有 12 次访问了 test.homestead.local 主机的管理员仪表板角色管理(如果您在同一项目上启用了多个主机或通配符子域名,您可以在这里正确跟踪所有这些)。使用了英文界面,访问的路径有两个参数,一个用于区域设置(在本例中为英文),另一个用于更新角色记录(在本例中为管理员)。

此表可以用作您所有页面的访问计数器。例如,要检索和显示页面浏览量,您可以使用以下代码

$pageViews = app('rinvex.statistics.path')->where('path', request()->decodedPath())->first()->count;

您可以在视图或控制器中的任何地方,或任何其他地方简单地使用 $pageViews 变量。这样,您就可以为所有项目的页面自动生成访问计数器,非常实用且性能良好,随时可用。如果您启用了通配符子域名,可以添加 host 限制。

路由

这意味着有 41 次访问了 adminarea.roles.edit 路由,该路由具有 {locale}/adminarea/roles/{role} 的原始路径,并通过 App\Http\Controllers\Adminarea\RolesController@form 控制器操作提供服务,并应用以下中间件:["web","nohttpcache","can:access-adminarea","auth","can:update-roles,roles"]。了解该路由接受两个参数,其正则表达式要求如下:{"role": "[a-z0-9-]+", "locale": "[a-z]{2}"}

如您所见,此 statistics_routes 表与 statistics_paths 表相互补充,可以一起使用以跟踪哪些路径和路由被访问、访问次数、提供服务的控制器操作以及所需的参数,以及实际使用的参数替换。将路由视为您的原始链接蓝图图,将路径视为用户执行的链接。

Geoips

这意味着有 57 次来自 IP 地址 127.0.0.0 的访问,其纬度、经度和时区如上所述来自 New Haven 城市和 Connecticut 州。

请求

这是记录项目所接收到的每一个请求的最全面表格,其中包含了上例中看到的访问详情。通过session_iduser_iduser_type,您可以追踪访客(未登录)和用户(已登录),并使用您认为合适的标准提取唯一的访问/访客。

注意

  • 最后要注意的是,这个包是一个数据宝库,它实际上并没有做很多可以在这个宝贵的数据集上完成的数学运算,所以如何利用它取决于您的想象力,以适应您的目标。实现细节由您自行决定。
  • 我们没有解释statistics_data表,因为它用于存储临时原始数据,直到它被包处理和转换,所以您不应该关注或篡改该表。它由包内部使用,没有实际的终端用户用途。
  • \Rinvex\Statistics\Models\Request模型与所有相关数据(如agentdevicepathplatformroute)相关联。因此,一旦您获取到一个请求实例,就可以像通常使用Eloquent Relationships一样访问它的任何关联:如$statisticsRequest->agent->version$statisticsRequest->platform->family

变更日志

有关项目的完整历史,请参阅变更日志

支持

以下支持渠道随时可供您使用:

贡献与协议

感谢您考虑为这个项目做出贡献!贡献指南可在CONTRIBUTING.md中找到。

欢迎提交错误报告、功能请求和拉取请求。

安全漏洞

如果您在这个项目中发现了安全漏洞,请发送电子邮件至help@rinvex.com。所有安全漏洞都将得到及时处理。

关于Rinvex

Rinvex是一家成立于2016年6月的开罗,埃及的软件解决方案初创公司,专注于为中小企业提供集成企业解决方案。我们相信,我们的动力“价值、范围和影响”是我们区别于其他公司的因素,并通过软件的力量释放我们哲学的无尽可能性。我们喜欢称之为“生活速度的创新”。这就是我们如何为推进人类文明做出贡献。

许可

本软件根据MIT许可(MIT)发布。

© 2016-2022 Rinvex LLC,部分权利保留。