* Switch to Getopt::Long, change coding style;
limit line length.
* Completely changed options due to new
GetOpt::Long processing.
* Adapt to changes in NewsStats.pm
* Redo documentation.
* Update TODO.
Signed-off-by: Thomas Hochstein <thh@inter.net>
- General tests and optimisations
+ feedlog.pl
- General tests and optimisations
+ feedlog.pl
- - Complete rewrite (like groupstats.pl, include changes in NewsStats.pm)
- Gracefully handle interruptions to database connection, at least log
lost postings (Bug #30).
- Buffer output that cannot be written to database (Bug #31).
- Gracefully handle interruptions to database connection, at least log
lost postings (Bug #30).
- Buffer output that cannot be written to database (Bug #31).
#
# It is part of the NewsStats package.
#
#
# It is part of the NewsStats package.
#
-# Copyright (c) 2010 Thomas Hochstein <thh@inter.net>
+# Copyright (c) 2010-2012 Thomas Hochstein <thh@inter.net>
#
# It can be redistributed and/or modified under the same terms under
# which Perl itself is published.
#
# It can be redistributed and/or modified under the same terms under
# which Perl itself is published.
use Date::Format;
use DBI;
use Date::Format;
use DBI;
+use Getopt::Long qw(GetOptions);
+Getopt::Long::config ('bundling');
################################# Main program #################################
### read commandline options
################################# Main program #################################
### read commandline options
-my %Options = &ReadOptions('qd');
+my ($OptDebug,$OptQuiet);
+GetOptions ('d|debug!' => \$OptDebug,
+ 'q|test!' => \$OptQuiet,
+ 'h|help' => \&ShowPOD,
+ 'V|version' => \&ShowVersion) or exit 1;
-my %Conf = %{ReadConfig('newsstats.conf')};
+my %Conf = %{ReadConfig($HomePath.'/newsstats.conf')};
-openlog($MySelf, 'nofatal,pid', LOG_NEWS);
-syslog(LOG_NOTICE, "$MyVersion starting up.") if !$Options{'q'};
+openlog($0, 'nofatal,pid', LOG_NEWS);
+syslog(LOG_NOTICE, "$MyVersion starting up.") if !$OptQuiet;
### init database
my $DBHandle = InitDB(\%Conf,0);
### init database
my $DBHandle = InitDB(\%Conf,0);
syslog(LOG_CRIT, 'Database connection failed: %s', $DBI::errstr);
while (1) {}; # go into endless loop to suppress further errors and respawning
};
syslog(LOG_CRIT, 'Database connection failed: %s', $DBI::errstr);
while (1) {}; # go into endless loop to suppress further errors and respawning
};
-my $DBQuery = $DBHandle->prepare(sprintf("INSERT INTO %s.%s (day,date,mid,timestamp,token,size,peer,path,newsgroups,headers) VALUES (?,?,?,?,?,?,?,?,?,?)",$Conf{'DBDatabase'},$Conf{'DBTableRaw'}));
+my $DBQuery = $DBHandle->prepare(sprintf("INSERT INTO %s.%s (day,date,mid,
+ timestamp,token,size,peer,path,
+ newsgroups,headers)
+ VALUES (?,?,?,?,?,?,?,?,?,?)",
+ $Conf{'DBDatabase'},$Conf{'DBTableRaw'}));
### main loop
while (<>) {
### main loop
while (<>) {
my $Date = time2str("%Y-%m-%d %H:%M:%S", $Timestamp);
# write to database
my $Date = time2str("%Y-%m-%d %H:%M:%S", $Timestamp);
# write to database
- if (!$DBQuery->execute($Day, $Date, $Mid, $Timestamp, $Token, $Size, $Peer, $Path, $Newsgroups, $Headers)) {
+ if (!$DBQuery->execute($Day, $Date, $Mid, $Timestamp, $Token, $Size, $Peer,
+ $Path, $Newsgroups, $Headers)) {
syslog(LOG_ERR, 'Database error: %s', $DBI::errstr);
};
$DBQuery->finish;
syslog(LOG_ERR, 'Database error: %s', $DBI::errstr);
};
$DBQuery->finish;
- warn sprintf("-----\nDay: %s\nDate: %s\nMID: %s\nTS: %s\nToken: %s\nSize: %s\nPeer: %s\nPath: %s\nNewsgroups: %s\nHeaders: %s\n",$Day, $Date, $Mid, $Timestamp, $Token, $Size, $Peer, $Path, $Newsgroups, $Headers) if $Options{'d'};
+ warn sprintf("-----\nDay: %s\nDate: %s\nMID: %s\nTS: %s\nToken: %s\n".
+ "Size: %s\nPeer: %s\nPath: %s\nNewsgroups: %s\nHeaders: %s\n",
+ $Day, $Date, $Mid, $Timestamp, $Token, $Size, $Peer, $Path,
+ $Newsgroups, $Headers) if $OptDebug;
}
### close handles
$DBHandle->disconnect;
}
### close handles
$DBHandle->disconnect;
-syslog(LOG_NOTICE, "$MySelf closing down.") if !$Options{'q'};
+syslog(LOG_NOTICE, "$0 closing down.") if !$OptQuiet;
-See doc/README: Perl 5.8.x itself and the following modules from CPAN:
-
-=over 2
-
-=item -
-
-Config::Auto
-
-=item -
-
-Date::Format
-
-=item -
-
-DBI
-
-=back
-F<feedlog.pl> will read its configuration from F<newsstats.conf> which
+B<feedlog> will read its configuration from F<newsstats.conf> which
should be present in the same directory via Config::Auto.
should be present in the same directory via Config::Auto.
-See doc/INSTALL for an overview of possible configuration options.
+See L<doc/INSTALL> for an overview of possible configuration options.
+=item B<-V>, B<--version>
-Print out version and copyright information on B<yapfaq> and exit.
+Print out version and copyright information and exit.
Print this man page and exit.
Print this man page and exit.
Output debugging information to STDERR while parsing STDIN. You'll
find that information most probably in your B<INN> F<errlog> file.
Output debugging information to STDERR while parsing STDIN. You'll
find that information most probably in your B<INN> F<errlog> file.
Suppress logging to syslog.
Suppress logging to syslog.
:!*,de.*
:Tc,WmtfbsPNH,Ac:/path/to/feedlog.pl
:!*,de.*
:Tc,WmtfbsPNH,Ac:/path/to/feedlog.pl
-See doc/INSTALL for further information.
+See L<doc/INSTALL> for further information.
-Runtime configuration file for B<yapfaq>.
+Runtime configuration file.
=head1 COPYRIGHT AND LICENSE
=head1 COPYRIGHT AND LICENSE
-Copyright (c) 2010 Thomas Hochstein <thh@inter.net>
+Copyright (c) 2010-2012 Thomas Hochstein <thh@inter.net>
This program is free software; you may redistribute it and/or modify it
under the same terms as Perl itself.
This program is free software; you may redistribute it and/or modify it
under the same terms as Perl itself.