diff --git a/fhem/CHANGED b/fhem/CHANGED index 655c6bae2..ea2d689da 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -321,7 +321,7 @@ documentation added. - bugfix: more thorough serial line initialization -- ==DATE== (4.1) +- 2007-08-05 (4.1) - doc: linux.html (private udev-rules, not 50-..., ATTRS) - bugfix: setting devices with "-" in their name did not work - doc: fhem.pl and commandref.html (notifyon -> notify, correction @@ -338,3 +338,6 @@ - bugfix: SCIVT solar controller (peterp, 1.7) - bugfix: WS300 loglevel change (from 2 to 5 or device specific loglevel) - feature: First steps for a Fritz!Box port. See the fritzbox.html + +- ==DATE== (4.2) + - feature: added archivedir/archivecmd to the the main logfile diff --git a/fhem/FHEM/92_FileLog.pm b/fhem/FHEM/92_FileLog.pm index c689e78a5..2f4198837 100755 --- a/fhem/FHEM/92_FileLog.pm +++ b/fhem/FHEM/92_FileLog.pm @@ -40,8 +40,8 @@ FileLog_Define($@) $hash->{FH} = $fh; $hash->{REGEXP} = $a[3]; - $hash->{FILENAME} = $a[2]; - $hash->{CURRENT} = $f; + $hash->{logfile} = $a[2]; + $hash->{currentlogfile} = $f; $hash->{STATE} = "active"; return undef; @@ -56,54 +56,6 @@ FileLog_Undef($$) return undef; } -# Make a directory and its parent directories if needed. -sub -HandleArchiving($) -{ - my ($log) = @_; - my $ln = $log->{NAME}; - return if(!$attr{$ln}); - - # If there is a command, call that - my $cmd = $attr{$ln}{archivecmd}; - if($cmd) { - $cmd =~ s/%/$log->{CURRENT}/g; - Log 2, "Archive: calling $cmd"; - system($cmd); - return; - } - - my $nra = $attr{$ln}{nrarchive}; - my $ard = $attr{$ln}{archivedir}; - return if(!defined($nra)); - - # If nrarchive is set, then check the last files: - # Get a list of files: - - my ($dir, $file); - if($log->{FILENAME} =~ m,^(.+)/([^/]+)$,) { - ($dir, $file) = ($1, $2); - } else { - ($dir, $file) = (".", $log->{FILENAME}); - } - - $file =~ s/%./.+/g; - return if(!opendir(DH, $dir)); - my @files = sort grep {/^$file$/} readdir(DH); - closedir(DH); - - my $max = int(@files)-$nra; - for(my $i = 0; $i < $max; $i++) { - if($ard) { - Log 2, "Moving $files[$i] to $ard"; - rename("$dir/$files[$i]", "$ard/$files[$i]"); - } else { - Log 2, "Deleting $files[$i]"; - unlink("$dir/$files[$i]"); - } - } -} - ##################################### sub FileLog_Log($$) @@ -127,9 +79,9 @@ FileLog_Log($$) my $fh = $log->{FH}; my @t = localtime; - my $cn = ResolveDateWildcards($log->{FILENAME}, @t); + my $cn = ResolveDateWildcards($log->{logfile}, @t); - if($cn ne $log->{CURRENT}) { # New logfile + if($cn ne $log->{currentlogfile}) { # New logfile $fh->close(); HandleArchiving($log); $fh = new IO::File ">>$cn"; @@ -137,7 +89,7 @@ FileLog_Log($$) Log(0, "Can't open $cn"); return; } - $log->{CURRENT} = $cn; + $log->{currentlogfile} = $cn; $log->{FH} = $fh; } diff --git a/fhem/HISTORY b/fhem/HISTORY index 1cb96fb54..1b34e3d83 100644 --- a/fhem/HISTORY +++ b/fhem/HISTORY @@ -127,3 +127,7 @@ - EM: added setTime, reset - docs/fritzbox.html. Note: The fb_fhem_0.1.tar.gz won't be part of CVS as it contains largee binaries (swapfile, perl mipsel executable, etc). + +- Rudi Mon Aug 6 20:15:00 MEST 2007 + - archiving added to the main logs. + NOTE: The FileLog filename (INT attribute) is now also called logfile. diff --git a/fhem/Makefile b/fhem/Makefile index da12744c9..557136de5 100644 --- a/fhem/Makefile +++ b/fhem/Makefile @@ -2,7 +2,7 @@ BINDIR=/usr/local/bin MODDIR=/usr/local/lib VERS=4.0 -DATE=2007-04-14 +DATE=2007-08-05 DIR=fhem-$(VERS) all: diff --git a/fhem/fhem.pl b/fhem/fhem.pl index e42add7e1..79d49c5ad 100755 --- a/fhem/fhem.pl +++ b/fhem/fhem.pl @@ -47,6 +47,7 @@ sub CommandChain($$); sub DoClose($); sub GetLogLevel(@); sub HandleTimeout(); +sub HandleArchiving($); sub IOWrite($@); sub InternalTimer($$$); sub Log($$); @@ -133,13 +134,14 @@ my %intAt; # Internal at timer hash. my $intAtCnt=0; my $reread_active = 0; my $AttrList = "room comment"; -my $cvsid = '$Id: fhem.pl,v 1.22 2007-08-05 09:48:26 rudolfkoenig Exp $'; +my $cvsid = '$Id: fhem.pl,v 1.23 2007-08-06 18:17:28 rudolfkoenig Exp $'; $init_done = 0; $modules{_internal_}{ORDER} = -1; $modules{_internal_}{AttrList} = "configfile logfile lastinclude modpath " . "pidfilename port statefile title userattr " . + "nrarchive archivedir archivecmd " . "verbose:1,2,3,4,5 version"; @@ -577,6 +579,10 @@ OpenLogfile($) } else { + $defs{global}{currentlogfile} = $param; + $defs{global}{logfile} = $attr{global}{logfile}; + HandleArchiving($defs{global}); + open(LOG, ">>$currlogfile") || return("Can't open $currlogfile: $!"); # Redirect stdin/stderr @@ -1527,6 +1533,7 @@ ResolveDateWildcards($@) return $f if(!$f); return $f if($f !~ m/%/); # Be fast if there is no wildcard + my $S = sprintf("%02d", $t[0]); $f =~ s/%S/$S/g; my $M = sprintf("%02d", $t[1]); $f =~ s/%M/$M/g; my $H = sprintf("%02d", $t[2]); $f =~ s/%H/$H/g; my $d = sprintf("%02d", $t[3]); $f =~ s/%d/$d/g; @@ -1643,9 +1650,59 @@ doGlobalDef($) $defs{global}{TYPE} = "_internal_"; $defs{global}{STATE} = ""; $defs{global}{DEF} = ""; + $defs{global}{NAME} = "global"; CommandAttr(undef, "global verbose 3"); CommandAttr(undef, "global configfile $arg"); CommandAttr(undef, "global logfile -"); CommandAttr(undef, "global version =VERS= from =DATE= ($cvsid)"); } + +# Make a directory and its parent directories if needed. +sub +HandleArchiving($) +{ + my ($log) = @_; + my $ln = $log->{NAME}; + return if(!$attr{$ln}); + + # If there is a command, call that + my $cmd = $attr{$ln}{archivecmd}; + if($cmd) { + $cmd =~ s/%/$log->{currentlogfile}/g; + Log 2, "Archive: calling $cmd"; + system($cmd); + return; + } + + my $nra = $attr{$ln}{nrarchive}; + my $ard = $attr{$ln}{archivedir}; + return if(!defined($nra)); + + # If nrarchive is set, then check the last files: + # Get a list of files: + + my ($dir, $file); + if($log->{logfile} =~ m,^(.+)/([^/]+)$,) { + ($dir, $file) = ($1, $2); + } else { + ($dir, $file) = (".", $log->{logfile}); + } + + $file =~ s/%./.+/g; + return if(!opendir(DH, $dir)); + my @files = sort grep {/^$file$/} readdir(DH); + closedir(DH); + + my $max = int(@files)-$nra; + for(my $i = 0; $i < $max; $i++) { + if($ard) { + Log 2, "Moving $files[$i] to $ard"; + rename("$dir/$files[$i]", "$ard/$files[$i]"); + } else { + Log 2, "Deleting $files[$i]"; + unlink("$dir/$files[$i]"); + } + } +} + diff --git a/fhem/test/fhem.save b/fhem/test/fhem.save index 1a3872a00..355f4ddfc 100644 --- a/fhem/test/fhem.save +++ b/fhem/test/fhem.save @@ -1,4 +1,4 @@ -#Sun Aug 5 11:41:52 2007 +#Mon Aug 6 19:30:33 2007 setstate FHZ fhtbuf: 1c setstate FHZ 2006-02-12 14:03:39 fhtbuf 23 setstate FHZ 2006-03-26 08:47:36 init2 deadbeefdeadbe @@ -68,11 +68,11 @@ setstate wz 2006-03-26 08:52:31 unknown_85 4 setstate wz 2006-03-26 08:50:36 wed-from1 06:00 setstate wz 2006-03-26 08:50:36 wed-to1 23:00 setstate wz 2006-03-26 08:52:31 windowopen-temp 12.0 (Celsius) -setstate x 13.66 0.0 30 13.62 15.09 -0.2 2.8 -setstate x 2007-08-05 11:41:50 Is 0.0 -setstate x 2007-08-05 11:41:50 Temp 30 -setstate x 2007-08-05 11:41:50 Vs 13.66 -setstate x 2007-08-05 11:41:50 maxI 2.8 -setstate x 2007-08-05 11:41:50 maxV 15.09 -setstate x 2007-08-05 11:41:50 minI -0.2 -setstate x 2007-08-05 11:41:50 minV 13.62 +setstate x 13.66 0.0 30 13.62 15.09 -0.2 2.8 +setstate x 2007-08-06 19:27:55 Is 0.0 +setstate x 2007-08-06 19:27:55 Temp 30 +setstate x 2007-08-06 19:27:55 Vs 13.66 +setstate x 2007-08-06 19:27:55 maxI 2.8 +setstate x 2007-08-06 19:27:55 maxV 15.09 +setstate x 2007-08-06 19:27:55 minI -0.2 +setstate x 2007-08-06 19:27:55 minV 13.62