icinga-powershell-framework/lib/provider/process/Icinga_ProviderProcess.psm1

109 lines
No EOL
4.2 KiB
PowerShell

Import-IcingaLib provider\enums;
Import-IcingaLib provider\cpu;
function Add-IcingaProcessPerfData()
{
param($ProcessList, $ProcessKey, $Process);
if ($ProcessList.ContainsKey($ProcessKey) -eq $FALSE) {
$ProcessList.Add($ProcessKey, $Process.$ProcessKey);
} else {
$ProcessList[$ProcessKey] += $Process.$ProcessKey;
}
}
function Get-IcingaProcessData {
param(
[array]$Process
);
$ProcessInformation = Get-WmiObject Win32_Process;
$ProcessPerfDataList = Get-WmiObject Win32_PerfFormattedData_PerfProc_Process;
$CPUCoreCount = Get-IcingaCPUCount;
[hashtable]$ProcessData = @{};
[hashtable]$ProcessList = @{};
[hashtable]$ProcessNamesUnique = @{};
[hashtable]$ProcessIDsByName = @{};
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, @{
'ProcessList' = @{};
'PerformanceData' = @{}
});
}
$ProcessList[$processName]['ProcessList'].Add(
[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 $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 ($processinfo in $ProcessPerfDataList) {
if ($processinfo.Name -eq '_Total' -Or $processinfo.Name -eq 'Idle') {
continue;
}
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) {
continue;
}
if ($ProcessList[$processName]['ProcessList'].ContainsKey($ProcessId) -eq $FALSE) {
continue;
}
$ProcessList[$processName]['ProcessList'][$ProcessId].Add(
'WorkingSetPrivate', $processinfo.WorkingSetPrivate
);
$ProcessList[$processName]['ProcessList'][$ProcessId].Add(
'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', ($processinfo.PercentProcessorTime / $CPUCoreCount));
} else {
$ProcessList[$processName]['PerformanceData']['PercentProcessorTime'] += ($processinfo.PercentProcessorTime / $CPUCoreCount);
}
}
$ProcessData.Add('Process Count', $ProcessInformation.Count);
$ProcessData.add('Processes', $ProcessList);
return $ProcessData;
}