--- /dev/null
+#! /bin/bash
+renice >/dev/null +19 -p $$
+ionice -c3 -p $$
+t=/tmp/upsc-log.$$
+rm -f $t $t.*
+log=/var/log/upsc.log
+exec >>$log 2>&1
+while sleep 1;do
+ date --iso=seconds >$t.t
+ upsc eaton &>$t
+ if grep -q '^ups.status: OL$' $t && grep -q '^battery.charge: 100$' $t;then
+ rm -f $t.bad $t.bad.t
+ if [ ! -e $t.good ];then
+ cat $t.t $t;echo
+ sync -d $log
+ fi
+ mv -f $t.t $t.good.t
+ mv -f $t $t.good
+ rm -f /tmp/upsc-smsed
+ continue
+ fi
+ if [ ! -e /tmp/upsc-smsed ];then
+ touch /tmp/upsc-smsed
+ date --iso=seconds|mail -s "upsc-log $(hostname)" jankratochvil@vodafonemail.cz
+ fi
+ if [ -e $t.good ];then
+ cat $t.good.t $t.good;echo
+ sync -d $log
+ rm -f $t.good.t $t.good
+ fi
+ if [ -e $t.bad ] && cmp -s $t $t.bad;then
+ continue
+ fi
+ cat $t.t $t;echo
+ sync -d $log
+ mv -f $t.t $t.bad.t
+ mv -f $t $t.bad
+done
--- /dev/null
+#! /usr/bin/perl
+use strict;
+use warnings;
+local *F;
+my $ta="/tmp/upsc-log-diff.".$$."a";
+my $tb="/tmp/upsc-log-diff.".$$."b";
+unlink $ta; unlink $tb;
+END {
+ unlink $ta; unlink $tb;
+}
+my $F="/var/log/upsc.log";
+open F,$F or die "$F: $!";
+my $prev;
+my $this="";
+while (<F>) {
+ chomp;
+ if (!/^$/) {
+ $this.="$_\n";
+ next;
+ }
+ if ($prev) {
+ local *TA;
+ local *TB;
+ open TA,">$ta" or die "$ta: $!";
+ open TB,">$tb" or die "$tb: $!";
+ print TA $prev or die "$ta: $!";
+ print TB $this or die "$tb: $!";
+ close TA or die "$ta: $!";
+ close TB or die "$ta: $!";
+ local *TD;
+ my $td="diff -u $ta $tb|";
+ open TD,$td or die "$td: $!";
+ <TD>=~/^\Q--- / or die $_;
+ <TD>=~/^\Q+++ / or die $_;
+ while (<TD>) {
+ next if /^[@ ]/;
+ print;
+ }
+ close TD; # or die "$td: $!";
+ print "\n";
+ }
+ $prev=$this;
+ $this="";
+}
+die $this if $this;