/usr/local/CPAN/Ocsinventory-Agent/Ocsinventory/Agent/Backend/OS/MacOS/Storages.pm
package Ocsinventory::Agent::Backend::OS::MacOS::Storages;
use strict;
sub check {return can_load('Mac::SysProfile');}
sub getManufacturer {
my $model = shift;
if($model =~ /(maxtor|western|sony|compaq|hewlett packard|ibm|seagate|toshiba|fujitsu|lg|samsung|nec|transcend|matshita|pioneer)/i) {
return ucfirst(lc($1));
}
elsif ($model =~ /^HP/) {
return "Hewlett Packard";
}
elsif ($model =~ /^WDC/) {
return "Western Digital";
}
elsif ($model =~ /^ST/) {
return "Seagate";
}
elsif ($model =~ /^HD/ or $model =~ /^IC/ or $model =~ /^HU/) {
return "Hitachi";
}
}
sub run {
my $params = shift;
my $logger = $params->{logger};
my $inventory = $params->{inventory};
my $devices = {};
my $prof = Mac::SysProfile->new();
# Get SATA Drives
my $sata = $prof->gettype('SPSerialATADataType');
return undef unless( ref($sata) eq 'HASH' );
use Data::Dumper;
foreach my $x ( keys %$sata ) {
my $controller = $sata->{$x};
foreach my $y ( keys %$controller ) {
next unless( ref($sata->{$x}->{$y}) eq 'HASH' );
my $drive = $sata->{$x}->{$y};
my $description;
if ( $y =~ /DVD/i || $y =~ /CD/i ) {
$description = 'CD-ROM Drive';
}
else {
$description = 'Disk drive';
}
my $size = $drive->{'Capacity'};
$size =~ s/ GB//;
$size *= 1024;
my $manufacturer = getManufacturer($y);
my $model = $drive->{'Model'};
$model =~ s/\s*$manufacturer\s*//i;
$devices->{$y} = {
NAME => $y,
SERIAL => $drive->{'Serial Number'},
DISKSIZE => $size,
FIRMWARE => $drive->{'Revision'},
MANUFACTURER => $manufacturer,
DESCRIPTION => $description,
MODEL => $model
};
}
}
# Get PATA Drives
my $pata = $prof->gettype('SPParallelATADataType');
foreach my $x ( keys %$pata ) {
my $controller = $pata->{$x};
foreach my $y ( keys %$controller ) {
next unless ( ref($pata->{$x}->{$y}) eq 'HASH' );
my $drive = $pata->{$x}->{$y};
my $description;
if ( $y =~ /DVD/i || $y =~ /CD/i ) {
$description = 'CD-ROM Drive';
}
else {
$description = 'Disk drive';
}
my $manufacturer = getManufacturer($y);
my $model = $drive->{'Model'};
my $size;
$devices->{$y} = {
NAME => $y,
SERIAL => $drive->{'Serial Number'},
DISKSIZE => $size,
FIRMWARE => $drive->{'Revision'},
MANUFACTURER => $manufacturer,
DESCRIPTION => $description,
MODEL => $model
};
}
}
foreach my $device ( keys %$devices ) {
$inventory->addStorages($devices->{$device});
}
# warn Dumper($devices);
}
1;