/[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 125 by dpavlin, Fri Mar 14 15:26:33 2008 UTC revision 126 by dpavlin, Fri Mar 14 16:06:57 2008 UTC
# Line 18  use DateTime::Format::ISO8601; Line 18  use DateTime::Format::ISO8601;
18  use Carp qw/confess/;  use Carp qw/confess/;
19  use XML::Feed;  use XML::Feed;
20  use DateTime::Format::Flexible;  use DateTime::Format::Flexible;
 use IPC::DirQueue;  
 use File::Slurp;  
21  use Encode;  use Encode;
22    
23  =head1 NAME  =head1 NAME
# Line 59  my $irc_config = { Line 57  my $irc_config = {
57          ircname => 'Anna the bot: try /msg irc-logger help',          ircname => 'Anna the bot: try /msg irc-logger help',
58  };  };
59    
 my $queue_dir = './queue';  
   
60  my $HOSTNAME = `hostname -f`;  my $HOSTNAME = `hostname -f`;
61  chomp($HOSTNAME);  chomp($HOSTNAME);
62    
# Line 113  my $log_path; Line 109  my $log_path;
109  GetOptions(  GetOptions(
110          'import-dircproxy:s' => \$import_dircproxy,          'import-dircproxy:s' => \$import_dircproxy,
111          'log:s' => \$log_path,          'log:s' => \$log_path,
         'queue:s' => \$queue_dir,  
112          'debug!' => \$debug,          'debug!' => \$debug,
113  );  );
114    
# Line 127  sub _log { Line 122  sub _log {
122    
123  open(STDOUT, '>', $log_path) && warn "log to $log_path: $!\n";  open(STDOUT, '>', $log_path) && warn "log to $log_path: $!\n";
124    
 # queue  
   
 if ( ! -d $queue_dir ) {  
         warn "## creating queue directory $queue_dir";  
         mkdir $queue_dir or die "can't create queue directory $queue_dir: $!";  
 }  
   
 my $dq = IPC::DirQueue->new({ dir => $queue_dir });  
125    
126  # HTML formatters  # HTML formatters
127    
# Line 683  POE::Component::Client::HTTP->spawn( Line 670  POE::Component::Client::HTTP->spawn(
670  =cut  =cut
671    
672  sub rss_parse_xml {  sub rss_parse_xml {
673          my ($args) = @_;          my ($kernel,$args) = @_;
674    
675          warn "## rss_parse_xml ",dump( @_ ) if $debug;          warn "## rss_parse_xml ",dump( @_ ) if $debug;
676    
# Line 691  sub rss_parse_xml { Line 678  sub rss_parse_xml {
678          my $send_rss_msgs = $args->{send_rss_msgs};          my $send_rss_msgs = $args->{send_rss_msgs};
679          $send_rss_msgs = 1 if ! defined $send_rss_msgs;          $send_rss_msgs = 1 if ! defined $send_rss_msgs;
680    
681          _log "RSS fetch first $send_rss_msgs items from", $args->{url};          warn "## RSS fetch first $send_rss_msgs items from", $args->{url} if $debug;
682    
683          my $feed = XML::Feed->parse( \$args->{xml} );          my $feed = XML::Feed->parse( \$args->{xml} );
684          if ( ! $feed ) {          if ( ! $feed ) {
# Line 751  sub rss_parse_xml { Line 738  sub rss_parse_xml {
738                          my ( $type, $to ) = ( 'notice', $args->{channel} );                          my ( $type, $to ) = ( 'notice', $args->{channel} );
739                          ( $type, $to ) = ( 'privmsg', $args->{nick} ) if $args->{private};                          ( $type, $to ) = ( 'privmsg', $args->{nick} ) if $args->{private};
740    
741                          _log("RSS generated $type to $to:", $msg);                          _log(">> RSS $type to $to:", $msg);
742                          # XXX enqueue message to send later                          $kernel->post( $irc => $type => $to => $msg );
                         sub enqueue_post {  
                                 my $post = dump( @_ );  
                                 warn "## queue_post $post\n" if $debug;  
                                 $dq->enqueue_string( $post );  
                         }  
                         enqueue_post( $type => $to => $msg );  
743    
744                          $updates++;                          $updates++;
745                  }                  }
# Line 769  sub rss_parse_xml { Line 750  sub rss_parse_xml {
750          $sql .= qq{where id = } . $args->{id};          $sql .= qq{where id = } . $args->{id};
751          eval { $dbh->do( $sql ) };          eval { $dbh->do( $sql ) };
752    
753          _log "RSS got $total items of which $updates new from", $args->{url};          _log "RSS $updates/$total new items from", $args->{url};
754    
755          return $updates;          return $updates;
756  }  }
# Line 812  sub rss_check_updates { Line 793  sub rss_check_updates {
793                  $_stat->{rss}->{last_poll} = time();                  $_stat->{rss}->{last_poll} = time();
794                  _log rss_fetch_all( $kernel );                  _log rss_fetch_all( $kernel );
795          }          }
         # XXX send queue messages  
         while ( my $job = $dq->pickup_queued_job() ) {  
                 my $data = read_file( $job->get_data_path ) || die "can't load ", $job->get_data_path, ": $!";  
                 my @data = eval $data;  
                 _log "IRC post from queue:", @data;  
                 $kernel->post( $irc => @data );  
                 $job->finish;  
                 warn "## done queued job: ",dump( @data ) if $debug;  
         }  
