mirror of
https://github.com/Icinga/icinga-powershell-framework.git
synced 2025-12-20 23:00:35 -05:00
99 lines
4.1 KiB
PowerShell
99 lines
4.1 KiB
PowerShell
function Start-IcingaPowerShellDaemon()
|
|
{
|
|
param (
|
|
[switch]$RunAsService = $FALSE,
|
|
[switch]$JEARestart = $FALSE
|
|
);
|
|
|
|
Start-IcingaForWindowsDaemon -RunAsService:$RunAsService -JEARestart:$JEARestart;
|
|
}
|
|
|
|
function Start-IcingaForWindowsDaemon()
|
|
{
|
|
param (
|
|
[switch]$RunAsService = $FALSE,
|
|
[switch]$JEARestart = $FALSE
|
|
);
|
|
|
|
$Global:Icinga.Protected.RunAsDaemon = $TRUE;
|
|
[string]$MainServicePidFile = (Join-Path -Path (Get-IcingaCacheDir) -ChildPath 'service.pid');
|
|
[string]$JeaPidFile = (Join-Path -Path (Get-IcingaCacheDir) -ChildPath 'jea.pid');
|
|
[string]$JeaProfile = Get-IcingaPowerShellConfig -Path 'Framework.JEAProfile';
|
|
[Security.Cryptography.X509Certificates.X509Certificate2]$Certificate = Get-IcingaForWindowsCertificate;
|
|
[string]$JeaPid = '';
|
|
|
|
if (Test-IcingaJEAServiceRunning) {
|
|
Write-IcingaEventMessage -EventId 1503 -Namespace 'Framework';
|
|
exit 1;
|
|
}
|
|
|
|
Write-IcingaFileSecure -File ($MainServicePidFile) -Value $PID;
|
|
|
|
if ([string]::IsNullOrEmpty($JeaProfile)) {
|
|
Write-IcingaDebugMessage -Message 'Starting Icinga for Windows service without JEA context' -Objects $RunAsService, $JEARestart, $JeaProfile;
|
|
|
|
$Global:Icinga.Protected.RunAsDaemon = $TRUE;
|
|
# Todo: Add config for active background tasks. Set it to 20 for the moment
|
|
Add-IcingaThreadPool -Name 'MainPool' -MaxInstances 20;
|
|
$Global:Icinga.Public.Add('SSLCertificate', $Certificate);
|
|
|
|
|
|
New-IcingaThreadInstance -Name "Main" -ThreadPool (Get-IcingaThreadPool -Name 'MainPool') -Command 'Add-IcingaForWindowsDaemon' -Start;
|
|
} else {
|
|
Write-IcingaDebugMessage -Message 'Starting Icinga for Windows service inside JEA context' -Objects $RunAsService, $JEARestart, $JeaProfile;
|
|
& powershell.exe -NoProfile -NoLogo -ConfigurationName $JeaProfile -Command {
|
|
try {
|
|
Use-Icinga -Daemon;
|
|
|
|
Write-IcingaFileSecure -File ($args[1]) -Value $PID;
|
|
|
|
$Global:Icinga.Protected.JEAContext = $TRUE;
|
|
$Global:Icinga.Protected.RunAsDaemon = $TRUE;
|
|
# Todo: Add config for active background tasks. Set it to 20 for the moment
|
|
Add-IcingaThreadPool -Name 'MainPool' -MaxInstances 20;
|
|
$Global:Icinga.Public.Add('SSLCertificate', $args[0]);
|
|
|
|
New-IcingaThreadInstance -Name "Main" -ThreadPool (Get-IcingaThreadPool -Name 'MainPool') -Command 'Add-IcingaForWindowsDaemon' -Start;
|
|
|
|
while ($TRUE) {
|
|
Start-Sleep -Seconds 100;
|
|
}
|
|
} catch {
|
|
Write-IcingaEventMessage -EventId 1600 -Namespace 'Framework' -ExceptionObject $_;
|
|
}
|
|
} -Args $Certificate, $JeaPidFile;
|
|
}
|
|
|
|
if ($JEARestart) {
|
|
return;
|
|
}
|
|
|
|
if ($RunAsService) {
|
|
[int]$JeaRestartCounter = 1;
|
|
while ($TRUE) {
|
|
if ([string]::IsNullOrEmpty($JeaProfile) -eq $FALSE) {
|
|
if ([string]::IsNullOrEmpty($JeaPid)) {
|
|
[string]$JeaPid = Get-IcingaJEAServicePid;
|
|
}
|
|
|
|
if ((Test-IcingaJEAServiceRunning -JeaPid $JeaPid) -eq $FALSE) {
|
|
if ($JeaRestartCounter -gt 5) {
|
|
Write-IcingaEventMessage -EventId 1504 -Namespace Framework;
|
|
exit 1;
|
|
}
|
|
|
|
Write-IcingaFileSecure -File $JeaPidFile -Value '';
|
|
Write-IcingaEventMessage -EventId 1505 -Namespace Framework -Objects ([string]::Format('{0}/5', $JeaRestartCounter));
|
|
Start-IcingaForWindowsDaemon -RunAsService:$RunAsService -JEARestart;
|
|
|
|
$JeaRestartCounter += 1;
|
|
$JeaPid = '';
|
|
}
|
|
|
|
Start-Sleep -Seconds 5;
|
|
continue;
|
|
}
|
|
Start-Sleep -Seconds 100;
|
|
}
|
|
}
|
|
}
|