package ReportGen::Globs; use strict; # various command line options routines require Exporter; use ReportGen::ObjDbase; @ReportGen::Globs::ISA = qw ( Exporter ); @ReportGen::Globs::EXPORT = qw ( $MByte $Mbit $GByte &GetCfg &FullDir &FullInFName &FullOutFName &ObjName2Type &VendType &Percent &System &MkDir ); use vars qw($MByte $Mbit $GByte); $MByte = 1024*1024; $Mbit = $MByte/8; $GByte = $MByte*1024; my $RepDir = 'polyrep'; my $CfgFile = 'reportgen.cfg'; my @ObjTypeGroups = ( { map { $_ => 'throughput/price (req/sec per $1000)' } qw ( rep.rate_price.ratio ) }, { map { $_ => 'hit rate/price (hit/sec per $1000)' } qw ( hit.rate_price.ratio ) }, { map { $_ => 'throughput/space (req/sec per RU)' } qw ( rep.rate_rack.space.ratio ) }, { map { $_ => 'hit rate/space (hit/sec per RU)' } qw ( hit.rate_rack.space.ratio ) }, { map { $_ => 'time (min)' } qw ( time_till_first ) }, { map { $_ => 'improvement (%)' } qw ( save ) }, { map { $_ => 'rate (conn/sec)' } qw ( conn.*rate ) }, { map { $_ => 'rate (xact/sec)' } qw ( rate ) }, { map { $_ => 'time/kilobyte (msec)' } qw ( byte.rptm.mean ) }, { map { $_ => 'time (msec)' } qw ( rptm.mean rptm.median duration ) }, { map { $_ => 'count' } qw ( use.mean count level started finished ) }, { map { $_ => 'ratio (%)' } qw ( ratio.obj ratio.byte ratio ) }, { map { $_ => 'size (bytes)' } qw ( size.mean ) }, { map { $_ => 'price (USD)' } qw ( price ) }, { map { $_ => 'age (hours)' } qw ( age ) }, { map { $_ => 'string' } qw ( name ) }, ); my %VendTypes = ( '_other' => 1, ); sub FullDir { my $label = shift; die() unless defined $label; return "$ENV{POLYREP_DIR}/$label" if defined $ENV{POLYREP_DIR}; my $dir = defined $ENV{TMPDIR} ? $ENV{TMPDIR} : '/tmp'; return "$dir/$RepDir/$label"; } sub FullInFName { my ($label, $fname, $ext) = @_; $ext ||= ''; die("FullFName($label, $fname)") unless defined $fname; my $dir = &FullDir($label); return "$dir/$fname$ext"; } sub FullOutFName { my ($label, $fname, $ext) = @_; $ext ||= ''; die("FullFName($label, $fname)") unless defined $fname; my $dir = &FullDir($label); &MkDir($dir); return "$dir/$fname$ext"; } sub ObjName2Type { my $name = shift; foreach my $group (@ObjTypeGroups) { foreach my $n (keys %{$group}) { return $group->{$n} if $name =~ /$n/x; } } return undef(); } sub VendType { my $v = shift; return undef unless defined($v); # convert to lower case? return $VendTypes{$v} if defined $VendTypes{$v}; return $VendTypes{'_other'}++; } sub Percent { my ($n, $d) = @_; return -1 if abs($d) < 1e-6; return 100*$n/$d; } sub GetCfg { my $opts = ReadDbase($CfgFile); return $opts; } sub System { my ($cmd) = @_; die("$0: `$cmd' failed; probable cause: $!\n") if system($cmd); } sub MkDir { my ($dir) = @_; return if -d $dir; &System("mkdir -p $dir"); }