From 547aa30e0870b2b9e34c22080ac40e318803c13c Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Fri, 7 Jan 2022 18:04:14 +0100 Subject: [PATCH] bin/heat: +log --- bin/heat | 49 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/bin/heat b/bin/heat index a3ac277..4748edc 100755 --- a/bin/heat +++ b/bin/heat @@ -2,6 +2,12 @@ # * * * * * nice -n20 /root/bin/heat -s use strict; use warnings; +my $schedulefile="/root/heat.schedule"; +my $statefile="/root/heat.state"; +my $resetfile="/root/heat.reset"; +my $usbrelay="/root/bin/usbrelay"; +my $logfile="/var/log/heat.log"; +require POSIX; $|=1; sub readfile($) { my($fname)=@_; @@ -15,13 +21,18 @@ sub readfile($) { close F or die "read-close $fname: $!"; return $F; } -sub writefile { - my($fname,$content)=@_; +sub writefile($$;$) { + my($fname,$content,$mode)=@_; local *F; - open F,">$fname" or die "$fname: $!"; + open F,($mode||">").$fname or die "$fname: $!"; print F $content or die "write $fname: $!"; close F or die "write-close $fname: $!"; } +sub logmsg($) { + my($s)=@_; + chomp $s; + writefile $logfile,POSIX::strftime("%Y-%m-%dT%H:%M:%S",localtime)." $s\n",">>"; +} sub spawn($) { my($cmd)=@_; $cmd.=" >&2"; @@ -35,10 +46,6 @@ if (($ARGV[0]||"")=~/^[@]0?(\d+):0?(\d+)$/) { $minutes=$1*60+$2; shift; } -my $schedulefile="/root/heat.schedule"; -my $statefile="/root/heat.state"; -my $resetfile="/root/heat.reset"; -my $usbrelay="/root/bin/usbrelay"; my $schedule=readfile $schedulefile; my $finishline; my %schedule; @@ -70,6 +77,7 @@ sub schedulenext($) { } $finishline=schedulenext $minutes; my $silent=shift if ($ARGV[0]||"") eq "-s"; +logmsg "command: ".join(" ",@ARGV) if !$silent&&@ARGV; sub info($) { my($s)=@_; print $s if !$silent; @@ -85,12 +93,14 @@ sub resetread() { $resetminutes=$1*60+$2; $resetstate=($3 eq "reset"?undef:$3); } +sub unlink_resetfile() { + unlink $resetfile or die "$resetfile: $!"; + logmsg "remove reset: $reset"; + $reset=$resetminutes=undef; +} if (defined $reset) { resetread; - if ($resetminutes==$minutes) { - unlink $resetfile or die "$resetfile: $!"; - $reset=$resetminutes=undef; - } + unlink_resetfile if $resetminutes==$minutes; } sub finishlinereset() { $finishline=schedulenext $resetminutes; @@ -101,7 +111,10 @@ my $state=readfile $statefile; chomp $state; info $state; my $newstate=shift; -$newstate=$resetstate if !defined $newstate&&defined $resetstate&&!defined $resetminutes; +if (!defined $newstate&&defined $resetstate&&!defined $resetminutes) { + $newstate=$resetstate; + logmsg "reset: $newstate"; +} sub printminutes($) { my($m)=@_; return sprintf "%02d:%02d",int($m/60),$m%60; @@ -109,7 +122,10 @@ sub printminutes($) { if ($silent) { if (!defined $newstate&&!defined $reset) { my $prev=schedulenext($minutes)->[0]; - $newstate=$prev if $prev=~s{^@[ printminutes $minutes ] (.)\n$}{$1} or $prev=undef; + if ($prev=~m{^@[ printminutes $minutes ] (.)\n$}) { + $newstate=$1; + logmsg "scheduled: $prev"; + } } $newstate=$state if !defined $newstate; } @@ -127,13 +143,14 @@ sub setstate() { or do { unlink $statefile; die "usbrelay error"; }; $state eq $newstate or writefile $statefile,"$newstate\n"; info "\n"; + logmsg "$state->$newstate" if $state ne $newstate; } my $newreset=shift; die "Excessive args: ".join(" ",@ARGV) if @ARGV; if (!defined $newreset) { setstate; if (!$silent&&defined $reset) { - unlink $resetfile or die "$resetfile: $!"; + unlink_resetfile; $finishline=schedulenext $minutes; } finish; @@ -144,10 +161,12 @@ if ($reset=~/^\d+$/) { $reset=printminutes($resetminutes)." reset\n"; setstate; } else { - $reset.=" $newstate\n"; + $reset.=" reset\n"; resetread; + $reset=printminutes($resetminutes)." $newstate\n"; info "\n"; } writefile $resetfile,$reset; +logmsg "new reset: $reset"; finishlinereset; finish; -- 1.8.3.1