X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXLog.pm;h=748df39c782990d8216583f4c39782e1da3d6beb;hb=f0910da57e166acb22e83de4e4b771d175074c80;hp=80336e3e063313c57a480c10b60fc7ef66217deb;hpb=ece0b001419b8e755540eaff4ce3a558fd7d939f;p=spider.git diff --git a/perl/DXLog.pm b/perl/DXLog.pm index 80336e3e..748df39c 100644 --- a/perl/DXLog.pm +++ b/perl/DXLog.pm @@ -50,27 +50,38 @@ sub new my $ref = {}; $ref->{prefix} = "$main::data/$prefix"; $ref->{suffix} = $suffix if $suffix; - $ref->{'sort'} = $sort; - + $ref->{sort} = $sort; + # make sure the directory exists mkdir($ref->{prefix}, 0777) unless -e $ref->{prefix}; return bless $ref; } +sub _genfn +{ + my ($self, $jdate) = @_; + my $year = $jdate->year; + my $thing = $jdate->thing; + + my $fn = sprintf "$self->{prefix}/$year/%02d", $thing if $jdate->isa('Julian::Month'); + $fn = sprintf "$self->{prefix}/$year/%03d", $thing if $jdate->isa('Julian::Day'); + $fn .= ".$self->{suffix}" if $self->{suffix}; + return $fn; +} + # open the appropriate data file sub open { - my ($self, $year, $thing, $mode) = @_; + my ($self, $jdate, $mode) = @_; # if we are writing, check that the directory exists if (defined $mode) { + my $year = $jdate->year; my $dir = "$self->{prefix}/$year"; mkdir($dir, 0777) if ! -e $dir; } - - $self->{fn} = sprintf "$self->{prefix}/$year/%02d", $thing if $self->{'sort'} eq 'm'; - $self->{fn} = sprintf "$self->{prefix}/$year/%03d", $thing if $self->{'sort'} eq 'd'; - $self->{fn} .= ".$self->{suffix}" if $self->{suffix}; + + $self->{fn} = $self->_genfn($jdate); $mode = 'r' if !$mode; $self->{mode} = $mode; @@ -80,90 +91,86 @@ sub open $fh->autoflush(1) if $mode ne 'r'; # make it autoflushing if writable $self->{fh} = $fh; - $self->{year} = $year; - $self->{thing} = $thing; + $self->{jdate} = $jdate; # DXDebug::dbg("opening $self->{fn}\n") if isdbg("dxlog"); return $self->{fh}; } -sub mtime +sub delete($$) +{ + my ($self, $jdate) = @_; + my $fn = $self->_genfn($jdate); + unlink $fn; +} + +sub mtime($$) { - my ($self, $year, $thing) = @_; + my ($self, $jdate) = @_; - my $fn = sprintf "$self->{prefix}/$year/%02d", $thing if $self->{'sort'} eq 'm'; - $fn = sprintf "$self->{prefix}/$year/%03d", $thing if $self->{'sort'} eq 'd'; - $fn .= ".$self->{suffix}" if $self->{suffix}; + my $fn = $self->_genfn($jdate); return (stat $fn)[9]; } # open the previous log file in sequence -sub openprev +sub openprev($$) { my $self = shift; - if ($self->{'sort'} eq 'm') { - ($self->{year}, $self->{thing}) = Julian::subm($self->{year}, $self->{thing}, 1); - } elsif ($self->{'sort'} eq 'd') { - ($self->{year}, $self->{thing}) = Julian::sub($self->{year}, $self->{thing}, 1); - } - return $self->open($self->{year}, $self->{thing}, @_); + my $jdate = $self->{jdate}->sub(1); + return $self->open($jdate, @_); } # open the next log file in sequence -sub opennext +sub opennext($$) { my $self = shift; - if ($self->{'sort'} eq 'm') { - ($self->{year}, $self->{thing}) = Julian::addm($self->{year}, $self->{thing}, 1); - } elsif ($self->{'sort'} eq 'd') { - ($self->{year}, $self->{thing}) = Julian::add($self->{year}, $self->{thing}, 1); - } - return $self->open($self->{year}, $self->{thing}, @_); + my $jdate = $self->{jdate}->add(1); + return $self->open($jdate, @_); } # convert a date into the correct format from a unix date depending on its sort -sub unixtoj +sub unixtoj($$) { my $self = shift; if ($self->{'sort'} eq 'm') { - return Julian::unixtojm(shift); + return Julian::Month->new(shift); } elsif ($self->{'sort'} eq 'd') { - return Julian::unixtoj(shift); + return Julian::Day->new(shift); } confess "shouldn't get here"; } # write (actually append) to a file, opening new files as required -sub write +sub write($$$) { - my ($self, $year, $thing, $line) = @_; + my ($self, $jdate, $line) = @_; if (!$self->{fh} || $self->{mode} ne ">>" || - $year != $self->{year} || - $thing != $self->{thing}) { - $self->open($year, $thing, ">>") or confess "can't open $self->{fn} $!"; + $jdate->year != $self->{jdate}->year || + $jdate->thing != $self->{jdate}->year) { + $self->open($jdate, ">>") or confess "can't open $self->{fn} $!"; } return $self->{fh}->print("$line\n"); } # write (actually append) using the current date to a file, opening new files as required -sub writenow +sub writenow($$) { my ($self, $line) = @_; my $t = time; - my @date = $self->unixtoj($t); - return $self->write(@date, $line); + my $date = $self->unixtoj($t); + return $self->write($date, $line); } # write (actually append) using a unix time to a file, opening new files as required -sub writeunix +sub writeunix($$$) { my ($self, $t, $line) = @_; - my @date = $self->unixtoj($t); - return $self->write(@date, $line); + my $date = $self->unixtoj($t); + return $self->write($date, $line); } # close the log file handle