package Ocsinventory::Agent::Backend::OS::Generic::Dmidecode::Ports; use strict; sub run { my $params = shift; my $inventory = $params->{inventory}; my $dmidecode = `dmidecode`; # TODO retrieve error # some versions of dmidecode do not separate items with new lines # so add a new line before each handle $dmidecode =~ s/\nHandle/\n\nHandle/g; my @dmidecode = split (/\n/, $dmidecode); # add a new line at the end push @dmidecode, "\n"; s/^\s+// for (@dmidecode); my $flag; my $caption; my $description; my $name; my $type; foreach (@dmidecode) { if(/dmi type 8,/i) { $flag = 1; } elsif ($flag && /^$/){ # end of section $flag = 0; $inventory->addPorts({ CAPTION => $caption, DESCRIPTION => $description, NAME => $name, TYPE => $type, }); $caption = $description = $name = $type = undef; } elsif ($flag) { $caption = $1 if /^external connector type\s*:\s*(.+)/i; $description = $1 if /^internal connector type\s*:\s*(.+)/i; $name = $1 if /^internal reference designator\s*:\s*(.+)/i; $type = $1 if /^port type\s*:\s*(.+)/i; } } } 1;