Skip to content

Commit

Permalink
Adds feature to set process priority for Icinga for Windows to BelowN…
Browse files Browse the repository at this point in the history
…ormal for improved Host performance
  • Loading branch information
LordHepipud committed Sep 19, 2024
1 parent d9ba095 commit 0b0eafc
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 0 deletions.
2 changes: 2 additions & 0 deletions doc/100-General/10-Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ Released closed milestones can be found on [GitHub](https://github.com/Icinga/ic

### Enhancements

* [#756](https://github.com/Icinga/icinga-powershell-framework/pull/756) Adds feature to set process priority for Icinga for Windows to BelowNormal for improved Host performance

## 1.13.0 Beta-1 (2024-08-30)

[Issues and PRs](https://github.com/Icinga/icinga-powershell-framework/milestone/32)
Expand Down
22 changes: 22 additions & 0 deletions jobs/SetProcessPriority.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Load the basic framework data
Use-Icinga -Minimal;

# Wait 10 seconds before procedding
Start-Sleep -Seconds 10;

# Fetch the process information for JEA and the Icinga for Windows PID
$JeaProcess = Get-Process -Id (Get-IcingaJEAServicePid) -ErrorAction SilentlyContinue;
$IfWProcess = Get-Process -Id (Get-IcingaForWindowsServicePid) -ErrorAction SilentlyContinue;

# Set the JEA pid to below normal
if ($null -ne $JeaProcess -And $JeaProcess.ProcessName -eq 'wsmprovhost') {
$JeaProcess.PriorityClass = 'BelowNormal';
}

# Set the Icinga for Windows pid to below normal
if ($null -ne $IfWProcess -And $IfWProcess.ProcessName -eq 'powershell') {
$IfWProcess.PriorityClass = 'BelowNormal';
}

# Exit with okay
exit 0;
11 changes: 11 additions & 0 deletions lib/core/framework/Invoke-IcingaForWindowsMigration.psm1
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,18 @@ function Invoke-IcingaForWindowsMigration()
Start-IcingaWindowsScheduledTaskRenewCertificate;
# Ensure the Icinga Agent is not spamming the Application log by default
Write-IcingaAgentEventLogConfig -Severity 'warning';
# Set our newly added process update task
Register-IcingaWindowsScheduledTaskProcessPriority -Force;

Set-IcingaForWindowsMigration -MigrationVersion (New-IcingaVersionObject -Version '1.13.0');
}

if (Test-IcingaForWindowsMigration -MigrationVersion (New-IcingaVersionObject -Version '1.13.0.1')) {
Write-IcingaConsoleNotice 'Applying pending migrations required for Icinga for Windows v1.13.0.1';

# Set our newly added process update task
Register-IcingaWindowsScheduledTaskProcessPriority -Force;

Set-IcingaForWindowsMigration -MigrationVersion (New-IcingaVersionObject -Version '1.13.0.1');
}
}
2 changes: 2 additions & 0 deletions lib/core/windows/Restart-IcingaWindowsService.psm1
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ function Restart-IcingaForWindows()
}

Restart-IcingaService -Service 'icingapowershell';
# Update the process priority after each restart
Start-IcingaWindowsScheduledTaskProcessPriority;
}

Set-Alias -Name 'Restart-IcingaWindowsService' -Value 'Restart-IcingaForWindows';
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
function Register-IcingaWindowsScheduledTaskProcessPriority()
{
param (
[switch]$Force = $FALSE
);

[string]$TaskName = 'Set Process Priority';
[string]$TaskPath = '\Icinga\Icinga for Windows\';

$SetProcessPriorityTask = Get-ScheduledTask -TaskName $TaskName -TaskPath $TaskPath -ErrorAction SilentlyContinue;

if ($null -ne $SetProcessPriorityTask -And $Force -eq $FALSE) {
Write-IcingaConsoleWarning -Message 'The {0} task is already present. User -Force to enforce the re-creation' -Objects $TaskName;
return;
}

$ScriptPath = Join-Path -Path (Get-IcingaFrameworkRootPath) -ChildPath '\jobs\SetProcessPriority.ps1';
$TaskAction = New-ScheduledTaskAction -Execute 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe' -Argument ([string]::Format("-WindowStyle Hidden -Command &{{ & '{0}' }}", $ScriptPath));
$TaskPrincipal = New-ScheduledTaskPrincipal -UserId 'S-1-5-18' -RunLevel 'Highest' -LogonType ServiceAccount;
$TaskSettings = New-ScheduledTaskSettingsSet -DontStopIfGoingOnBatteries -AllowStartIfOnBatteries -StartWhenAvailable;

Register-ScheduledTask -TaskName $TaskName -TaskPath $TaskPath -Force -Principal $TaskPrincipal -Action $TaskAction -Settings $TaskSettings | Out-Null;

Write-IcingaConsoleNotice -Message 'The task "{0}" has been successfully registered at location "{1}".' -Objects $TaskName, $TaskPath;
}
14 changes: 14 additions & 0 deletions lib/core/wintasks/daemon/Start-TaskSetProcessPriority.psm1
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
function Start-IcingaWindowsScheduledTaskProcessPriority()
{
[string]$TaskName = 'Set Process Priority';
[string]$TaskPath = '\Icinga\Icinga for Windows\';

$SetProcessPriorityTask = Get-ScheduledTask -TaskName $TaskName -TaskPath $TaskPath -ErrorAction SilentlyContinue;

if ($null -eq $SetProcessPriorityTask) {
Write-IcingaConsoleNotice -Message 'The "{0}" task is not present on this system.' -Objects $TaskName;
return;
}

Start-ScheduledTask -TaskName $TaskName -TaskPath $TaskPath;
}

0 comments on commit 0b0eafc

Please sign in to comment.