浏览代码

refactor: merge online_user into node

Cat 2 年之前
父节点
当前提交
2022fa8ddb

+ 2 - 1
app/routes.php

@@ -276,11 +276,12 @@ return function (SlimApp $app): void {
         $this->post('/nodes/{id}/info', App\Controllers\WebAPI\NodeController::class . ':info');
     })->add(new NodeToken());
 
+    // 传统订阅(SS/V2Ray/Trojan)
     $app->group('/link', function (): void {
         $this->get('/{token}', App\Controllers\LinkController::class . ':getContent');
     });
 
-    //通用訂閲
+    // 通用订阅(Json/Clash)
     $app->group('/sub', function (): void {
         $this->get('/{token}/{subtype}', App\Controllers\SubController::class . ':getContent');
     });

+ 3 - 9
db/migrations/20000101000000_init_database.php.new

@@ -85,6 +85,7 @@ final class InitDatabase extends AbstractMigration
             ->addColumn('node_bandwidth_limit', 'biginteger', [ 'default' => 0 ])
             ->addColumn('bandwidthlimit_resetday', 'integer', [ 'default' => 0 ])
             ->addColumn('node_heartbeat', 'biginteger', [ 'default' => 0 ])
+            ->addColumn('online_user', 'integer', [ 'comment' => '节点在线用户', 'default' => 0 ])
             ->addColumn('node_ip', 'string', [ 'default' => null ])
             ->addColumn('node_group', 'integer', [ 'default' => 0 ])
             ->addColumn('mu_only', 'boolean', [ 'default' => false ])
@@ -262,15 +263,6 @@ final class InitDatabase extends AbstractMigration
             ->addForeignKey('user_id', 'user', 'id', [ 'delete' => 'CASCADE', 'update' => 'CASCADE' ])
             ->create();
 
-        $this->table('node_online_log', [ 'id' => false, 'primary_key' => [ 'id' ]])
-            ->addColumn('id', 'integer', [ 'identity' => true ])
-            ->addColumn('node_id', 'integer', [])
-            ->addColumn('online_user', 'integer', [])
-            ->addColumn('log_time', 'integer', [])
-            ->addIndex([ 'node_id' ])
-            ->addForeignKey('node_id', 'node', 'id', [ 'delete' => 'CASCADE', 'update' => 'CASCADE' ])
-            ->create();
-
         $this->table('user_password_reset', [ 'id' => false, 'primary_key' => [ 'id' ]])
             ->addColumn('id', 'integer', [ 'identity' => true ])
             ->addColumn('email', 'string', [])
@@ -329,6 +321,8 @@ final class InitDatabase extends AbstractMigration
             ->addIndex([ 'user_id' ])
             ->addForeignKey('user_id', 'user', 'id', [ 'delete' => 'CASCADE', 'update' => 'CASCADE' ])
             ->create();
+            ->addColumn('status', 'text', [ 'comment' => '订单状态' ])
+            ->addIndex([ 'status' ])
     }
 
     public function down(): void

+ 35 - 0
db/migrations/20221211223600_merge_node_online_log.php

@@ -0,0 +1,35 @@
+<?php
+
+declare(strict_types=1);
+
+use Phinx\Migration\AbstractMigration;
+
+final class MergeNodeOnlineLog extends AbstractMigration
+{
+    public function up(): void
+    {
+        if ($this->hasTable('node_online_log')) {
+            $this->table('node_online_log')->drop()->update();
+        }
+        if (! $this->table('node')->hasColumn('online_user')) {
+            $this->table('node')
+                ->addColumn('online_user', 'integer', [ 'comment' => '节点在线用户', 'default' => 0 ])
+                ->save();
+        }
+    }
+
+    public function down(): void
+    {
+        $this->table('node_online_log', [ 'id' => false, 'primary_key' => [ 'id' ]])
+            ->addColumn('id', 'integer', [ 'identity' => true ])
+            ->addColumn('node_id', 'integer', [])
+            ->addColumn('online_user', 'integer', [])
+            ->addColumn('log_time', 'integer', [])
+            ->addIndex([ 'node_id' ])
+            ->addForeignKey('node_id', 'node', 'id', [ 'delete' => 'CASCADE', 'update' => 'CASCADE' ])
+            ->create();
+        $this->table('node')
+            ->removeColumn('online_user')
+            ->save();
+    }
+}

+ 0 - 2
src/Command/Job.php

@@ -12,7 +12,6 @@ use App\Models\EmailQueue;
 use App\Models\EmailVerify;
 use App\Models\Ip;
 use App\Models\Node;
