home *** CD-ROM | disk | FTP | other *** search
- #!/usr/bin/perl
-
- #
- # this output generated from my pstruct perl script, available upon request
- # it's only here so i can figure out the structure lay out
- #
- # struct rusage {
- # struct timeval ru_utime; 00000000 rusage.ru_utime
- # struct timeval ru_stime; 00000008 rusage.ru_stime
- # long ru_maxrss; 00000010 rusage.ru_maxrss
- # long ru_ixrss; 00000014 rusage.ru_ixrss
- # long ru_idrss; 00000018 rusage.ru_idrss
- # long ru_isrss; 0000001c rusage.ru_isrss
- # long ru_minflt; 00000020 rusage.ru_minflt
- # long ru_majflt; 00000024 rusage.ru_majflt
- # long ru_nswap; 00000028 rusage.ru_nswap
- # long ru_inblock; 0000002c rusage.ru_inblock
- # long ru_oublock; 00000030 rusage.ru_oublock
- # long ru_msgsnd; 00000034 rusage.ru_msgsnd
- # long ru_msgrcv; 00000038 rusage.ru_msgrcv
- # long ru_nsignals; 0000003c rusage.ru_nsignals
- # long ru_nvcsw; 00000040 rusage.ru_nvcsw
- # long ru_nivcsw; 00000044 rusage.ru_nivcsw
- # struct timeval ru_exutime; 00000048 rusage.ru_exutime
- # };
- # sizeof(struct rusage) = 0x50 bytes
-
- $rusage_size = 0x50; # unused
- $rusage_t = 'L22';
-
- #
- # struct batch_acct {
- # char quename[MAX_QUEUENAME+1]; 00000000 batch_acct.quename
- # char host[MAXHOSTNAMELEN+1]; 00000010 batch_acct.host
- # time_t submit_time; 00000054 batch_acct.submit_time
- # time_t complete_time; 00000058 batch_acct.complete_time
- # uid_t uid; 0000005c batch_acct.uid
- # gid_t gid; 0000005e batch_acct.gid
- # long aid; 00000060 batch_acct.aid
- # long seqno; 00000064 batch_acct.seqno
- # char rhost[MAXHOSTNAMELEN+1]; 00000068 batch_acct.rhost
- # short rpriority; 000000aa batch_acct.rpriority
- # short qpriority; 000000ac batch_acct.qpriority
- # short nice; 000000ae batch_acct.nice
- # struct rusage rusage; 000000b0 batch_acct.rusage
- # int reserved[8]; 00000100 batch_acct.reserved
- # };
- # sizeof(struct batch_acct) = 0x120 bytes
-
- $batch_acct_size = 0x120;
- $batch_acct_t = 'A16A65x3LLSSLLA65xsssa80i8';
-
- ( $program = $0 ) =~ s:.*/::;
-
- $ok = 'vlq';
- while ($ARGV[0] =~ /^-./) {
- $_ = shift;
- s/^-//;
- foreach $flag (split(//)) {
- if ( $ok !~ /$flag/ ) {
- printf stderr "unknown flag: %s\n", $flag;
- die "usage: $program [-$ok] [batch_acct_file ...]\n";
- }
- die "$program: '$flag' flag already set\n" if $flags{$flag}++;
- }
- }
-
- # set all flags if none set
- @flags{'v','l','q'} = (1,1,1)
- unless $flags{'v'} || $flags{'l'} || $flags{'q'};
-
- unshift (@ARGV, '-') if $#ARGV < $[; # snatch stdin back
-
- $batch_acct = '.' x $batch_acct_size; # don't actually need to pre-extend
-
- $MILLION = 1e6;
-
-
- while ( $file = shift ) {
- open file || die "$program: can't open $file: $!, aborting";
- while (read(file,$batch_acct,$batch_acct_size) == $batch_acct_size) {
-
- $records++;
-
- ( $quename, $host, $submit_time, $complete_time,
- $uid, $gid, $aid, $seqno, $rhost, $rpriority,
- $qpriority, $nice, $rusage, $reserved )
- = unpack ( $batch_acct_t, $batch_acct );
-
- ( $utime_sec, $utime_usec, $stime_sec, $stime_usec,
- $maxrss, $ixrss, $idrss, $isrss, $minflt, $majflt,
- $nswap, $inblock, $oublock, $msgsnd, $msgrcv, $nsignals,
- $nvcsw, $nivcsw, $exutime_sec, $exutime_usec )
- = unpack ( $rusage_t, $rusage );
-
- $utime = $utime_sec + ($utime_usec/$MILLION);
- $stime = $stime_sec + ($stime_usec/$MILLION);
-
- $login = &login($uid);
-
- if ( $flags{'v'} ) {
- printf("%-8s %-8s %3d %s %8.2fu %8.2fs\n",
- $quename, $login, $nice, &mktime($submit_time), $utime, $stime);
- }
-
- if ( $flags{'l'} ) {
- $ujobs{$login}++;
- $uutimes{$login} += $utime;
- $ustimes{$login} += $stime;
- }
-
- if ( $flags{'q'} ) {
- $qjobs{$quename}++;
- $qutimes{$quename} += $utime;
- $qstimes{$quename} += $stime;
- }
- }
- }
-
- printf "\nbatch accounting records: %d\n", $records if $flags{'v'};
-
- if ( $flags{'l'} ) {
- print "\nsummary by login\n" if $flags{'v'} || $flags{'q'};
-
- foreach $login (sort keys %ujobs) {
- printf("%-8s %5d %12.2fu %12.2fu\n",
- $login, $ujobs{$login}, $uutimes{$login}, $ustimes{$login});
- }
- }
-
- if ( $flags{'q'} ) {
- print "\nsummary by queue\n" if $flags{'v'} || $flags{'l'};
-
- foreach $queue (sort keys %qjobs) {
- printf("%-8s %5d %12.2fu %12.2fu\n",
- $queue, $qjobs{$queue}, $qutimes{$queue}, $qstimes{$queue});
- }
- }
-
- exit 0;
-
- sub login {
- local($id) = @_;
- local($name, $passwd, $uid, $gid, $quota, $comment, $gdocs, $dir, $shell);
-
- $name = '';
-
- if (!defined $login{$id}) {
-
- ($name, $passwd, $uid, $gid, $quota,
- $comment, $gdocs, $dir, $shell) = getpwuid($id);
-
- $login{$id} = ($name ne '') ? $name : sprintf("#%d", $id);
- }
- return $login{$id};
- }
-
- sub mktime {
- local($time) = @_;
- local($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst);
- local($date);
-
- ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst)
- = localtime($time);
- $mon+1;
-
- sprintf("%02d/%02d/%02d %02d:%02d", $mday, $mon, $year, $hour, $min);
- }
-