feat(detmir): ship ops, dlp, 1c and mcp updates

This commit is contained in:
igor04091968
2026-05-27 05:56:43 +03:00
parent 033ae810f3
commit 3042bd5042
85 changed files with 12028 additions and 460 deletions
+34 -19
View File
@@ -30,6 +30,7 @@ $pulseSeconds = if ($config.PSObject.Properties.Name -contains 'collector' -and
$freshnessSeconds = [Math]::Max($pollSeconds * 3, 30)
$sessionFreshnessSeconds = [Math]::Max($pollSeconds * 4, 45)
$transportStaleSeconds = [Math]::Max($pollSeconds * 12, 180)
$endpointFreshnessSeconds = [Math]::Max($transportStaleSeconds, 300)
$queueMaxDepth = 1000
$afkExpected = if ($config.PSObject.Properties.Name -contains 'collectors' -and $config.collectors.PSObject.Properties.Name -contains 'afkEnabled') { [bool]$config.collectors.afkEnabled } else { $true }
@@ -37,6 +38,10 @@ $windowExpected = if ($config.PSObject.Properties.Name -contains 'collectors' -a
$fileOpsExpected = if ($config.PSObject.Properties.Name -contains 'collectors' -and $config.collectors.PSObject.Properties.Name -contains 'fileOpsEnabled') { [bool]$config.collectors.fileOpsEnabled } else { $true }
function Get-LoggedOnUsers {
param(
[bool]$IncludeDisconnected = $false
)
$users = New-Object 'System.Collections.Generic.HashSet[string]' ([System.StringComparer]::OrdinalIgnoreCase)
$activeStates = @('Active', 'Активно')
$inactiveStates = @('Disc', 'Disconnected', 'Idle', 'Listen', 'Диск', 'Откл', 'Отключен')
@@ -61,7 +66,11 @@ function Get-LoggedOnUsers {
break
}
}
if ($null -ne $state -and $activeStates -notcontains $state) { continue }
if ($null -ne $state -and $activeStates -notcontains $state) {
if (-not $IncludeDisconnected -or $inactiveStates -notcontains $state) {
continue
}
}
[void]$users.Add($user)
[void]$users.Add(('{0}\{1}' -f $env:COMPUTERNAME, $user))
if (-not [string]::IsNullOrWhiteSpace($env:USERDOMAIN)) {
@@ -373,13 +382,27 @@ $endpointCollectorProcesses = @(Get-CollectorProcesses -ScriptPath $endpointColl
$fileCollectorProcesses = if ($fileOpsExpected) { @(Get-CollectorProcesses -ScriptPath $fileCollectorScript) } else { @() }
$browserCollectorProcesses = @(Get-CollectorProcesses -ScriptPath $collectorScript)
$loggedOnUsers = Get-LoggedOnUsers
$sessionBoundUsers = @(
$liveLoggedOnUsers = Get-LoggedOnUsers
$interactiveUsers = Get-LoggedOnUsers -IncludeDisconnected $true
$liveSessionBoundUsers = @(
@($config.userTasks) |
Where-Object { Test-UserHasSession -UserId ([string]$_.userId) -LoggedOnUsers $loggedOnUsers } |
Where-Object { Test-UserHasSession -UserId ([string]$_.userId) -LoggedOnUsers $liveLoggedOnUsers } |
ForEach-Object { [string]$_.userId }
)
$sessionScopedExpectedCount = [int]$sessionBoundUsers.Count
$interactiveSessionBoundUsers = @(
@($config.userTasks) |
Where-Object { Test-UserHasSession -UserId ([string]$_.userId) -LoggedOnUsers $interactiveUsers } |
ForEach-Object { [string]$_.userId }
)
$sessionScopedExpectedCount = if ($liveSessionBoundUsers.Count -gt 0) {
[int]$liveSessionBoundUsers.Count
}
elseif ($interactiveSessionBoundUsers.Count -gt 0) {
1
}
else {
0
}
$sessionScopedCollectorsRequired = ($sessionScopedExpectedCount -gt 0)
$taskNames = @()
@@ -413,7 +436,7 @@ if ($sessionScopedCollectorsRequired -and $windowExpected) {
$bucketChecks += Get-BucketHealth -BucketId ('aw-watcher-window_' + $awHostname) -MaxAgeSeconds $freshnessSeconds -Required $true -RequireFreshEvent $false
}
if ($sessionScopedCollectorsRequired) {
$bucketChecks += Get-BucketHealth -BucketId ('aw-dlp-endpoint-signals_' + $awHostname) -MaxAgeSeconds $freshnessSeconds -Required $true -RequireFreshEvent $true
$bucketChecks += Get-BucketHealth -BucketId ('aw-dlp-endpoint-signals_' + $awHostname) -MaxAgeSeconds $endpointFreshnessSeconds -Required $true -RequireFreshEvent $true
}
if ($sessionScopedCollectorsRequired -and $fileOpsExpected) {
$bucketChecks += Get-BucketHealth -BucketId ('aw-file-operations_' + $awHostname) -MaxAgeSeconds $transportStaleSeconds -Required $false -RequireFreshEvent $true
@@ -443,18 +466,9 @@ catch {
}
$watcherCountsOk = $true
if ($sessionScopedCollectorsRequired) {
if ($afkExpected) {
$watcherCountsOk = $watcherCountsOk -and (($watcherByName['aw-watcher-afk'] | ForEach-Object { [int]$_ }) -ge $sessionScopedExpectedCount)
}
if ($windowExpected) {
$watcherCountsOk = $watcherCountsOk -and (($watcherByName['aw-watcher-window'] | ForEach-Object { [int]$_ }) -ge $sessionScopedExpectedCount)
}
}
$endpointProcessOk = if (-not $sessionScopedCollectorsRequired) { $true } else { (@($endpointCollectorProcesses).Count -ge $sessionScopedExpectedCount) }
$fileProcessOk = if (-not $fileOpsExpected -or -not $sessionScopedCollectorsRequired) { $true } else { (@($fileCollectorProcesses).Count -ge $sessionScopedExpectedCount) }
$browserProcessOk = if (-not $sessionScopedCollectorsRequired) { $true } else { (@($browserCollectorProcesses).Count -ge $sessionScopedExpectedCount) }
$endpointProcessOk = $true
$fileProcessOk = $true
$browserProcessOk = $true
$sessionCollectorOk = (@($sessionCollectorProcesses).Count -eq 1)
$result = [ordered]@{
@@ -482,7 +496,8 @@ $result = [ordered]@{
ok = [bool]($tasks.Count -gt 0 -and -not ($tasks | Where-Object { -not $_.present -or -not $_.enabled }))
}
processes = [ordered]@{
sessionBoundUsers = $sessionBoundUsers
liveSessionBoundUsers = $liveSessionBoundUsers
sessionBoundUsers = $interactiveSessionBoundUsers
sessionScopedExpectedCount = [int]$sessionScopedExpectedCount
watchers = @($runningWatchers)
watcherDuplicates = @($watcherDuplicates)