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");
}
syntax highlighted by Code2HTML, v. 0.9.1