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 4f811bc commit f377a9e
Show file tree
Hide file tree
Showing 5 changed files with 74 additions and 0 deletions.
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 f377a9e

Please sign in to comment.