#!/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 (<IN>){
    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 (<IN>){
    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;
}
