godscodes / laravel-statistics
Statistics是一个轻量级但详细的包,用于跟踪和记录Laravel应用程序中的用户访问。每次请求只需一个简单查询,就能存储重要数据,之后通过cronjob将数字压碎,从大量数据中提取有意义的线索。
Requires
- geoip2/geoip2: ^2.12.0|^3.0.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|^9.0.0
- rinvex/laravel-support: ^6.0.0|^7.0.0
- symfony/http-foundation: ^6.0.0|^7.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/laravel-statistics
Rinvex Statistics是一个轻量级但详细的包,用于跟踪和记录Laravel应用程序中的用户访问。每次请求只需一个简单查询,就能存储重要数据,之后通过cronjob将数字压碎,从大量数据中提取有意义的线索。
与其他严重损害项目性能的跟踪包不同(是的,我指的是你了解的那个包😅),我们的包采取了不同的方法,只在每个请求结束后执行一个查询,在用户得到响应后,通过自动附加中间件的terminate
方法,然后使用先前插入数据库的原始数据来提取有意义的数字。这是基于随机抽奖请求或在计划的任务(推荐)中完成的,该任务可以排队以卸载繁重的计算工作。
Rinvex Statistics跟踪每个有效的请求,这意味着只有通过路由管道的请求,这也意味着任何导致NotFoundHttpException
的错误的URL都不会被跟踪。如果请求的页面有未捕获的异常,也不会被跟踪。它跟踪用户的登录账户(如果有)、所有用户和访客的会话(如果有)、设备(家族、型号、品牌)、平台(家族、版本)、浏览器(代理、类型、家族、版本)、路径、路由(操作、中间件、参数)、主机、协议、IP地址、语言、状态码等,并且我们还有许多令人惊叹的功能计划在未来实现。
由于收集了如此庞大的数据,statistics_requests
数据库表的大小将显著增加,尤其是如果你有很多访问量,因此建议定期清理它。其他重要数据将保持在其各自的表中,规范化和没有任何性能问题,因此只需要清理这个表。默认情况下,这将在每月自动完成。
Rinvex Statistics的默认实现无需配置即可直接使用,这意味着安装后即可使用。但是,建议更改默认设置并从配置文件中禁用“Statistics Crunching Lottery”,并用Scheduled Tasks替换,以获得更好的性能,如果您有大量的访问量。有关详细信息,请参阅用法。
安装
-
通过composer安装包
composer require godscodes/laravel-statistics
-
发布资源(迁移和配置文件)
php artisan rinvex:publish:statistics
-
通过以下命令执行迁移
php artisan rinvex:migrate:statistics
-
完成!
用法
这部分很有趣!Rinvex Statistics没有使用说明,因为它只需安装即可使用!你安装它,然后你就完成了!真的!!
无论如何,作为一个推荐的性能调整,你可以执行以下操作(可选)
-
通过以下命令发布配置文件
php artisan rinvex:publish:statistics
-
从配置文件中禁用“Statistics Crunching Lottery”。
-
遵循默认的Laravel文档关于Scheduled Tasks的说明,然后安排
\Rinvex\Statistics\Jobs\CrunchStatistics
和\Rinvex\Statistics\Jobs\CleanStatisticsRequests
任务,以适当的间隔。 -
享受吧!
注意: 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_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)发布。
© 2016-2022 Rinvex LLC,部分权利保留。