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