#! /local/bin/perl # This is a script that converts acct data from Solaris into # xscal format for visualization. Usage: # acctcom | acct-to-xscal | xtime # (where xtime is the time version of xscal (same program, different name) format STDOUT = @<<<<<<<<<< @<<<<<<<<< @<<<<<<<<< @<<<<<<<<< $time, $uid, $stat, $name . sub time2seconds { my ($hour,$min,$sec) = split(/:0?/,$_[0]); return $hour * 3600 + $min * 60 + $sec; } sub offset { my ($value,@keys) = @_; my $bot = 0; my $top = $#keys; } $count=0; while () { chomp; ($cmd,$login,$pty,$begin,$end,$p1,$p2,$msize) = split; $begin = time2seconds($begin); $end = time2seconds($end ); @uid = getpwnam($login); if (@uid && $begin<$end) { $uid = $uid[2]; $name{$uid} = $login; $msize = int($msize*1000); if (! defined $trace{$uid}) { $trace{$login} = { $begin => $msize, $end => 0 }; } else { $trace{$login}->{$begin} += $msize; $trace{$login}->{$end } += 0; @keys = sort keys %{$trace{$login}}; $start = offset($begin,@keys); $finish= offset($end ,@keys[$start..$#keys])+$start; for ($offset = $start+1; $offset<$finish; $offset++) { $trace{$login}->{$keys[$offset]} += $msize; } } } } } while (($uid,$series) = each %trace) { $name = $name{$uid}; while (($time,$stat) = each %$series) { write; } } #sendmail root ? 14:48:14 14:48:15 1.70 0.04 876.00