#!/usr/bin/perl use strict; use warnings; use Getopt::Long; use File::Basename; my $session; my $log="sudoscript"; GetOptions( "session|s:s" => \$session, "log|l:s" => \$log, ); my $logdir="/var/log"; if ($log !~ /\//){ $log ="$logdir/$log"; } if ($log =~ /gz$/){ open IN, "gunzip -c $log |" or die $!; } else{ open IN, $log or die $!; } my $datepat='[SMTWF][uoera][neduit] [JFMASOND][aepuco][nbrylgptvc] \d\d'; my $timepat='\d\d\:\d\d\:\d\d'; my $datetimepat="$datepat $timepat"; if (!$session){ my @sessions; while (){ if (/^($datetimepat) New logger for (\w+) with pid (\d+)/){ push @sessions, "$1: $2:$3"; } } print join "\n",@sessions; print "\n"; } else { my($time,$lasttime,$sleep,$first); while (){ if (/^$datepat ($timepat) $session (.*)/){ $time=$1; if (!$first){ $first=1; print "$2\n"; sleep 1; next; } if ($lasttime and $time ne $lasttime and ($sleep = deltatime($time,$lasttime))){ sleep $sleep; } print "$2\n"; $lasttime=$time; } } } sub deltatime{ my @later=split /:/,shift; my @sooner=split /:/,shift; # print "sooner: ",(join ":",@sooner),"\n"; # print "later: ",(join ":",@later),"\n"; $later[0]=24 if (!$later[0] and $sooner[0]); my @mult=(3600,60,1); my $s=0; for (my $c=2;$c>=0;$c--){ next if ($sooner[$c] == $later[$c]); my $t=$later[$c]-$sooner[$c]; if ($t<0 and $c){ $later[$c-1]--; $later[$c]+=60; } $s += $t*$mult[$c]; } return $s; }