[Next] [Up] [Previous] [Contents]
Up: Development... Previous: The Parts Server Code

Supplementary Code

#!/usr/local/bin/perl/perl
$family_file = "/usr2/std/fpts/family-list";
$server_log = "/usr2/cuser/fparts/server/server-log";
$server_pid = "/usr2/cuser/fparts/server/server-pid";

while($_ = shift){
 
if(/-p/){
print "Family of Parts Usage Statistics\n\n";

# open the list of Families of Parts.  Only families which are listed in this 
# file will be available for searching
open(FAMILIES, $family_file) || die "Unable to open family list.\n";

# find the right family
while(<FAMILIES>)
  {
    # remove the trailing newline
    chop;

    next unless(/\w/);

    # deal with continuation lines
    while (s/\\$//) { $_ .= <FAMILIES>; }

    # split lines into its parts
    ($directory, $partname) = split(':');

    push(@directories, $directory);
    @directories{$directory} = $partname;
  }

# done with this file
close(FAMILIES);

print "Current families: ".($#directories + 1)."\n\n";

print "Current generated members: \n";

foreach (@directories)
  {
    chop($members = `grep -vc # $_/_tbl`);
    $members -= 2;
    $total_members += $members;

    @generated = <$_-family/*>;
    $total_generated += $#generated + 1;

    ($space = `du -s $_`) =~ s/ .*//;
    $total_space += $space;

    push(@families, sprintf("%-30s: %4d of %5d (%5d kbytes used.)\n",
                            $directories{$_}, $#generated + 1,
                            $members, $space));
  }

print(join("", sort(@families)));

printf("\nTotal generated members       : %4d of %5d (%3d%%)\n\n", 
       $total_generated, $total_members, 
       ($total_generated/$total_members)*100);

printf("Space used: %0.3f mbytes.\n\n", $total_space / 1000);
} # if(/-p/)
elsif(/-s/)
{
print "Family of Parts Generation Server Statistics\n\n";

# remove the -s from the switch, for looking at older logs
s/-s//;
# open the list of Families of Parts.  Only families which are listed in this 
# file will be available for searching
open(SERVER, "$server_log$_") || 
    die "Unable to open server log $server_log$_\n";

(@server_stats) = <SERVER>;

close(SERVER);

foreach (@server_stats)
  {
    s/\.*\s*$//;
    ($process, $time, $report) = /(\d*:\d\d\d):(\d\d:\d\d).*: (.*)/;
    $process =~ s/(\d*):(\d*)/Day $2, Process $1/;

    $_ = $report;
    if((!/ok$/) && ((/connect/) || (/fpts/) || (/Generation/) || 
                    (/Server/) || (/Logfile/)))
      {
        $process_info{$process} .= "$report at $time\n";
      }
  }

foreach $process (sort(keys(%process_info)))
  { 
    print "$process:\n$process_info{$process}";
  }
} # elsif(/-s/)
elsif(/-r/)
{
# keep seven server logs (one week if reset nightly)
unlink("$server_log.7");
rename("$server_log.6", "$server_log.7");
rename("$server_log.5", "$server_log.6");
rename("$server_log.4", "$server_log.6");
rename("$server_log.3", "$server_log.4");
rename("$server_log.2", "$server_log.3");
rename("$server_log.1", "$server_log.2");
system("cp $server_log $server_log.1;".
       "kill -HUP `cat $server_pid`");
} # elsif(/-r/)
else {
  print "Usage: $0 [-p] [-s[.n]] [-r]\n".
        "          -p usage statistics\n".
        "          -s server statistics [.n] log number n (1-7)\n".
        "          -r archive and reset server log\n";
  exit 1;
} # else
} # while($_ = shift);
exit 0;

Last Modified: Wed Aug 28 14:41:29 EDT 1996

Gregory Marr <gregm@alum.wpi.edu>