796  }  }
797    
798  POE::Session->create( inline_states => {  POE::Session->create( inline_states => {
# Line 1052  POE::Session->create( inline_states => { Line 1024  POE::Session->create( inline_states => {
1024                                  if ($@) {                                  if ($@) {
1025                                          $res = "ERROR: $@";                                          $res = "ERROR: $@";
1026                                  } else {                                  } else {
1027                                          $res = "OK, RSS executed $command " . ( $sub ? "-$sub" : '' ) ."on $channel url $url";                                          $res = "OK, RSS executed $command" . ( $sub ? "-$sub" : '' ) ." on $channel url $url";
1028                                          if ( $command eq 'clean' ) {                                          if ( $command eq 'clean' ) {
1029                                                  my $seen = $_stat->{rss}->{seen} || die "no seen?";                                                  my $seen = $_stat->{rss}->{seen} || die "no seen?";
1030                                                  my $want_link = $_stat->{rss}->{url2link}->{$url} || warn "no url2link($url)";                                                  my $want_link = $_stat->{rss}->{url2link}->{$url} || warn "no url2link($url)";
# Line 1064  POE::Session->create( inline_states => { Line 1036  POE::Session->create( inline_states => {
1036                                                                  _log "RSS removed seen $c $url $link";                                                                  _log "RSS removed seen $c $url $link";
1037                                                          }                                                          }
1038                                                  }                                                  }
1039                                            } elsif ( $command eq 'add' ) {
1040                                                    rss_fetch_all( $_[KERNEL] );
1041                                          }                                          }
1042                                  }                                  }
1043                          } else {                          } else {
# Line 1073  POE::Session->create( inline_states => { Line 1047  POE::Session->create( inline_states => {
1047                          # this makes sense because we didn't catch rss-clean http://... before!                          # this makes sense because we didn't catch rss-clean http://... before!
1048                          $_stat->{rss} = undef;                          $_stat->{rss} = undef;
1049                          $dbh->do( qq{ update feeds set last_update = now() - delay } );                          $dbh->do( qq{ update feeds set last_update = now() - delay } );
1050                          $res = "OK, cleaned RSS cache";                          $res = rss_fetch_all( $_[KERNEL] );
1051                  }                  }
1052    
1053                  if ($res) {                  if ($res) {
# Line 1161  POE::Session->create( inline_states => { Line 1135  POE::Session->create( inline_states => {
1135                  my $row = delete( $_stat->{rss}->{fetch}->{ $request_object->uri } );                  my $row = delete( $_stat->{rss}->{fetch}->{ $request_object->uri } );
1136                  if ( $row ) {                  if ( $row ) {
1137                          $row->{xml} = $response_object->content;                          $row->{xml} = $response_object->content;
1138                          rss_parse_xml( $row );                          rss_parse_xml( $_[KERNEL], $row );
1139                  } else {                  } else {
1140                          warn "## can't find rss->fetch for ", $request_object->uri;                          warn "## can't find rss->fetch for ", $request_object->uri;
1141                  }                  }

Legend:
Removed from v.125  
changed lines
  Added in v.126

  ViewVC Help
Powered by ViewVC 1.1.26