lib/core/framework/New-IcingaCheckSchedulerEnvironment.psm1

<#
.SYNOPSIS
   Create a new environment in which we can store check results, performance data
   and values over time or executed plugins.

   Usage:

   Access the string plugin output by calling `Get-IcingaCheckSchedulerPluginOutput`
   Access possible performance data with `Get-IcingaCheckSchedulerPerfData`

   If you execute check plugins, ensure you read both of these functions to fetch the
   result of the plugin call and to clear the stack and memory of the check data.

   If you do not require the output, you can write them to Null

   Get-IcingaCheckSchedulerPluginOutput | Out-Null;
   Get-IcingaCheckSchedulerPerfData | Out-Null;

   IMPORTANT:
   In addition each value for each object created with `New-IcingaCheck` is stored
   with a timestamp for the check command inside a hashtable. If you do not require
   these data, you MUST call `Clear-IcingaCheckSchedulerCheckData` to free memory
   and clear data from the stack!

   If you are finished with all data processing and do not require anything within
   memory anyway, you can safely call `Clear-IcingaCheckSchedulerEnvironment` to
   do the same thing in one call.
.DESCRIPTION
   Fetch the raw output values for a check command for each single object
   processed by New-IcingaCheck
.FUNCTIONALITY
   Fetch the raw output values for a check command for each single object
   processed by New-IcingaCheck
.OUTPUTS
   System.Object
.LINK
   https://github.com/Icinga/icinga-powershell-framework
#>


function New-IcingaCheckSchedulerEnvironment()
{
    # Legacy code
    if ($IcingaDaemonData.IcingaThreadContent.ContainsKey('Scheduler') -eq $FALSE) {
        $IcingaDaemonData.IcingaThreadContent.Add('Scheduler', @{ });
    }

    if ($null -eq $global:Icinga) {
        $global:Icinga = @{ };
    }

    if ($global:Icinga.ContainsKey('CheckResults') -eq $FALSE) {
        $global:Icinga.Add('CheckResults', @());
    }
    if ($global:Icinga.ContainsKey('PerfData') -eq $FALSE) {
        $global:Icinga.Add('PerfData', @());
    }
    if ($global:Icinga.ContainsKey('CheckData') -eq $FALSE) {
        $global:Icinga.Add('CheckData', @{ });
    }
}