diff options
Diffstat (limited to 'utils/rhrd-sanity-check')
-rwxr-xr-x | utils/rhrd-sanity-check | 212 |
1 files changed, 199 insertions, 13 deletions
diff --git a/utils/rhrd-sanity-check b/utils/rhrd-sanity-check index a64a5b7..9dc5c43 100755 --- a/utils/rhrd-sanity-check +++ b/utils/rhrd-sanity-check @@ -43,22 +43,152 @@ if($num_args > 0) { my $ret = 0; + +# -2 .. range is entirely below class range +# -1 .. range overlaps with class range (low boundary) +# 0 .. range is inside class range +# 1 .. range overlaps with class range (high boundary) +# 2 .. range is entirely above class range +sub check_groups__check_cart_range +{ + my ($low, $high, $class_low, $class_high) = @_; + + if($low < $class_low) { + return -1 if($high >= $class_low); + return -2; + } + + if($low <= $class_high) { + return 0 if($high <= $class_high); + return 1; + } + + return 2; +} + +sub check_groups__check_show_group +{ + my ($ctx, $group, $low, $high, $type) = @_; + + my $errors = 0; + + my @carts = RHRD::rddb::get_show_group_carts_used($ctx, $group); + if(!defined $carts[0] && defined $carts[1]) { + print STDERR $carts[1] . ": " . $carts[2] . "\n"; + return -1; + } + if(scalar @carts == 0) { + print " group '" . $group . "': carts are not used by any show\n"; + } + + my ($nownext, $traffic, $music) = RHRD::rddb::get_group_reports($ctx, $group); + unless(defined $nownext) { + print STDERR $traffic . ": " . $music . "\n"; + return -1; + } + unless($nownext eq 'Y') { + print " group '" . $group . "': show carts with now/next disabled\n"; + $errors++; + } + unless($traffic eq 'N') { + print " group '" . $group . "': show carts with traffic reports enabled\n"; + $errors++; + } + unless($music eq 'N') { + print " group '" . $group . "': show carts with music reports enabled\n"; + $errors++; + } + + return $errors; +} + +sub check_groups__check_musicpool_group +{ + my ($ctx, $group, $low, $high, $type) = @_; + + my $errors = 0; + + # TODO: check whether enough evergreens are imported: should be > 3 + + my ($nownext, $traffic, $music) = RHRD::rddb::get_group_reports($ctx, $group); + unless(defined $nownext) { + print STDERR $traffic . ": " . $music . "\n"; + return -1; + } + unless($nownext eq 'Y') { + print " group '" . $group . "': musicpool carts with now/next disabled\n"; + $errors++; + } + unless($traffic eq 'N') { + print " group '" . $group . "': musicpool carts with traffic reports enabled\n"; + $errors++; + } + unless($music eq 'Y') { + print " group '" . $group . "': musicpool carts with music reports disabled\n"; + $errors++; + } + + return $errors; +} + +sub check_groups__check_jingle_group +{ + my ($ctx, $group, $low, $high, $type) = @_; + + my $errors = 0; + + # TODO: check for pool size: should be > 150 + + my ($nownext, $traffic, $music) = RHRD::rddb::get_group_reports($ctx, $group); + unless(defined $nownext) { + print STDERR $traffic . ": " . $music . "\n"; + return -1; + } + unless($nownext eq 'Y') { + print " group '" . $group . "': jingle carts with now/next disabled\n"; + $errors++; + } + unless($traffic eq 'N') { + print " group '" . $group . "': jingle carts with traffic reports enabled\n"; + $errors++; + } + unless($music eq 'N') { + print " group '" . $group . "': jingle carts with music reports enabled\n"; + $errors++; + } + + return $errors; +} + sub check_groups { my ($ctx) = @_; + my $errors = 0; print "groups:\n"; my ($shows_low_cart, $shows_high_cart, $shows_chunk_size) = RHRD::rddb::get_shows_cart_range($ctx); if(!$shows_low_cart) { print "$shows_high_cart: $shows_chunk_size\n"; - return 1; + return -1; + } + + my ($musicpools_low_cart, $musicpools_high_cart, $musicpools_chunk_size) = RHRD::rddb::get_musicpools_cart_range($ctx); + if(!$musicpools_low_cart) { + print "$musicpools_high_cart: $musicpools_chunk_size\n"; + return -1; + } + + my ($jingles_low_cart, $jingles_high_cart, $jingles_chunk_size) = RHRD::rddb::get_jingles_cart_range($ctx); + if(!$jingles_low_cart) { + print "$jingles_high_cart: $jingles_chunk_size\n"; + return -1; } my @groups = RHRD::rddb::list_groups($ctx); if(!defined $groups[0] && defined $groups[1]) { print STDERR "$groups[1]: $groups[2]"; - return 1; + return -1; } for my $group (@groups) { next if($group eq $ctx->{'config'}{'specialgroups'}{'system'}); @@ -67,43 +197,99 @@ sub check_groups next if($group eq $ctx->{'config'}{'specialgroups'}{'allpools'}); next if($group eq $ctx->{'config'}{'specialgroups'}{'alljingles'}); + my ($low_cart, $high_cart, $cart_type, $enforce_range) = RHRD::rddb::get_group_cart_range($ctx, $group); + if($low_cart > $high_cart) { + print " group '" . $group . "': cart range is invalid low > high\n"; + $errors++; + } + if($enforce_range ne 'Y') { + print " group '" . $group . "': cart range is not enforced\n"; + $errors++; + } + my @users = RHRD::rddb::get_group_members($ctx, $group); if(!defined $users[0] && defined $users[1]) { print STDERR "$users[2]\n"; - return 1; + return -1; } if(scalar @users == 0) { - print " group: '" . $group . "' has no members\n"; + print " group '" . $group . "': has no members\n"; + $errors++; + } + + my $type = undef; + my $res = check_groups__check_cart_range($low_cart, $high_cart, $shows_low_cart, $shows_high_cart); + if($res == 0) { + $type = 'S'; + $res = check_groups__check_show_group($ctx, $group, $low_cart, $high_cart); + return $res if $res < 0; + $errors += $res; + } elsif($res == -1 || $res == 1) { + print " group '" . $group . "': cart range is overlapping with show cart range but is not a subset of it\n"; + $errors++; + } + + $res = check_groups__check_cart_range($low_cart, $high_cart, $musicpools_low_cart, $musicpools_high_cart); + if($res == 0) { + $type = 'M'; + $res = check_groups__check_musicpool_group($ctx, $group, $low_cart, $high_cart); + return $res if $res < 0; + $errors += $res; + } elsif($res == -1 || $res == 1) { + print " group '" . $group . "': cart range is overlapping with musicpool cart range but is not a subset of it\n"; + $errors++; } - my @carts = RHRD::rddb::get_show_group_carts_used($ctx, $group); - if(!defined $carts[0] && defined $carts[1]) { - print STDERR "$carts[2]\n"; - return 1; + $res = check_groups__check_cart_range($low_cart, $high_cart, $jingles_low_cart, $jingles_high_cart); + if($res == 0) { + $type = 'J'; + $res = check_groups__check_jingle_group($ctx, $group, $low_cart, $high_cart); + return $res if $res < 0; + $errors += $res; + } elsif($res == -1 || $res == 1) { + print " group '" . $group . "': cart range is overlapping with jingle cart range but is not a subset of it\n"; + $errors++; } - if(scalar @carts == 0) { - print " group: '" . $group . "' no carts of range are used\n"; + + if(!defined($type)) { + print " group '" . $group . "': cart range is at least partly outside of all class ranges\n"; + $errors++; } } - return 0; + print "\n " . $errors . " errors found\n"; + + return $errors; } + sub check_logs { my ($ctx) = @_; + my $errors = 0, print "logs:\n"; - print " check not yet implemtned!!\n"; + print " ... checks not yet implemtned!!\n"; + + print "\n " . $errors . " errors found\n"; + + return $errors; } + sub check_dropboxes { my ($ctx) = @_; + my $errors = 0; print "dropboxes:\n"; - print " check not yet implemtned!!\n"; + print " ... checks not yet implemtned!!\n"; + + print "\n " . $errors . " errors found\n"; + + return $errors; } + my ($ctx, $status, $errorstring) = RHRD::rddb::init(); if(defined $ctx) { check_groups($ctx); |