icinga-powershell-framework/lib/icinga/plugin/Write-IcingaPluginPerfData.psm1

79 lines
2.7 KiB
PowerShell
Raw Normal View History

function Write-IcingaPluginPerfData()
{
2021-05-07 08:38:10 -04:00
param (
$IcingaCheck = $null
);
2021-05-07 08:38:10 -04:00
if ($null -eq $IcingaCheck) {
return;
}
$PerformanceData = $IcingaCheck.__GetPerformanceData();
$CheckCommand = $IcingaCheck.__GetCheckCommand();
if ($PerformanceData.package -eq $FALSE) {
$PerformanceData = @{
$PerformanceData.label = $PerformanceData;
}
} else {
$PerformanceData = $PerformanceData.perfdata;
}
2021-05-07 08:38:10 -04:00
$CheckResultCache = $Global:Icinga.ThresholdCache[$CheckCommand];
if ($global:IcingaDaemonData.FrameworkRunningAsDaemon -eq $FALSE) {
2021-05-07 08:38:10 -04:00
[string]$PerfDataOutput = (Get-IcingaPluginPerfDataContent -PerfData $PerformanceData -CheckResultCache $CheckResultCache -IcingaCheck $IcingaCheck);
Write-IcingaConsolePlain ([string]::Format('| {0}', $PerfDataOutput));
} else {
2021-05-07 08:38:10 -04:00
[void](Get-IcingaPluginPerfDataContent -PerfData $PerformanceData -CheckResultCache $CheckResultCache -AsObject $TRUE -IcingaCheck $IcingaCheck);
}
}
function Get-IcingaPluginPerfDataContent()
{
param(
$PerfData,
$CheckResultCache,
2021-05-07 08:38:10 -04:00
[bool]$AsObject = $FALSE,
$IcingaCheck = $null
);
[string]$PerfDataOutput = '';
foreach ($package in $PerfData.Keys) {
$data = $PerfData[$package];
if ($data.package) {
2021-05-07 08:38:10 -04:00
$PerfDataOutput += (Get-IcingaPluginPerfDataContent -PerfData $data.perfdata -CheckResultCache $CheckResultCache -AsObject $AsObject -IcingaCheck $IcingaCheck);
} else {
foreach ($checkresult in $CheckResultCache.PSobject.Properties) {
2021-05-07 08:38:10 -04:00
$SearchPattern = [string]::Format('{0}_', $data.label);
$SearchEntry = $checkresult.Name;
if ($SearchEntry -like "$SearchPattern*") {
2021-05-07 08:38:10 -04:00
$TimeSpan = $IcingaCheck.__GetTimeSpanThreshold($SearchEntry, $data.label);
$cachedresult = (New-IcingaPerformanceDataEntry -PerfDataObject $data -Label $SearchEntry -Value $checkresult.Value -Warning $TimeSpan.Warning -Critical $TimeSpan.Critical);
if ($AsObject) {
# New behavior with local thread separated results
$global:Icinga.PerfData += $cachedresult;
}
$PerfDataOutput += $cachedresult;
}
}
$compiledPerfData = (New-IcingaPerformanceDataEntry $data);
if ($AsObject) {
# New behavior with local thread separated results
$global:Icinga.PerfData += $compiledPerfData;
}
$PerfDataOutput += $compiledPerfData;
}
}
return $PerfDataOutput;
}
Export-ModuleMember -Function @( 'Write-IcingaPluginPerfData' );