/[irc-logger]/trunk/bin/irc-logger.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/bin/irc-logger.pl

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 88 by dpavlin, Fri Mar 7 00:31:58 2008 UTC revision 104 by dpavlin, Sun Mar 9 00:47:38 2008 UTC
# Line 2  Line 2 
2  use strict;  use strict;
3  $|++;  $|++;
4    
5    use POE qw(Component::IRC Component::Server::HTTP);
6    use HTTP::Status;
7    use DBI;
8    use Regexp::Common qw /URI/;
9    use CGI::Simple;
10    use HTML::TagCloud;
11    use POSIX qw/strftime/;
12    use HTML::CalendarMonthSimple;
13    use Getopt::Long;
14    use DateTime;
15    use URI::Escape;
16    use Data::Dump qw/dump/;
17    use DateTime::Format::ISO8601;
18    use Carp qw/confess/;
19    use XML::Feed;
20    use DateTime::Format::Flexible;
21    
22  =head1 NAME  =head1 NAME
23    
24  irc-logger.pl  irc-logger.pl
# Line 20  Import log from C<dircproxy> to C<irc-lo Line 37  Import log from C<dircproxy> to C<irc-lo
37    
38  =item --log=irc-logger.log  =item --log=irc-logger.log
39    
 Name of log file  
   
 =item --follow=file.log  
   
 Follows new messages in file  
   
40  =back  =back
41    
42  =head1 DESCRIPTION  =head1 DESCRIPTION
# Line 41  chomp($HOSTNAME); Line 52  chomp($HOSTNAME);
52    
53  my $NICK = 'irc-logger';  my $NICK = 'irc-logger';
54  $NICK .= '-dev' if ($HOSTNAME =~ m/llin/);  $NICK .= '-dev' if ($HOSTNAME =~ m/llin/);
55  my $CONNECT =  my $CONNECT = {
56    {Server => 'irc.freenode.net',          Server => 'irc.freenode.net',
57     Nick => $NICK,          Nick => $NICK,
58     Ircname => "try /msg $NICK help",          Ircname => "try /msg $NICK help",
59    };  };
60  my $CHANNEL = '#razmjenavjestina';  my $CHANNEL = '#razmjenavjestina';
61  $CHANNEL = '#irc-logger' if ($HOSTNAME =~ m/llin/);  $CHANNEL = '#irc-logger' if ($HOSTNAME =~ m/llin/);
62  my $IRC_ALIAS = "log";  my $IRC_ALIAS = "log";
63    
64  # default log to follow and announce messages  if ( $HOSTNAME =~ m/lugarin/ ) {
65  my $follows_path = 'follows.log';          $CONNECT->{Server} = 'irc.carnet.hr';
66            $CHANNEL = '#riss';
67    }
68    
69    warn dump( $HOSTNAME, $CONNECT );
70    
71  my $DSN = 'DBI:Pg:dbname=' . $NICK;  my $DSN = 'DBI:Pg:dbname=' . $NICK;
72    
# Line 64  my $last_x_tags = 50; Line 79  my $last_x_tags = 50;
79    
80  # don't pull rss feeds more often than this  # don't pull rss feeds more often than this
81  my $rss_min_delay = 60;  my $rss_min_delay = 60;
 $rss_min_delay = 15;  
82    
83  my $http_port = $NICK =~ m/-dev/ ? 8001 : 8000;  my $http_port = $NICK =~ m/-dev/ ? 8001 : 8000;
84    
# Line 72  my $url = "http://$HOSTNAME:$http_port"; Line 86  my $url = "http://$HOSTNAME:$http_port";
86    
87  ## END CONFIG  ## END CONFIG
88    
 use POE qw(Component::IRC Wheel::FollowTail Component::Server::HTTP);  
 use HTTP::Status;  
 use DBI;  
 use Regexp::Common qw /URI/;  
 use CGI::Simple;  
 use HTML::TagCloud;  
 use POSIX qw/strftime/;  
 use HTML::CalendarMonthSimple;  
 use Getopt::Long;  
 use DateTime;  
 use URI::Escape;  
 use Data::Dump qw/dump/;  
 use DateTime::Format::ISO8601;  
 use Carp qw/confess/;  
 use XML::Feed;  
 use DateTime::Format::Flexible;  
   