-use App\Models\NodeOnlineLog;
 use App\Models\PasswordReset;
 use App\Models\Setting;
 use App\Models\Shop;
@@ -68,7 +67,6 @@ EOL;
         UserSubscribeLog::where('request_time', '<', date('Y-m-d H:i:s', \time() - 86400 * (int) $_ENV['subscribeLog_keep_days']))->delete();
         UserHourlyUsage::where('datetime', '<', \time() - 86400 * (int) $_ENV['trafficLog_keep_days'])->delete();
         Token::where('expire_time', '<', \time())->delete();
-        NodeOnlineLog::where('log_time', '<', \time() - 86400 * 3)->delete();
         DetectLog::where('datetime', '<', \time() - 86400 * 3)->delete();
         EmailVerify::where('expire_in', '<', \time() - 86400 * 3)->delete();
         EmailQueue::where('time', '<', \time() - 86400 * 3)->delete();

+ 1 - 3
src/Controllers/User/ServerController.php

@@ -37,10 +37,8 @@ final class ServerController extends BaseController
             $array_node['class'] = $node->node_class;
             $array_node['sort'] = $node->sort;
             $array_node['info'] = $node->info;
-            $array_node['online_user'] = $node->getNodeOnlineUserCount();
+            $array_node['online_user'] = $node->online_user;
             $array_node['online'] = $node->getNodeOnlineStatus();
-            $array_node['load'] = $node->getNodeLoad();
-            $array_node['uptime'] = $node->getNodeUptime();
             $array_node['traffic_rate'] = $node->traffic_rate;
             $array_node['status'] = $node->status;
             $array_node['traffic_used'] = (int) Tools::flowToGB($node->node_bandwidth);

+ 3 - 6
src/Controllers/WebAPI/UserController.php

@@ -8,7 +8,6 @@ use App\Controllers\BaseController;
 use App\Models\DetectLog;
 use App\Models\Ip;
 use App\Models\Node;
-use App\Models\NodeOnlineLog;
 use App\Models\User;
 use App\Services\DB;
 use App\Utils\ResponseHelper;
@@ -138,11 +137,9 @@ final class UserController extends BaseController
         }
 
         $node->increment('node_bandwidth', $sum);
-        NodeOnlineLog::insert([
-            'node_id' => $node_id,
-            'online_user' => count($data),
-            'log_time' => \time(),
-        ]);
+
+        $node->online_user = count($data);
+        $node->save();
 
         return $response->withJson([
             'ret' => 1,

+ 0 - 50
src/Models/Node.php

@@ -100,56 +100,6 @@ final class Node extends Model
         return date('Y-m-d H:i:s', $this->node_heartbeat);
     }
 
-    /**
-     * 获取节点在线时间
-     */
-    public function getNodeUptime(): string
-    {
-        $uptime = $this->uptime;
-        if ($uptime === null) {
-            return '未知';
-        }
-        return Tools::secondsToTime((int) $uptime);
-    }
-
-    /**
-     * 获取节点负载
-     */
-    public function getNodeLoad(): float
-    {
-        $load = $this->load;
-        if ($load === null) {
-            return 0;
-        }
-        return (float) number_format(((float) explode(' ', $load)[0]), 2, '.', '');
-    }
-
-    public function getNodeUpRate()
-    {
-        $log = NodeOnlineLog::where('node_id', $this->id)->where('log_time', '>=', \time() - 86400)->count();
-        return $log / 1440;
-    }
-
-    public function getNodeAlive()
-    {
-        return NodeOnlineLog::where('node_id', $this->id)->orderBy('id', 'desc')->whereRaw('`log_time`%1800<60')->limit(48)->get();
-    }
-
-    /**
-     * 获取节点 5 分钟内最新的在线人数
-     */
-    public function getNodeOnlineUserCount(): int
-    {
-        if (\in_array($this->sort, [9])) {
-            return -1;
-        }
-        $log = NodeOnlineLog::where('node_id', $this->id)->where('log_time', '>', \time() - 300)->orderBy('id', 'desc')->first();
-        if ($log === null) {
-            return 0;
-        }
-        return $log->online_user;
-    }
-
     /**
      * 获取节点在线状态
      *

+ 0 - 11
src/Models/NodeOnlineLog.php

@@ -1,11 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace App\Models;
-
-final class NodeOnlineLog extends Model
-{
-    protected $connection = 'default';
-    protected $table = 'node_online_log';
-}