diff --git a/app/Console/Commands/Cluster/Log.php b/app/Console/Commands/Cluster/Log.php index 16a226f..ce49425 100644 --- a/app/Console/Commands/Cluster/Log.php +++ b/app/Console/Commands/Cluster/Log.php @@ -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; } } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 3027830..78c503c 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -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' => [ diff --git a/app/Http/Middleware/ReportRequestToCluster.php b/app/Http/Middleware/ReportRequestToCluster.php new file mode 100644 index 0000000..b41b770 --- /dev/null +++ b/app/Http/Middleware/ReportRequestToCluster.php @@ -0,0 +1,59 @@ +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; + } +}