/usr/local/CPAN/Ocsinventory-Agent/Ocsinventory/Agent/Backend/OS/BSD/CPU.pm
package Ocsinventory::Agent::Backend::OS::BSD::CPU;
use strict;
sub check {
return unless -r "/dev/mem";
`which dmidecode 2>&1`;
return if ($? >> 8)!=0;
`dmidecode 2>&1`;
return if ($? >> 8)!=0;
1;
}
sub run {
my $params = shift;
my $inventory = $params->{inventory};
my $processort;
my $processorn;
my $processors;
my $family;
my $manufacturer;
# XXX Parsing dmidecode output using "type 4" section
# for nproc type and speed
# because no /proc on *BSD
my $flag=0;
my $status=0; ### XXX 0 if Unpopulated
for(`dmidecode`){
$flag=1 if /dmi type 4,/i;
if((/dmi type (\d+),/i) && ($flag)){
if ($status){
$status=0;
$processorn++;
}
last if ($1!='4');
}
$status = 1 if $flag && /^\s*status\s*:.*enabled/i;
$family = $1 if $flag && /^\s*family\s*:\s*(.*)/i;
$manufacturer = $1 if $flag && /^\s*manufacturer\s*:\s*(.*)/i;
$processors = $1 if $flag && /^\s*current speed\s*:\s*(\d+).+/i;
$processort = "$manufacturer $family" if $manufacturer && $family;
}
$inventory->setHardware({
PROCESSORT => $processort,
PROCESSORN => $processorn,
PROCESSORS => $processors
});
}
1;