diff --git a/zabbix_scripts/disco_block_devices b/zabbix_scripts/disco_block_devices index ff5f5a5..9158190 100644 --- a/zabbix_scripts/disco_block_devices +++ b/zabbix_scripts/disco_block_devices @@ -4,18 +4,36 @@ use warnings; use strict; use Zabbix::Agent::Addons::Disks; use JSON; +use File::Which; +use Getopt::Long; + +my $pretty = 0; +GetOptions( + 'pretty' => \$pretty +); + +my $lsblk = which('lsblk'); my $json; @{$json->{data}} = (); -foreach my $block (Zabbix::Agent::Addons::Disks::list_block_dev()){ - my $size = 1; - if ( -e "/sys/block/$block/size"){ - open SIZE, "/sys/block/$block/size"; - $size = join "", ; - close SIZE; - chomp($size); +if (defined $lsblk){ + foreach my $line (qx($lsblk -o KNAME,TYPE,SIZE -r -n -b)){ + my ($block,$type,$size) = split(/\s+/, $line); + push @{$json->{data}}, { + "{#BLOCKDEVICE}" => $block, # Compat with previous zabbix-agent-addons + "{#DEVNAME}" => $block, # New macro name for the native vfs.dev.discovery key in 4.4 + "{#DEVTYPE}" => $type, + }; + } +} else { + # Fallback if lsblk is not available + foreach my $block (Zabbix::Agent::Addons::Disks::list_block_dev()){ + push @{$json->{data}}, { + "{#BLOCKDEVICE}" => $block, + "{#DEVNAME}" => $block, + "{#DEVTYPE}" => 'disk' + }; } - push @{$json->{data}}, { "{#BLOCKDEVICE}" => $block, "{#BLOCKSIZE}" => $size, "{#DEVNAME}" => $block }; } -print to_json($json); +print to_json($json, { pretty => $pretty }); exit(0);