Просмотр исходного кода

分来开节点离线提醒和TCP阻断检测

admin 7 лет назад
Родитель
Сommit
1d85845ce6
3 измененных файлов с 23 добавлено и 13 удалено
  1. 4 11
      app/Console/Commands/AutoCheckNodeTCP.php
  2. 17 0
      app/Console/Commands/AutoJob.php
  3. 2 2
      app/Console/Kernel.php

+ 4 - 11
app/Console/Commands/AutoCheckNodeStatus.php → app/Console/Commands/AutoCheckNodeTCP.php

@@ -12,10 +12,10 @@ use Cache;
 use Mail;
 use Log;
 
-class AutoCheckNodeStatus extends Command
+class AutoCheckNodeTCP extends Command
 {
-    protected $signature = 'autoCheckNodeStatus';
-    protected $description = '自动检测节点状态';
+    protected $signature = 'autoCheckNodeTCP';
+    protected $description = '自动检测节点是否被TCP阻断';
     protected static $systemConfig;
 
     public function __construct()
@@ -28,14 +28,13 @@ class AutoCheckNodeStatus extends Command
     {
         $jobStartTime = microtime(true);
 
-        // 监测节点状态
         if (self::$systemConfig['is_tcp_check']) {
             if (!Cache::has('tcp_check_time')) {
                 $this->checkNodes();
             } elseif (Cache::get('tcp_check_time') <= time()) {
                 $this->checkNodes();
             } else {
-                Log::info('下次TCP阻断检测时间:' . date('Y-m-d H:i:s', Cache::get('tcp_check_time')));
+                Log::info('下次节点TCP阻断检测时间:' . date('Y-m-d H:i:s', Cache::get('tcp_check_time')));
             }
         }
 
@@ -98,12 +97,6 @@ class AutoCheckNodeStatus extends Command
 
                 Log::info("【TCP阻断检测】" . $node->name . ' - ' . $node->ip . ' - ' . $text);
             }
-
-            // 10分钟内无节点负载信息且TCP检测认为不是离线则认为是后端炸了
-            $nodeTTL = SsNodeInfo::query()->where('node_id', $node->id)->where('log_time', '>=', strtotime("-10 minutes"))->orderBy('id', 'desc')->first();
-            if ($tcpCheck !== 1 && !$nodeTTL) {
-                $this->notifyMaster($title, "节点**{$node->name}【{$node->ip}】**异常:**心跳异常**", $node->name, $node->server);
-            }
         }
 
         // 随机生成下次检测时间

+ 17 - 0
app/Console/Commands/AutoJob.php

@@ -9,6 +9,7 @@ use App\Http\Models\Goods;
 use App\Http\Models\GoodsLabel;
 use App\Http\Models\ReferralLog;
 use App\Http\Models\SsNode;
+use App\Http\Models\SsNodeInfo;
 use App\Http\Models\SsNodeLabel;
 use App\Http\Models\Ticket;
 use App\Http\Models\UserBalanceLog;
@@ -78,6 +79,9 @@ class AutoJob extends Command
         // 关闭超过72小时未处理的工单
         $this->closeTickets();
 
+        // 检测节点是否离线
+        $this->checkNodeStatus();
+
         $jobEndTime = microtime(true);
         $jobUsedTime = round(($jobEndTime - $jobStartTime), 4);
 
@@ -531,6 +535,19 @@ class AutoJob extends Command
         }
     }
 
+    // 检测节点是否离线
+    private function checkNodeStatus()
+    {
+        $nodeList = SsNode::query()->where('status', 1)->get();
+        foreach ($nodeList as $node) {
+            // 10分钟内无节点负载信息且TCP检测认为不是离线则认为是后端炸了
+            $nodeTTL = SsNodeInfo::query()->where('node_id', $node->id)->where('log_time', '>=', strtotime("-10 minutes"))->orderBy('id', 'desc')->first();
+            if (!$nodeTTL) {
+                ServerChan::send('节点异常警告', "节点**{$node->name}【{$node->ip}】**异常:**心跳异常,可能离线了**");
+            }
+        }
+    }
+
     /**
      * 添加用户封禁日志
      *

+ 2 - 2
app/Console/Kernel.php

@@ -17,7 +17,7 @@ class Kernel extends ConsoleKernel
         \App\Console\Commands\AutoClearLog::class,
         \App\Console\Commands\AutoDecGoodsTraffic::class,
         \App\Console\Commands\AutoResetUserTraffic::class,
-        \App\Console\Commands\AutoCheckNodeStatus::class,
+        \App\Console\Commands\AutoCheckNodeTCP::class,
         \App\Console\Commands\AutoStatisticsNodeDailyTraffic::class,
         \App\Console\Commands\AutoStatisticsNodeHourlyTraffic::class,
         \App\Console\Commands\AutoStatisticsUserDailyTraffic::class,
@@ -46,7 +46,7 @@ class Kernel extends ConsoleKernel
         $schedule->command('autoClearLog')->everyThirtyMinutes();
         $schedule->command('autoDecGoodsTraffic')->everyTenMinutes();
         $schedule->command('autoResetUserTraffic')->daily();
-        $schedule->command('autoCheckNodeStatus')->everyMinute();
+        $schedule->command('autoCheckNodeTCP')->everyMinute();
         $schedule->command('autoStatisticsNodeDailyTraffic')->dailyAt('23:55');
         $schedule->command('autoStatisticsNodeHourlyTraffic')->hourly();
         $schedule->command('autoStatisticsUserDailyTraffic')->dailyAt('23:50');