Zabbix Agent for WAPT
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
4.3 KiB

Param(
[parameter(Position=0,Mandatory=$true)]
[ValidateSet("pdisk", "vdisk", "bbu", "adapter")]
[alias("m")]
[String]
$mode
,
[parameter()]
[ValidateNotNullOrEmpty()]
[alias("p","item")]
[string]
$mode_item
,
[parameter(Mandatory=$true)]
[ValidateRange(0,5)]
[alias("a","adp")]
[int]
$adapter
,
[parameter()]
[ValidateRange(0,4096)]
[alias("e","enc")]
[int]
$enclosure_id
,
[parameter()]
[ValidateRange(0,256)]
[alias("pdisk")]
[int]
$disk_id
,
[parameter()]
[ValidateRange(0,256)]
[alias("vdisk")]
[int]
$vdisk_id
)
$CLI = "C:\Program Files\Zabbix Agent\bin\perccli64.exe"
function pdisk_item($item,$adapter,$enclosure_id,$disk_id) {
$regex = ''
switch ($item) {
'firmware_state' { $regex = "Firmware state:\s(.*)" }
'raw_size' { $regex = "Raw Size:\s+(\d+\.\d+\s..)" }
'predictive_errors' { $regex = "Predictive Failure Count:\s(.*)" }
'inquiry_data' { $regex = "Inquiry Data:\s+(.*)" }
'media_errors' { $regex = "Media Error Count:\s(.*)" }
}
if ($enclosure_id -eq 2989) { $enclosure_id = '' }
$output = (& $CLI -pdinfo -PhysDrv["$enclosure_id":"$disk_id"] -a $adapter -NoLog | Select-String $regex -AllMatches | % { $_.Matches } | % { $_.groups[1].value })
if ($item -eq 'firmware_state') {
if ($output -Match '^(Unconfigured\(good\).*|Online,\sSpun.*|Hotspare,\sSpun.*)$') {
$output = 0
}
elseif ($output -Match '^Rebuild') {
$output = 2
}
else {
$output = 1
}
}
write-host $output
}
function vdisk_item($item,$adapter,$vd) {
$regex = ''
switch ($item) {
'vd_state' { $regex = "^State\s+:\s(.*)$" }
'vd_size' { $regex = "^Size\s+:\s(\d+\.\d+\s..)" }
}
$output = (& $CLI -LDinfo -L $vd -a $adapter -NoLog | Select-String $regex -AllMatches | % { $_.Matches } | % { $_.groups[1].value })
if ($item -eq 'vd_state') {
if ($output -Match '^Optimal$') { $output = 0 } else { $output = 1 }
}
write-host $output
}
function bbu_item($item,$adapter){
$regex = ''
$command = ''
switch ($item) {
'bbu_state' { $command = '-GetBbuStatus'; $regex = "Battery State\s*:\s(.*)$"; $wanted_group = 1 }
'design_capacity' { $command = '-GetBBUDesignInfo'; $regex = "Design\sCapacity:\s(\d+)\s(mAh|J)"; $wanted_group = 1 }
'full_capacity' { $command = '-GetBBUCapacityInfo'; $regex = "(Full\sCharge\sCapacity|.*Pack\senergy\s*):\s(\d+)\s(mAh|J)"; $wanted_group = 2 }
'state_of_charge' { $command = '-GetBBUCapacityInfo'; $regex = "Absolute\sState\sof\scharge\s*:\s(\d+).*%"; $wanted_group = 1 }
'date_manufactured' { $command = '-GetBBUDesignInfo'; $regex = "Date\sof\sManufacture\s*:\s(.*)$"; $wanted_group = 1 }
}
if ($bbu_state -Match '^(Optimal|Operational)$') { $bbu_state = 0 } else { $bbu_state = 1 }
$output = (& $CLI -AdpBbuCmd $command -a $adapter -NoLog | Select-String $regex | % {$_.Matches} | % { $_.groups[$wanted_group].value })
if ($item -eq 'bbu_state') {
if ($output -Match '^(Optimal|Operational)$') { $output = 0 } else { $output = 1 }
}
write-host $output
}
function adapter_item($item,$adapter){
$regex = ''
switch ($item) {
'fw_version' { $regex = "^\s*FW\sPackage\sBuild:\s(.*)$" }
'product_name' { $regex = "^\s*Product\sName\s*:\s(.*)$" }
}
$output = (& $CLI -AdpAllInfo -a $adapter -NoLog | Select-String $regex | % {$_.Matches} | % { $_.groups[1].value })
write-host $output
}
### Start doing our job
switch ($mode) {
"pdisk" { pdisk_item $mode_item $adapter $enclosure_id $disk_id }
"vdisk" { vdisk_item $mode_item $adapter $vdisk_id }
"bbu" { bbu_item $mode_item $adapter }
"adapter" { adapter_item $mode_item $adapter }
}