]> www.fi.muni.cz Git - slotcarman.git/commitdiff
Log reading factored out.
authorJan "Yenya" Kasprzak <kas@fi.muni.cz>
Sun, 13 Feb 2011 21:59:18 +0000 (22:59 +0100)
committerJan "Yenya" Kasprzak <kas@fi.muni.cz>
Sun, 13 Feb 2011 22:18:48 +0000 (23:18 +0100)
SCX/LogReader.pm [new file with mode: 0644]
annotate_log

diff --git a/SCX/LogReader.pm b/SCX/LogReader.pm
new file mode 100644 (file)
index 0000000..78d2b50
--- /dev/null
@@ -0,0 +1,46 @@
+#!/usr/bin/perl -w
+
+package SCX::LogReader;
+
+use strict;
+
+sub new {
+       my ($class, $args) = @_;
+
+       open my $fh, '<', $args->{filename}
+               or die "Can't open $args->{filename}: $!";
+       
+       my $self = {
+               begin_time => $args->{begin_time} || 0,
+               end_time   => $args->{end_time}   || (1<<32),
+               fh         => $fh,
+       };
+
+       bless $self, $class;
+
+       return $self;
+}
+
+sub get_data {
+       my ($self) = @_;
+
+       my $fh = $self->{fh};
+
+       my ($line, $l_time, @data);
+       do {
+               $line = <$fh>;
+               return undef if !defined $line;
+
+               chomp $line;
+               $line =~ s/\A\s+//xms;
+
+               ($l_time, @data) = split(/\s+/, $line);
+       } while ($l_time < $self->{begin_time});
+
+       return undef if $l_time > $self->{end_time};
+
+       return ($l_time, map { hex $_ } @data);
+}
+
+1;
+
index 50d3683a7acb079a04965faa322ddd66362b70d4..3444e1bb2c87e6c577eb6ab3bc13146af8a5e9a3 100755 (executable)
@@ -3,6 +3,7 @@
 use strict;
 
 use Getopt::Std;
+use SCX::LogReader;
 use SCX::LogPrinter;
 
 my %opt;
@@ -17,8 +18,9 @@ if (!getopts('abi:su', \%opt) || !$ARGV[0]) {
 
 my $logfile = shift @ARGV;
 
-open my $logfh, '<', $logfile
-       or die "Can't open $logfile: $!";
+my $reader = SCX::LogReader->new({
+       filename => $logfile,
+});
 
 my %args;
 
@@ -37,11 +39,7 @@ $args{skip_types} = \%skip_types;
 
 my $printer = SCX::LogPrinter->new(\%args);
 
-while (my $line = <$logfh>) {
-       chomp $line;
-       $line =~ s/\A\s+//xms;
-        my ($l_time, @data) = split(/\s+/, $line);
-
-       $printer->add_data($l_time, map { hex $_ } @data);
+while (my ($l_time, @data) = $reader->get_data()) {
+       $printer->add_data($l_time, @data);
 }