From 406945bc3cfa517d8449b5522c8902ac8927755a Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期二, 29 九月 2026 11:21:57 +0800
Subject: [PATCH] 修 22 所取数程序在厂侧空闲时不报通道清单、日志说不清原因的问题

---
 scripts/j22-collector.ps1 |   20 ++++++++++++++++----
 1 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/scripts/j22-collector.ps1 b/scripts/j22-collector.ps1
index 9b912d2..9ddc921 100644
--- a/scripts/j22-collector.ps1
+++ b/scripts/j22-collector.ps1
@@ -131,11 +131,17 @@
 having max(last_user_update) > dateadd(minute, -$LookbackMinutes, getdate())
 "@ $null
         foreach ($row in $rows) { [void]$databases.Add([string]$row[0]) }
-        return $databases
+        if ($databases.Count -gt 0) {
+            Write-Log ("  最近 $LookbackMinutes 分钟内有写入的库:" + $databases.Count + " 个")
+            return $databases
+        }
+        # 没有库在写不等于没有东西可报:通道清单(拓扑)仍要让操作员看到,
+        # 所以照样列最近的库;它们的水位之后的记录通常为空,等于不推数据。
+        Write-Log "  最近 $LookbackMinutes 分钟内没有库在写入(现在没有测试在跑?),改为列出最近的库"
     }
     catch {
         $failure = $_.Exception.Message
-        Write-Log ('  活跃库探测失败,退回按建库时间取库列表: ' + $failure)
+        Write-Log ('  活跃库探测失败,改为列出最近的库: ' + $failure)
     }
 
     try {
@@ -143,6 +149,7 @@
 select top 60 name from sys.databases where name like 'DB[_]%' order by create_date desc
 "@ $null
         foreach ($row in $rows) { [void]$databases.Add([string]$row[0]) }
+        Write-Log ("  已列出最近的库:" + $databases.Count + " 个")
         return $databases
     }
     catch {
@@ -205,11 +212,14 @@
     $positions = Get-ReadPositions
     $seenChannels = New-Object System.Collections.ArrayList
     $sentRows = 0
+    $tablesSeen = 0
+    $emptyChannels = 0
 
     foreach ($database in (Find-ActiveDatabases $connection)) {
         foreach ($table in (Find-ChannelTables $connection $database)) {
             if ($table -notmatch '^Ws(\d+)_IV_0$') { continue }
             $channel = [int]$Matches[1]
+            $tablesSeen++
             if (-not $seenChannels.Contains($channel)) { [void]$seenChannels.Add($channel) }
 
             $key = "$database/$table"
@@ -257,7 +267,7 @@
             }
             catch { Write-Log ("  读取失败 [$key]: " + $_.Exception.Message); continue }
 
-            if ($rows.Count -eq 0) { continue }
+            if ($rows.Count -eq 0) { $emptyChannels++; continue }
 
             # 排序与截断在这里做:服务端不做排序
             $rows = @($rows | Sort-Object { [long]$_.record_time } | Select-Object -First $MaxRowsPerChannel)
@@ -271,9 +281,11 @@
     }
 
     # 拓扑:这台机器当前有数据表的通道。端点忽略重复声明,所以每轮都发没有副作用;
-    # 它同时是候选"最近数据时间"的来源之外的通道清单(最近数据时间取采样行)。
+    # 它同时是候选的通道清单(最近数据时间取采样行,不取上报时间)。
     [void](Send-Topology $seenChannels)
     Save-ReadPositions $positions
+    Write-Log ("  本轮扫过 {0} 张通道表 / {1} 个通道;其中 {2} 个通道没有新行,推送 {3} 行" -f `
+        $tablesSeen, $seenChannels.Count, $emptyChannels, $sentRows)
     return $sentRows
 }
 

--
Gitblit v1.7.1