瀏覽代碼

Fixed Subscribe logs does not show correctly

Change admin node page, the data consume count from total logs to this month until the last hour.
BrettonYe 4 月之前
父節點
當前提交
572751e135

+ 4 - 8
app/Http/Controllers/Admin/LogsController.php

@@ -172,14 +172,10 @@ class LogsController extends Controller
             });
         });
 
-        $onlineIPLogs = $query->groupBy(['user_id', 'node_id'])->latest()->paginate(20)->appends($request->except('page'));
-        // 提前过滤 IP 数据以减少循环中的判断
-        $onlineIPLogs->transform(function ($log) {
-            if ($log->ip && ! str_contains($log->ip, ',')) {
-                $ipInfo = IP::getIPInfo($log->ip);
-                if ($ipInfo) {
-                    $log->ipInfo = $ipInfo['address'].' '.$ipInfo['isp'];
-                }
+        $onlineIPLogs = $query->groupBy(['user_id', 'node_id'])->latest()->paginate(20)->appends($request->except('page'))->through(function ($log) {
+            // 提前过滤 IP 数据以减少循环中的判断
+            if ($log->ip && ! str_contains($log->ip, ',') && $info = IP::getIPInfo($log->ip)) {
+                $log->ipInfo = $info['address'].' '.$info['isp'];
             }
 
             return $log;

+ 15 - 9
app/Http/Controllers/Admin/NodeController.php

@@ -28,7 +28,12 @@ class NodeController extends Controller
     { // 节点列表
         $query = Node::whereNull('relay_node_id')
             ->with([
-                'dailyDataFlows:node_id,u,d',
+                'dailyDataFlows' => function ($query) {
+                    $query->whereBetween('created_at', [now()->startOfMonth(), now()]);
+                },
+                'hourlyDataFlows' => function ($query) {
+                    $query->whereDate('created_at', now()->toDateString());
+                },
                 'onlineLogs' => function ($query) {
                     $query->where('log_time', '>=', strtotime('-5 minutes'))->orderBy('log_time', 'desc');
                 },
@@ -43,17 +48,18 @@ class NodeController extends Controller
             $query->where('status', $value);
         });
 
-        $nodeList = $query->orderByDesc('sort')->orderBy('id')->paginate(15)->appends($request->except('page'));
-
-        // 预处理每个节点的数据
-        $nodeList->transform(function ($node) {
+        $nodeList = $query->orderByDesc('sort')->orderBy('id')->paginate(15)->appends($request->except('page'))->through(function ($node) {
+            // 预处理每个节点的数据
             $node->online_users = $node->onlineLogs->first()?->online_user; // 在线人数
-            $node->transfer = formatBytes($node->dailyDataFlows->sum('u') + $node->dailyDataFlows->sum('d')); // 已产生流量
+            $node->transfer = formatBytes(
+                $node->dailyDataFlows->sum(fn ($item) => $item->u + $item->d) +
+                $node->hourlyDataFlows->sum(fn ($item) => $item->u + $item->d)
+            ); // 已产生流量
 
             $node_info = $node->heartbeats->first(); // 近期负载
-            $node->isOnline = $node_info !== null && ! empty($node_info->load);
+            $node->isOnline = ! empty($node_info?->load);
             $node->load = $node_info->load ?? false;
-            $node->uptime = $node_info === null ? 0 : formatTime($node_info->uptime);
+            $node->uptime = formatTime($node_info->uptime ?? 0);
 
             return $node;
         });
@@ -231,7 +237,7 @@ class NodeController extends Controller
     { // 节点IP阻断检测
         foreach ($node->ips() as $ip) {
             $status = (new NetworkDetection)->networkStatus($ip, $node->port ?? 22);
-            $data[$ip] = [config('common.network_status')[$status['icmp']], config('common.network_status')[$status['tcp']]];
+            $data[$ip] = [trans("admin.network_status.{$status['icmp']}"), trans("admin.network_status.{$status['tcp']}")];
         }
 
         return response()->json(['status' => 'success', 'title' => '['.$node->name.'] '.trans('admin.node.connection_test'), 'message' => $data ?? []]);

+ 2 - 4
app/Http/Controllers/Admin/SubscribeController.php

@@ -46,10 +46,8 @@ class SubscribeController extends Controller
             $query->whereBetween('request_time', [$request->input('start').' 00:00:00', $request->input('end').' 23:59:59']);
         }
 
-        $subscribeLogs = $query->latest()->paginate(20)->appends($request->except('page'))->transform(function ($log) {
-            if ($log->request_ip) {
-                $log->ipInfo = optional(IP::getIPInfo($log->request_ip))['address'] ?? null;
-            }
+        $subscribeLogs = $query->latest()->paginate(20)->appends($request->except('page'))->through(function ($log) {
+            $log->ipInfo = $log->request_ip ? optional(IP::getIPInfo($log->request_ip))['address'] ?? null : null;
 
             return $log;
         });