KeyHunter parser v10 + 18 scanners + tests (synthetic fixtures only, no keys/db/tokens)
This commit is contained in:
57
watchdog.ps1
Normal file
57
watchdog.ps1
Normal file
@@ -0,0 +1,57 @@
|
||||
# watchdog.ps1 - resurrects dead keyhunter lanes every 5 min
|
||||
$kh = "C:\Users\User\Desktop\keyhunter"
|
||||
$py = "C:\Users\User\AppData\Local\Programs\Python\Python311\python.exe"
|
||||
$lanes = @(
|
||||
@("gh_eternal.py", "gh_eternal_out.log", $kh),
|
||||
@("validator_loop.py", "validator_loop.log", $kh),
|
||||
@("eternal_export.py", "eternal_export.log", $kh),
|
||||
@("gateway_importer.py", "gateway_importer.log", $kh),
|
||||
@("huggingface_eternal.py", "hf_eternal.log", $kh),
|
||||
@("gist_eternal.py", "gist_eternal.log", $kh),
|
||||
@("grepapp_eternal.py", "grepapp_eternal.log", $kh),
|
||||
@("npm_eternal.py", "npm_eternal.log", $kh),
|
||||
@("pypi_eternal.py", "pypi_eternal.log", $kh),
|
||||
@("gitlab_eternal.py", "gitlab_eternal.log", $kh),
|
||||
@("codeberg_eternal.py", "codeberg_eternal.log", $kh),
|
||||
@("forum_eternal.py", "forum_eternal.log", $kh),
|
||||
@("bitbucket_eternal.py", "bitbucket_eternal.log", $kh),
|
||||
@("gh_issues_eternal.py", "gh_issues.log", $kh),
|
||||
@("gh_commits_eternal.py", "gh_commits.log", $kh),
|
||||
@("se_eternal.py", "se_eternal.log", $kh),
|
||||
@("crates_eternal.py", "crates_eternal.log", $kh),
|
||||
@("rubygems_eternal.py", "rubygems_eternal.log", $kh),
|
||||
@("gitea_eternal.py", "gitea_eternal.log", $kh)
|
||||
@("hn_eternal.py", "hn_eternal.log", $kh),
|
||||
@("nuget_eternal.py", "nuget_eternal.log", $kh),
|
||||
@("packagist_eternal.py", "packagist_eternal.log", $kh),
|
||||
|
||||
@("eternal_v10.py", "v10_a.log", "$kh\src"),
|
||||
@("eternal_v10.py", "v10_b.log", "$kh\src")
|
||||
)
|
||||
# track which eternal_v10 instance slot is alive (both share script name)
|
||||
while ($true) {
|
||||
$alive = Get-CimInstance Win32_Process -Filter "Name='python.exe'" | Where-Object { $_.CommandLine -match 'keyhunter|eternal|validator_loop|gateway_importer' }
|
||||
$aliveCmds = ($alive | ForEach-Object { $_.CommandLine }) -join "`n"
|
||||
foreach ($l in $lanes) {
|
||||
$script = $l[0]; $log = $l[1]; $wd = $l[2]
|
||||
$isV10 = ($script -eq 'eternal_v10.py')
|
||||
if ($isV10) {
|
||||
$n = ([regex]::Matches($aliveCmds, 'eternal_v10')).Count
|
||||
if ($n -ge 1) { continue }
|
||||
$useLog = "v10_re$([guid]::NewGuid().ToString().Substring(0,4)).log"
|
||||
} else {
|
||||
if ($aliveCmds -match [regex]::Escape($script)) { continue }
|
||||
$useLog = $log
|
||||
}
|
||||
try {
|
||||
$p = Start-Process -FilePath $py -ArgumentList "-u", $script -WorkingDirectory $wd `
|
||||
-RedirectStandardOutput "$kh\$useLog" -RedirectStandardError "$kh\err_$useLog" `
|
||||
-WindowStyle Hidden -PassThru
|
||||
$p.PriorityClass = "BelowNormal"
|
||||
Add-Content "$kh\watchdog.log" "$(Get-Date -Format s) REVIVED $script -> $useLog"
|
||||
} catch {
|
||||
Add-Content "$kh\watchdog.log" "$(Get-Date -Format s) FAIL $script $_"
|
||||
}
|
||||
}
|
||||
Start-Sleep -Seconds 300
|
||||
}
|
||||
Reference in New Issue
Block a user