Initial checkin of working branch.
[usenet/newsstats.git] / feedlog.pl
CommitLineData
741336c2
TH
1#! /usr/bin/perl -W\r
2#\r
3# feedlog.pl\r
4#\r
5# This script will log headers and other data to a database\r
6# for further analysis by parsing a feed from INN.\r
7# \r
8# It is part of the NewsStats package.\r
9#\r
10# Copyright (c) 2010 Thomas Hochstein <thh@inter.net>\r
11#\r
12# It can be redistributed and/or modified under the same terms under \r
13# which Perl itself is published.\r
14\r
15BEGIN {\r
16 our $VERSION = "0.01";\r
17 use File::Basename;\r
18 push(@INC, dirname($0));\r
19}\r
20use strict;\r
21\r
22use NewsStats;\r
23\r
24use Sys::Syslog qw(:standard :macros);\r
25\r
26use Date::Format;\r
27use DBI;\r
28\r
29################################# Main program #################################\r
30\r
31### read commandline options\r
32my %Options = &ReadOptions('qd');\r
33\r
34### read configuration\r
35my %Conf = %{ReadConfig('newsstats.conf')};\r
36\r
37### init syslog\r
38openlog($MySelf, 'nofatal,pid', LOG_NEWS);\r
39syslog(LOG_NOTICE, "$MyVersion starting up.") if !$Options{'q'};\r
40\r
41### init database\r
42my $DBHandle = InitDB(\%Conf,0);\r
43if (!$DBHandle) {\r
44 syslog(LOG_CRIT, 'Database connection failed: %s', $DBI::errstr);\r
45 while (1) {}; # go into endless loop to suppress further errors and respawning\r
46};\r
47my $DBQuery = $DBHandle->prepare(sprintf("INSERT INTO %s.%s (day,date,mid,timestamp,token,size,peer,path,newsgroups,headers) VALUES (?,?,?,?,?,?,?,?,?,?)",$Conf{'DBDatabase'},$Conf{'DBTableRaw'}));\r
48\r
49### main loop\r
50while (<>) {\r
51 chomp;\r
52 # catch empty lines trailing or leading\r
53 if ($_ eq '') {\r
54 next;\r
55 }\r
56 # first line contains: mid, timestamp, token, size, peer, Path, Newsgroups\r
57 my ($Mid, $Timestamp, $Token, $Size, $Peer, $Path, $Newsgroups) = split;\r
58 # remaining lines contain headers\r
59 my $Headers = "";\r
60 while (<>) {\r
61 chomp;\r
62 # empty line terminates this article\r
63 if ($_ eq '') {\r
64 last;\r
65 }\r
66 # collect headers\r
67 $Headers .= $_."\n" ;\r
68 }\r
69\r
70 # parse timestamp to day (YYYY-MM-DD) and to MySQL timestamp\r
71 my $Day = time2str("%Y-%m-%d", $Timestamp);\r
72 my $Date = time2str("%Y-%m-%d %H:%M:%S", $Timestamp);\r
73\r
74 # write to database\r
75 if (!$DBQuery->execute($Day, $Date, $Mid, $Timestamp, $Token, $Size, $Peer, $Path, $Newsgroups, $Headers)) {\r
76 syslog(LOG_ERR, 'Database error: %s', $DBI::errstr);\r
77 };\r
78 $DBQuery->finish;\r
79 \r
80 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'};\r
81}\r
82\r
83### close handles\r
84$DBHandle->disconnect;\r
85syslog(LOG_NOTICE, "$MySelf closing down.") if !$Options{'q'};\r
86closelog();\r
87\r
This page took 0.013305 seconds and 4 git commands to generate.