64 lines
1.6 KiB
PHP
64 lines
1.6 KiB
PHP
<?php
|
|
namespace Modules\Profiler\Middleware;
|
|
|
|
use Illuminate\Http\Request;
|
|
use Modules\Profiler\Entities\HttpLog;
|
|
use Modules\Profiler\Entities\QueryLog;
|
|
|
|
class Profiler
|
|
{
|
|
private $queries = [];
|
|
|
|
public function handle(Request $request, $next)
|
|
{
|
|
\DB::enableQueryLog();
|
|
return $next($request);
|
|
}
|
|
|
|
public function terminate(Request $request, $response)
|
|
{
|
|
$this->queries = \DB::getQueryLog();
|
|
|
|
$requestId = $this->logRequest($request);
|
|
$this->logQueries($requestId);
|
|
}
|
|
|
|
/**
|
|
*
|
|
*
|
|
* @param Request $request
|
|
*
|
|
* @return mixed
|
|
*/
|
|
protected function logRequest(Request $request)
|
|
{
|
|
$url = $request->fullUrl();
|
|
$method = $request->getMethod();
|
|
$time = (microtime(true) - LARAVEL_START) * 1000;
|
|
|
|
$data = ['url' => $url, 'method' => $method, 'time' => $time];
|
|
|
|
if (function_exists('sys_getloadavg')) {
|
|
$load = sys_getloadavg();
|
|
$data['load_1'] = $load[0];
|
|
$data['load_5'] = $load[1];
|
|
$data['load_15'] = $load[2];
|
|
}
|
|
|
|
$http = HttpLog::create($data);
|
|
|
|
return $http->id;
|
|
}
|
|
|
|
protected function logQueries($httpLogId = null)
|
|
{
|
|
foreach ($this->queries as $query) {
|
|
QueryLog::create([
|
|
'query' => $query['query'],
|
|
'bindings' => $query['bindings'],
|
|
'time' => $query['time'],
|
|
'http_log_id' => $httpLogId
|
|
]);
|
|
}
|
|
}
|
|
} |