89  my $use_twitter = 1;  my $use_twitter = 1;
90  eval { require Net::Twitter; };  eval { require Net::Twitter; };
91  $use_twitter = 0 if ($@);  $use_twitter = 0 if ($@);
# Line 97  my $import_dircproxy; Line 94  my $import_dircproxy;
94  my $log_path;  my $log_path;
95  GetOptions(  GetOptions(
96          'import-dircproxy:s' => \$import_dircproxy,          'import-dircproxy:s' => \$import_dircproxy,
         'follows:s' => \$follows_path,  
97          'log:s' => \$log_path,          'log:s' => \$log_path,
98  );  );
99    
# Line 111  sub _log { Line 107  sub _log {
107          print strftime($TIMESTAMP,localtime()) . ' ' . join(" ",@_) . $/;          print strftime($TIMESTAMP,localtime()) . ' ' . join(" ",@_) . $/;
108  }  }
109    
 # LOG following  
   
 my %FOLLOWS =  
   (  
 #   ACCESS => "/var/log/apache/access.log",  
 #   ERROR => "/var/log/apache/error.log",  
   );  
   
 sub add_follow_path {  
         my $path = shift;  
         my $name = $path;  
         $name =~ s/\..*$//;  
         warn "# using $path to announce messages from $name\n";  
         $FOLLOWS{$name} = $path;  
 }  
   
 add_follow_path( $follows_path ) if ( -e $follows_path );  
   
