source: ocsinventory-agent/trunk/fuentes/lib/Ocsinventory/Agent/Backend/OS/MacOS/Storages.pm @ 468

Last change on this file since 468 was 468, checked in by mabarracus, 4 years ago

Copyt trusty code

File size: 2.8 KB
Line 
1package Ocsinventory::Agent::Backend::OS::MacOS::Storages;
2
3use strict;
4
5sub check {return can_load('Mac::SysProfile');}
6
7sub getManufacturer {
8  my $model = shift;
9  if($model =~ /(maxtor|western|sony|compaq|hewlett packard|ibm|seagate|toshiba|fujitsu|lg|samsung|nec|transcend|matshita|pioneer|hitachi)/i) {
10    return ucfirst(lc($1));
11  }
12  elsif ($model =~ /^HP/) {
13    return "Hewlett Packard";
14  }
15  elsif ($model =~ /^WDC/) {
16    return "Western Digital";
17  }
18  elsif ($model =~ /^ST/) {
19    return "Seagate";
20  }
21  elsif ($model =~ /^HD/ or $model =~ /^IC/ or $model =~ /^HU/) {
22    return "Hitachi";
23  }
24}
25
26sub run {
27
28  my $params = shift;
29  my $logger = $params->{logger};
30  my $common = $params->{common};
31
32  my $devices = {};
33
34  my $profile = Mac::SysProfile->new();
35
36  # Get SATA Drives
37  my $sata = $profile->gettype('SPSerialATADataType');
38
39  if ( ref($sata) eq 'ARRAY') {
40 
41    foreach my $storage ( @$sata ) {
42      next unless ( ref($storage) eq 'HASH' );
43
44      my $description;
45      if ( $storage->{'_name'} =~ /DVD/i || $storage->{'_name'} =~ /CD/i ) {
46        $description = 'CD-ROM Drive';
47      }
48      else {
49        $description = 'Disk drive';
50      }
51
52      my $size = $storage->{'size'};
53      if ($size =~ /GB/) {
54        $size =~ s/ GB//;
55        $size *= 1024;
56      }
57      if ($size =~ /TB/) {
58        $size =~ s/ TB//;
59        $size *= 1048576;
60      }
61
62      my $manufacturer = getManufacturer($storage->{'_name'});
63
64      my $model = $storage->{'device_model'};
65      $model =~ s/\s*$manufacturer\s*//i;
66
67      $devices->{$storage->{'_name'}} = {
68        NAME => $storage->{'name'},
69        SERIAL => $storage->{'device_serial'},
70        DISKSIZE => $size,
71        FIRMWARE => $storage->{'device_revision'},
72        MANUFACTURER => $manufacturer,
73        DESCRIPTION => $description,
74        MODEL => $model
75      };
76    }
77  } 
78
79  # Get PATA Drives
80  my $pata = $profile->gettype('SPParallelATADataType');
81 
82  if ( ref($sata) eq 'ARRAY') {
83    foreach my $storage ( @$pata ) {
84      next unless ( ref($storage) eq 'HASH' );
85     
86      my $description;
87      if ( $storage->{'_name'} =~ /DVD/i || $storage->{'_name'} =~ /CD/i ) {
88       $description = 'CD-ROM Drive';
89      }
90      else {
91        $description = 'Disk drive';
92      }
93     
94      my $manufacturer = getManufacturer($storage->{'_name'});
95     
96      my $model = $storage->{'device_model'};
97     
98      my $size;
99     
100      $devices->{$storage->{'_name'}} = {
101        NAME => $storage->{'_name'},
102        SERIAL => $storage->{'device_serial'},
103        DISKSIZE => $size,
104        FIRMWARE => $storage->{'device_revision'},
105        MANUFACTURER => $manufacturer,
106        DESCRIPTION => $description,
107        MODEL => $model
108      };
109   
110    }
111  }
112
113  foreach my $device ( keys %$devices ) {
114    $common->addStorages($devices->{$device});
115  }
116}
117
1181;
Note: See TracBrowser for help on using the repository browser.