rinvex / laravel-statistics
Rinvex Statistics 是一个轻量级但详细的包,用于跟踪和记录您的 Laravel 应用程序中的用户访问。每个请求只需一个简单查询,即可存储重要数据,并在以后使用 cronjob 对数字进行压缩,从而从大量数据中提取有意义的见解。
Requires
- php: ^8.0.0
- geoip2/geoip2: ^2.12.0
- illuminate/bus: ^9.0.0 || ^10.0.0
- illuminate/console: ^9.0.0 || ^10.0.0
- illuminate/contracts: ^9.0.0 || ^10.0.0
- illuminate/database: ^9.0.0 || ^10.0.0
- illuminate/http: ^9.0.0 || ^10.0.0
- illuminate/queue: ^9.0.0 || ^10.0.0
- illuminate/routing: ^9.0.0 || ^10.0.0
- illuminate/support: ^9.0.0 || ^10.0.0
- jenssegers/agent: ^2.6.0
- rinvex/countries: ^8.0.0
- rinvex/laravel-support: ^6.0.0
- symfony/http-foundation: ^6.0.0
- torann/geoip: ^3.0.0
- ua-parser/uap-php: ^3.9.0
Requires (Dev)
- codedungeon/phpunit-result-printer: ^0.31.0
- illuminate/container: ^9.0.0 || ^10.0.0
- phpunit/phpunit: ^9.5.0
README
⚠️ 此包已弃用且不再维护。未建议替代包。⚠️
👉 如果您有兴趣成为此包的主要维护者,请联系我!
Rinvex Statistics 是一个轻量级但详细的包,用于跟踪和记录您的 Laravel 应用程序中的用户访问。每个请求只需一个简单查询,即可存储重要数据,并在以后使用 cronjob 对数字进行压缩,从而从大量数据中提取有意义的见解。
与其他严重损害项目性能的跟踪包不同(是的,我指的是您所知的那个包 😅),我们的包采用不同的方法,通过在每个请求响应后,通过自动附加中间件的 terminate
方法执行单个查询,然后使用之前插入到数据库中的原始数据来提取有意义的数字。这是基于随机抽奖请求或通过可排队到后台执行的重计算工作的计划任务(推荐)来完成的。
Rinvex Statistics 跟踪每个有效的请求,这意味着只有通过路由管道的请求才会被跟踪。这也意味着任何导致 NotFoundHttpException
的错误 URL 不会被跟踪。如果请求的页面有未捕获的异常,它也不会被跟踪。它跟踪用户的登录账户(如果有)、所有用户和访客的会话(如果有)、设备(系列、型号、品牌)、平台(系列、版本)、浏览器(代理、类型、系列、版本)、路径、路由(操作、中间件、参数)、主机、协议、IP 地址、语言、状态码等等,并且我们还有很多计划在未来实现的功能。
由于收集了如此大量的数据,statistics_requests
数据库表的大小将明显增加,特别是如果您有很多访问量,因此建议定期清理它。其他重要数据将保留在其各自的表中,规范化且没有任何性能问题,因此只需要清理此表。默认情况下,这将在每月自动执行。
Rinvex Statistics 的默认实现无需配置即可直接使用,这意味着一旦安装即可使用。但建议更改默认设置并从配置文件中禁用“统计压缩抽奖”,并替换为计划任务,以实现更好的性能,如果您有很多访问量。请参阅使用说明以获取详细信息。
安装
-
通过 composer 安装此包
composer require rinvex/laravel-statistics
-
发布资源(迁移和配置文件)
php artisan rinvex:publish:statistics
-
通过以下命令执行迁移
php artisan rinvex:migrate:statistics
-
完成!
使用说明
这部分很有趣!Rinvex Statistics 没有使用说明,因为它只需安装即可使用!您安装它,然后就可以完成了!认真地说!!
无论如何,作为推荐的性能调整,您可以执行以下操作(可选)
-
使用以下命令发布配置文件:
php artisan rinvex:publish:statistics
-
从配置文件中禁用“统计 crunching 彩票”。
-
遵循默认的 Laravel 文档关于计划任务的说明,然后根据您认为合适的间隔计划两个作业:
\Rinvex\Statistics\Jobs\CrunchStatistics
和\Rinvex\Statistics\Jobs\CleanStatisticsRequests
。 -
享受吧!
注意: Rinvex 统计有一个
\Rinvex\Statistics\Http\Middleware\TrackStatistics
中间件,它会自动附加到web
中间件组,这就是它默认情况下无需配置即可正常工作的原因。
数据检索
您可能需要构建自己的前端界面来浏览统计信息,为此您可以使用包含的任何eloquent模型,就像您通常使用Laravel 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
属性反映点击次数。为了使它更清楚,让我们通过数据样本进行解释
代理
id | kind | family | version | count | name |
---|---|---|---|---|---|
1 | desktop | Chrome | 63.0.3239 | 734 | 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 |
这意味着有 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)。
设备
id | family | model | brand | count |
---|---|---|---|---|
1 | iPhone | iPhone | Apple | 83 |
这意味着有 83 次访问我们的项目是通过 iPhone 设备。
平台
id | family | version | count |
---|---|---|---|
1 | Mac OS X | 10.12.6 | 615 |
这意味着有 615 次访问我们的项目是通过 Mac OS X 操作系统,版本 10.12.6。
路径
id | host | locale | path | parameters | count |
---|---|---|---|---|---|
1 | test.homestead.local | en | en/adminarea/roles/admin | {"role": "admin", "locale": "en"} | 12 |
这意味着有 12 次访问 test.homestead.local 主机的管理员仪表板角色管理(如果您在同一项目上启用了多个主机或通配符子域名,您可以在这里正确跟踪它们)。使用的是英文界面,访问的路由有两个参数,一个是用于本地化的(本例中为英语),另一个是更新后的角色记录(本例中为管理员)。
此表格可以用于您所有页面的访问计数器。例如,要检索和显示页面浏览量,您可以使用以下代码
$pageViews = app('rinvex.statistics.path')->where('path', request()->decodedPath())->first()->count;
只需在任何视图或控制器中,或任何其他地方简单地使用 $pageViews
变量。这样,你就可以为项目中所有页面自动获得访问计数器,非常实用且性能出色,随时随地可用。如果你启用了通配符子域名,可以添加 host
约束。
路由
id | name | path | 操作 | 中间件 | parameters | count |
---|---|---|---|---|---|---|
1 | 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}"} | 41 |
这意味着有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
id | client_ip | latitude | longitude | country_code | client_ips | is_from_trusted_proxy | division_code | postal_code | timezone | city | count |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | 127.0.0.0 | 41.31 | -72.92 | US | NULL | 0 | CT | 06510 | America/New_York | New Haven | 57 |
这意味着从IP地址 127.0.0.0
有57次访问该项目,上述纬度、经度和时区来自 New Haven
城市,Connecticut
州。
请求
id | route_id | agent_id | device_id | platform_id | path_id | geoip_id | user_id | user_type | session_id | method | status_code | protocol_version | referer | language | is_no_cache | wants_json | is_secure | is_json | is_ajax | is_pjax | created_at |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 123 | 123 | 123 | 123 | 123 | 123 | 123 | user | MU22QcrzDIdj0gY27yJmUPJHNFy9Hlqvkel1KBZ1 | GET | POST | 200 | HTTP/1.1 | https://google.com | en_US | 0 | 0 | 1 | 0 | 0 | 0 |
这是记录对项目提出的每个请求的最全面表格,如上示例所示。通过 session_id
、user_id
和 user_type
,您可以跟踪访客(未登录)和用户(登录),并使用您认为合适的标准提取独特的访问/访客。
备注
- 最后要注意的是,这个包是一个数据仓库,它实际上并没有做很多可以对这样有价值收集到的数据进行的工作,所以如何利用它取决于您的想象力。具体实现细节由您自己决定。
- 我们没有解释
statistics_data
表,因为它用于临时存储原始数据,直到它被包处理,所以您不应该关注或修改该表。它由包内部使用,没有真正的最终用户用途。\Rinvex\Statistics\Models\Request
模型与所有相关数据(如agent
、device
、path
、platform
和route
)都有关系。因此,一旦获取请求实例,您就可以像通常使用 Eloquent Relationships 一样访问它们:例如$statisticsRequest->agent->version
或$statisticsRequest->platform->family
。
更新日志
请参考项目的变更日志以了解项目的完整历史。
支持
以下支持渠道尽在您的指尖:
贡献 & 协议
感谢您考虑为这个项目做出贡献!贡献指南可在CONTRIBUTING.md中找到。
欢迎提交错误报告、功能请求和拉取请求。
安全漏洞
如果您在这个项目中发现了安全漏洞,请发送电子邮件至help@rinvex.com。所有安全漏洞都将得到及时处理。
关于Rinvex
Rinvex是一家成立于2016年6月的亚历山大,埃及的软件解决方案初创公司,专注于为中小企业提供集成企业解决方案。我们相信,我们的驱动力——价值、影响力和影响力,是我们与众不同的地方,并通过软件的力量释放我们哲学的无限可能性。我们喜欢称之为“生活速度的创新”。这就是我们如何为推进人类文明贡献我们的一份力量。
许可
本软件根据MIT许可(MIT)发布。
(c) 2016-2022 Rinvex LLC,部分权利保留。