# $Header: emagent/sysman/admin/scripts/Ptdpm1.pm /stpl_db_11.2.0.2.0_aix.ppc64/1 2010/04/15 01:15:34 nparaddi Exp $ # # Package : Ptdpm1.pm # # Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. # # NAME # Ptdpm1.pm # # DESCRIPTION # Collects hardware data # # NOTES # # MODIFIED (MM/DD/YY) # nparaddi 04/12/10 - use Ptdpm0 defined grep # nsharma 03/22/06 - Correct clock frequency reporting # mgoodric 05/10/05 - increase buffer read for dmesg # mgoodric 05/03/05 - fix roundup on FREQUENCY_IN_MHZ # mgoodric 11/03/04 - fix HyperThreading CPU count # mgoodric 09/27/04 - code cleanup # skumar 12/31/03 - AIX changes # mgoodric 09/25/03 - Fix error calculating for 1GB # mgoodric 09/19/03 - Fix error collecting IO Cards # mgoodric 05/22/03 - Bug 2971407 # mgoodric 05/11/03 - added -debug tracing # mgoodric 04/07/03 - fix finding MAC address # goramamo 12/12/02 - Changes for SPARC III+ machines # goramamo 10/10/02 - Verifying subcomponents to avoid total failure # goramamo 09/03/02 - NIC Details collction moved to Ptdpm14 # goramamo 08/21/02 - Enable hostname alias collection again. # goramamo 08/02/02 - Collect all hostnames and aliases # goramamo 07/26/02 - To fix MAC Display # goramamo 07/12/02 - To handle NIC log. intf # goramamo 06/26/02 - Read sys admin tables for domain # xxu 06/25/02 - remove /usr/local/bin/perl # goramamo 06/02/02 - GIT5: NIC, MAC, OSBit, Mnttab additions # goramamo 05/02/02 - OS Subroutines moved to Ptdpm7.pm # goramamo 04/14/02 - Added code to check pkginfo files # goramamo 04/12/02 - Added code to handle Sun Fire # and Blade series # goramamo 03/28/02 - Added code to generte XML from files # goramamo 03/05/02 - Added OS_MAX_SWAP_SPACE_IN_MB; # Dropped 12 fields (8 tags); # goramamo 02/28/02 - Bug 2226505 fix # jmansur 02/15/02 - only keep last if duplicate kernel param assignments # mgoodric 02/14/02 - Make scripts more portable # jmansur 01/23/02 - collect OS kernel parameters, a la kernel.pl # goramamo 12/14/01 - Added TOTAL_LOCAL_DISK_SPACE_IN_GB, # OS_BASE_VERSION and OS_UPDATE_LEVEL # goramamo 11/08/01 - Modified code to display hardware provider uniformly # everywhere for Sun Microsystems # goramamo 10/30/01 - Modified date format to YYYY-MM-DD # goramamo 10/15/01 - Creation # ##************************************************************* use strict; package Ptdpm1; use Carp; require 5.005; #require 5.6.1; require Exporter; use ecmErrorMsgs; use Ptdpm0; use Ptdpm2; use Ptdpm3; use Ptdpm14; use Ptdpm15; use Ptdpm16; #****************************************** # Export Subroutines #****************************************** @Ptdpm1::ISA = ('Exporter'); @Ptdpm1::EXPORT = qw( &getSysSummary &getHWDetails &getCPUDetails &getIODDetails ); #****************************************** # Global Variables #****************************************** use constant NOT_FOUND => -1; use constant DETAIL_SP => ' '; use constant COLON_CHR => ':'; use constant DOT_CHR => '.'; use constant UNDERLINE_CHR => '_'; use constant NIL => ''; $Ptdpm1::arch = NIL; @Ptdpm1::CPUdata = (); @Ptdpm1::IODdata = (); #****************************************** # Exported Subroutines #****************************************** sub getSysSummary { debugTrace('Calling... getSysSummary()'); #Arguments: none #Outputs : array containing system summary #Function : returns array containing system summary my @syssum = (); my $domain = NIL; my $value = NIL; my $j = 0; my $hostname = getHostName(); my $host = left(DOT_CHR, $hostname); my @admnt = split (' ', getAdminEntries("$host")); foreach $value (@admnt) { if ($value =~ m/^$host[.]/) { $domain = right(DOT_CHR, $value); last; } } if ($domain eq NIL) { my @admnt = getDomainName(); foreach $value (@admnt) { if ($value =~ m/^Name:\s*$host[.]/) { $domain = right(DOT_CHR, $value); last; } } } my @cc = getCCDetails(); $j = 0; $syssum[$j++] = joinValue($Ptdpm2::HOSTNAME_TAG, $hostname); $syssum[$j++] = joinValue($Ptdpm2::DOMAIN_TAG, $domain); $syssum[$j++] = $cc[0]; $syssum[$j++] = $cc[1]; $syssum[$j++] = $cc[2]; return @syssum; } sub getHWDetails { debugTrace('Calling... getHWDetails()'); #Arguments: none #Outputs : array containing hardware details #Function : get hardware details, filters it and returns required data #my (@hwdet) = (); #my (@hwdetps) = (); my (@hwdata) = (); #@hwdet = getHardwareDetails(); #@hwdetps = filterhwdetails(@hwdet); #@hwdata = formathwdetails(@hwdetps); @hwdata = getAIXHWSummary(); return @hwdata; } sub getCPUDetails { debugTrace('Calling... getCPUDetails()'); return @Ptdpm1::CPUdata; } sub getIODDetails { debugTrace('Calling... getIODDetails()'); return @Ptdpm1::IODdata; } #****************************************** # Non-exported Subroutines #****************************************** sub getCCDetails { debugTrace('Calling... getCCDetails()'); #Arguments: none #Outputs : array containing CC details #Function : reads CC related files and return the version and build date my @ccdet = getCCinfo(); my @ccdet2 = (); my $j = 0; for ($j = 0 ; $j < 3 ; $j++) { $ccdet[$j] = NIL if (!defined $ccdet[$j]); } $ccdet[0] = joinValue($Ptdpm2::CC_PARTNER_INFO_TAG, $ccdet[0]); $ccdet[1] = joinValue($Ptdpm2::CC_SOFTWARE_VERSION_TAG, $ccdet[1]); @ccdet2 = split (' ', $ccdet[2]); ### Date conversion to be done $ccdet2[2] = NIL; $ccdet[2] = joinValue($Ptdpm2::CC_SOFTWARE_BUILD_DATE_TAG, $ccdet2[2]); return @ccdet; } sub filterhwdetails { #Arguments: os #Outputs : array containing filtered hardware details #Function : filtering of collected hw data ## This subroutine is not exported my (@hwdet) = @_; my (@hwdetps) = (); my $j = 0; my $m = 0; ##Initialization my $BasicFlag = 1; my $FanFlag = 0; my $PowerFlag = 0; my $SysTmpFlag = 0; my $ASICFlag = 0; my $PROMFlag = 0; my $OtherFlag = 0; # Added to fix bug 2226505 my $RowID = ''; my (@rowid) = (); my $Row = ''; my (@splitrow) = (); my $hwdetsize = 0; $hwdetsize = scalar(@hwdet); $hwdetsize = $hwdetsize--; for ($m = 0 ; $m < $hwdetsize ; $m++) { $hwdet[$m] = trim($hwdet[$m]); if ($hwdet[$m] ne '') { if (($BasicFlag == 1) && (substr($hwdet[$m], 0, 3) ne '===')) { @splitrow = split (':', $hwdet[$m]); if (@splitrow > 1) { $hwdetps[$j] = joinValue('GENER', $hwdet[$m]); $j++; } } else { $BasicFlag = 0; $Row = $hwdet[$m]; if (substr($hwdet[$m], 0, 3) eq '===') { @rowid = split (' ', $hwdet[$m], 2); if (!defined $rowid[1]) { $rowid[1] = ''; } $RowID = substr($rowid[1], 0, 5); $hwdetps[$j] = joinValue($RowID, $Row); $j++; } ## Added to fix bug 2226505 - Begin elsif (($OtherFlag == 1) || (substr($hwdet[$m], 0, 15) eq "Detached Boards")) { $OtherFlag = 1; $RowID = 'OTHER'; if (substr($hwdet[$m], 0, 5) eq "Fans:") { $OtherFlag = 2; $FanFlag = 1; #$PowerFlag = 1; $RowID = 'FANS '; } elsif (substr($hwdet[$m], 0, 19) eq "System Temperatures") { $OtherFlag = 2; $SysTmpFlag = 1; #$PowerFlag = 1; $RowID = 'SYTMP'; } elsif (substr($hwdet[$m], 0, 15) eq "Power Supplies:") { $OtherFlag = 2; $SysTmpFlag = 2; $PowerFlag = 1; $RowID = 'POWER'; } $hwdetps[$j] = joinValue($RowID, $hwdet[$m]); $j++; } ## Added to fix bug 2226505 - End ##New Additions elsif (($FanFlag == 1) || (substr($hwdet[$m], 0, 5) eq "Fans:")) { $FanFlag = 1; $RowID = 'FANS '; if (substr($hwdet[$m], 0, 19) eq "System Temperatures") { $FanFlag = 2; $SysTmpFlag = 1; ## Do I have to set this flag ? #$PowerFlag = 1; $RowID = 'SYTMP'; } elsif (substr($hwdet[$m], 0, 15) eq "Power Supplies:") { $FanFlag = 2; $SysTmpFlag = 2; $PowerFlag = 1; $RowID = 'POWER'; } $hwdetps[$j] = joinValue($RowID, $hwdet[$m]); $j++; } elsif (($SysTmpFlag == 1) || (substr($hwdet[$m], 0, 19) eq "System Temperatures")) { $SysTmpFlag = 1; $RowID = 'SYTMP'; if (substr($hwdet[$m], 0, 3) eq '===') { $SysTmpFlag = 2; } elsif (substr($hwdet[$m], 0, 15) eq "Power Supplies:") { $SysTmpFlag = 2; $PowerFlag = 1; $RowID = 'POWER'; } $hwdetps[$j] = joinValue($RowID, $hwdet[$m]); $j++; } elsif (($PowerFlag == 1) || (substr($hwdet[$m], 0, 15) eq "Power Supplies:")) { $FanFlag = 2; $SysTmpFlag = 2; $PowerFlag = 1; $RowID = 'POWER'; if (substr($hwdet[$m], 0, 3) eq '===') { $PowerFlag = 2; $ASICFlag = 1; } elsif (index($hwdet[$m], "ASIC Revisions") > -1) { $PowerFlag = 2; $ASICFlag = 1; $RowID = 'ASIC '; } elsif ((index($hwdet[$m], "PROM revisions") > -1) || (index($hwdet[$m], "OpenBoot firmware revision") > -1)) { #$ASICFlag = 2; $PowerFlag = 2; $PROMFlag = 1; $RowID = 'PROM '; } $hwdetps[$j] = joinValue($RowID, $hwdet[$m]); $j++; } elsif (($ASICFlag == 1) || (substr($hwdet[$m], 0, 14) eq "ASIC Revisions")) { $PowerFlag = 2; $SysTmpFlag = 2; $RowID = 'ASIC '; if ((index($hwdet[$m], "PROM revisions") > -1) || (index($hwdet[$m], "OpenBoot firmware revision") > -1)) { $ASICFlag = 2; $PowerFlag = 2; $PROMFlag = 1; $RowID = 'PROM '; } elsif (substr($hwdet[$m], 0, 3) eq '===') { $ASICFlag = 2; } $hwdetps[$j] = joinValue($RowID, $hwdet[$m]); $j++; } elsif (($PROMFlag == 1) || (index($hwdet[$m], "PROM revisions") > -1) || (index($hwdet[$m], "OpenBoot firmware revision") > -1)) { $PowerFlag = 2; $ASICFlag = 2; $SysTmpFlag = 2; $RowID = 'PROM '; $hwdetps[$j] = joinValue($RowID, $hwdet[$m]); $j++; } else { $hwdetps[$j] = joinValue($RowID, $hwdet[$m]); $j++; } } } } my ($size) = 0; $size = scalar(@hwdetps); return @hwdetps; } sub formathwdetails { #Arguments: os #Outputs : array containing formatted hardware details #Function : more text processing ## This subroutine is not exported my (@hwdetails) = @_; my (@hwdata) = (); my (@cpudata) = (); my (@ioddata) = (); my (@nicdata) = (); my $NoOfBrd = 0; my $NoOfCPU = 0; my $NoOfCards = 0; my $NoOfFan = 0; my $NoOfPower = 0; my $NoOfProm = 0; my $CPUDone = 0; my $FanDone = 0; my $IOCardsDone = 0; my $sparc3flag = 0; my $sparc3pflag = 0; my $sparc2eflag = 0; my $offset = 0; my (@BrdName) = ('dummy'); my $CPUdet = ''; my $RefRecID = ''; my $RecID = ''; my $RecData = ''; my $rest = ''; my $value = ''; my $numbr = 0; my (@RefArray2) = (); my (@RefArray4) = (); my $RefArraySize = 0; my $RfArraySize = 0; my $BrdNameSize = 0; my $m = 0; my $p = 0; my $q = 0; my $r = 0; my $s = 0; my $j = 11; my $n = 0; my $t = 0; my $i = 0; my $u = 0; my $w = 0; my $size = 0; my $model = ''; my $memory = ''; my $clock = ''; my $type = ''; my @vendor1 = (); my (@hwpro) = (); my (@promcpuindex) = (); my (@promiodindex) = (); my $prom = ''; my $ioprom = ''; my (@promdet) = (); my (@promdetarr) = (); my (@machine) = (); my $RefArray = ''; my $hwdetailssize = 0; $hwdetailssize = scalar(@hwdetails); @vendor1 = getHardwareProvider(); @hwpro = split (':', $vendor1[0]); @hwpro = split ('_', $hwpro[1]); my $mach = getInstructionSetList(); # Added on 01/07/2002 if (index($mach, 'sparcv9') > -1) { $mach = '64-bit sparcv9'; } else { $mach = getProcessorType(); } $Ptdpm1::arch = getArchType(); my $arch = join (' ', $mach, $Ptdpm1::arch); # Added on 01/07/2002 for ($n = 0 ; $n < $hwdetailssize ; $n++) { #print STDERR "> $hwdetails[$n] <"; ## debug ($RefRecID, $RefArray) = split (':', $hwdetails[$n], 2); $RefArray = trim($RefArray); if ($RefRecID eq 'GENER') { ($RecID, $RecData) = split (':', (substr($hwdetails[$n], 6))); $RecData = trim($RecData); if (index($RecID, "Memory") > -1) { if ((index($RecData, "Mb") > -1) || (index($RecData, "MB") > -1) || (index($RecData, "Megabytes") > -1)) { $memory = substr($RecData, 0, index($RecData, "M")); } elsif (index($RecData, "GB") > -1) { $memory = substr($RecData, 0, index($RecData, "G")); $memory = ($memory * 1024); } #$hwdata[4] = joinValue($Ptdpm2::MEMORY_SIZE_IN_MB_TAG, $memory); } elsif (index($RefArray, "clock") > -1) { $clock = substr($RecData, 0, index($RecData, "M")); #$hwdata[3] = joinValue($Ptdpm2::CLOCK_FREQUENCY_IN_MHZ_TAG, $clock); } elsif (index($hwdetails[$n], "Configuration") > -1) { $RecData = filterSysConfig($RecData); # 01/07/2002 $hwdata[1] = joinValue($Ptdpm2::SYSTEM_CONFIGURATION_TAG, $RecData); } } elsif ($RefRecID eq 'CPUs ') { if (($CPUDone == 1) || ($RefArray eq '') || (substr($RefArray, 0, 3) eq '===') || (substr($RefArray, 0, 3) eq "Brd") || (substr($RefArray, 0, 3) eq "Run") || (substr($RefArray, 0, 3) eq '---') || (substr($RefArray, 0, 8) eq "FRU Name") || (substr($RefArray, 0, 4) eq "Port") || (substr($RefArray, 0, 4) eq "Slot") || (substr($RefArray, 0, 2) eq "E\$") || (substr($RefArray, 0, 3) eq "CPU") || (substr($RefArray, 0, 1) eq "\n")) { } else { $value = 'Sun Microsystems'; if (index($arch, 'i686') > -1) { $value = 'Intel'; } #$hwdata[$j] = joinValue($Ptdpm2::CPU_VENDOR_TAG, $value); $j++; $cpudata[$u] = joinValue($Ptdpm2::CPU_VENDOR_TAG, $value); $u++; $numbr = 0; $sparc3flag = 0; $sparc3pflag = 0; $sparc2eflag = 0; if (index($RefArray, "-III") > -1) { $sparc3flag = -1; $sparc3pflag = -1 if (index($RefArray, "-III+ ") > -1); } elsif (index($RefArray, "-IIe ") > -1) { $sparc2eflag = -2; } @RefArray2 = split (' ', $RefArray); if ($sparc2eflag < 0) { $numbr = $RefArray2[3 + $sparc2eflag]; $sparc2eflag = -1; } else { $numbr = $RefArray2[3 + $sparc3flag]; } $numbr =~ s/MHz//; #$hwdata[$j] = joinValue($Ptdpm2::CPU_SPEED_IN_MHZ_TAG, $numbr); $j++; $cpudata[$u] = joinValue($Ptdpm2::CPU_SPEED_IN_MHZ_TAG, $numbr); $u++; $numbr = 0; if ($sparc2eflag < 0) { $numbr = $RefArray2[4 + $sparc2eflag]; } else { $numbr = $RefArray2[4 + $sparc3flag]; } if (index($numbr, "KB") > -1) { $numbr =~ s/KB//; $numbr = ($numbr / 1024); } #$hwdata[$j] = joinValue($Ptdpm2::ECACHE_IN_MB_TAG, $numbr); $j++; $cpudata[$u] = joinValue($Ptdpm2::ECACHE_IN_MB_TAG, $numbr); $u++; $value = ''; if ($sparc2eflag < 0) { $value = $RefArray2[5 + $sparc2eflag]; } else { $value = $RefArray2[5 + $sparc3flag]; } #$hwdata[$j] = joinValue($Ptdpm2::CPU_IMPLEMENTATION_TAG, $value); $j++; $cpudata[$u] = joinValue($Ptdpm2::CPU_IMPLEMENTATION_TAG, $value); $u++; #PROM details has to come here #$promcpuindex[$p] = $j; $p++; $promcpuindex[$p] = $u; $p++; #$hwdata[$j] = joinValue($Ptdpm2::REVISION_TAG, ''); $j++; $cpudata[$u] = joinValue($Ptdpm2::REVISION_TAG, ''); $u++; #$hwdata[$j] = joinValue($Ptdpm2::CPU_MODULE_TAG, ''); $j++; $value = ''; if ($sparc2eflag < 0) { $value = $RefArray2[6 + $sparc2eflag]; } else { $value = $RefArray2[6 + $sparc3flag]; } #$hwdata[$j] = joinValue($Ptdpm2::MASK_TAG, $value); $j++; $cpudata[$u] = joinValue($Ptdpm2::MASK_TAG, $value); $u++; $NoOfCPU++; ##Number of boards calculation $BrdNameSize = scalar(@BrdName); for ($m = 0 ; $m < $BrdNameSize ; $m++) { if ($RefArray2[0] eq $BrdName[$m]) { last; } elsif ($m == ($BrdNameSize - 1)) { $BrdName[$m + 1] = $RefArray2[0]; } } } } elsif ($RefRecID eq 'Memor') { if ($CPUDone == 0) { $hwdata[6] = joinValue($Ptdpm2::NUMBER_OF_CPUS_TAG, $NoOfCPU); $NoOfBrd = scalar(@BrdName); $NoOfBrd = $NoOfBrd - 1; $hwdata[7] = joinValue($Ptdpm2::NUMBER_OF_CPU_BOARDS_TAG, $NoOfBrd); $CPUDone = 1; } } elsif (($RefRecID eq 'IO Ca') || ($RefRecID eq 'IO De')) { if ($CPUDone == 0) { $hwdata[6] = joinValue($Ptdpm2::NUMBER_OF_CPUS_TAG, $NoOfCPU); $NoOfBrd = scalar(@BrdName); $NoOfBrd = $NoOfBrd - 1; $hwdata[7] = joinValue($Ptdpm2::NUMBER_OF_CPU_BOARDS_TAG, $NoOfBrd); $CPUDone = 1; } if ( (substr($RefArray, 0, 11) eq "No failures") || ## Added to fix bug 2226505 (substr($RefArray, 0, 15) eq "Detached Boards") || ## added for systhost3 (substr($RefArray, 0, 6) eq "Failed") ) { if ($IOCardsDone == 0) { $hwdata[8] = joinValue($Ptdpm2::NUMBER_OF_IO_DEVICES_TAG, $NoOfCards); $IOCardsDone = 1; } } elsif (($IOCardsDone == 1) || ($RefArray eq '') || (substr($RefArray, 0, 3) eq '===') || (substr($RefArray, 0, 3) eq "Brd") || (substr($RefArray, 0, 3) eq "Bus") || (substr($RefArray, 0, 3) eq "IO ") || (substr($RefArray, 0, 8) eq "FRU Name") || (substr($RefArray, 0, 4) eq "Slot") || (substr($RefArray, 0, 6) eq "ERROR:") || (substr($RefArray, 0, 3) eq '---') || (substr($RefArray, 0, 1) eq "\n")) { } else { @RefArray4 = split (' ', $RefArray); for ($i = 0 ; $i < 11 ; $i++) { if (!defined $RefArray4[$i]) { $RefArray4[$i] = ''; } } chomp($RefArray4[1]); $value = ''; if (index($RefArray, 'SUN') > -1) { $value = 'Sun Microsystems'; } #$hwdata[$j] = joinValue($Ptdpm2::VENDOR_TAG,$value); $j++; $ioddata[$w] = joinValue($Ptdpm2::VENDOR_TAG, $value); $w++; $offset = 0; if ($sparc3flag < 0) { $offset = 5; } #$hwdata[$j] = joinValue($Ptdpm2::NAME_TAG, $RefArray4[4+$offset]); $j++; if ($sparc3pflag < 0) { $ioddata[$w] = joinValue($Ptdpm2::NAME_TAG, "$RefArray4[8] $RefArray4[9] $RefArray4[10]"); } else { $ioddata[$w] = joinValue($Ptdpm2::NAME_TAG, "$RefArray4[4+$offset] $RefArray4[5+$offset] $RefArray4[6+$offset] $RefArray4[7+$offset]" ); } $w++; if ($sparc3flag < 0) { $offset = 3; } $numbr = 0; $numbr = $RefArray4[2 + $offset]; $numbr =~ s/MHz//; #$hwdata[$j] = joinValue($Ptdpm2::FREQUENCY_IN_MHZ_TAG, $numbr); $j++; $ioddata[$w] = joinValue($Ptdpm2::FREQUENCY_IN_MHZ_TAG, $numbr); $w++; #$hwdata[$j] = joinValue($Ptdpm2::BUS_TYPE_TAG, $RefArray4[1]); $j++; $ioddata[$w] = joinValue($Ptdpm2::BUS_TYPE_TAG, $RefArray4[1]); $w++; #$hwdata[$j] = joinValue($Ptdpm2::MODEL_TAG, $RefArray4[6]); $j++; #$promiodindex[$r] = $j; $r++; $promiodindex[$r] = $w; $r++; #$hwdata[$j] = joinValue($Ptdpm2::REVISION_TAG, ''); $j++; $ioddata[$w] = joinValue($Ptdpm2::REVISION_TAG, ''); $w++; #$hwdata[$j] = joinValue($Ptdpm2::TYPE_TAG, $type); $j++; # Type PCI SCSI $NoOfCards++; } } elsif ($RefRecID eq 'FANS ') { if (($RefArray eq '') || (substr($RefArray, 0, 4) eq "Fans") || (substr($RefArray, 0, 3) eq '===') || (substr($RefArray, 0, 8) eq "Fan Bank") || (substr($RefArray, 0, 3) eq '---') || (substr($RefArray, 0, 8) eq "FRU Name") || (substr($RefArray, 0, 1) eq "\n") || (substr($RefArray, 0, 13) eq "Unit Status") || (substr($RefArray, 0, 1) eq "\n")) { } else { @RefArray2 = split (' ', $RefArray); $RefArraySize = scalar(@RefArray2); $NoOfFan++; } } elsif ($RefRecID eq 'POWER') { if (($RefArray eq '') || (substr($RefArray, 0, 3) eq '===') || (substr($RefArray, 0, 6) eq "Supply") || (substr($RefArray, 0, 6) eq "Power ") || (substr($RefArray, 0, 3) eq '---') || (substr($RefArray, 0, 3) eq "VDC") || (substr($RefArray, 0, 7) eq "Current") || (substr($RefArray, 0, 8) eq "FRU Name") || (substr($RefArray, 0, 1) eq "\n")) { } else { @RefArray2 = split (' ', $RefArray); $RfArraySize = scalar(@RefArray2); $NoOfPower++; } } elsif ($RefRecID eq 'HW Re') { if ($FanDone == 0) { $hwdata[9] = joinValue($Ptdpm2::NUMBER_OF_FANS_TAG, $NoOfFan); $hwdata[10] = joinValue($Ptdpm2::NUMBER_OF_POWER_SUPPLIES_TAG, $NoOfPower); $FanDone = 1; } } elsif ($RefRecID eq 'PROM ') { if (($RefArray eq '') || (substr($RefArray, 0, 6) eq "System") || (substr($RefArray, 0, 3) eq '---') || (substr($RefArray, 0, 1) eq "\n")) { } else { chomp($RefArray); if (index($RefArray, "OBP") > -1) { @promdet = split ("POST", $RefArray); @promdet = split ("OBP", $promdet[0]); $promdetarr[$t] = "OBP $promdet[1]"; $t++; } if (index($RefArray, "FCODE") > -1) { @promdet = split ("iPOST", $RefArray); @promdet = split ("FCODE", $promdet[0]); #$hwdata[$promiodindex[$s]] = joinValue($Ptdpm2::REVISION_TAG, "FCODE $promdet[1]"); $ioddata[$promiodindex[$s]] = joinValue($Ptdpm2::REVISION_TAG, "FCODE $promdet[1]"); $ioprom = "FCODE $promdet[1]"; $s++; } $NoOfProm++; } } ## Added to fix bug 2226505 - Begin elsif ($RefRecID eq 'OTHER') { if (substr($RefArray, 0, 15) eq "Detached Boards") { if ($IOCardsDone == 0) { $hwdata[8] = joinValue($Ptdpm2::NUMBER_OF_IO_DEVICES_TAG, $NoOfCards); $IOCardsDone = 1; } } } ## Added to fix bug 2226505 - End } #die; # debug $size = scalar(@promdetarr); for ($i = 0 ; $i < $size ; $i++) { if ($i == 0) { $prom = $promdetarr[0]; } else { if ($prom ne $promdetarr[$i]) { $prom = ''; $i = $size; } } } $size = scalar(@promcpuindex); for ($i = 0 ; $i < $size ; $i++) { #$hwdata[$promcpuindex[$i]] = joinValue($Ptdpm2::REVISION_TAG, $prom); $cpudata[$promcpuindex[$i]] = joinValue($Ptdpm2::REVISION_TAG, $prom); } $size = scalar(@promiodindex); for ($i = 0 ; $i < $size ; $i++) { #$hwdata[$promiodindex[$i]] = joinValue($Ptdpm2::REVISION_TAG, $ioprom); $ioddata[$promiodindex[$i]] = joinValue($Ptdpm2::REVISION_TAG, $ioprom); } my (@diskinfo) = (); my $totalDiskCap = 0; my $diskCap = 0; my $line = ''; @diskinfo = getDiskInfo(); foreach $line (@diskinfo) { $_ = $line; ($diskCap) = /\w+\s+(\w+)/i; # get at the disk capacity column $totalDiskCap += $diskCap; } $totalDiskCap = sprintf('%.3f', $totalDiskCap / (1024 * 1024)); # When there is no clock freq info avalaible, default it to 0 $clock = trim($clock); if (!(($clock =~ /^[0-9]+$/) || ($clock =~ /^\d+\.\d*$/))) { #$clock = getGetConfig('CLK_TCK'); $clock = 0; throwECMError('NotAbleToCollect', $Ptdpm2::CLOCK_FREQUENCY_IN_MHZ_TAG); } $hwdata[0] = joinValue($Ptdpm2::HARDWARE_PROVIDER_TAG, "$hwpro[0] $hwpro[1]"); #$hwdata[1] = joinValue($Ptdpm2::SYSTEM_CONFIGURATION_TAG, $RecData); $hwdata[2] = joinValue($Ptdpm2::MACHINE_ARCHITECTURE_TAG, $arch); $hwdata[3] = joinValue($Ptdpm2::CLOCK_FREQUENCY_IN_MHZ_TAG, $clock); $hwdata[4] = joinValue($Ptdpm2::MEMORY_SIZE_IN_MB_TAG, $memory); $hwdata[5] = joinValue($Ptdpm2::TOTAL_LOCAL_DISK_SPACE_IN_GB_TAG, $totalDiskCap); $hwdata[6] = joinValue($Ptdpm2::NUMBER_OF_CPUS_TAG, $NoOfCPU); $hwdata[7] = joinValue($Ptdpm2::NUMBER_OF_CPU_BOARDS_TAG, $NoOfBrd); #$hwdata[8] = joinValue($Ptdpm2::NUMBER_OF_MEMORY_BANKS_TAG, ''); $hwdata[8] = joinValue($Ptdpm2::NUMBER_OF_IO_DEVICES_TAG, $NoOfCards); $hwdata[9] = joinValue($Ptdpm2::NUMBER_OF_FANS_TAG, $NoOfFan); $hwdata[10] = joinValue($Ptdpm2::NUMBER_OF_POWER_SUPPLIES_TAG, $NoOfPower); @hwdata = trim1DimArrayAfterSplit(@hwdata); @cpudata = trim1DimArrayAfterSplit(@cpudata); @ioddata = trim1DimArrayAfterSplit(@ioddata); @nicdata = getNetworkInterfaceDetails(); @nicdata = trim1DimArrayAfterSplit(@nicdata); @hwdata = verifyNotNullFields('MGMT_HC_HARDWARE_MASTER', \@hwdata); if (scalar(@hwdata) > 0) { @hwdata = verifyNumericFields('MGMT_HC_HARDWARE_MASTER', \@hwdata); } @cpudata = verifyNotNullFields('MGMT_HC_CPU_DETAILS', \@cpudata); if (scalar(@cpudata) > 0) { @cpudata = verifyNumericFields('MGMT_HC_CPU_DETAILS', \@cpudata); } @ioddata = verifyNotNullFields('MGMT_HC_IOCARD_DETAILS', \@ioddata); if (scalar(@ioddata) > 0) { @ioddata = verifyNumericFields('MGMT_HC_IOCARD_DETAILS', \@ioddata); } @nicdata = verifyNotNullFields('MGMT_HC_NIC_DETAILS', \@nicdata); if (scalar(@nicdata) > 0) { @nicdata = verifyNumericFields('MGMT_HC_NIC_DETAILS', \@nicdata); } $size = 0; $size = scalar(@cpudata); for ($i = 0 ; $i < $size ; $i++) { $hwdata[$j] = $cpudata[$i]; $j++; } $size = 0; $size = scalar(@ioddata); for ($i = 0 ; $i < $size ; $i++) { $hwdata[$j] = $ioddata[$i]; $j++; } $size = 0; $size = scalar(@nicdata); for ($i = 0 ; $i < $size ; $i++) { $hwdata[$j] = $nicdata[$i]; $j++; } @Ptdpm1::CPUdata = @cpudata; @Ptdpm1::IODdata = @ioddata; return @hwdata; } # 01/07/2002 sub filterSysConfig { my $RecData = $_[0]; my (@filter) = (); my (@in1) = (); my (@in2) = (); my $syscon = ''; my $in2size = 0; my $i = 0; my $j = 0; my $k = 0; my $l = 0; @filter = ('Sun', 'Microsystems'); @in1 = split ('\(', $RecData); $k = scalar(@in1); if ($k > 2) { $k = $k - 1; $RecData = $in1[0]; for ($l = 1 ; $l < $k ; $l++) { $RecData = join ("\(", $RecData, $in1[$l]); } $in1[0] = $RecData; } @in2 = split (' ', $in1[0]); if (($in2[0] eq $filter[0]) && ($in2[1] eq $filter[1])) { $j = 2; if ($in2[2] eq $Ptdpm1::arch) { $j = 3; } $in2size = scalar(@in2); for ($i = $j ; $i < $in2size ; $i++) { $syscon = join (' ', $syscon, $in2[$i]); # rest of the array ... } } return $syscon; } sub getAIXHWSummary { my (@hwdata) = (); my (@cpudata) = (); my (@ioddata) = (); my (@nicdata) = (); my $i = 0; my $j = 0; my $cputype = ''; my $mhz = 0; my $cachesize = 0; my $devicename = ''; my $devicetype = ''; my $bustype = ''; my $model = ''; my $devicevendor = ''; my $size = 0; my $systembus = ''; my @systembusdata = (); my $hwvendor = getHardwareProvider(); my $mach = getHardwareName(); my $arch = getArchType(); # Use system bus frequency for clock frequency chomp( $systembus = `$Ptdpm0::LSATTR -El sys0 | $Ptdpm0::EGREP "System Bus Frequency"`); @systembusdata=split(" ",$systembus); my $clock = $systembusdata[1]/1000000; my $memory = getTotalMemory(); # in MB my $totalDiskCap = getTotalLocalDiskSpaceInGB(); my (@cpuinfo) = getProcessorInfo(); my (@ioinfo) = getIOInfo(); my $NoOfCPU = scalar(@cpuinfo); my $NoOfIODev = scalar(@ioinfo); $hwdata[0] = joinValue($Ptdpm2::HARDWARE_PROVIDER_TAG, $hwvendor); $hwdata[1] = joinValue($Ptdpm2::SYSTEM_CONFIGURATION_TAG, $mach); $hwdata[2] = joinValue($Ptdpm2::MACHINE_ARCHITECTURE_TAG, $arch); $hwdata[3] = joinValue($Ptdpm2::CLOCK_FREQUENCY_IN_MHZ_TAG, $clock); $hwdata[4] = joinValue($Ptdpm2::MEMORY_SIZE_IN_MB_TAG, $memory); $hwdata[5] = joinValue($Ptdpm2::TOTAL_LOCAL_DISK_SPACE_IN_GB_TAG, $totalDiskCap); $hwdata[6] = joinValue($Ptdpm2::NUMBER_OF_CPUS_TAG, $NoOfCPU); $hwdata[7] = joinValue($Ptdpm2::NUMBER_OF_CPU_BOARDS_TAG, $NoOfCPU); $hwdata[8] = joinValue($Ptdpm2::NUMBER_OF_IO_DEVICES_TAG, $NoOfIODev); $hwdata[9] = joinValue($Ptdpm2::NUMBER_OF_FANS_TAG, ''); $hwdata[10] = joinValue($Ptdpm2::NUMBER_OF_POWER_SUPPLIES_TAG, ''); $j = 0; for ($i = 0; $i < $NoOfCPU; $i++) { ($mhz, $cputype) = split(' ', $cpuinfo[$i]); $cpudata[$j++] = joinValue($Ptdpm2::CPU_VENDOR_TAG, $hwvendor); $cpudata[$j++] = joinValue($Ptdpm2::CPU_SPEED_IN_MHZ_TAG, $mhz); $cpudata[$j++] = joinValue($Ptdpm2::ECACHE_IN_MB_TAG, 0); $cpudata[$j++] = joinValue($Ptdpm2::CPU_IMPLEMENTATION_TAG, $cputype); $cpudata[$j++] = joinValue($Ptdpm2::REVISION_TAG, ''); $cpudata[$j++] = joinValue($Ptdpm2::MASK_TAG, 0); } $j = 0; for ($i = 0; $i < $NoOfIODev; $i++) { ($devicename, $devicevendor, $devicetype, $bustype, $model) = split(' ', $ioinfo[$i]); $ioddata[$j++] = joinValue($Ptdpm2::VENDOR_TAG, $devicevendor); $ioddata[$j++] = joinValue($Ptdpm2::NAME_TAG, $devicename); $ioddata[$j++] = joinValue($Ptdpm2::FREQUENCY_IN_MHZ_TAG, 0); $ioddata[$j++] = joinValue($Ptdpm2::BUS_TYPE_TAG, $bustype); $ioddata[$j++] = joinValue($Ptdpm2::REVISION_TAG, ''); } @hwdata = trim1DimArrayAfterSplit(@hwdata); @cpudata = trim1DimArrayAfterSplit(@cpudata); @ioddata = trim1DimArrayAfterSplit(@ioddata); @nicdata = getNetworkInterfaceDetails(); @nicdata = trim1DimArrayAfterSplit(@nicdata); @hwdata = verifyNotNullFields('MGMT_HC_HARDWARE_MASTER', \@hwdata); if (scalar(@hwdata) > 0) { @hwdata = verifyNumericFields('MGMT_HC_HARDWARE_MASTER', \@hwdata); } @cpudata = verifyNotNullFields('MGMT_HC_CPU_DETAILS', \@cpudata); if (scalar(@cpudata) > 0) { @cpudata = verifyNumericFields('MGMT_HC_CPU_DETAILS', \@cpudata); } @ioddata = verifyNotNullFields('MGMT_HC_IOCARD_DETAILS', \@ioddata); if (scalar(@ioddata) > 0) { @ioddata = verifyNumericFields('MGMT_HC_IOCARD_DETAILS', \@ioddata); } @nicdata = verifyNotNullFields('MGMT_HC_NIC_DETAILS', \@nicdata); if (scalar(@nicdata) > 0) { @nicdata = verifyNumericFields('MGMT_HC_NIC_DETAILS', \@nicdata); } $size = 0; $size = scalar(@cpudata); $j = 11; for ($i = 0 ; $i < $size ; $i++) { $hwdata[$j] = $cpudata[$i]; $j++; } $size = 0; $size = scalar(@ioddata); for ($i = 0 ; $i < $size ; $i++) { $hwdata[$j] = $ioddata[$i]; $j++; } $size = 0; $size = scalar(@nicdata); for ($i = 0 ; $i < $size ; $i++) { $hwdata[$j] = $nicdata[$i]; $j++; } @Ptdpm1::CPUdata = @cpudata; @Ptdpm1::IODdata = @ioddata; return @hwdata; } 1; # End of the Program