--- trunk/bin/irc-logger.pl 2008/03/09 19:50:41 107 +++ trunk/bin/irc-logger.pl 2008/03/09 20:13:46 108 @@ -630,7 +630,7 @@ # RSS follow # -my $_rss; +my $_stat; sub rss_fetch { @@ -652,7 +652,7 @@ $total++; # seen allready? - next if $_rss->{$args->{channel}}->{$feed->link}->{$entry->id}++ > 0; + next if $_stat->{rss}->{seen}->{$args->{channel}}->{$feed->link}->{$entry->id}++ > 0; sub prefix { my ($txt,$var) = @_; @@ -727,11 +727,11 @@ sub rss_check_updates { my $kernel = shift; - $_rss->{last_poll} ||= time(); - my $dt = time() - $_rss->{last_poll}; + $_stat->{rss}->{last_poll} ||= time(); + my $dt = time() - $_stat->{rss}->{last_poll}; warn "## rss_check_updates $dt > $rss_min_delay\n"; if ( $dt > $rss_min_delay ) { - $_rss->{last_poll} = time(); + $_stat->{rss}->{last_poll} = time(); _log rss_fetch_all( $kernel ); } } @@ -934,7 +934,7 @@ } elsif ($msg =~ m/^rss-update/) { $res = rss_fetch_all( $_[KERNEL] ); } elsif ($msg =~ m/^rss-clean/) { - $_rss = undef; + $_stat->{rss} = undef; $dbh->do( qq{ update feeds set last_update = now() - delay } ); $res = "OK, cleaned RSS cache"; } elsif ($msg =~ m/^rss-list/) { @@ -1112,8 +1112,12 @@ } my $search = $q->param('search') || $q->param('grep') || ''; + my $r_url = $request->url; - if ($request->url =~ m#/rss(?:/(tags|last-tag|follow.*)\w*(?:=(\d+))?)?#i) { + my @commands = qw( tags last-tag follow stat ); + my $commands_re = join('|',@commands); + + if ($r_url =~ m#/rss(?:/($commands_re.*)\w*(?:=(\d+))?)?#i) { my $show = lc($1); my $nr = $2; @@ -1127,6 +1131,8 @@ my $feed = XML::Feed->new( $type ); $feed->link( $url ); + my $rc = RC_OK; + if ( $show eq 'tags' ) { $nr ||= 50; $feed->title( "tags from $CHANNEL" ); @@ -1196,20 +1202,29 @@ $feed->add_entry( $feed_entry ); } + } elsif ( $show =~ m/^stat/ ) { + my $feed_entry = XML::Feed::Entry->new($type); $feed_entry->title( "Internal stats" ); $feed_entry->content( - '' . dump( $_rss ) . ']]>' + '' . dump( $_stat ) . ']]>' ); $feed->add_entry( $feed_entry ); } else { - _log "unknown rss request ",$request->url; - return RC_DENY; + _log "unknown rss request $r_url"; + $feed->title( "unknown $r_url" ); + foreach my $c ( @commands ) { + my $feed_entry = XML::Feed::Entry->new($type); + $feed_entry->title( "rss/$c" ); + $feed_entry->link( "$url/rss/$c" ); + $feed->add_entry( $feed_entry ); + } + $rc = RC_DENY; } $response->content( $feed->as_xml ); - return RC_OK; + return $rc; } if ( $@ ) {