inser7 / tracker
Laravel 访客追踪器
Requires
- php: >=5.3.7
- jaybizzle/crawler-detect: ~1.0
- jenssegers/agent: ~2.1
- laravel/framework: ~4|~5
- pragmarx/datatables: 1.4.10
- pragmarx/support: ~0.6
- ramsey/uuid: ~2.8
- snowplow/referer-parser: ~0.1
- ua-parser/uap-php: ~3.4
Requires (Dev)
- mockery/mockery: ~0.8
Suggests
- geoip/geoip: ~1.14
- geoip2/geoip2: ~2.0
This package is not auto-updated.
Last update: 2024-09-18 18:36:28 UTC
README
### Tracker 从您的请求中收集大量信息,以识别和存储
- 会话
- 页面浏览量(路由上的点击次数)
- 用户(登录用户)
- 设备(计算机、智能手机、平板电脑...)
- 用户设备(是的,在每个设备上存储一个cookie)
- 浏览器(Chrome、Mozilla Firefox、Safari、Internet Explorer...)
- 操作系统(iOS、Mac OS、Linux、Windows...)
- 地理位置数据(纬度、经度、国家及城市)
- 路由及其所有参数
- 事件
- 来源(url、medium、source、搜索词...)
- 异常/错误
- SQL查询及其绑定
- URL查询及其参数
- 数据库连接
##索引
为什么?
将用户跟踪信息存储在索引和规范化的数据库表中,可以节省更多磁盘空间,并简化从您的应用程序和业务中提取有价值信息的过程。
使用方法
安装并启用后,Tracker 将开始存储您告诉它的所有信息,然后您可以在应用程序中使用 Tracker Facade 来访问一切。以下是一些可用方法和关系
当前会话/访客
$visitor = Tracker::currentSession();
大多数这些方法返回 Eloquent 模型或集合,因此您不仅可以使用其属性,还可以使用其关系数据
var_dump( $visitor->client_ip );
var_dump( $visitor->device->is_mobile );
var_dump( $visitor->device->platform );
var_dump( $visitor->geoIp->city );
会话(访问)
$sessions = Tracker::sessions(60 * 24); // get sessions (visits) from the past day
foreach ($sessions as $session)
{
var_dump( $session->user->email );
var_dump( $session->device->kind . ' - ' . $session->device->platform );
var_dump( $session->agent->browser . ' - ' . $session->agent->browser_version );
var_dump( $session->geoIp->country_name );
foreach ($session->session->log as $log)
{
var_dump( $log->path );
}
}
用户
$users = Tracker::users(60 * 24);
用户设备
$users = Tracker::userDevices(60 * 24, $user->id);
事件
$events = Tracker::events(60 * 24);
错误
$errors = Tracker::errors(60 * 24);
页面浏览量摘要
$pageViews = Tracker::pageViews(60 * 24 * 30);
按国家/地区摘要页面浏览量
$pageViews = Tracker::pageViewsByCountry(60 * 24);
筛选范围
您可以使用 Minutes 类将这些时间戳范围发送到这些方法
$range = new Minutes();
$range->setStart(Carbon::now()->subDays(2));
$range->setEnd(Carbon::now()->subDays(1));
Tracker::userDevices($range);
按名称的路由
拥有以下路由
Route::get('user/{id}', ['as' => 'user.profile', 'use' => 'UsersController@profile']);
您可以使用此方法选择特定路由的所有点击并使用 Laravel 对其进行计数
return Tracker::logByRouteName('user.profile')
->where(function($query)
{
$query
->where('parameter', 'id')
->where('value', 1);
})
->count();
如果您需要计算访问该路由的唯一访客数量,则可以这样做
return Tracker::logByRouteName('tracker.stats.log')
->where(function($query)
{
$query
->where('parameter', 'uuid')
->where('value', '8b6faf82-00f1-4db9-88ad-32e58cfb4f9d');
})
->select('tracker_log.session_id')
->groupBy('tracker_log.session_id')
->distinct()
->count('tracker_log.session_id');
截图
访问次数
图表
用户
事件
错误
Blade 视图
上述视图可在本包中使用,但您需要将 sb-admin
面板安装到您的公共文件夹中,请参阅以下说明。
数据存储方式
所有表都以前缀 tracker_
开头,以下是一些表的示例,显示列和内容
会话
+-----+--------------------------------------+---------+-----------+----------+-----------------+------------+-----------+----------+
| id | uuid | user_id | device_id | agent_id | client_ip | referer_id | cookie_id | geoip_id |
+-----+--------------------------------------+---------+-----------+----------+-----------------+------------+-----------+----------+
| 1 | 09465be3-5930-4581-8711-5161f62c4373 | 1 | 1 | 1 | 186.228.127.245 | 2 | 1 | 2 |
| 2 | 07399969-0a19-47f0-862d-43b06d7cde45 | | 2 | 2 | 66.240.192.138 | | 2 | 2 |
+-----+--------------------------------------+---------+-----------+----------+-----------------+------------+-----------+----------+
设备
+----+----------+-------------+-------------+------------------+-----------+
| id | kind | model | platform | platform_version | is_mobile |
+----+----------+-------------+-------------+------------------+-----------+
| 1 | Computer | unavailable | Windows 8 | | |
| 2 | Tablet | iPad | iOS | 7.1.1 | 1 |
| 3 | Computer | unavailable | Windows XP | | |
| 5 | Computer | unavailable | Other | | |
| 6 | Computer | unavailable | Windows 7 | | |
| 7 | Computer | unavailable | Windows 8.1 | | |
| 8 | Phone | iPhone | iOS | 7.1 | 1 |
+----+----------+-------------+-------------+------------------+-----------+
代理
+----+-----------------------------------------------------------------------------------------------------------------------------------------+-------------------+-----------------+
| id | name | browser | browser_version |
+----+-----------------------------------------------------------------------------------------------------------------------------------------+-------------------+-----------------+
| 1 | Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36 | Chrome | 35.0.1916 |
| 2 | Mozilla/5.0 (iPad; CPU OS 7_1_1 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) CriOS/34.0.1847.18 Mobile/11D201 Safari/9537.53 | Chrome Mobile iOS | 34.0.1847 |
| 3 | Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) | IE | 6.0 |
| 4 | Python-urllib/2.6 | Other | |
| 5 | Other | Other | |
| 6 | Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 | Chrome | 34.0.1847 |
| 7 | Mozilla/5.0 (Windows NT 6.3; rv:28.0) Gecko/20100101 Firefox/28.0 | Firefox | 28.0 |
| 8 | Mozilla/5.0 (iPhone; CPU iPhone OS 7_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D169 Safari/9537.53 | Mobile Safari | 7.0 |
+----+-----------------------------------------------------------------------------------------------------------------------------------------+-------------------+-----------------+
域名
+----+--------------------------+
| id | name |
+----+--------------------------+
| 1 | antoniocarlosribeiro.com |
+----+--------------------------+
错误
+----+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| id | code | message |
+----+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 1 | 404 | |
| 2 | 500 | Call to undefined method PragmaRX\Tracker\Tracker::sessionLog() |
| 3 | 500 | Trying to get property of non-object (View: /home/forge/stage.antoniocarlosribeiro.com/app/views/admin/tracker/log.blade.php) |
| 4 | 500 | syntax error, unexpected 'foreach' (T_FOREACH) |
| 5 | 500 | Call to undefined method PragmaRX\Tracker\Tracker::pageViewsByCountry() |
| 6 | 500 | Class PragmaRX\Firewall\Vendor\Laravel\Artisan\Base contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Illuminate\Console\Command::fire) |
| 7 | 405 | |
| 8 | 500 | Trying to get property of non-object |
| 9 | 500 | Missing argument 2 for Illuminate\Database\Eloquent\Model::setAttribute(), called in /home/forge/stage.antoniocarlosribeiro.com/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php on line 2444 and defined |
+----+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
事件
+----+------------------------------------------------+
| id | name |
+----+------------------------------------------------+
| 1 | illuminate.log |
| 2 | router.before |
| 3 | router.matched |
| 4 | auth.attempt |
| 5 | auth.login |
| 6 | composing: admin.tracker.index |
| 7 | creating: admin.tracker._partials.menu |
| 8 | composing: admin.tracker._partials.menu |
| 9 | creating: admin.layout |
| 10 | composing: admin.layout |
| 11 | creating: admin._partials.mainMenu |
| 12 | composing: admin._partials.mainMenu |
| 13 | creating: admin._partials.messages |
| 14 | composing: admin._partials.messages |
| 15 | creating: global._partials.google-analytics |
| 16 | composing: global._partials.google-analytics |
+----+------------------------------------------------+
geoip
+----+----------+-----------+--------------+---------------+---------------------------+--------+----------------+-------------+-----------+----------+------------+----------------+
| id | latitude | longitude | country_code | country_code3 | country_name | region | city | postal_code | area_code | dma_code | metro_code | continent_code |
+----+----------+-----------+--------------+---------------+---------------------------+--------+----------------+-------------+-----------+----------+------------+----------------+
| 1 | 37.4192 | -122.057 | US | USA | United States | CA | Mountain View | 94043 | 650 | 807 | 807 | NA |
| 2 | -10 | -55 | BR | BRA | Brazil | | | | | | | SA |
| 3 | 30.3909 | -86.3161 | US | USA | United States | FL | Miramar Beach | 32550 | 850 | 686 | 686 | NA |
| 4 | 38.65 | -90.5334 | US | USA | United States | MO | Chesterfield | 63017 | 314 | 609 | 609 | NA |
| 5 | 42.7257 | -84.636 | US | USA | United States | MI | Lansing | 48917 | 517 | 551 | 551 | NA |
| 6 | 42.8884 | -78.8761 | US | USA | United States | NY | Buffalo | 14202 | 716 | 514 | 514 | NA |
| 7 | 40.1545 | -75.3809 | US | USA | United States | PA | Norristown | 19403 | 610 | 504 | 504 | NA |
| 8 | 47.4891 | -122.291 | US | USA | United States | WA | Seattle | 98168 | 206 | 819 | 819 | NA |
| 9 | 33.7516 | -84.3915 | US | USA | United States | GA | Atlanta | 30303 | 404 | 524 | 524 | NA |
| 10 | 33.7633 | -117.794 | US | USA | United States | CA | Santa Ana | 92705 | 714 | 803 | 803 | NA |
| 11 | 33.4357 | -111.917 | US | USA | United States | AZ | Tempe | 85281 | 480 | 753 | 753 | NA |
| 12 | 40.7421 | -74.0018 | US | USA | United States | NY | New York | 10011 | 212 | 501 | 501 | NA |
| 13 | 28.6185 | -81.4336 | US | USA | United States | FL | Orlando | 32810 | 407 | 534 | 534 | NA |
| 14 | 38.6312 | -90.1922 | US | USA | United States | MO | Saint Louis | 63101 | 314 | 609 | 609 | NA |
| 15 | 51 | 9 | DE | DEU | Germany | | | | | | | EU |
| 16 | 52.5 | 5.75 | NL | NLD | Netherlands | | | | | | | EU |
| 17 | 48.86 | 2.35 | FR | FRA | France | | | | | | | EU |
| 18 | 60 | 100 | RU | RUS | Russian Federation | | | | | | | EU |
| 19 | 51.5 | -0.13 | GB | GBR | United Kingdom | | | | | | | EU |
| 20 | 42.8333 | 12.8333 | IT | ITA | Italy | | | | | | | EU |
| 21 | 59.3333 | 18.05 | SE | SWE | Sweden | 26 | Stockholm | | | | | EU |
| 22 | -41 | 174 | NZ | NZL | New Zealand | | | | | | | OC |
| 23 | 37.57 | 126.98 | KR | KOR | Korea, Republic of | | | | | | | AS |
| 24 | 1.3667 | 103.8 | SG | SGP | Singapore | | | | | | | AS |
| 25 | -43.5333 | 172.633 | NZ | NZL | New Zealand | E9 | Christchurch | 8023 | | | | OC |
| 26 | -27.471 | 153.024 | AU | AUS | Australia | 04 | Brisbane | | | | | OC |
| 27 | 26.9167 | 75.8167 | IN | IND | India | 24 | Jaipur | | | | | AS |
| 28 | 32 | 53 | IR | IRN | Iran, Islamic Republic of | | | | | | | AS |
| 29 | 32.0617 | 118.778 | CN | CHN | China | 04 | Nanjing | | | | | AS |
| 30 | -22.9 | -47.0833 | BR | BRA | Brazil | 27 | Campinas | | | | | SA |
| 31 | 32.8073 | -117.132 | US | USA | United States | CA | San Diego | 92123 | 858 | 825 | 825 | NA |
| 32 | -22.9 | -43.2333 | BR | BRA | Brazil | 21 | Rio De Janeiro | | | | | SA |
+----+----------+-----------+--------------+---------------+---------------------------+--------+----------------+-------------+-----------+----------+------------+----------------+
日志
+-----+------------+---------+----------+--------+---------------+---------+-----------+---------+------------+----------+
| id | session_id | path_id | query_id | method | route_path_id | is_ajax | is_secure | is_json | wants_json | error_id |
+-----+------------+---------+----------+--------+---------------+---------+-----------+---------+------------+----------+
| 1 | 1 | 1 | | GET | 1 | | 1 | | | |
| 2 | 1 | 2 | | GET | 2 | | 1 | | | |
| 3 | 1 | 3 | | GET | 3 | | 1 | | | |
| 4 | 1 | 3 | | POST | 4 | | 1 | | | |
+-----+------------+---------+----------+--------+---------------+---------+-----------+---------+------------+----------+
路径
+----+--------------------------------------------------------+
| id | path |
+----+--------------------------------------------------------+
| 1 | / |
| 2 | admin |
| 3 | login |
| 4 | admin/languages |
| 5 | admin/tracker |
| 6 | admin/pages |
| 7 | jmx-console |
| 8 | manager/html |
| 9 | administrator |
| 10 | joomla/administrator |
| 11 | cms/administrator |
| 12 | Joomla/administrator |
| 13 | phpmyadmin |
| 14 | phpMyAdmin |
| 15 | mysql |
| 16 | sql |
| 17 | myadmin |
| 18 | webdav |
+----+--------------------------------------------------------+
路由路径
+----+----------+--------------------------------------------------------+
| id | route_id | path |
+----+----------+--------------------------------------------------------+
| 1 | 1 | / |
| 2 | 2 | admin |
| 3 | 3 | login |
| 4 | 4 | login |
| 5 | 5 | admin/languages |
| 6 | 6 | admin/tracker |
| 7 | 7 | admin/pages |
+----+----------+--------------------------------------------------------+
路由
+----+--------------------------------------+----------------------------------------------------------+
| id | name | action |
+----+--------------------------------------+----------------------------------------------------------+
| 1 | home | ACR\Controllers\Home@index |
| 2 | admin | ACR\Controllers\Admin\Admin@index |
| 3 | login.form | ACR\Controllers\Logon@form |
| 4 | login.do | ACR\Controllers\Logon@login |
| 5 | admin.languages.index | ACR\Controllers\Admin\Languages@index |
| 6 | admin.tracker.index | ACR\Controllers\Admin\Tracker@index |
| 7 | admin.pages.index | ACR\Controllers\Admin\Pages@index |
| 8 | admin.tracker.log | ACR\Controllers\Admin\Tracker@log |
| 9 | technology | ACR\Controllers\Technology@index |
| 10 | technology.articles.show | ACR\Controllers\Technology@show |
| 11 | language.select | ACR\Controllers\Language@select |
| 12 | admin.tracker.summary | ACR\Controllers\Admin\Tracker@summary |
| 13 | admin.tracker.api.pageviews | ACR\Controllers\Admin\Tracker@apiPageviews |
| 14 | admin.tracker.api.pageviewsbycountry | ACR\Controllers\Admin\Tracker@apiPageviewsByCountry |
| 15 | admin.pages.create | ACR\Controllers\Admin\Pages@create |
| 16 | api.markdown | ACR\Controllers\Api@markdown |
| 17 | admin.pages.store | ACR\Controllers\Admin\Pages@store |
| 18 | bio | ACR\Controllers\StaticPages@show |
| 19 | logout.do | ACR\Controllers\Logon@logout |
| 20 | admin.tracker.index | ACR\Controllers\Admin\UsageTracker@index |
| 21 | admin.tracker.api.pageviewsbycountry | ACR\Controllers\Admin\UsageTracker@apiPageviewsByCountry |
| 22 | admin.tracker.api.pageviews | ACR\Controllers\Admin\UsageTracker@apiPageviews |
+----+--------------------------------------+----------------------------------------------------------+
SQL查询 ;
+----+------------------------------------------+-------------------------------------------------------------------------------------------------+-------+---------------+
| id | sha1 | statement | time | connection_id |
+----+------------------------------------------+-------------------------------------------------------------------------------------------------+-------+---------------+
| 1 | 5aee121018ac16dbf26dbbe0cf35fd44a29a5d7e | select * from "users" where "id" = ? limit 1 | 3.13 | 1 |
| 2 | 0fc3f3a722b0f9ef38e6bee44fc3fde9fb1fd1d9 | select "created_at" from "articles" where "published_at" is not null order by "created_at" desc | 1.99 | 1 |
+----+------------------------------------------+-------------------------------------------------------------------------------------------------+-------+---------------+
手动记录信息
如果您的应用程序有特殊需求,您可以手动记录类似以下信息
####事件
Tracker::trackEvent(['name' => 'cart.add']);
Tracker::trackEvent(['name' => 'cart.add', 'object' => 'App\Cart\Events\Add']);
####路由
Tracker::trackVisit(
[
'name' => 'my.dynamic.route.name',
'action' => 'MyDynamic@url'
],
['path' => 'my/dynamic/url']
);
要求
- Laravel 4.1+ 或 5+
- PHP 5.3.7+
- 包 "geoip/geoip":"~1.14" 或 "geoip2/geoip2":"~2.0"(如果您计划存储地理IP信息)
安装
####通过在命令行中执行以下命令来安装 tracker
包
composer require pragmarx/tracker
####将服务提供者添加到您的 app/config/app.php
'PragmaRX\Tracker\Vendor\Laravel\ServiceProvider',
####在 app/config/app.php 中添加别名到外观
'Tracker' => 'PragmaRX\Tracker\Vendor\Laravel\Facade',
####发布 tracker 配置
Laravel 4
php artisan config:publish pragmarx/tracker
Laravel 5
php artisan vendor:publish
####在您的 config.php(Laravel 4)或 tracker.php(Laravel 5)中启用 Tracker
'enabled' => true,
####发布迁移
php artisan tracker:tables
如果您在 Laravel 4 上,则需要此步骤,因为在 Laravel 5 中,vendor:publish
为您执行此操作。
####在您的 config/database.php 中为它创建数据库连接
'tracker' => [
'driver' => '...',
'host' => '...',
'database' => ...,
...
],
####迁移
如果您已将默认连接设置为 tracker
,您可以选择
php artisan migrate
否则您需要
php artisan migrate --database=tracker
####如果您计划存储地理IP信息,还需要安装geoip包
composer require "geoip/geoip":"~1.14"
or
composer require "geoip2/geoip2":"~2.0"
####并且确保您没有安装PHP模块。以下是一个Debian/Ubuntu示例
sudo apt-get purge php5-geoip
默认情况下,所有功能都被禁用
Tracker有许多日志选项,但您需要决定您想要记录什么。从启用这个开始
'log_enabled' => true,
它负责记录页面访问和会话,基本上是客户端的IP地址。
统计面板
要使用您网站上的统计面板,您需要将sb-admin 2源代码下载到您的公共文件夹
wget --output-document=/tmp/sba2.zip https://github.com/IronSummitMedia/startbootstrap-sb-admin-2/archive/v1.0.7.zip
unzip /tmp/sba2.zip -d /tmp
mkdir -p public/templates; mv /tmp/startbootstrap-sb-admin-2-1.0.7 public/templates/sb-admin-2
并在您的配置文件中启用
'stats_panel_enabled' => true,
只有管理员可以查看统计信息,所以如果您在用户模型中没有is_admin属性,您需要添加一个
public function getIsAdminAttribute()
{
return true;
}
可以是 'admin'、'is_admin'、'root' 或 'is_root'。
作者
许可
Tracker遵循BSD 3-Clause许可证 - 有关详细信息,请参阅 LICENSE
文件
贡献
欢迎提交pull请求和问题。