]> git.donarmstrong.com Git - infobot.git/blobdiff - src/Modules/News.pl
- moved scripts/setup_sql.pl to src/db_mysql as &createTables()
[infobot.git] / src / Modules / News.pl
index 6c2696a1d1ce9c613cf67a9aa021f2790bd36220..dbe7cf074363d31c66661eb806b26032b5157826 100644 (file)
@@ -80,7 +80,7 @@ sub Parse {
        &set($2);
 
     } elsif ($what =~ /^(\d+)$/i) {
-       &::DEBUG("read shortcut called.");
+       &::VERB("News: read shortcut called.",2);
        &read($1);
 
     } elsif ($what =~ /^read(\s+(.*))?$/i) {
@@ -88,9 +88,12 @@ sub Parse {
 
     } elsif ($what =~ /^(latest|new)(\s+(.*))?$/i) {
        &latest($3 || $chan, 1);
+#      $::cmdstats{'News latest'}++;
+
+    } elsif ($what =~ /^stats?$/i) {
+       &stats();
 
     } elsif ($what =~ /^list$/i) {
-       &::DEBUG("list longcut called.");
        &list();
 
     } elsif ($what =~ /^(expire|text|desc)(\s+(.*))?$/i) {
@@ -136,7 +139,7 @@ sub Parse {
        }
 
     } else {
-       &::DEBUG("could not parse '$what'.");
+       &::DEBUG("could not parse '$what'");
        &::notice($::who, "unknown command: $what");
     }
 }
@@ -187,8 +190,11 @@ sub readNews {
     close NEWS;
 
     my $cn = scalar(keys %::news);
-    &::status("News: Read $ci items for $cn chans, $cu users cache")
-               if ($ci or $cn or $cu);
+    &::status("News: Read ".
+       $ci. &::fixPlural(" item", $ci). " for ".
+       $cn. &::fixPlural(" chan", $cn). ", ".
+       $cu. &::fixPlural(" user", $cu), " cache"
+    ) if ($ci or $cn or $cu);
 }
 
 sub writeNews {
@@ -361,6 +367,10 @@ sub list {
        if (defined $x and ($x == 0 or $x == -1)) {
            &::DEBUG("not updating time for $::who.");
        } else {
+           if (!scalar keys %{ $::news{$chan} }) {
+               &DEBUG("news: should not add $chan/$::who to cache!");
+           }
+
            $::newsuser{$chan}{$::who} = time();
        }
     }
@@ -707,8 +717,6 @@ sub latest {
            if (time() - $::news{$chan}{$_}{Time} > 60*60*24*3) {
                &::DEBUG("deleting news{$chan}{$_} because it was too old and had no text info.");
                delete $::news{$chan}{$_};
-           } else {
-               &::WARN("news: news{$chan}{$_}{Text} undef.");
            }
 
            next;
@@ -729,7 +737,7 @@ sub latest {
     if (!$flag) {
        return unless ($unread);
 
-       my $reply = "There are unread news in $chan ($unread unread, $total total). /msg $::ident news latest.";
+       my $reply = "There are unread news in $chan ($unread unread, $total total). /msg $::ident news $::chan latest";
        $reply   .= "  If you don't want further news notification, /msg $::ident news unnotify" if ($unread == $total);
        &::notice($::who, $reply);
 
@@ -875,7 +883,7 @@ sub getNewsItem {
            &::DEBUG("gNI: part_string->full_string: $what->$items[0]");
            return $items[0];
        } else {
-           &::DEBUG("gNI: No match.");
+           &::DEBUG("gNI: No match for '$what'");
            return;
        }
     }
@@ -904,4 +912,37 @@ sub do_set {
     &::DEBUG("do_set: TODO...");
 }
 
+sub stats {
+    &::DEBUG("News: stats called.");
+    &::msg($::who, "check my logs/console.");
+    my($i,$j) = (0,0);
+
+    # total request count.
+    foreach $chan (keys %::news) {
+       foreach (keys %{ $::news{$chan} }) {
+           $i += $::news{$chan}{$_}{Request_Count};
+       }
+    }
+    &::DEBUG("news: stats: total request count => $i");
+    $i = 0;
+
+    # total user cached.
+    foreach $chan (keys %::newsuser) {
+       $i += $::newsuser{$chan}{$_};
+    }
+    &::DEBUG("news: stats: total user cache => $i");
+    $i = 0;
+
+    # average latest time read.
+    my $t = time();
+    foreach $chan (keys %::newsuser) {
+       $i += $t - $::newsuser{$chan}{$_};
+       $j++;
+    }
+    &::DEBUG("news: stats: average latest time read: total time: $i");
+    &::DEBUG("... count: $j");
+    &::DEBUG("   average: ".sprintf("%.02f", $i/($j||1))." sec/user");
+    $i = $j = 0;
+}
+
 1;