vd/app/Domains/Log/Http/Middleware/RequestsMonitorMiddleware.php
2018-11-06 16:07:41 +08:00

68 lines
2.0 KiB
PHP

<?php
namespace App\Domains\Log\Http\Middleware;
use Closure;
use App\Models\Log\Log;
use Illuminate\Http\Request;
use App\Events\NewRequestEvent;
use App\Models\Account\Account;
use Jenssegers\Agent\Facades\Agent;
use Illuminate\Support\Facades\Event;
use Symfony\Component\HttpFoundation\JsonResponse;
class RequestsMonitorMiddleware
{
public function handle(Request $request, Closure $next)
{
try {
$user = $request->user();
} catch (\Exception $e) {
}
$response = $next($request);
if ($request->user()) {
$user = $request->user();
}
$alias = $request->route()[1]['as'];
$actions = config('domain.log.actions');
if (!in_array($alias, array_keys($actions))) {
return $response;
}
$action = $actions[$alias];
$browser = Agent::browser();
if ($user && $user instanceof Account) {
$creatorType = 'account';
}
$log = [
'request_url' => $request->fullUrl(),
'request_method' => $request->getMethod(),
'request_param' => $request->input(),
'request_device' => Agent::device().' '.Agent::platform(),
'request_browser' => $browser.' '.Agent::version($browser),
'request_languages' => implode(', ', Agent::languages()),
'response_status' => $response->getStatusCode(),
'response_content' => ($response instanceof JsonResponse) ? json_decode($response->getContent()) : '',
'action' => $action,
'ip' => $request->ip() ?? '127.0.0.1',
'creator_id' => $user->id ?? 0,
'creator_type' => $creatorType ?? '',
'creator_username' => $user->username ?? '',
'creator_nickname' => $user->nickname ?? '',
'microtime' => ceil((microtime(true)-BOOT_TIME)*1000),
];
Event::fire(new NewRequestEvent($log));
return $response;
}
}