2019-07-18 11:54:39 -04:00
|
|
|
Import-IcingaLib icinga\enums;
|
2019-07-19 13:38:09 -04:00
|
|
|
Import-IcingaLib core\tools;
|
2019-07-18 11:54:39 -04:00
|
|
|
|
|
|
|
|
function New-IcingaCheckPackage()
|
|
|
|
|
{
|
|
|
|
|
param(
|
|
|
|
|
[string]$Name,
|
|
|
|
|
[switch]$OperatorAnd,
|
|
|
|
|
[switch]$OperatorOr,
|
|
|
|
|
[switch]$OperatorNone,
|
2019-07-19 13:38:09 -04:00
|
|
|
[int]$OperatorMin = -1,
|
|
|
|
|
[int]$OperatorMax = -1,
|
|
|
|
|
[array]$Checks = @(),
|
2019-09-19 05:55:39 -04:00
|
|
|
[int]$Verbose = 0,
|
|
|
|
|
[switch]$Hidden = $FALSE
|
2019-07-18 11:54:39 -04:00
|
|
|
);
|
|
|
|
|
|
|
|
|
|
$Check = New-Object -TypeName PSObject;
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType NoteProperty -Name 'name' -Value $Name;
|
|
|
|
|
$Check | Add-Member -MemberType NoteProperty -Name 'exitcode' -Value -1;
|
|
|
|
|
$Check | Add-Member -MemberType NoteProperty -Name 'verbose' -Value $Verbose;
|
|
|
|
|
$Check | Add-Member -MemberType NoteProperty -Name 'hidden' -Value $Hidden;
|
|
|
|
|
$Check | Add-Member -MemberType NoteProperty -Name 'checks' -Value $Checks;
|
|
|
|
|
$Check | Add-Member -MemberType NoteProperty -Name 'opand' -Value $OperatorAnd;
|
|
|
|
|
$Check | Add-Member -MemberType NoteProperty -Name 'opor' -Value $OperatorOr;
|
|
|
|
|
$Check | Add-Member -MemberType NoteProperty -Name 'opnone' -Value $OperatorNone;
|
|
|
|
|
$Check | Add-Member -MemberType NoteProperty -Name 'opmin' -Value $OperatorMin;
|
|
|
|
|
$Check | Add-Member -MemberType NoteProperty -Name 'opmax' -Value $OperatorMax;
|
|
|
|
|
$Check | Add-Member -MemberType NoteProperty -Name 'spacing' -Value 0;
|
|
|
|
|
$Check | Add-Member -MemberType NoteProperty -Name 'compiled' -Value $FALSE;
|
|
|
|
|
$Check | Add-Member -MemberType NoteProperty -Name 'perfdata' -Value $FALSE;
|
|
|
|
|
$Check | Add-Member -MemberType NoteProperty -Name 'checkcommand' -Value '';
|
|
|
|
|
$Check | Add-Member -MemberType NoteProperty -Name 'headermsg' -Value '';
|
|
|
|
|
$Check | Add-Member -MemberType NoteProperty -Name 'checkpackage' -Value $TRUE;
|
|
|
|
|
$Check | Add-Member -MemberType NoteProperty -Name 'warningchecks' -Value @();
|
|
|
|
|
$Check | Add-Member -MemberType NoteProperty -Name 'criticalchecks' -Value @();
|
|
|
|
|
$Check | Add-Member -MemberType NoteProperty -Name 'unknownchecks' -Value @();
|
|
|
|
|
|
|
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'HasChecks' -Value {
|
2020-03-05 11:04:16 -05:00
|
|
|
if ($this.checks -ne 0) {
|
|
|
|
|
return $TRUE
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'Initialise' -Value {
|
2019-07-19 13:38:09 -04:00
|
|
|
foreach ($check in $this.checks) {
|
2019-07-23 05:42:16 -04:00
|
|
|
$this.InitCheck($check);
|
2019-07-19 13:38:09 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'InitCheck' -Value {
|
2019-08-19 12:07:51 -04:00
|
|
|
param($check);
|
|
|
|
|
|
2019-07-23 05:42:16 -04:00
|
|
|
if ($null -eq $check) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$check.verbose = $this.verbose;
|
|
|
|
|
$check.AddSpacing();
|
|
|
|
|
$check.SilentCompile();
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'AddSpacing' -Value {
|
2019-07-19 13:38:09 -04:00
|
|
|
$this.spacing += 1;
|
2019-07-22 02:37:54 -04:00
|
|
|
foreach ($check in $this.checks) {
|
|
|
|
|
$check.spacing = $this.spacing;
|
|
|
|
|
$check.AddSpacing();
|
|
|
|
|
}
|
2019-07-19 13:38:09 -04:00
|
|
|
}
|
2019-07-18 11:54:39 -04:00
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'AddCheck' -Value {
|
2019-07-22 07:15:44 -04:00
|
|
|
param($check);
|
|
|
|
|
|
2019-07-23 05:42:16 -04:00
|
|
|
if ($null -eq $check) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$this.InitCheck($check);
|
2019-07-22 07:15:44 -04:00
|
|
|
$this.checks += $check;
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'GetWarnings' -Value {
|
2019-10-30 13:17:39 -04:00
|
|
|
foreach ($check in $this.checks) {
|
|
|
|
|
$this.warningchecks += $check.GetWarnings();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $this.warningchecks;
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'GetCriticals' -Value {
|
2019-10-30 13:17:39 -04:00
|
|
|
foreach ($check in $this.checks) {
|
|
|
|
|
$this.criticalchecks += $check.GetCriticals();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $this.criticalchecks;
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'GetUnknowns' -Value {
|
2019-10-30 13:17:39 -04:00
|
|
|
foreach ($check in $this.checks) {
|
|
|
|
|
$this.unknownchecks += $check.GetUnknowns();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $this.unknownchecks;
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'AssignCheckCommand' -Value {
|
2019-09-28 15:45:59 -04:00
|
|
|
param($CheckCommand);
|
|
|
|
|
|
|
|
|
|
$this.checkcommand = $CheckCommand;
|
|
|
|
|
|
|
|
|
|
foreach ($check in $this.checks) {
|
|
|
|
|
$check.AssignCheckCommand($CheckCommand);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'Compile' -Value {
|
2019-07-22 12:03:19 -04:00
|
|
|
param([bool]$Verbose);
|
2019-07-18 11:54:39 -04:00
|
|
|
|
2019-07-19 13:38:09 -04:00
|
|
|
if ($this.compiled) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
2019-07-18 11:54:39 -04:00
|
|
|
|
2019-08-19 12:08:50 -04:00
|
|
|
$this.compiled = $TRUE;
|
|
|
|
|
|
2019-07-24 07:01:50 -04:00
|
|
|
if ($this.checks.Count -ne 0) {
|
|
|
|
|
if ($this.opand) {
|
|
|
|
|
if ($this.CheckAllOk() -eq $FALSE) {
|
|
|
|
|
$this.GetWorstExitCode();
|
|
|
|
|
}
|
2020-08-04 08:48:32 -04:00
|
|
|
} elseif ($this.opor) {
|
2019-07-24 07:01:50 -04:00
|
|
|
if ($this.CheckOneOk() -eq $FALSE) {
|
|
|
|
|
$this.GetWorstExitCode();
|
|
|
|
|
}
|
2020-08-04 08:48:32 -04:00
|
|
|
} elseif ($this.opnone) {
|
2019-07-24 07:01:50 -04:00
|
|
|
if ($this.CheckOneOk() -eq $TRUE) {
|
|
|
|
|
$this.GetWorstExitCode();
|
|
|
|
|
$this.exitcode = $IcingaEnums.IcingaExitCode.Critical;
|
|
|
|
|
} else {
|
|
|
|
|
$this.exitcode = $IcingaEnums.IcingaExitCode.Ok;
|
|
|
|
|
}
|
2020-08-04 08:48:32 -04:00
|
|
|
} elseif ([int]$this.opmin -ne -1) {
|
2019-07-24 07:01:50 -04:00
|
|
|
if ($this.CheckMinimumOk() -eq $FALSE) {
|
|
|
|
|
$this.GetWorstExitCode();
|
|
|
|
|
} else {
|
|
|
|
|
$this.exitcode = $IcingaEnums.IcingaExitCode.Ok;
|
|
|
|
|
}
|
2020-08-04 08:48:32 -04:00
|
|
|
} elseif ([int]$this.opmax -ne -1) {
|
2019-07-24 07:01:50 -04:00
|
|
|
if ($this.CheckMaximumOk() -eq $FALSE) {
|
|
|
|
|
$this.GetWorstExitCode();
|
|
|
|
|
} else {
|
|
|
|
|
$this.exitcode = $IcingaEnums.IcingaExitCode.Ok;
|
|
|
|
|
}
|
2019-07-18 11:54:39 -04:00
|
|
|
}
|
2019-07-24 07:01:50 -04:00
|
|
|
} else {
|
|
|
|
|
$this.exitcode = $IcingaEnums.IcingaExitCode.Unknown;
|
2019-07-18 11:54:39 -04:00
|
|
|
}
|
|
|
|
|
|
2019-07-19 13:38:09 -04:00
|
|
|
if ([int]$this.exitcode -eq -1) {
|
|
|
|
|
$this.exitcode = $IcingaEnums.IcingaExitCode.Ok;
|
2019-07-18 11:54:39 -04:00
|
|
|
}
|
|
|
|
|
|
2019-08-19 12:08:50 -04:00
|
|
|
if ($Verbose -eq $TRUE) {
|
2019-07-19 13:38:09 -04:00
|
|
|
$this.PrintOutputMessages();
|
|
|
|
|
}
|
|
|
|
|
|
2019-07-18 11:54:39 -04:00
|
|
|
return $this.exitcode;
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'SilentCompile' -Value {
|
2019-07-22 12:03:19 -04:00
|
|
|
$this.Compile($FALSE) | Out-Null;
|
2019-07-18 11:54:39 -04:00
|
|
|
}
|
|
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'GetOkCount' -Value {
|
2019-07-18 11:54:39 -04:00
|
|
|
[int]$okCount = 0;
|
|
|
|
|
foreach ($check in $this.checks) {
|
|
|
|
|
if ([int]$check.exitcode -eq [int]$IcingaEnums.IcingaExitCode.Ok) {
|
|
|
|
|
$okCount += 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $okCount;
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'CheckMinimumOk' -Value {
|
2019-07-19 14:02:09 -04:00
|
|
|
if ($this.opmin -gt $this.checks.Count) {
|
2020-08-04 08:48:32 -04:00
|
|
|
Write-IcingaPluginOutput (
|
|
|
|
|
[string]::Format(
|
|
|
|
|
'Unknown: The minimum argument ({0}) is exceeding the amount of assigned checks ({1}) to this package "{2}"',
|
|
|
|
|
$this.opmin, $this.checks.Count, $this.name
|
|
|
|
|
)
|
|
|
|
|
);
|
2019-07-19 14:02:09 -04:00
|
|
|
$this.exitcode = $IcingaEnums.IcingaExitCode.Unknown;
|
|
|
|
|
return $FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
2019-07-18 11:54:39 -04:00
|
|
|
[int]$okCount = $this.GetOkCount();
|
|
|
|
|
|
|
|
|
|
if ($this.opmin -le $okCount) {
|
|
|
|
|
return $TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'CheckMaximumOk' -Value {
|
2019-07-19 14:02:09 -04:00
|
|
|
if ($this.opmax -gt $this.checks.Count) {
|
2020-08-04 08:48:32 -04:00
|
|
|
Write-IcingaPluginOutput (
|
|
|
|
|
[string]::Format(
|
|
|
|
|
'Unknown: The maximum argument ({0}) is exceeding the amount of assigned checks ({1}) to this package "{2}"',
|
|
|
|
|
$this.opmax, $this.checks.Count, $this.name
|
|
|
|
|
)
|
|
|
|
|
);
|
2019-07-19 14:02:09 -04:00
|
|
|
$this.exitcode = $IcingaEnums.IcingaExitCode.Unknown;
|
|
|
|
|
return $FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
2019-07-18 11:54:39 -04:00
|
|
|
[int]$okCount = $this.GetOkCount();
|
|
|
|
|
|
|
|
|
|
if ($this.opmax -ge $okCount) {
|
|
|
|
|
return $TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'CheckAllOk' -Value {
|
2019-07-18 11:54:39 -04:00
|
|
|
foreach ($check in $this.checks) {
|
|
|
|
|
if ([int]$check.exitcode -ne [int]$IcingaEnums.IcingaExitCode.Ok) {
|
|
|
|
|
return $FALSE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'CheckOneOk' -Value {
|
2019-07-18 11:54:39 -04:00
|
|
|
foreach ($check in $this.checks) {
|
|
|
|
|
if ([int]$check.exitcode -eq [int]$IcingaEnums.IcingaExitCode.Ok) {
|
|
|
|
|
$this.exitcode = $check.exitcode;
|
|
|
|
|
return $TRUE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'GetPackageConfigMessage' -Value {
|
2019-07-18 11:54:39 -04:00
|
|
|
if ($this.opand) {
|
|
|
|
|
return 'Match All';
|
|
|
|
|
} elseif ($this.opor) {
|
|
|
|
|
return 'Match Any';
|
|
|
|
|
} elseif ($this.opnone) {
|
|
|
|
|
return 'Match None';
|
|
|
|
|
} elseif ([int]$this.opmin -ne -1) {
|
|
|
|
|
return [string]::Format('Minimum {0}', $this.opmin)
|
|
|
|
|
} elseif ([int]$this.opmax -ne -1) {
|
|
|
|
|
return [string]::Format('Maximum {0}', $this.opmax)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'PrintOutputMessageSorted' -Value {
|
2019-10-30 13:17:39 -04:00
|
|
|
param($skipHidden, $skipExitCode);
|
|
|
|
|
|
|
|
|
|
if ($this.hidden -And $skipHidden) {
|
2019-09-19 05:55:39 -04:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2019-09-13 14:44:15 -04:00
|
|
|
[hashtable]$MessageOrdering = @{};
|
2019-07-18 11:54:39 -04:00
|
|
|
foreach ($check in $this.checks) {
|
2019-10-30 13:17:39 -04:00
|
|
|
if ([int]$check.exitcode -eq $skipExitCode -And $skipExitCode -ne -1) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
2019-09-19 05:56:06 -04:00
|
|
|
if ($MessageOrdering.ContainsKey($check.Name) -eq $FALSE) {
|
|
|
|
|
$MessageOrdering.Add($check.name, $check);
|
|
|
|
|
} else {
|
|
|
|
|
[int]$DuplicateKeyIndex = 1;
|
|
|
|
|
while ($TRUE) {
|
|
|
|
|
$newCheckName = [string]::Format('{0}[{1}]', $check.Name, $DuplicateKeyIndex);
|
|
|
|
|
if ($MessageOrdering.ContainsKey($newCheckName) -eq $FALSE) {
|
|
|
|
|
$MessageOrdering.Add($newCheckName, $check);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
$DuplicateKeyIndex += 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
2019-09-13 14:44:15 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$SortedArray = $MessageOrdering.GetEnumerator() | Sort-Object name;
|
|
|
|
|
|
|
|
|
|
foreach ($entry in $SortedArray) {
|
|
|
|
|
$entry.Value.PrintAllMessages();
|
2019-07-19 13:38:09 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'WriteAllOutput' -Value {
|
2019-10-30 13:17:39 -04:00
|
|
|
$this.PrintOutputMessageSorted($TRUE, -1);
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'PrintAllMessages' -Value {
|
2019-07-19 13:38:09 -04:00
|
|
|
$this.WritePackageOutputStatus();
|
|
|
|
|
$this.WriteAllOutput();
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'WriteCheckErrors' -Value {
|
2019-10-30 13:17:39 -04:00
|
|
|
$this.PrintOutputMessageSorted($FALSE, $IcingaEnums.IcingaExitCode.Ok);
|
2019-07-19 13:38:09 -04:00
|
|
|
}
|
|
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'PrintNoChecksConfigured' -Value {
|
2019-07-24 07:01:50 -04:00
|
|
|
if ($this.checks.Count -eq 0) {
|
2019-09-28 15:45:59 -04:00
|
|
|
Write-IcingaPluginOutput (
|
2019-07-24 07:01:50 -04:00
|
|
|
[string]::Format(
|
2019-10-30 13:17:39 -04:00
|
|
|
'{0}{1} No checks configured for package "{2}"',
|
2019-07-24 07:01:50 -04:00
|
|
|
(New-StringTree ($this.spacing + 1)),
|
|
|
|
|
$IcingaEnums.IcingaExitCodeText.($this.exitcode),
|
|
|
|
|
$this.name
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'WritePackageOutputStatus' -Value {
|
2019-09-19 05:55:39 -04:00
|
|
|
if ($this.hidden) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-30 13:17:39 -04:00
|
|
|
[string]$outputMessage = '{0}{1} Check package "{2}"';
|
2019-07-19 13:38:09 -04:00
|
|
|
if ($this.verbose -ne 0) {
|
|
|
|
|
$outputMessage += ' ({3})';
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-30 13:17:39 -04:00
|
|
|
if ($this.exitcode -ne 0 -And $this.spacing -eq 0) {
|
|
|
|
|
$outputMessage += ' - {4}';
|
|
|
|
|
}
|
|
|
|
|
|
2019-09-28 15:45:59 -04:00
|
|
|
Write-IcingaPluginOutput (
|
2019-07-19 13:38:09 -04:00
|
|
|
[string]::Format(
|
|
|
|
|
$outputMessage,
|
|
|
|
|
(New-StringTree $this.spacing),
|
|
|
|
|
$IcingaEnums.IcingaExitCodeText.($this.exitcode),
|
|
|
|
|
$this.name,
|
2019-10-30 13:17:39 -04:00
|
|
|
$this.GetPackageConfigMessage(),
|
|
|
|
|
$this.headermsg
|
2019-07-19 13:38:09 -04:00
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'PrintOutputMessages' -Value {
|
2019-07-19 13:38:09 -04:00
|
|
|
[bool]$printAll = $FALSE;
|
2019-08-19 12:08:50 -04:00
|
|
|
|
2019-07-19 13:38:09 -04:00
|
|
|
switch ($this.verbose) {
|
2020-08-04 08:48:32 -04:00
|
|
|
0 {
|
2019-10-30 13:17:39 -04:00
|
|
|
# Default value. Only print a package but not the services include
|
2020-08-04 08:48:32 -04:00
|
|
|
break;
|
2019-10-30 13:17:39 -04:00
|
|
|
};
|
2020-08-04 08:48:32 -04:00
|
|
|
1 {
|
2019-10-30 13:17:39 -04:00
|
|
|
# Include the Operator into the check package result
|
2019-07-19 13:38:09 -04:00
|
|
|
break;
|
|
|
|
|
};
|
|
|
|
|
Default {
|
|
|
|
|
$printAll = $TRUE;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
2019-07-24 07:01:50 -04:00
|
|
|
|
2019-07-19 13:38:09 -04:00
|
|
|
$this.WritePackageOutputStatus();
|
|
|
|
|
|
|
|
|
|
if ($printAll) {
|
|
|
|
|
$this.WriteAllOutput();
|
2019-07-24 07:01:50 -04:00
|
|
|
$this.PrintNoChecksConfigured();
|
2019-10-30 13:17:39 -04:00
|
|
|
} else {
|
2019-07-19 13:38:09 -04:00
|
|
|
if ([int]$this.exitcode -ne $IcingaEnums.IcingaExitCode.Ok) {
|
|
|
|
|
$this.WriteCheckErrors();
|
2019-07-24 07:01:50 -04:00
|
|
|
$this.PrintNoChecksConfigured();
|
2019-07-19 13:38:09 -04:00
|
|
|
}
|
2019-07-18 11:54:39 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'AddUniqueSortedChecksToHeader' -Value {
|
2019-10-30 13:17:39 -04:00
|
|
|
param($checkarray, $state);
|
|
|
|
|
|
|
|
|
|
[hashtable]$CheckHash = @{};
|
|
|
|
|
|
|
|
|
|
foreach ($entry in $checkarray) {
|
|
|
|
|
if ($CheckHash.ContainsKey($entry) -eq $FALSE) {
|
|
|
|
|
$CheckHash.Add($entry, $TRUE);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[array]$SortedCheckArray = $CheckHash.GetEnumerator() | Sort-Object name;
|
|
|
|
|
|
|
|
|
|
if ($SortedCheckArray.Count -ne 0) {
|
|
|
|
|
$this.headermsg += [string]::Format(
|
|
|
|
|
'{0} {1} ',
|
|
|
|
|
$IcingaEnums.IcingaExitCodeText[$state],
|
|
|
|
|
[string]::Join(', ', $SortedCheckArray.Key)
|
2020-08-04 08:48:32 -04:00
|
|
|
);
|
2019-10-30 13:17:39 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'GetWorstExitCode' -Value {
|
2019-07-19 14:02:09 -04:00
|
|
|
if ([int]$this.exitcode -eq [int]$IcingaEnums.IcingaExitCode.Unknown) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
2019-10-30 13:17:39 -04:00
|
|
|
|
2019-07-18 11:54:39 -04:00
|
|
|
foreach ($check in $this.checks) {
|
|
|
|
|
if ([int]$this.exitcode -lt $check.exitcode) {
|
|
|
|
|
$this.exitcode = $check.exitcode;
|
|
|
|
|
}
|
2019-10-30 13:17:39 -04:00
|
|
|
|
|
|
|
|
$this.criticalchecks += $check.GetCriticals();
|
|
|
|
|
$this.warningchecks += $check.GetWarnings();
|
|
|
|
|
$this.unknownchecks += $check.GetUnknowns();
|
2019-07-18 11:54:39 -04:00
|
|
|
}
|
2019-10-30 13:17:39 -04:00
|
|
|
|
|
|
|
|
# Only apply this to our top package
|
|
|
|
|
if ($this.spacing -ne 0) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$this.AddUniqueSortedChecksToHeader(
|
|
|
|
|
$this.criticalchecks, $IcingaEnums.IcingaExitCode.Critical
|
|
|
|
|
);
|
|
|
|
|
$this.AddUniqueSortedChecksToHeader(
|
|
|
|
|
$this.warningchecks, $IcingaEnums.IcingaExitCode.Warning
|
|
|
|
|
);
|
|
|
|
|
$this.AddUniqueSortedChecksToHeader(
|
|
|
|
|
$this.unknownchecks, $IcingaEnums.IcingaExitCode.Unknown
|
|
|
|
|
);
|
2019-07-19 13:38:09 -04:00
|
|
|
}
|
2019-07-18 11:54:39 -04:00
|
|
|
|
2020-08-04 08:48:32 -04:00
|
|
|
$Check | Add-Member -MemberType ScriptMethod -Name 'GetPerfData' -Value {
|
2019-09-13 14:44:15 -04:00
|
|
|
[string]$perfData = '';
|
|
|
|
|
[hashtable]$CollectedPerfData = @{};
|
|
|
|
|
|
|
|
|
|
# At first lets collect all perf data, but ensure we only add possible label duplication only once
|
2019-07-19 13:38:09 -04:00
|
|
|
foreach ($check in $this.checks) {
|
2019-09-13 14:44:15 -04:00
|
|
|
$data = $check.GetPerfData();
|
|
|
|
|
|
|
|
|
|
if ($null -eq $data -Or $null -eq $data.label) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($CollectedPerfData.ContainsKey($data.label)) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
2019-09-28 15:45:59 -04:00
|
|
|
$CollectedPerfData.Add($data.label, $data);
|
2019-09-13 14:44:15 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Now sort the label output by name
|
|
|
|
|
$SortedArray = $CollectedPerfData.GetEnumerator() | Sort-Object name;
|
|
|
|
|
|
|
|
|
|
# Buold the performance data output based on the sorted result
|
|
|
|
|
foreach ($entry in $SortedArray) {
|
|
|
|
|
$perfData += $entry.Value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return @{
|
|
|
|
|
'label' = $this.name;
|
2019-09-28 15:45:59 -04:00
|
|
|
'perfdata' = $CollectedPerfData;
|
|
|
|
|
'package' = $TRUE;
|
2019-07-18 11:54:39 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-07-19 13:38:09 -04:00
|
|
|
$Check.Initialise();
|
|
|
|
|
|
2019-07-18 11:54:39 -04:00
|
|
|
return $Check;
|
|
|
|
|
}
|