better hardware info for Test::Smoke reports
[email protected] (Abe Timmerman) Sat, 3 Jan 2004 16:10:25 +0100
| Newsgroups | perl.daily-build |
|---|---|
| Organization | ztreet |
| Message-ID | <[email protected]> |
hi smokers,
First of all, the best wishes for 2004!
For the 1.19 release I want to introduce better hardware information in the
smoke-reports. I have some systems I have access to, but most notably no AIX,
HPUX or True64.
I would like you to test the attached script and fill in the blanks for me if
you can.
comments and suggestions also welcome.
tia &&
Good luck,
Abe
--
Perl "configure" is not GNU configure, Perl is not "other GNU program".
Do not confuse one of Perl's licenses with the GNU project itself.
-- Jarkko Hietaniemi on p5p @ 2002-05-27
sysinfo.pl
(text/x-perl, 4.1 KB)
#! /usr/bin/perl -w
use strict;
package SysInfo;
sub new {
my $proto = shift;
my $class = ref $proto ? ref $proto : $proto;
CASE: {
local $_ = $^O;
/aix/i && return bless AIX(), $class;
/darwin|bsd/i && return bless BSD(), $class;
/hp-?ux/i && return bless HPUX(), $class;
/linux/i && return bless Linux(), $class;
/irix/i && return bless IRIX(), $class;
/solaris|sunos|osf/i
&& return bless Solaris(), $class;
/cygwin|mswin32|windows/i
&& return bless Windows(), $class;
}
return bless Generic(), $class;
}
my %info = map { ($_ => undef ) } qw( ncpu cpu cpu_type );
sub AUTOLOAD {
my $self = shift;
use vars qw( $AUTOLOAD );
( my $method = $AUTOLOAD ) =~ s/^.*::(.+)$/\L$1/;
return $self->{ "_$method" } if exists $info{ "$method" };
}
sub __get_cpu_type {
require POSIX;
return (POSIX::uname())[4];
}
sub __get_cpu { return __get_cpu_type() }
sub __get_ncpu { return '?' }
sub Generic {
return {
_cpu_type => __get_cpu_type(),
_cpu => __get_cpu(),
_ncpu => __get_ncpu(),
};
}
sub AIX {
# here we need something with 'lsdev'?
my $aix = Generic();
$aix->{_ncpu} = scalar @{[ `lsdev -C -c processor -S Available` ]};
return $aix;
}
sub HPUX {
# here we need something with 'ioscan' ?
my $hpux = Generic();
$hpux->{_ncpu} = grep /^processor/ => `ioscan -fnkC processor`;
return $hpux;
}
sub BSD {
my %sysctl;
foreach my $name ( qw( model machine ncpu ) ) {
chomp( $sysctl{ $name } = `sysctl hw.$name` );
$sysctl{ $name } =~ s/^hw\.$name\s*[:=]\s*//;
}
return {
_cpu_type => $sysctl{model},
_cpu => $sysctl{machine},
_ncpu => $sysctl{ncpu},
};
}
sub IRIX {
chomp( my $cpu = `hinv -t cpu` );
$cpu =~ s/^CPU:\s+//;
chomp( my @processor = `hinv -c processor` );
my( $cpu_cnt) = grep /\d+.+processors?$/i => @processor;
my $ncpu = (split " ", $cpu_cnt)[0];
my $type = (split " ", $cpu_cnt)[-2];
return {
_cpu_type => $type,
_cpu => $cpu,
_ncpu => $ncpu,
};
}
sub Linux {
local *CPUINFO;
my( $type, $cpu, $ncpu ) = ( __get_cpu_type() );
if ( open CPUINFO, "< /proc/cpuinfo" ) {
chomp( my @cpu_info = <CPUINFO> );
close CPUINFO;
# every processor has its own 'block', so count the blocks
$ncpu = grep /^processor\s+:\s+/ => @cpu_info;
my %info;
my @parts = $type =~ /sparc/
? ('cpu')
: ('model name', 'vendor_id', 'cpu mhz' );
foreach my $part ( @parts ) {
($info{ $part } = (grep /^$part\s+:/i => @cpu_info)[0])
=~ s/^$part\s+:\s+//i;
}
$cpu = $type =~ /sparc/
? $info{cpu}
: sprintf "%s (%s %sMHz)", map $info{ $_ } => @parts
} else {
}
return {
_cpu_type => $type,
_cpu => $cpu,
_ncpu => $ncpu,
};
}
sub Solaris {
my( $psrinfo ) = grep /the .* operates .* mhz/ix => `psrinfo -v`;
my $type = __get_cpu_type();
my( $cpu, $speed ) = $psrinfo =~ /the (\w+) processor.*at (\d+) mhz/i;
$cpu .= " (${speed}MHz)";
my $ncpu = grep /on-line/ => `psrinfo`;
return {
_cpu_type => $type,
_cpu => $cpu,
_ncpu => $ncpu,
};
}
sub Windows {
return {
_cpu_type => $ENV{PROCESSOR_ARCHITECTURE},
_cpu => $ENV{PROCESSOR_IDENTIFIER},
_ncpu => $ENV{NUMBER_OF_PROCESSORS},
};
}
1;
package main;
{
local $^O = 'Generic';
print "info for: '$^O'\n";
my $si = SysInfo->new;
printf " CPU type: %s\n", $si->cpu_type;
printf " CPU: %s\n", $si->cpu;
printf " Number of cpu's: %s\n", $si->ncpu;
}
{
print "info for: '$^O'\n";
my $si = SysInfo->new;
printf " CPU type: %s\n", $si->cpu_type;
printf " CPU: %s\n", $si->cpu;
printf " Number of cpu's: %s\n", $si->ncpu;
}