#!/usr/bin/perl my $fail_count = 0; my $sig_count = 0; my $sigloss_len = 0; my $sendmail = "/usr/sbin/sendmail -t -fdjg"; open(INFO,"/directv_stats.txt"); ($tot_good,$tot_sigloss,$tot_fail, $total, $tot_sigevents, $max_sigloss) = split / /,; close(INFO); #print "tot good $tot_good, $tot_sigloss, $tot_fail, $total, $tot_sigevents, $mag_sigloss\n"; for (;;) { my @ret = split " ", `/var/lib/mythtv/directv_status.pl port /dev/ttyS1 box_type D10-200 get_signal get_channel 2>> /tmp/derrors`; $total++; #open (OUT,">>/tmp/derrors"); #print OUT "RC $?\n"; #close(OUT); if (($? >> 8) == 2 || (($? >> 8) == 0 && $ret[1] == 0) ) { $r = `/usr/bin/rrdtool update /var/log/directv.rrd "N:0:0"`; $tot_sigloss++; $sigloss_len++; if ($good_count > 5) { $tot_sigevents++; $good_count = 0; open(SENDMAIL, "|$sendmail") or die "Cannot open $sendmail: $!"; print SENDMAIL "Subject: Directv has lost signal\n"; #print SENDMAIL "To: djg@pdp8.net,djg@drs-c3.com,jwalz@radix.net\n"; print SENDMAIL "To: djg\@pdp8.net\n"; print SENDMAIL "\nRain rain go away, come again another day.\n"; close(SENDMAIL); } open(SIG,">>/sigloss.txt"); print SIG "$tot_sigloss $total ", scalar localtime,"\n"; close(SIG); } elsif (($? >> 8) == 0) { $r = `/usr/bin/rrdtool update /var/log/directv.rrd "N:$ret[1]:$ret[3]"`; $tot_good++; if ($sigloss_len > $max_sigloss) { $max_sigloss = $sigloss_len } $sigloss_len = 0; $fail_count = 0; $sig_count = 0; $good_count++; } else { $good_count = 0; $tot_fail++; open(CON,"/dev/console"); print CON "\a\n"; if ($fail_count++ == 2) { open(SENDMAIL, "|$sendmail") or die "Cannot open $sendmail: $!"; print SENDMAIL "Subject: Directv box failed\n"; print SENDMAIL "To: djg\@pdp8.net,djg\@drs-c3.com,jwalz\@radix.net\n"; print SENDMAIL "\nPlease fix me\n"; close(SENDMAIL); } sleep 1; print CON "\a\n"; close(con); } open(INFO,">/directv_stats.txt"); print INFO "$tot_good $tot_sigloss $tot_fail $total $tot_sigevents $max_sigloss\n"; close(INFO); ($sec) = gmtime(time); if ($sec < 15) { sleep 15 - $sec + 30; } elsif ($sec >= 45) { sleep 60 - $sec + 15 + 60; } else { sleep 45 - $sec + 60; } }