110  # HTML formatters  # HTML formatters
111    
112  my %escape = ('<'=>'&lt;', '>'=>'&gt;', '&'=>'&amp;', '"'=>'&quot;');  my %escape = ('<'=>'&lt;', '>'=>'&gt;', '&'=>'&amp;', '"'=>'&quot;');
# Line 146  my $filter = { Line 124  my $filter = {
124                  # protect HTML from wiki modifications                  # protect HTML from wiki modifications
125                  sub e {                  sub e {
126                          my $t = shift;                          my $t = shift;
127                          return 'uri_unescape{' . uri_escape($t) . '}';                          return 'uri_unescape{' . uri_escape($t, '^a-zA-Z0-9') . '}';
128                  }                  }
129    
130                  $m =~ s/($escape_re)/$escape{$1}/gs;                  $m =~ s/($escape_re)/$escape{$1}/gs;
131                  $m =~ s#($RE{URI}{HTTP})#e(qq{<a href="$1">$1</a>})#egs ||                  $m =~ s#($RE{URI}{HTTP})#e(qq{<a href="$1">$1</a>})#egs;
132                  $m =~ s#\/(\w+)\/#<i>$1</i>#gs;                  $m =~ s#\/(\w+)\/#<i>$1</i>#gs;
133                  $m =~ s#$tag_regex#e(qq{<a href="$url?tag=$1" class="tag">$1</a>})#egs;                  $m =~ s#$tag_regex#e(qq{<a href="$url?tag=$1" class="tag">$1</a>})#egs;
134                  $m =~ s#\*(\w+)\*#<b>$1</b>#gs;                  $m =~ s#\*(\w+)\*#<b>$1</b>#gs;
# Line 207  create table feeds ( Line 185  create table feeds (
185          name text,          name text,
186          delay interval not null default '5 min',          delay interval not null default '5 min',
187          active boolean default true,          active boolean default true,
188            channel text not null,
189            nick text not null,
190            private boolean default false,
191          last_update timestamp default 'now()',          last_update timestamp default 'now()',
192          polls int default 0,          polls int default 0,
193          updates int default 0          updates int default 0
194  );  );
195  create unique index feeds_url on feeds(url);  create unique index feeds_url on feeds(url);
196  insert into feeds (url,name) values ('http://wiki.razmjenavjestina.org/feed/workspace/razmjenavjestina?category=Recent%20Changes','wiki');  insert into feeds (url,name,channel,nick) values ('http://wiki.razmjenavjestina.org/feed/workspace/razmjenavjestina?category=Recent%20Changes','wiki','$CHANNEL','dpavlin');
197          },          },
198  };  };
199    
# Line 256  sub meta { Line 237  sub meta {
237                  if ( $@ || ! $sth->rows ) {                  if ( $@ || ! $sth->rows ) {
238                          $sth = $dbh->prepare(qq{ insert into meta (value,nick,channel,name,changed) values (?,?,?,?,now()) });                          $sth = $dbh->prepare(qq{ insert into meta (value,nick,channel,name,changed) values (?,?,?,?,now()) });
239                          $sth->execute( $value, $nick, $channel, $name );                          $sth->execute( $value, $nick, $channel, $name );
240                          _log "created $nick/$channel/$name = $value";                          warn "## created $nick/$channel/$name = $value\n";
241                  } else {                  } else {
242                          _log "updated $nick/$channel/$name = $value ";                          warn "## updated $nick/$channel/$name = $value\n";
243                  }                  }
244    
245                  return $value;                  return $value;
# Line 268  sub meta { Line 249  sub meta {
249                  my $sth = $dbh->prepare(qq{ select value,changed from meta where nick = ? and channel = ? and name = ? });                  my $sth = $dbh->prepare(qq{ select value,changed from meta where nick = ? and channel = ? and name = ? });
250                  $sth->execute( $nick, $channel, $name );                  $sth->execute( $nick, $channel, $name );
251                  my ($v,$c) = $sth->fetchrow_array;                  my ($v,$c) = $sth->fetchrow_array;
252                  _log "fetched $nick/$channel/$name = $v [$c]";                  warn "## fetched $nick/$channel/$name = $v [$c]\n";
253                  return ($v,$c) if wantarray;                  return ($v,$c) if wantarray;
254                  return $v;                  return $v;
255    
# Line 365  sub get_from_log { Line 346  sub get_from_log {
346    
347          my @where;          my @where;
348          my @args;          my @args;
349            my $msg;
350    
351          if (my $search = $args->{search}) {          if (my $search = $args->{search}) {
352                  $search =~ s/^\s+//;                  $search =~ s/^\s+//;
353                  $search =~ s/\s+$//;                  $search =~ s/\s+$//;
354                  push @where, 'message ilike ? or nick ilike ?';                  push @where, 'message ilike ? or nick ilike ?';
355                  push @args, ( ( '%' . $search . '%' ) x 2 );                  push @args, ( ( '%' . $search . '%' ) x 2 );
356                  _log "search for '$search'";                  $msg = "Search for '$search'";
357          }          }
358    
359          if ($args->{tag} && $tags->{ $args->{tag} }) {          if ($args->{tag} && $tags->{ $args->{tag} }) {
360                  push @where, 'id in (' . join(',', @{ $tags->{ $args->{tag} } }) . ')';                  push @where, 'id in (' . join(',', @{ $tags->{ $args->{tag} } }) . ')';
361                  _log "search for tags $args->{tag}";                  $msg = "Search for tags $args->{tag}";
362          }          }
363    
364          if (my $date = $args->{date} ) {          if (my $date = $args->{date} ) {
365                  $date = check_date( $date );                  $date = check_date( $date );
366                  push @where, 'date(time) = ?';                  push @where, 'date(time) = ?';
367                  push @args, $date;                  push @args, $date;
368                  _log "search for date $date";                  $msg = "search for date $date";
369          }          }
370    
371          $sql .= " where " . join(" and ", @where) if @where;          $sql .= " where " . join(" and ", @where) if @where;
# Line 397  sub get_from_log { Line 379  sub get_from_log {
379          eval { $sth->execute( @args ) };          eval { $sth->execute( @args ) };
380          return if $@;          return if $@;
381    
382            my $nr_results = $sth->rows;
383    
384          my $last_row = {          my $last_row = {
385                  date => '',                  date => '',
386                  time => '',                  time => '',
# Line 417  sub get_from_log { Line 401  sub get_from_log {
401    
402          return @rows if ($args->{full_rows});          return @rows if ($args->{full_rows});
403    
404          my @msgs = (          $msg .= ' produced ' . (
405                  "Showing " . ($#rows + 1) . " messages..."                  $nr_results == 0 ? 'no results' :
406                    $nr_results == 0 ? 'one result' :
407                            $nr_results . ' results'
408          );          );
409    
410            my @msgs = ( $msg );
411    
412          if ($context) {          if ($context) {
413                  my @ids = @rows;                  my @ids = @rows;
414                  @rows = ();                  @rows = ();
# Line 656  sub rss_fetch { Line 644  sub rss_fetch {
644                  _log("can't fetch RSS ", $args->{url});                  _log("can't fetch RSS ", $args->{url});
645                  return;                  return;
646          }          }
647    
648          my ( $total, $updates ) = ( 0, 0 );          my ( $total, $updates ) = ( 0, 0 );
649          for my $entry ($feed->entries) {          for my $entry ($feed->entries) {
650                  $total++;                  $total++;
651    
652                  # seen allready?                  # seen allready?
653                  return if $_rss->{$feed->link}->{seen}->{$entry->id}++ > 0;                  next if $_rss->{$args->{channel}}->{$feed->link}->{$entry->id}++ > 0;
654    
655                  sub prefix {                  sub prefix {
656                          my ($txt,$var) = @_;                          my ($txt,$var) = @_;
657                            $var =~ s/\s+/ /gs;
658                          $var =~ s/^\s+//g;                          $var =~ s/^\s+//g;
659                            $var =~ s/\s+$//g;
660                          return $txt . $var if $var;                          return $txt . $var if $var;
661                  }                  }
662    
663                    # fix absolute and relative links to feed entries
664                    my $link = $entry->link;
665                    if ( $link =~ m!^/! ) {
666                            my $host = $args->{url};
667                            $host =~ s!^(http://[^/]+).*$!$1!;      #!vim
668                            $link = "$host/$link";
669                    } elsif ( $link !~ m!^http! ) {
670                            $link = $args->{url} . $link;
671                    }
672    
673                  my $msg;                  my $msg;
674                  $msg .= prefix( 'From: ' , $feed->title );                  $msg .= prefix( 'From: ' , $args->{name} || $feed->title );
675                  $msg .= prefix( ' by ' , $entry->author );                  $msg .= prefix( ' by ' , $entry->author );
676                  $msg .= prefix( ' -- ' , $entry->link );                  $msg .= prefix( ' | ' , $entry->title );
677                    $msg .= prefix( ' | ' , $link );
678  #               $msg .= prefix( ' id ' , $entry->id );  #               $msg .= prefix( ' id ' , $entry->id );
679    
680                  if ( $args->{kernel} && $send_rss_msgs ) {                  if ( $args->{kernel} && $send_rss_msgs ) {
681                          $send_rss_msgs--;                          $send_rss_msgs--;
682                          _log('RSS', $msg);                          # FIXME bug! should be save_message
683                          $sth_insert_log->execute( $CHANNEL, 1, $NICK, $msg, undef );  #                       save_message( channel => $args->{channel}, me => 1, nick => $NICK, message => $msg );
684                          $args->{kernel}->post( $IRC_ALIAS => notice => $CHANNEL, $msg );                          $sth_insert_log->execute( $args->{channel}, 1, $NICK, $msg, 'now()' );
685                            my ( $type, $to ) = ( 'notice', $args->{channel} );
686                            ( $type, $to ) = ( 'privmsg', $args->{nick} ) if $args->{private};
687                            _log(">> $type $to |", $msg);
688                            $args->{kernel}->post( $IRC_ALIAS => $type => $to, $msg );
689                          $updates++;                          $updates++;
690                  }                  }
691          }          }
# Line 697  sub rss_fetch { Line 703  sub rss_fetch {
703  sub rss_fetch_all {  sub rss_fetch_all {
704          my $kernel = shift;          my $kernel = shift;
705          my $sql = qq{          my $sql = qq{
706                  select id, url, name                  select id, url, name, channel, nick, private
707                  from feeds                  from feeds
708                  where active is true                  where active is true
709          };          };
# Line 717  sub rss_fetch_all { Line 723  sub rss_fetch_all {
723    
724  sub rss_check_updates {  sub rss_check_updates {
725          my $kernel = shift;          my $kernel = shift;
726          my $last_t = $_rss->{last_poll} || time();          $_rss->{last_poll} ||= time();
727          my $t = time();          my $dt = time() - $_rss->{last_poll};
728          if ( $last_t - $t > $rss_min_delay ) {          warn "## rss_check_updates $dt > $rss_min_delay\n";
729                  $_rss->{last_poll} = $t;          if ( $dt > $rss_min_delay ) {
730                    $_rss->{last_poll} = time();
731                  _log rss_fetch_all( $kernel );                  _log rss_fetch_all( $kernel );
732          }          }
733  }  }
# Line 732  _log rss_fetch_all; Line 739  _log rss_fetch_all;
739  # POE handing part  # POE handing part
740  #  #
741    
 my $SKIPPING = 0;               # if skipping, how many we've done  
 my $SEND_QUEUE;                 # cache  
742  my $ping;                                               # ping stats  my $ping;                                               # ping stats
743    
744  POE::Component::IRC->new($IRC_ALIAS);  POE::Component::IRC->new($IRC_ALIAS);
# Line 755  POE::Session->create( inline_states => { Line 760  POE::Session->create( inline_states => {
760    
761                  save_message( channel => $channel, me => 0, nick => $nick, message => $msg);                  save_message( channel => $channel, me => 0, nick => $nick, message => $msg);
762                  meta( $nick, $channel, 'last-msg', $msg );                  meta( $nick, $channel, 'last-msg', $msg );
763                    rss_check_updates( $kernel );
764      },      },
765      irc_ctcp_action => sub {      irc_ctcp_action => sub {
766                  my $kernel = $_[KERNEL];                  my $kernel = $_[KERNEL];
# Line 925  POE::Session->create( inline_states => { Line 931  POE::Session->create( inline_states => {
931                          $res = rss_fetch_all( $_[KERNEL] );                          $res = rss_fetch_all( $_[KERNEL] );
932                  } elsif ($msg =~ m/^rss-clean/) {                  } elsif ($msg =~ m/^rss-clean/) {
933                          $_rss = undef;                          $_rss = undef;
934                            $dbh->do( qq{ update feeds set last_update = now() - delay } );
935                          $res = "OK, cleaned RSS cache";                          $res = "OK, cleaned RSS cache";
936                  } elsif ($msg =~ m!^rss-(add|remove|stop|start)\s+(http://\S+)\s*(.*)!) {                  } elsif ($msg =~ m/^rss-list/) {
937                            my $sth = $dbh->prepare(qq{ select url,name,last_update,active,channel,nick,private from feeds });
938                            $sth->execute;
939                            while (my @row = $sth->fetchrow_array) {
940                                    $_[KERNEL]->post( $IRC_ALIAS => privmsg => $nick, join(' | ',@row) );
941                            }
942                            $res = '';
943                    } elsif ($msg =~ m!^rss-(add|remove|stop|start)(?:-(private))?\s+(http://\S+)\s*(.*)!) {
944                            my ( $command, $sub, $url, $arg ) = ( $1,$2,$3,$4 );
945    
946                            my $channel = $1 if ( $arg =~ s/\s*(#\S+)\s*// );
947                            $channel = $nick if $sub eq 'private';
948    
949                          my $sql = {                          my $sql = {
950                                  add             => qq{ insert into feeds (url,name) values (?,?) },                                  add     => qq{ insert into feeds (url,name,channel,nick,private) values (?,?,?,?,?) },
951  #                               remove  => qq{ delete from feeds                                where url = ? and name = ? },  #                               remove  => qq{ delete from feeds                                where url = ? and name = ? },
952                                  start   => qq{ update feeds set active = true   where url = ? -- ? },                                  start   => qq{ update feeds set active = true   where url = ? },
953                                  stop    => qq{ update feeds set active = false  where url = ? -- ? },                                  stop    => qq{ update feeds set active = false  where url = ? },
                                   
954                          };                          };
955                          if (my $q = $sql->{$1} ) {  
956                            if ( $command eq 'add' && ! $channel ) {
957                                    $res = "ERROR: got '$msg' which doesn't have #channel in it, ignoring!";
958                            } elsif (my $q = $sql->{$command} ) {
959                                  my $sth = $dbh->prepare( $q );                                  my $sth = $dbh->prepare( $q );
960                                  warn "## SQL $q ( $2 | $3 )\n";                                  my @data = ( $url );
961                                  eval { $sth->execute( $2, $3 ) };                                  if ( $command eq 'add' ) {
962                                            push @data, ( $arg, $channel, $nick, $sub eq 'private' ? 1 : 0 );
963                                    }
964                                    warn "## $command SQL $q with ",dump( @data ),"\n";
965                                    eval { $sth->execute( @data ) };
966                                    if ($@) {
967                                            $res = "ERROR: $@";
968                                    } else {
969                                            $res = "OK, RSS [$command|$sub|$url|$arg]";
970                                    }
971                            } else {
972                                    $res = "ERROR: don't know what to do with: $msg";
973                          }                          }
   
                         $res ||= "OK, RSS $1 : $2 - $3";  
974                  }                  }
975    
976                  if ($res) {                  if ($res) {
# Line 951  POE::Session->create( inline_states => { Line 981  POE::Session->create( inline_states => {
981                  rss_check_updates( $_[KERNEL] );                  rss_check_updates( $_[KERNEL] );
982          },          },
983          irc_477 => sub {          irc_477 => sub {
984                  _log "# irc_477: ",$_[ARG1];                  _log "<< irc_477: ",$_[ARG1];
985                  $_[KERNEL]->post( $IRC_ALIAS => privmsg => 'nickserv', "register $NICK" );                  $_[KERNEL]->post( $IRC_ALIAS => privmsg => 'nickserv', "register $NICK" );
986          },          },
987          irc_505 => sub {          irc_505 => sub {
988                  _log "# irc_505: ",$_[ARG1];                  _log "<< irc_505: ",$_[ARG1];
989                  $_[KERNEL]->post( $IRC_ALIAS => privmsg => 'nickserv', "register $NICK" );                  $_[KERNEL]->post( $IRC_ALIAS => privmsg => 'nickserv', "register $NICK" );
990  #               $_[KERNEL]->post( $IRC_ALIAS => privmsg => 'nickserv', "set hide email on" );  #               $_[KERNEL]->post( $IRC_ALIAS => privmsg => 'nickserv', "set hide email on" );
991  #               $_[KERNEL]->post( $IRC_ALIAS => privmsg => 'nickserv', "set email dpavlin\@rot13.org" );  #               $_[KERNEL]->post( $IRC_ALIAS => privmsg => 'nickserv', "set email dpavlin\@rot13.org" );
992          },          },
993          irc_registered => sub {          irc_registered => sub {
994                  _log "## registrated $NICK";                  _log "## registrated $NICK, /msg nickserv IDENTIFY $NICK";
995                  $_[KERNEL]->post( $IRC_ALIAS => privmsg => 'nickserv', "IDENTIFY $NICK" );                  $_[KERNEL]->post( $IRC_ALIAS => privmsg => 'nickserv', "IDENTIFY $NICK" );
996          },          },
997          irc_disconnected => sub {          irc_disconnected => sub {
998                  _log "## disconnected, reconnecting again";                  _log "## disconnected.. sleeping for $sleep_on_error seconds and reconnecting again";
999                  $_[KERNEL]->post($IRC_ALIAS => connect => $CONNECT);                  sleep($sleep_on_error);
1000                    $_[KERNEL]->post( $IRC_ALIAS => connect => $CONNECT);
1001          },          },
1002          irc_socketerr => sub {          irc_socketerr => sub {
1003                  _log "## socket error... sleeping for $sleep_on_error seconds and retry";                  _log "## socket error... sleeping for $sleep_on_error seconds and retry";
1004                  sleep($sleep_on_error);                  sleep($sleep_on_error);
1005                  $_[KERNEL]->post($IRC_ALIAS => connect => $CONNECT);                  $_[KERNEL]->post( $IRC_ALIAS => connect => $CONNECT);
1006          },          },
1007  #       irc_433 => sub {  #       irc_433 => sub {
1008  #               print "# irc_433: ",$_[ARG1], "\n";  #               print "# irc_433: ",$_[ARG1], "\n";
1009  #               warn "## indetify $NICK\n";  #               warn "## indetify $NICK\n";
1010  #               $_[KERNEL]->post( $IRC_ALIAS => privmsg => 'nickserv', "IDENTIFY $NICK" );  #               $_[KERNEL]->post( $IRC_ALIAS => privmsg => 'nickserv', "IDENTIFY $NICK" );
1011  #       },  #       },
1012    #       irc_451 # please register
1013            irc_snotice => sub {
1014                    _log "<< snotice",$_[ARG0];
1015                    if ( $_[ARG0] =~ m!/(QUOTE)\s+(PASS\s+\d+)!i ) {
1016                            warn ">> $1 | $2\n";
1017                            $_[KERNEL]->post( $IRC_ALIAS => lc($1) => $2);
1018                    }
1019            },
1020      _child => sub {},      _child => sub {},
1021      _default => sub {      _default => sub {
1022                  _log sprintf "sID:%s %s %s",                  _log sprintf "sID:%s %s %s",
# Line 1144  sub root_handler { Line 1183  sub root_handler {
1183                                  $feed->add_entry( $feed_entry );                                  $feed->add_entry( $feed_entry );
1184                          }                          }
1185    
1186                            my $feed_entry = XML::Feed::Entry->new($type);
1187                            $feed_entry->title( "Internal stats" );
1188                            $feed_entry->content(
1189                                    '<![CDATA[<pre>' . dump( $_rss ) . '</pre>]]>'
1190                            );
1191                            $feed->add_entry( $feed_entry );
1192    
1193                  } else {                  } else {
1194                          _log "unknown rss request ",$request->url;                          _log "unknown rss request ",$request->url;
1195                          return RC_DENY;                          return RC_DENY;
# Line 1208  sub root_handler { Line 1254  sub root_handler {
1254                          }                          }
1255                          $cal->setcontent($dd, qq[                          $cal->setcontent($dd, qq[
1256                                  <a href="$url?date=$row->{date}">$row->{nr}</a><br/>$row->{len}                                  <a href="$url?date=$row->{date}">$row->{nr}</a><br/>$row->{len}
1257                          ]);                          ]) if $cal;
1258                                                    
1259                  }                  }
1260                  $html .= qq{<td valign="top">} . $cal->as_HTML() . qq{</td></tr></table>};                  $html .= qq{<td valign="top">} . $cal->as_HTML() . qq{</td></tr></table>};

Legend:
Removed from v.88  
changed lines
  Added in v.104

  ViewVC Help
Powered by ViewVC 1.1.26