diff --git a/lib/plugins/Invoke-IcingaCheckProcessCount.psm1 b/lib/plugins/Invoke-IcingaCheckProcessCount.psm1 new file mode 100644 index 0000000..0efd0f0 --- /dev/null +++ b/lib/plugins/Invoke-IcingaCheckProcessCount.psm1 @@ -0,0 +1,34 @@ +Import-IcingaLib provider\process; +Import-IcingaLib icinga\plugin; + +function Invoke-IcingaCheckProcessCount() +{ + param( + $Warning, + $Critical, + [array]$Process, + [switch]$NoPerfData, + $Verbose + ); + + $ProcessInformation = (Get-IcingaProcessData -Name $Process) + + $ProcessPackage = New-icingaCheckPackage -Name "Process Check" -OperatorAnd -Verbose $Verbose -NoPerfData $NoPerfData; + + if ($Process.Count -eq 0) { + $ProcessCount = $ProcessInformation['Process Count']; + $IcingaCheck = New-IcingaCheck -Name ([string]::Format('Process Count')) -Value $ProcessCount; + $IcingaCheck.WarnOutOfRange($Warning).CritOutOfRange($Critical) | Out-Null; + $ProcessPackage.AddCheck($IcingaCheck); + } else { + foreach ($proc in $process) { + $ProcessCount = $ProcessInformation."Processes".$proc.processlist.Count; + $IcingaCheck = New-IcingaCheck -Name ([string]::Format('Process Count "{0}"', $proc)) -Value $ProcessCount; + $IcingaCheck.WarnOutOfRange($Warning).CritOutOfRange($Critical) | Out-Null; + $ProcessPackage.AddCheck($IcingaCheck); + } + } + + + exit (New-IcingaCheckResult -Check $ProcessPackage -NoPerfData $NoPerfData -Compile); +} diff --git a/lib/plugins/Invoke-IcingaCheckService.psm1 b/lib/plugins/Invoke-IcingaCheckService.psm1 index 8d20e07..86cc058 100644 --- a/lib/plugins/Invoke-IcingaCheckService.psm1 +++ b/lib/plugins/Invoke-IcingaCheckService.psm1 @@ -17,5 +17,5 @@ function Invoke-IcingaCheckService() $IcingaCheck = New-IcingaCheck -Name $ServiceName -Value $StatusRaw -ObjectExists $FoundService -Translation $ProviderEnums.ServiceStatusName; $IcingaCheck.CritIfNotMatch($Status) | Out-Null; - exit (New-IcingaCheckResult -Name "Service $Service" -Check $IcingaCheck -NoPerfData $TRUE -Compile); + exit (New-IcingaCheckResult -Check $IcingaCheck -NoPerfData $TRUE -Compile); } diff --git a/lib/plugins/Invoke-IcingaCheckUsedPartitionSpace.psm1 b/lib/plugins/Invoke-IcingaCheckUsedPartitionSpace.psm1 index 6fa57f8..5c05c86 100644 --- a/lib/plugins/Invoke-IcingaCheckUsedPartitionSpace.psm1 +++ b/lib/plugins/Invoke-IcingaCheckUsedPartitionSpace.psm1 @@ -13,8 +13,7 @@ function Invoke-IcingaCheckUsedPartitionSpace() ); $DiskFree = Get-IcingaDiskPartitions; - $DiskPackage = New-IcingaCheckPackage -Name 'Free Disk Space' -OperatorAnd -Verbos $Verbose; - [array]$CheckedPartitions; + $DiskPackage = New-IcingaCheckPackage -Name 'Used Partition Space' -OperatorAnd -Verbos $Verbose; foreach ($Letter in $DiskFree.Keys) { if ($Include.Count -ne 0) { @@ -24,7 +23,6 @@ function Invoke-IcingaCheckUsedPartitionSpace() } } - $CheckedPartitions+=$Letter if ($Exclude.Count -ne 0) { $Exclude = $Exclude.trim(' :/\'); @@ -38,5 +36,5 @@ function Invoke-IcingaCheckUsedPartitionSpace() $DiskPackage.AddCheck($IcingaCheck); } - exit (New-IcingaCheckResult -Name 'Free Disk Space' -Check $DiskPackage -NoPerfData $NoPerfData -Compile); + exit (New-IcingaCheckResult -Check $DiskPackage -NoPerfData $NoPerfData -Compile); } diff --git a/lib/provider/process/Icinga_ProviderProcess.psm1 b/lib/provider/process/Icinga_ProviderProcess.psm1 index c86c6ee..5f81296 100644 --- a/lib/provider/process/Icinga_ProviderProcess.psm1 +++ b/lib/provider/process/Icinga_ProviderProcess.psm1 @@ -14,9 +14,12 @@ function Add-IcingaProcessPerfData() function Get-IcingaProcessData { + param( + [array]$Process + ); + $ProcessInformation = Get-WmiObject Win32_Process; $ProcessPerfDataList = Get-WmiObject Win32_PerfFormattedData_PerfProc_Process; - $ProcessUniqueList = Get-WmiObject Win32_Process | Select-Object name -unique; $CPUCoreCount = Get-IcingaCPUCount; @@ -25,8 +28,14 @@ function Get-IcingaProcessData { [hashtable]$ProcessNamesUnique = @{}; [hashtable]$ProcessIDsByName = @{}; - foreach ($process in $ProcessInformation) { - [string]$processName = $process.Name.Replace('.exe', ''); + foreach ($processinfo in $ProcessInformation) { + [string]$processName = $processinfo.Name.Replace('.exe', ''); + + If ($null -ne $Process) { + If (-Not ($Process.Contains($processName))) { + continue; + } + } if ($ProcessList.ContainsKey($processName) -eq $FALSE) { $ProcessList.Add($processName, @{ @@ -36,56 +45,60 @@ function Get-IcingaProcessData { } $ProcessList[$processName]['ProcessList'].Add( - [string]$process.ProcessID, @{ - 'Name' = $process.Name; - 'ProcessId' = $process.ProcessId; - 'Priority' = $process.Priority; - 'PageFileUsage' = $process.PageFileUsage; - 'ThreadCount' = $process.ThreadCount; - 'KernelModeTime' = $process.KernelModeTime; - 'UserModeTime' = $process.UserModeTime; - 'WorkingSetSize' = $process.WorkingSetSize; - 'CommandLine' = $process.CommandLine; + [string]$processinfo.ProcessID, @{ + 'Name' = $processinfo.Name; + 'ProcessId' = $processinfo.ProcessId; + 'Priority' = $processinfo.Priority; + 'PageFileUsage' = $processinfo.PageFileUsage; + 'ThreadCount' = $processinfo.ThreadCount; + 'KernelModeTime' = $processinfo.KernelModeTime; + 'UserModeTime' = $processinfo.UserModeTime; + 'WorkingSetSize' = $processinfo.WorkingSetSize; + 'CommandLine' = $processinfo.CommandLine; } ); - Add-IcingaProcessPerfData -ProcessList $ProcessList[$processName]['PerformanceData'] -ProcessKey 'ThreadCount' -Process $process; - Add-IcingaProcessPerfData -ProcessList $ProcessList[$processName]['PerformanceData'] -ProcessKey 'PageFileUsage' -Process $process; - Add-IcingaProcessPerfData -ProcessList $ProcessList[$processName]['PerformanceData'] -ProcessKey 'KernelModeTime' -Process $process; - Add-IcingaProcessPerfData -ProcessList $ProcessList[$processName]['PerformanceData'] -ProcessKey 'UserModeTime' -Process $process; - Add-IcingaProcessPerfData -ProcessList $ProcessList[$processName]['PerformanceData'] -ProcessKey 'WorkingSetSize' -Process $process; + Add-IcingaProcessPerfData -ProcessList $ProcessList[$processName]['PerformanceData'] -ProcessKey 'ThreadCount' -Process $processinfo; + Add-IcingaProcessPerfData -ProcessList $ProcessList[$processName]['PerformanceData'] -ProcessKey 'PageFileUsage' -Process $processinfo; + Add-IcingaProcessPerfData -ProcessList $ProcessList[$processName]['PerformanceData'] -ProcessKey 'KernelModeTime' -Process $processinfo; + Add-IcingaProcessPerfData -ProcessList $ProcessList[$processName]['PerformanceData'] -ProcessKey 'UserModeTime' -Process $processinfo; + Add-IcingaProcessPerfData -ProcessList $ProcessList[$processName]['PerformanceData'] -ProcessKey 'WorkingSetSize' -Process $processinfo; } - foreach ($process in $ProcessPerfDataList) { - if ($process.Name -eq '_Total' -Or $process.Name -eq 'Idle') { + foreach ($processinfo in $ProcessPerfDataList) { + if ($processinfo.Name -eq '_Total' -Or $processinfo.Name -eq 'Idle') { continue; } - [string]$processName = $process.Name.Split('#')[0]; - [string]$ProcessId = $process.IDProcess; + If ($null -ne $Process) { + If (-Not ($Process.Contains($processName))) { + continue; + } + } + + [string]$processName = $processinfo.Name.Split('#')[0]; + [string]$ProcessId = $processinfo.IDProcess; if ($ProcessList.ContainsKey($processName) -eq $FALSE) { - Write-Host 'Unknown Process Name: ' $processName; continue; } if ($ProcessList[$processName]['ProcessList'].ContainsKey($ProcessId) -eq $FALSE) { - Write-Host 'Unknown Process ID: ' $ProcessId; continue; } $ProcessList[$processName]['ProcessList'][$ProcessId].Add( - 'WorkingSetPrivate', $process.WorkingSetPrivate + 'WorkingSetPrivate', $processinfo.WorkingSetPrivate ); $ProcessList[$processName]['ProcessList'][$ProcessId].Add( - 'PercentProcessorTime', ($process.PercentProcessorTime / $CPUCoreCount) + 'PercentProcessorTime', ($processinfo.PercentProcessorTime / $CPUCoreCount) ); Add-IcingaProcessPerfData -ProcessList $ProcessList[$processName]['PerformanceData'] -ProcessKey 'WorkingSetPrivate' -Process $process; if ($ProcessList[$processName]['PerformanceData'].ContainsKey('PercentProcessorTime') -eq $FALSE) { - $ProcessList[$processName]['PerformanceData'].Add('PercentProcessorTime', ($process.PercentProcessorTime / $CPUCoreCount)); + $ProcessList[$processName]['PerformanceData'].Add('PercentProcessorTime', ($processinfo.PercentProcessorTime / $CPUCoreCount)); } else { - $ProcessList[$processName]['PerformanceData']['PercentProcessorTime'] += ($process.PercentProcessorTime / $CPUCoreCount); + $ProcessList[$processName]['PerformanceData']['PercentProcessorTime'] += ($processinfo.PercentProcessorTime / $CPUCoreCount); } }