-
Notifications
You must be signed in to change notification settings - Fork 33
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adds new plugin data provider handling and cpu data
- Loading branch information
1 parent
e8c55d3
commit 416b380
Showing
6 changed files
with
186 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
function Test-IcingaForWindowsCmdletLoader() | ||
{ | ||
param ( | ||
[string]$Path = '' | ||
); | ||
|
||
if ([string]::IsNullOrEmpty($Path)) { | ||
return $FALSE; | ||
} | ||
|
||
if ((Test-Path -Path $Path) -eq $FALSE) { | ||
return $FALSE; | ||
} | ||
|
||
$FrameworkRootDir = [string]::Format('{0}*', (Get-IcingaForWindowsRootPath)); | ||
|
||
if ($Path -NotLike $FrameworkRootDir) { | ||
return $FALSE; | ||
} | ||
|
||
return $TRUE; | ||
} |
89 changes: 89 additions & 0 deletions
89
lib/provider/assets/cpu/Get-IcingaProviderDataValuesCpu.psm1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
function Get-IcingaProviderDataValuesCpu() | ||
{ | ||
param ( | ||
[switch]$IncludeDetails = $FALSE | ||
); | ||
|
||
$CpuData = New-IcingaProviderObject -Name 'Cpu'; | ||
$CpuCounter = New-IcingaPerformanceCounterArray '\Processor Information(*)\% Processor Utility'; | ||
$CounterStructure = New-IcingaPerformanceCounterStructure -CounterCategory 'Processor Information' -PerformanceCounterHash $CpuCounter; | ||
[int]$TotalCpuThreads = 0; | ||
[decimal]$TotalCpuLoad = 0; | ||
[hashtable]$SocketList = @{ }; | ||
|
||
foreach ($core in $CounterStructure.Keys) { | ||
[string]$Socket = $core.Split(',')[0]; | ||
[string]$CoreId = $core.Split(',')[1]; | ||
[string]$SocketName = [string]::Format('Socket #{0}', $Socket); | ||
|
||
if ($Socket -eq '_Total' -Or $CoreId -eq '_Total') { | ||
continue; | ||
} | ||
|
||
if ($SocketList.ContainsKey($SocketName) -eq $FALSE) { | ||
$SocketList.Add( | ||
$SocketName, | ||
@{ | ||
'ThreadCount' = 0; | ||
'TotalLoad' = 0; | ||
} | ||
); | ||
} | ||
|
||
if ((Test-PSCustomObjectMember -PSObject $CpuData.Metrics -Name $SocketName) -eq $FALSE) { | ||
$CpuData.Metrics | Add-Member -MemberType NoteProperty -Name $SocketName -Value (New-Object PSCustomObject); | ||
} | ||
|
||
[decimal]$CoreLoad = $CounterStructure[$core]['% Processor Utility'].value; | ||
|
||
$CpuData.Metrics.$SocketName | Add-Member -MemberType NoteProperty -Name $CoreId -Value $CoreLoad; | ||
$CpuData.MetricsOverTime.MetricContainer | Add-Member -MemberType NoteProperty -Name $SocketName -Value $null -Force; | ||
|
||
$SocketList[$SocketName].ThreadCount += 1; | ||
$SocketList[$SocketName].TotalLoad += $CoreLoad; | ||
} | ||
|
||
$CpuData.Metadata | Add-Member -MemberType NoteProperty -Name 'Sockets' -Value (New-Object PSCustomObject); | ||
|
||
foreach ($entry in $SocketList.Keys) { | ||
$SocketList[$entry].TotalLoad = $SocketList[$entry].TotalLoad / $SocketList[$entry].ThreadCount; | ||
$TotalCpuLoad += $SocketList[$entry].TotalLoad; | ||
$TotalCpuThreads += $SocketList[$entry].ThreadCount; | ||
|
||
$CpuData.Metadata.Sockets | Add-Member -MemberType NoteProperty -Name $entry -Value (New-Object PSCustomObject); | ||
$CpuData.Metadata.Sockets.$entry | Add-Member -MemberType NoteProperty -Name 'Threads' -Value $SocketList[$entry].ThreadCount; | ||
$CpuData.Metrics.$entry | Add-Member -MemberType NoteProperty -Name 'Total' -Value $SocketList[$entry].TotalLoad; | ||
} | ||
|
||
$CpuData.Metadata | Add-Member -MemberType NoteProperty -Name 'TotalLoad' -Value $TotalCpuLoad; | ||
$CpuData.Metadata | Add-Member -MemberType NoteProperty -Name 'TotalThreads' -Value $TotalCpuThreads; | ||
$CpuData.Metadata | Add-Member -MemberType NoteProperty -Name 'CoreDigits' -Value ([string]$TotalCpuThreads).Length; | ||
$CpuData.Metadata | Add-Member -MemberType NoteProperty -Name 'CoreDetails' -Value (New-Object PSCustomObject); | ||
|
||
if ($IncludeDetails) { | ||
[array]$CPUCIMData = Get-IcingaWindowsInformation Win32_Processor; | ||
|
||
foreach ($cpu in $CPUCIMData) { | ||
if ((Test-PSCustomObjectMember -PSObject $CpuData.Metadata.CoreDetails -Name $cpu.DeviceID) -eq $FALSE) { | ||
$CpuData.Metadata.CoreDetails | Add-Member -MemberType NoteProperty -Name $cpu.DeviceID -Value (New-Object PSCustomObject); | ||
} | ||
$CpuData.Metadata.CoreDetails.($cpu.DeviceID) | Add-Member -MemberType NoteProperty -Name 'Architecture' -Value $cpu.Architecture; | ||
$CpuData.Metadata.CoreDetails.($cpu.DeviceID) | Add-Member -MemberType NoteProperty -Name 'ProcessorType' -Value $cpu.ProcessorType; | ||
$CpuData.Metadata.CoreDetails.($cpu.DeviceID) | Add-Member -MemberType NoteProperty -Name 'StatusInfo' -Value $cpu.StatusInfo; | ||
$CpuData.Metadata.CoreDetails.($cpu.DeviceID) | Add-Member -MemberType NoteProperty -Name 'Family' -Value $cpu.Family; | ||
$CpuData.Metadata.CoreDetails.($cpu.DeviceID) | Add-Member -MemberType NoteProperty -Name 'CurrentVoltage' -Value $cpu.CurrentVoltage; | ||
$CpuData.Metadata.CoreDetails.($cpu.DeviceID) | Add-Member -MemberType NoteProperty -Name 'L3CacheSize' -Value $cpu.L3CacheSize; | ||
$CpuData.Metadata.CoreDetails.($cpu.DeviceID) | Add-Member -MemberType NoteProperty -Name 'L2CacheSize' -Value $cpu.L2CacheSize; | ||
$CpuData.Metadata.CoreDetails.($cpu.DeviceID) | Add-Member -MemberType NoteProperty -Name 'L2CacheSpeed' -Value $cpu.L2CacheSpeed; | ||
$CpuData.Metadata.CoreDetails.($cpu.DeviceID) | Add-Member -MemberType NoteProperty -Name 'VoltageCaps' -Value $cpu.VoltageCaps; | ||
$CpuData.Metadata.CoreDetails.($cpu.DeviceID) | Add-Member -MemberType NoteProperty -Name 'CurrentClockSpeed' -Value $cpu.CurrentClockSpeed; | ||
$CpuData.Metadata.CoreDetails.($cpu.DeviceID) | Add-Member -MemberType NoteProperty -Name 'Caption' -Value $cpu.Caption; | ||
$CpuData.Metadata.CoreDetails.($cpu.DeviceID) | Add-Member -MemberType NoteProperty -Name 'Name' -Value $cpu.Name; | ||
$CpuData.Metadata.CoreDetails.($cpu.DeviceID) | Add-Member -MemberType NoteProperty -Name 'SerialNumber' -Value $cpu.SerialNumber; | ||
$CpuData.Metadata.CoreDetails.($cpu.DeviceID) | Add-Member -MemberType NoteProperty -Name 'Manufacturer' -Value $cpu.Manufacturer; | ||
$CpuData.Metadata.CoreDetails.($cpu.DeviceID) | Add-Member -MemberType NoteProperty -Name 'AddressWidth' -Value $cpu.AddressWidth; | ||
} | ||
} | ||
|
||
return $CpuData; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
function Get-IcingaProviderData() | ||
{ | ||
param ( | ||
[array]$Name = '' | ||
); | ||
|
||
[hashtable]$ProviderData = @{ }; | ||
|
||
foreach ($entry in $Name) { | ||
[array]$ProviderDataList = Get-Command -Name ([string]::Format('Get-IcingaProviderDataValues{0}', $entry)) -ErrorAction SilentlyContinue; | ||
|
||
if ($null -eq $ProviderDataList -Or $ProviderDataList.Count -eq 0) { | ||
$ProviderData.Add($entry, 'Provider not Found'); | ||
continue; | ||
} | ||
|
||
if ($ProviderDataList.Count -gt 1) { | ||
$ProviderData.Add($entry, 'Provider name not unique enough'); | ||
continue; | ||
} | ||
|
||
if ((Test-IcingaForWindowsCmdletLoader -Path $ProviderDataList.Module.ModuleBase) -eq $FALSE) { | ||
$ProviderData.Add($entry, 'Security violation. Provider not installed at Framework location'); | ||
continue; | ||
} | ||
|
||
$ProviderCmd = $ProviderDataList[0]; | ||
|
||
$ProviderContent = (& $ProviderCmd -IncludeDetails); | ||
|
||
if ($ProviderData.ContainsKey($ProviderContent.Name) -eq $FALSE) { | ||
$ProviderData.Add($ProviderContent.Name, $ProviderContent); | ||
} else { | ||
$ProviderData[$ProviderContent.Name] = $ProviderContent; | ||
} | ||
} | ||
|
||
return $ProviderData; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
function Get-IcingaProviderElement() | ||
{ | ||
param ( | ||
$Object = $null | ||
); | ||
|
||
if ($null -eq $Object) { | ||
return @(); | ||
} | ||
|
||
try { | ||
return $Object.PSObject.Properties | ||
} catch { | ||
return @(); | ||
} | ||
|
||
return @(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
function New-IcingaProviderObject() | ||
{ | ||
param ( | ||
[string]$Name = 'Undefined' | ||
); | ||
|
||
$ProviderObject = New-Object PSCustomObject; | ||
$ProviderObject | Add-Member -MemberType NoteProperty -Name 'Name' -Value $Name; | ||
$ProviderObject | Add-Member -MemberType NoteProperty -Name 'Metadata' -Value (New-Object PSCustomObject); | ||
$ProviderObject | Add-Member -MemberType NoteProperty -Name 'Metrics' -Value (New-Object PSCustomObject); | ||
$ProviderObject | Add-Member -MemberType NoteProperty -Name 'MetricsOverTime' -Value (New-Object PSCustomObject); | ||
$ProviderObject.MetricsOverTime | Add-Member -MemberType NoteProperty -Name 'MetricContainer' -Value (New-Object PSCustomObject); | ||
$ProviderObject.MetricsOverTime | Add-Member -MemberType NoteProperty -Name 'Cache' -Value (New-Object PSCustomObject); | ||
$ProviderObject.MetricsOverTime | Add-Member -MemberType NoteProperty -Name 'Compiled' -Value (New-Object PSCustomObject); | ||
|
||
return $ProviderObject; | ||
} |