| | |
| | | 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 { |
| | |
| | | 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 { |
| | |
| | | $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" |
| | |
| | | } |
| | | 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) |
| | |
| | | } |
| | | |
| | | # 拓扑:这台机器当前有数据表的通道。端点忽略重复声明,所以每轮都发没有副作用; |
| | | # 它同时是候选"最近数据时间"的来源之外的通道清单(最近数据时间取采样行)。 |
| | | # 它同时是候选的通道清单(最近数据时间取采样行,不取上报时间)。 |
| | | [void](Send-Topology $seenChannels) |
| | | Save-ReadPositions $positions |
| | | Write-Log (" 本轮扫过 {0} 张通道表 / {1} 个通道;其中 {2} 个通道没有新行,推送 {3} 行" -f ` |
| | | $tablesSeen, $seenChannels.Count, $emptyChannels, $sentRows) |
| | | return $sentRows |
| | | } |
| | | |