frnkly / laravel-keen
为Laravel提供高效的Keen.io集成
Requires
- php: >=7.0
- keen-io/keen-io: ~2.5
Requires (Dev)
- laravel/framework: ~5.5
- mockery/mockery: ~1.0
- orchestra/testbench: ~3.4
- phpunit/phpunit: ~6.0
README
在请求完成后将事件数据发送到 Keen.io - 自动且透明。
本包围绕Keen PHP客户端提供了一个轻量级包装器,并配置了一个中间件,在每次请求完成后才发送事件数据到Keen。这意味着随着跟踪事件的增加,对请求时间的影响几乎可以忽略不计。为了方便,中间件也可以自动跟踪每个请求。
特性
- 延迟事件跟踪 🙌
- 可选自动跟踪每个请求
- 支持开箱即用的数据增强
- 可扩展中间件
- 可忽略特定HTTP状态码的选项(例如
100
,302
等)- 或基于自定义逻辑的任何请求
- 更多即将到来!
安装
使用 Composer 安装Laravel + Keen包
$ composer require frnkly/laravel-keen
这将还会安装Keen PHP客户端作为依赖项。
配置
您的Keen项目ID和密钥应在 config/services.php
配置文件中定义,但通常来自 环境配置
return [ // Other 3rd-party Services // ... // Add your Keen information here 'keen' => [ 'id' => env('KEEN_PROJECT_ID'), 'master' => env('KEEN_MASTER_KEY'), 'write' => env('KEEN_WRITE_KEY'), ], ];
在您的 .env
文件中,您可能需要添加类似以下内容
KEEN_PROJECT_ID=your-project-id
KEEN_MASTER_KEY=your-master-key
KEEN_WRITE_KEY=your-write-key
入门
在 app/Http/Kernel.php
中全局注册中间件
protected $middleware = [ // Other Middleware // ... \Frnkly\LaravelKeen\Middleware::class, ];
或在中间件组内
protected $middlewareGroups = [ 'web' => [ // Other "Web" Middleware // ... \Frnkly\LaravelKeen\Middleware::class, ], 'api' => [ // Other "API" Middleware // ... \Frnkly\LaravelKeen\Middleware::class, ], ];
感谢Laravel 5.5中的 包发现,服务提供者应该已经可用。也可以通过 config/app.php
配置文件手动注册
'providers' => [ // Other Service Providers // ... Frnkly\LaravelKeen\ServiceProvider::class, ]
自动跟踪每个请求
默认情况下启用了自动跟踪。您可以通过配置文件禁用此行为
'keen' => [ // Other Keen options // ... 'track_requests' => false, ],
数据增强
要为每个请求自动添加 数据增强,请使用以下配置选项
'keen' => [ // Other Keen settings // ... 'addons' => [ 'ip_to_geo' => true, // IP to Geo parser 'ua_parser' => true, // User Agent parser 'referrer_parser' => true, // Referrer parser ], ],
每个数据增强对象将出现在您的Keen流中,名称与上面相同(即 ip_to_geo
和 ua_parser
)。
使用自己的中间件
包含的中间件使扩展和获取更精细的数据控制变得简单。您可以使用 Artisan
创建自己的中间件,然后让它扩展 \Frnkly\LaravelKeen\Middleware
$ php artisan make:middleware TracksRequests
在新的中间件中,覆盖受保护的 buildRequestEventData
方法
<?php namespace App\Http\Middleware; class TracksRequests extends \Frnkly\LaravelKeen\Middleware { /** * Data for "request" event. * * @param \Illuminate\Http\Request $request * @param \Illuminate\Http\Response $response */ protected function buildRequestEventData($request, $response) { parent::buildRequestEventData($request, $response); // Add or overwrite values. $host = 'staging'; $overwrite = true; $this->client->addRequestEventData('host', $host, $overwrite) // Add parameters to array values. ->addRequestEventParams([ 'user' => $request->user()->id ]) ->addRequestEventParams([ 'mime' => $request->getMimeType('html') ], 'response') // Add data enrichment. ->addRequestEventData('target_url', 'https://example.com') ->enrichRequestEvent([ 'name' => 'url_parser', 'output'=> 'url_parser', 'input' => ['url' => 'target_url'] ]); } }
请记得更新您的 app/Http/Kernel.php
文件,使用您自己的中间件类而不是预配置的中间件类。
跳过请求
某些响应代码不需要跟踪,例如重定向。您可以在中间件中配置要忽略的响应代码列表
/** * @var array */ protected $skipResponseCodes = [ 100, 101, 301, 302, 307, 308, ];
您还可以在中间件中覆盖 shouldRun
方法
/** * Determines if the middleware should run or not. * * @param \Illuminate\Http\Request $request * @param \Illuminate\Http\Response $response * @return bool */ protected function shouldRun($request, $response) : bool { if (! parent::shouldRun($request, $response)) { return false; } // Define your own custom logic here. // ... return true; }
类型提示
LaravelKeen客户端可以在任何由容器解析的类的构造函数中进行 类型提示
namespace App\Events; use App\Events\OrderShipped; use Frnkly\LaravelKeen\Client; class OrderShipped { private $client; public function __construct(Client $client) { // The client can now be accessed by all methods in this class. $this->client = $client; } public function handle(OrderShipped $event) { // By adding a deferred event, we can continue working on the request // without waiting on a reply back from Keen.io. The event will be // processed once the request is done–automatically and transparently. $this->client->addDeferredEvent('order-shipped', [ // Event data... ]); } }
控制器也可以利用方法注入。
use Frnkly\LaravelKeen\Client; class UserController extends Controller { public function store(Client $client) { $client->addDeferredEvent('new-user', [ // Event data... ]); } }
本项目采用MIT许可证授权。