From eec0aa47e2d9ee49f57160b238a70cc81aa3f744 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Fri, 15 Apr 2016 22:43:20 +0200 Subject: added some more checks: dow, week-rhythm... diff --git a/lib/RHRD/rddb.pm b/lib/RHRD/rddb.pm index f9bcb87..380a486 100755 --- a/lib/RHRD/rddb.pm +++ b/lib/RHRD/rddb.pm @@ -999,7 +999,7 @@ sub list_shows } my @show_dbs; - while(my ($to_cart, $params, $lowcart, $highcart) = $sth->fetchrow_array()) { + while(my ($to_cart, $params) = $sth->fetchrow_array()) { my @p = split(';', $params); next if ('S' ne $p[0]); @@ -1206,6 +1206,41 @@ sub get_show_title_and_log return ($title, $log, 'OK', 'success'); } +sub get_show_info +{ + my ($ctx, $showid) = @_; + + my $sql = qq{select SET_USER_DEFINED from DROPBOXES where STATION_NAME = ? and TO_CART = ?;}; + + my $sth = $ctx->{'dbh'}->prepare($sql) + or return (undef, 'ERROR', "Database Error: " . $ctx->{'dbh'}->errstr); + + $sth->execute($ctx->{'config'}{'dropboxes'}{'dropbox-pseudo-station'}, $showid) + or return (undef, 'ERROR', "Database Error: " . $sth->errstr); + + my ($params) = $sth->fetchrow_array; + $sth->finish(); + + my @p = split(';', $params); + return (undef, 'ERROR', "show with $showid does not exist") unless ('S' eq $p[0]); + + my $entry = {}; + $entry->{'ID'} = $showid; + my ($title, $log, $status, $errorstring) = get_show_title_and_log($ctx, $showid); + return (undef, $status, $errorstring) unless (defined $title && defined $log); + + $entry->{'TITLE'} = $title; + $entry->{'LOG'} = $log; + $entry->{'RHYTHM'} = $p[1]; + $entry->{'DOW'} = int $p[2]; + $entry->{'DOW'} = 0 unless $entry->{'DOW'} < 7; + substr($p[3], 2, 0) = ':'; + $entry->{'STARTTIME'} = $p[3]; + $entry->{'LEN'} = int $p[4]; + + return ($entry, 'OK', 'success'); +} + sub get_show_carts { my ($ctx, $showid) = @_; diff --git a/lib/RHRD/utils.pm b/lib/RHRD/utils.pm index fbc3933..7f060e9 100755 --- a/lib/RHRD/utils.pm +++ b/lib/RHRD/utils.pm @@ -32,6 +32,7 @@ use JSON; sub get_rd_week { + my ($time) = @_; # # This computes the current Rivendell Week based on the number # of weeks since epoch. @@ -48,10 +49,12 @@ sub get_rd_week # with 0 meaning Week 1. So add 1 to that number and you will get # the current RD week. # - my $now = DateTime->now(); + if(!defined($time)) { + $time = DateTime->now(); + } my $tz = DateTime::TimeZone->new(name => 'Europe/Vienna'); - my $tz_offset = $tz->offset_for_datetime($now); - my $sEpoch = $now->epoch() + $tz_offset; + my $tz_offset = $tz->offset_for_datetime($time); + my $sEpoch = $time->epoch() + $tz_offset; my $week = floor(((($sEpoch + 259200)/604800) + 2) % 4) + 1; return $week; diff --git a/utils/rhrd-schedules b/utils/rhrd-schedules index 3579821..6904154 100755 --- a/utils/rhrd-schedules +++ b/utils/rhrd-schedules @@ -27,6 +27,7 @@ use lib "../lib/"; use RHRD::rddb; use RHRD::utils; +use DateTime; use Date::Calc; sub print_usage @@ -68,6 +69,7 @@ sub show__day } my $dow = Date::Calc::Day_of_Week(@date); + my $week = RHRD::utils::get_rd_week(DateTime->new(year => $date[0], month => $date[1], day => $date[2], hour => 12)); my $errcnt = 0; for my $entry (@{$data}) { @@ -80,16 +82,26 @@ sub show__day print " $start: ($showid) -> "; if($showid > 0) { - my ($rdtitle, $rdlog, $status, $errorstring) = RHRD::rddb::get_show_title_and_log($ctx, $showid); - if(!defined $rdtitle || !defined $rdlog) { + my ($show, $status, $errorstring) = RHRD::rddb::get_show_info($ctx, $showid); + if(!defined $show) { print "$status: $errorstring\n"; $errcnt++; - } elsif ($title ne $rdtitle) { - print "WARNING: title mismatch (PV: '$title' != RD: '$rdtitle')\n"; - $errcnt++; } else { - # TODO: check DayOfWeek!!! - print "OK: $title\n"; + my @weeks = split('', ${$show}{'RHYTHM'}); + if ($title ne ${$show}{'TITLE'}) { + print "WARNING: title mismatch (PV: '$title' != RD: '" . ${$show}{'TITLE'} . "')\n"; + $errcnt++; + } elsif ($dow != ${$show}{'DOW'}) { + print "WARNING: wrong day of week (PV: " . Date::Calc::Day_of_Week_to_Text($dow) . " != RD: " . Date::Calc::Day_of_Week_to_Text(${$show}{'DOW'}) . ")\n"; + $errcnt++; + } elsif ($weeks[$week-1] != '1') { + print "WARNING: this is week $week but show rhythm is: " . ${$show}{'RHYTHM'} . " -> show shouldn't air in this week!\n"; + $errcnt++; + } else { + # TODO: check for STARTTIME + # TODO: check for LEN (missing endtime in pv export...) + print "OK: $title\n"; + } } } else { print "ERROR: show '$pvid|$title' not configured\n"; -- cgit v0.10.2