增加 请求汇报

This commit is contained in:
iVampireSP.com 2023-02-08 13:46:21 +08:00
parent 894c94a8b8
commit 04747c3905
No known key found for this signature in database
GPG Key ID: 2F7B001CA27A8132
3 changed files with 106 additions and 1 deletions

View File

@ -51,6 +51,7 @@ private function format(string $event, array $message = [])
public function switch($event, $message = []): string|null
{
// var_dump($event, $message);
$events = [
'node.ok' => '此节点初始化成功,并且已经加入集群。',
'node.online' => '此节点已经上线。',
@ -66,8 +67,50 @@ public function switch($event, $message = []): string|null
'cluster.restart.all' => '正在重启 整个 服务。',
'cluster.restarted.web' => 'Web 重启好了。',
'cluster.restarted.all' => '整个 重启好了。',
'cluster.deployed' => '集群配置文件已经部署。',
'cluster.deployed.error' => $message['message'] ?? '未知错误',
'cluster.deployed.ok' => '集群配置文件部署成功。',
'http.incoming' => fn ($message) => $this->handleIncomingRequest($message),
'http.outgoing' => fn ($message) => $this->handleOutgoingRequest($message),
];
return $events[$event] ?? null;
$resp = $events[$event];
// if resp is callable
if (is_callable($resp)) {
return $resp($message);
}
return $resp ?? null;
}
private function handleIncomingRequest(array $message): string
{
$msg = $this->appendUser($message);
$msg .= "{$message['method']} {$message['path']}";
return $msg;
}
private function handleOutgoingRequest(array $message): string
{
$msg = $this->appendUser($message);
$msg .= "{$message['method']} {$message['path']} {$message['status']} {$message['time']}ms";
return $msg;
}
private function appendUser(array $message): string
{
$msg = '';
if ($message['user']) {
$msg .= "{$message['user']['name']}#{$message['user']['id']} ";
} else {
$msg .= 'Guest ';
}
return $msg;
}
}

View File

@ -10,6 +10,7 @@
use App\Http\Middleware\PreventRequestsDuringMaintenance;
use App\Http\Middleware\RealNamed;
use App\Http\Middleware\RedirectIfAuthenticated;
use App\Http\Middleware\ReportRequestToCluster;
use App\Http\Middleware\TrimStrings;
use App\Http\Middleware\TrustProxies;
use App\Http\Middleware\ValidateSignature;
@ -65,6 +66,7 @@ class Kernel extends HttpKernel
ShareErrorsFromSession::class,
VerifyCsrfToken::class,
SubstituteBindings::class,
ReportRequestToCluster::class,
],
'api' => [
@ -72,6 +74,7 @@ class Kernel extends HttpKernel
// \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:api',
SubstituteBindings::class,
ReportRequestToCluster::class,
],
'module' => [

View File

@ -0,0 +1,59 @@
<?php
namespace App\Http\Middleware;
use App\Support\ClusterSupport;
use Closure;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Str;
class ReportRequestToCluster
{
/**
* Handle an incoming request.
*
* @param Request $request
* @param Closure(Request): (Response|RedirectResponse) $next
* @return Response|RedirectResponse
*/
public function handle(Request $request, Closure $next): Response|RedirectResponse
{
$random_id = Str::random(16);
$method = $request->method();
$path = $request->path();
// ClusterSupport::publish('http.incoming', [
// 'id' => $random_id,
// 'method' => $method,
// 'path' => $path,
// 'query' => $request->query(),
// 'body' => $request->all(),
// // 'headers' => $request->headers->all(),
// 'ip' => $request->ip(),
// 'user-agent' => $request->userAgent(),
// 'user' => $request->user(),
// ]);
$start = microtime(true);
$response = $next($request);
$end = microtime(true);
ClusterSupport::publish('http.outgoing', [
'id' => $random_id,
'method' => $method,
'status' => $response->status(),
'path' => $path,
// 'headers' => $response->headers->all(),
'content' => $response->getContent(),
'user' => $request->user(),
'time' => round(($end - $start) * 1000),
]);
return $response;
}
}