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

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

Copyt trusty code

File size: 2.2 KB
Line 
1package Ocsinventory::Agent::Backend::OS::Linux::Storages::Lsilogic;
2
3use Ocsinventory::Agent::Backend::OS::Linux::Storages;
4# Tested on 2.6.* kernels
5#
6# Cards tested :
7#
8# LSI Logic / Symbios Logic SAS1064E PCI-Express Fusion-MPT SAS
9#
10# mpt-status version : 1.2.0
11
12use strict;
13
14sub check {
15
16  my $device;
17# Do we have smartctl ?
18  if (can_run('smartctl')) {
19    foreach my $node (glob("/dev/sd?")) {
20      foreach (`smartctl -i $node`) {
21        $device = $1 if /.*Device:\s(\w*).*/;
22      }
23    }
24    ($device eq 'LSILOGIC')?return 1:return 0;
25  }
26  return 0;
27}
28
29sub run {
30
31
32  my $params = shift;
33  my $common = $params->{common};
34  my $logger = $params->{logger};
35
36  my $serialnumber;
37
38  my @devices = Ocsinventory::Agent::Backend::OS::Linux::Storages::getFromUdev();
39
40  foreach my $hd (@devices) {
41    foreach (`mpt-status -n -i $hd->{SCSI_UNID}`) {
42
43# Example output :
44#
45# ioc:0 vol_id:0 type:IM raidlevel:RAID-1 num_disks:2 size(GB):148 state: OPTIMAL flags: ENABLED
46# ioc:0 phys_id:1 scsi_id:2 vendor:ATA      product_id:ST3160815AS      revision:D    size(GB):149 state: ONLINE flags: NONE sync_state: 100 ASC/ASCQ:0xff/0xff SMART ASC/ASCQ:0xff/0xff
47#ioc:0 phys_id:0 scsi_id:1 vendor:ATA      product_id:ST3160815AS      revision:D    size(GB):149 state: ONLINE flags: NONE sync_state: 100 ASC/ASCQ:0xff/0xff SMART ASC/ASCQ:0xff/0xff
48#scsi_id:1 100%
49#scsi_id:0 100%
50
51      if (/.*phys_id:(\d+).*product_id:\s*(\S*)\s+revision:(\S+).*size\(GB\):(\d+).*/) {
52        $serialnumber = undef;
53        foreach (`smartctl -i /dev/sg$1`) {
54          $serialnumber = $1 if /^Serial Number:\s+(\S*)/;
55        }
56        my $model = $2;
57        my $size = 1024*$4; # GB => MB
58        my $firmware = $3;
59        my $manufacturer = Ocsinventory::Agent::Backend::OS::Linux::Storages::getManufacturer($model);
60        $logger->debug("Lsilogic: $hd->{NAME}, $manufacturer, $model, SATA, disk, $size, $serialnumber, $firmware");
61
62        $common->addStorages({
63            NAME => $hd->{NAME},
64            MANUFACTURER => $manufacturer,
65            MODEL => $model,
66            DESCRIPTION => 'SATA',
67            TYPE => 'disk',
68            DISKSIZE => $size,
69            SERIALNUMBER => $serialnumber,
70            FIRMWARE => $firmware,
71            });
72      }
73    }
74  }
75
76}
77
781;
Note: See TracBrowser for help on using the repository browser.