diff --git a/app/Console/Commands/Cluster/Log.php b/app/Console/Commands/Cluster/Monitor.php similarity index 68% rename from app/Console/Commands/Cluster/Log.php rename to app/Console/Commands/Cluster/Monitor.php index 158f645..d1fcb98 100644 --- a/app/Console/Commands/Cluster/Log.php +++ b/app/Console/Commands/Cluster/Monitor.php @@ -6,14 +6,14 @@ use Illuminate\Console\Command; use Symfony\Component\Console\Command\Command as CommandAlias; -class Log extends Command +class Monitor extends Command { /** * The name and signature of the console command. * * @var string */ - protected $signature = 'cluster:log'; + protected $signature = 'monitor {--ignore_event=}'; /** * The console command description. @@ -29,7 +29,19 @@ class Log extends Command */ public function handle(): int { - ClusterSupport::listen('*', function ($event, $message) { + $ignore_events = []; + + if ($this->option('ignore_event')) { + $ignore_events = explode(',', $this->option('ignore_event')); + } + + ClusterSupport::publish('monitor.started'); + + ClusterSupport::listen('*', function ($event, $message) use ($ignore_events) { + if (in_array($event, $ignore_events)) { + return; + } + $this->format($event, $message); }, false); @@ -40,11 +52,11 @@ private function format(string $event, array $message = []) { $status = $this->switch($event, $message['data']); - if (! $status) { + if (!$status) { return; } - $message = "[{$message['node']['type']}] {$message['node']['id']}:$event: ".$status; + $message = "[{$message['node']['type']}] {$message['node']['id']}:$event: " . $status; $this->info($message); } @@ -52,8 +64,9 @@ private function format(string $event, array $message = []) public function switch($event, $message = []): string|null { $events = [ + 'monitor.started' => '我正在监听集群消息。', 'node.ok' => '此节点初始化成功,并且已经加入集群。', - 'node.online' => '此节点已经上线。', + 'node.online' => fn($message) => '此节点已经上线,启动权重为:' . $message['weight'], 'node.offline' => '将不再处理任何任务。', 'cluster_ready.ok' => 'ClusterSupport Ready 就绪了,已经可以处理请求了。', 'config.updated' => '集群配置文件已经更新,请所有 slave 节点下载。', @@ -61,16 +74,17 @@ public function switch($event, $message = []): string|null 'config.synced' => '我已下载配置文件。', 'edge.deployed' => '已成功根据集群节点生成配置文件并应用。', 'edge.launched' => '边缘节点成功启动。', - 'edge.error' => fn ($message) => $message['message'] ?? '未知错误', + 'edge.error' => fn($message) => $message['message'] ?? '未知错误', 'cluster.restart.web' => '正在重启 web 服务。', 'cluster.restart.all' => '正在重启 整个 服务。', 'cluster.restarted.web' => 'Web 重启好了。', 'cluster.restarted.all' => '整个 重启好了。', 'cluster.deployed' => '集群配置文件已经部署。', - 'cluster.deployed.error' => fn ($message) => $message['message'] ?? '未知错误', + 'cluster.deployed.error' => fn($message) => $message['message'] ?? '未知错误', 'cluster.deployed.ok' => '集群配置文件部署成功。', - 'http.incoming' => fn ($message) => $this->handleIncomingRequest($message), - 'http.outgoing' => fn ($message) => $this->handleOutgoingRequest($message), + 'http.incoming' => fn($message) => $this->handleIncomingRequest($message), + 'http.outgoing' => fn($message) => $this->handleOutgoingRequest($message), + 'weight.updated' => fn($message) => $this->handleWeightUpdated($message), ]; $resp = $events[$event] ?? null; @@ -101,6 +115,18 @@ private function handleOutgoingRequest(array $message): string return $msg; } + private function handleWeightUpdated(array $message): string + { + $msg = ''; + if ($message['weight'] === "0") { + $msg .= '我不参与调度了。'; + } else { + $msg .= '我的权重是:' . $message['weight'] . '。'; + } + + return $msg; + } + private function appendUser(array $message): string { $msg = '';