Add empty 'virtual' .ALL hierarchies as needed.
authorThomas Hochstein <thh@inter.net>
Sat, 10 Aug 2013 23:47:32 +0000 (01:47 +0200)
committerThomas Hochstein <thh@inter.net>
Sun, 11 Aug 2013 07:45:00 +0000 (09:45 +0200)
When using a --checkgroups file while tabulating,
valid but empty groups will be added with a posting
count of zero as needed. If all groups in a
sub-hierarchy are empty, the virtual '.ALL' group
for that sub-hierarchy was not created, though.

If local.test.dummy and local.test.binary were
both empty, both groups were added with a posting
count of '0', but local.test.ALL was not.

Now we loop through all hierarchy elements using
ParseHierarchies and add empty .ALL hierarchies as
needed.

Fixes #49.

Also fixing a typo in some comment. :-)

Signed-off-by: Thomas Hochstein <thh@inter.net>
gatherstats.pl

index 2bc426b..ae7d65d 100755 (executable)
@@ -132,7 +132,7 @@ foreach my $Month (&ListMonth($Period)) {
     # count postings per group
     my %Postings;
     while (($_) = $DBQuery->fetchrow_array) {
-      # get list oft newsgroups and hierarchies from Newsgroups:
+      # get list of newsgroups and hierarchies from Newsgroups:
       my %Newsgroups = ListNewsgroups($_,$TLH,
                                       $OptCheckgroupsFile ? \%ValidGroups : '');
       # count each newsgroup and hierarchy once
@@ -145,12 +145,19 @@ foreach my $Month (&ListMonth($Period)) {
     if (%ValidGroups) {
       foreach (sort keys %ValidGroups) {
         if (!defined($Postings{$_})) {
-          $Postings{$_} = 0 ;
-          warn (sprintf("ADDED: %s as empty group\n",$_));
+          # expand newsgroup with hierarchies
+          my @Newsgroups = ParseHierarchies($_);
+          # add each empty newsgroup and empty hierarchies, too, as needed
+          foreach (@Newsgroups) {
+            if (!defined($Postings{$_})) {
+              $Postings{$_} = 0;
+              warn (sprintf("ADDED: %s as empty group\n",$_));
+            };
+          };
         }
       };
     };
-
+    
     # delete old data for that month
     if (!$OptTest) {
       $DBQuery = $DBHandle->do(sprintf("DELETE FROM %s.%s WHERE month = ?",
This page took 0.010655 seconds and 4 git commands to generate.