| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- param(
- [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";
- }
|