/usr/local/CPAN/Ocsinventory-Agent/Ocsinventory/Agent/Backend/OS/Solaris/Storages.pm


package Ocsinventory::Agent::Backend::OS::Solaris::Storages;
use strict;
#use warning;

#sd0      Soft Errors: 0 Hard Errors: 0 Transport Errors: 0
#Vendor: HITACHI  Product: DK32EJ72NSUN72G  Revision: PQ08 Serial No: 43W14Z080040A34E
#Size: 73.40GB <73400057856 bytes>
#Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0
#Illegal Request: 0 Predictive Failure Analysis: 0

# With -En :
#c8t60060E80141A420000011A420000300Bd0 Soft Errors: 1 Hard Errors: 0 Transport Errors: 0 
#Vendor: HITACHI  Product: OPEN-V      -SUN Revision: 5009 Serial No:  
#Size: 64.42GB <64424509440 bytes>
#Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0 
#Illegal Request: 1 Predictive Failure Analysis: 0 


sub check { can_run ("iostat") }

sub run {
  my $params = shift;
  my $inventory = $params->{inventory};

  my $manufacturer;
  my $model;
  my $description;
  my $capacity;
  my $name;
  my $rev;
  my $sn;
  my $type;
  my $flag_first_line;
  my $rdisk_path;

  foreach(`iostat -En`){
#print;
    if($flag_first_line){  		
      if(/^.*<(\S+)\s*bytes/){  			
	$capacity = $1;
	$capacity = $capacity/(1024*1024);
#print $capacity."\n";
      }
      ## To be removed when FIRMWARE will be supported
      if ($rev) {
        $description .= ' ' if $description;
        $description .= "FW:$rev";
      }

      $rdisk_path=`ls -l /dev/rdsk/${name}s2`;
      if( $rdisk_path =~ /.*->.*scsi_vhci.*/ ) {
	$type="MPxIO";
      } 
      elsif( $rdisk_path =~ /.*->.*fp@.*/ ) {
        $type="FC";
      }
      elsif( $rdisk_path =~ /.*->.*scsi@.*/ ) {
        $type="SCSI";
      }
      $inventory->addStorages({
	  NAME => $name,
	  MANUFACTURER => $manufacturer,
	  MODEL => $model,
	  DESCRIPTION => $description,
	  TYPE => $type,
          FIRMWARE => $rev,
          SERIALNUMBER => $sn,
	  DISKSIZE => $capacity
	  });

      $manufacturer='';
      $model='';
      $description='';
      $name='';
      $rev='';
      $sn='';
      $type='';
    } 
    $flag_first_line = 0;	
    if(/^(\S+)\s+Soft/){
	$name = $1;
    }
    if(/^.*Product:\s*(\S+)/){
      $model = $1;
    }
    if(/^.*Serial No:\s*(\S+)/){
      $sn = $1;
      ## To be removed when SERIALNUMBER will be supported
      $description = "S/N:$sn";
      ##
    }
    if(/^.*Revision:\s*(\S+)/){
      $rev = $1;
    }
    if(/^Vendor:\s*(\S+)/){
      $manufacturer = $1;
      $flag_first_line = 1;
    }

  }  
}

1;