foothing / laravel-simple-pageviews
Requires
- foothing/laravel-repository: >=0.8.0
- illuminate/database: >=5.1
- illuminate/http: >=5.1
- jaybizzle/crawler-detect: 1.*
- nesbot/carbon: ^1.21
Requires (Dev)
- codeclimate/php-test-reporter: ^0.3.2
- mockery/mockery: ^0.9.5
- orchestra/testbench: 3.1.*
- phpunit/phpunit: 4.8.*
This package is not auto-updated.
Last update: 2024-09-19 17:58:03 UTC
README
跟踪您的Laravel 5.x应用程序的页面浏览量,用于流量监控。
迄今为止,它已经与Laravel 5.5和PHP 7进行了测试。
重要 如果您是从之前的0.x版本升级,请阅读发行说明。
此包旨在进行简单的请求跟踪,而不是进行深入的流量分析。特性
- 跟踪页面浏览量
- 跟踪唯一页面浏览量
- 可定制的白名单规则
- URL过滤和爬虫过滤
- 获取报告数据
每个日志记录都跟踪用户会话、用户IP和日期。
设置
安装模块
composer require foothing/laravel-simple-pageviews
在config/app.php
中添加服务提供者
'providers' => [ Foothing\Laravel\Visits\ServiceProvider::class, ]
发布迁移和配置文件
php artisan vendor:publish provider="Foothing\Laravel\Visits\ServiceProvider --tag="config"
php artisan vendor:publish provider="Foothing\Laravel\Visits\ServiceProvider --tag="migrations"
运行迁移
php artisan migrate
最后,在您的app/Http/Kernel.php
中添加中间件
protected $middleware = [ 'Foothing\Laravel\Visits\Middlewares\CountPageView', ];
配置
在config/visits.php
中
// Enable or disable tracking. "enabled" => true, // Add patterns to be blacklisted (ignored and not tracked). // These patterns will apply if the UrlWhitelist rule is // enabled in the chain. "blacklist" => [ // i.e. '/^(admin|api|auth).*/' ], // Rules chain. "rules" => [ "Foothing\Laravel\Visits\Rules\Crawler", "Foothing\Laravel\Visits\Rules\UrlWhitelist", ],
规则旨在过滤您不想跟踪的请求。默认规则将过滤掉爬虫(感谢https://github.com/JayBizzle/Crawler-Detect)和黑名单URL。
查询方法
$manager = app()->make("Foothing\Laravel\Visits\Reports\ReportManager"); // Get visits with url and hits. This should be used to // get an overview of the best performer urls. $manager->getVisits(); [ { "url": "foo/bar", "hits": 129 }, { "url": "baz", "hits": 40 } ] // Return int $manager->countOverallVisits(); $manager->countOverallVisits('today', 'tomorrow', 'foo/bar'); // Return int $manager->countUniqueVisits('currentWeek'); $manager->countUniqueVisits('currentWeek', null, 'foo/bar'); // Return a data collection meant for chart plotting. $manager->getVisitsTrendDaily(); [ { "day": "2016-10-08" "hits": 129 }, { "day": "2016-10-09" "hits": 40 } ]
每个查询方法都允许日期过滤,并接受最多3个参数。
- 第一个参数可以是字符串预设,一个Carbon可以解析的字符串或一个Carbon日期
- 第二个参数与第一个参数相同
- 第三个参数可以是URL
唯一的例外是aggregate()
方法,它将接受一个limit
参数。
示例
// Triggers default filter $manager->getVisits(); // String presets $manager->getVisits('today'); $manager->getVisits('currentWeek'); $manager->getVisits('currentMonth'); $manager->getVisits('currentYear'); // Single day $manager->getVisits(\Carbon::now()); // Period $manager->getVisits(\Carbon::now(), Carbon::tomorrow());
输入缓冲区
此包已在类似于每天约20k页面浏览量的中等流量网站上进行了测试,这大约相当于每天17k数据库记录。访问表会迅速增长,当在包含数十万(或数百万)行的表上执行插入或更新
语句时,数据库可能会出现性能问题。
因此,增加了一个插入/更新缓冲区。基本上,每次访问都记录在一个仅在写操作时使用的临时表中,而报告和读取操作则在单独的表上执行。
增加了一个artisan
命令来处理从写表到读表的定期数据转储。一种好的做法可能是每天转储数据。
TL;DR 在您的app/Console/Kernel.php
中配置如下(请参阅Laravel文档中的排程信息)
/** * The Artisan commands provided by your application. * * @var array */ protected $commands = [ 'Foothing\Laravel\Visits\Commands\DumpVisitsBuffer', ]; /** * Define the application's command schedule. * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule) { // Adjust this with your needs. $schedule->command('visits:buffer')->dailyAt("00:00"); }
性能
性能已在包含约500万条记录的数据库中进行了测试,并取得了良好的结果。然而,我建议如果表的大小变得很大,例如每个分区1百万条记录,则对数据库表进行分区。此外,一种好的做法是根据您的流量和报告类型调整分区,以保持与日期周期的一致性(例如,单个分区中包含整个年份,单个分区中包含单个季度等)。
许可
MIT