2023-01-10 04:57:58 +03:00
|
|
|
|
param(
|
2019-09-19 19:36:02 +03:00
|
|
|
|
[Parameter(Mandatory = $true)]
|
|
|
|
|
[ValidateNotNullOrEmpty()]
|
|
|
|
|
[string]
|
|
|
|
|
$ProcDumpOutputPath
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
Write-Output "Finishing dump collection for hanging builds.";
|
|
|
|
|
|
|
|
|
|
$repoRoot = Resolve-Path "$PSScriptRoot\..\..";
|
|
|
|
|
$ProcDumpOutputPath = Join-Path $repoRoot $ProcDumpOutputPath;
|
|
|
|
|
|
|
|
|
|
$sentinelFile = Join-Path $ProcDumpOutputPath "dump-sentinel.txt";
|
|
|
|
|
if ((-not (Test-Path $sentinelFile))) {
|
|
|
|
|
Write-Output "No sentinel file available in '$sentinelFile'. " +
|
|
|
|
|
"StartDumpCollectionForHangingBuilds.ps1 has not been executed, is not correctly configured or failed before creating the sentinel file.";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Get-Process "procdump" -ErrorAction SilentlyContinue | ForEach-Object { Write-Output "ProcDump with PID $($_.Id) is still running."; };
|
|
|
|
|
|
|
|
|
|
$capturedDumps = Get-ChildItem $ProcDumpOutputPath -Filter *.dmp;
|
|
|
|
|
$capturedDumps | ForEach-Object { Write-Output "Found captured dump $_"; };
|
|
|
|
|
|
|
|
|
|
$JobName = (Get-Content $sentinelFile);
|
|
|
|
|
|
|
|
|
|
if ($JobName.Count -ne 1) {
|
|
|
|
|
if ($JobName.Count -eq 0) {
|
|
|
|
|
Write-Warning "No job name found. This is likely an error.";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
Write-Output "Multiple job names found '$JobName'.";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$dumpCollectionJob = Get-Job -Name $JobName -ErrorAction SilentlyContinue;
|
|
|
|
|
$registeredJob = Get-ScheduledJob -Name $JobName -ErrorAction SilentlyContinue;
|
|
|
|
|
|
|
|
|
|
if ($null -eq $dumpCollectionJob) {
|
|
|
|
|
Write-Output "No job found for '$JobName'. It either didn't run or there is an issue with the job definition.";
|
|
|
|
|
|
|
|
|
|
if ($null -eq $registeredJob) {
|
|
|
|
|
Write-Warning "Couldn't find a scheduled job '$JobName'.";
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Write-Output "Listing existing jobs";
|
|
|
|
|
Get-Job -Name CaptureDumps*
|
|
|
|
|
|
|
|
|
|
Write-Output "Listing existing scheduled jobs";
|
|
|
|
|
Get-ScheduledJob -Name CaptureDumps*
|
|
|
|
|
|
|
|
|
|
Write-Output "Displaying job output";
|
|
|
|
|
Receive-Job $dumpCollectionJob;
|
|
|
|
|
|
|
|
|
|
Write-Output "Waiting for current job to finish";
|
|
|
|
|
Get-Job -ErrorAction SilentlyContinue | Wait-Job;
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
Write-Output "Removing collection job";
|
|
|
|
|
Remove-Job $dumpCollectionJob;
|
|
|
|
|
}
|
|
|
|
|
catch {
|
|
|
|
|
Write-Output "Failed to remove collection job";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
Write-Output "Unregistering scheduled job";
|
|
|
|
|
Unregister-ScheduledJob $registeredJob;
|
|
|
|
|
}
|
|
|
|
|
catch {
|
|
|
|
|
Write-Output "Failed to unregister $JobName";
|
|
|
|
|
}
|