Merge branch 'feedlog' into next
[usenet/newsstats.git] / install / install.pl
CommitLineData
2832c235
TH
1#! /usr/bin/perl -W
2#
3# install.pl
4#
5# This script will create database tables as necessary.
6#
7# It is part of the NewsStats package.
8#
1fa94799 9# Copyright (c) 2010-2012 Thomas Hochstein <thh@inter.net>
2832c235
TH
10#
11# It can be redistributed and/or modified under the same terms under
12# which Perl itself is published.
13
14BEGIN {
15 our $VERSION = "0.01";
16 use File::Basename;
17 # we're in .../install, so our module is in ..
18 push(@INC, dirname($0).'/..');
19}
20use strict;
21
22use NewsStats qw(:DEFAULT);
23
24use Cwd;
25
26use DBI;
1fa94799
TH
27use Getopt::Long qw(GetOptions);
28Getopt::Long::config ('bundling');
2832c235
TH
29
30################################# Main program #################################
31
32### read commandline options
1fa94799
TH
33my ($OptUpdate);
34GetOptions ('u|update=s' => \$OptUpdate,
35 'h|help' => \&ShowPOD,
36 'V|version' => \&ShowVersion) or exit 1;
2832c235
TH
37
38### change working directory to .. (as we're in .../install)
39chdir dirname($0).'/..';
f6d15ca7 40my $Path = cwd();
2832c235
TH
41
42### read configuration
43print("Reading configuration.\n");
1fa94799 44my %Conf = %{ReadConfig($HomePath.'/newsstats.conf')};
2832c235
TH
45
46##### --------------------------------------------------------------------------
47##### Database table definitions
48##### --------------------------------------------------------------------------
49
50my %DBCreate = ('DBTableRaw' => <<RAW, 'DBTableGrps' => <<GRPS);
51--
52-- Table structure for table DBTableRaw
53--
54
55CREATE TABLE IF NOT EXISTS `$Conf{'DBTableRaw'}` (
56 `id` bigint(20) unsigned NOT NULL auto_increment,
57 `day` date NOT NULL,
58 `mid` varchar(250) character set ascii NOT NULL,
59 `date` datetime NOT NULL,
60 `timestamp` bigint(20) NOT NULL,
61 `token` varchar(80) character set ascii NOT NULL,
62 `size` bigint(20) NOT NULL,
63 `peer` varchar(250) NOT NULL,
64 `path` varchar(1000) NOT NULL,
65 `newsgroups` varchar(1000) NOT NULL,
66 `headers` longtext NOT NULL,
67 `disregard` tinyint(1) default '0',
68 PRIMARY KEY (`id`),
69 KEY `day` (`day`),
70 KEY `mid` (`mid`),
71 KEY `peer` (`peer`)
72) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Raw data';
73RAW
74--
75-- Table structure for table DBTableGrps
76--
77
78CREATE TABLE IF NOT EXISTS `$Conf{'DBTableGrps'}` (
79 `id` bigint(20) unsigned NOT NULL auto_increment,
80 `month` varchar(7) character set ascii NOT NULL,
81 `newsgroup` varchar(100) NOT NULL,
82 `postings` int(11) NOT NULL,
83 `revision` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
84 PRIMARY KEY (`id`),
85 UNIQUE KEY `month_newsgroup` (`month`,`newsgroup`),
86 KEY `newsgroup` (`newsgroup`),
87 KEY `postings` (`postings`)
88) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Postings per newsgroup';
89GRPS
90
f6d15ca7
TH
91##### --------------------------------------------------------------------------
92##### Installation / upgrade instructions
93##### --------------------------------------------------------------------------
2832c235 94
f6d15ca7
TH
95my $Install = <<INSTALL;
96----------
2832c235
TH
97Things left to do:
98
991) Setup an INN feed to feedlog.pl
100
101 a) Edit your 'newsfeeds' file and insert something like
102
103 ## gather statistics for NewsStats
9c141b0c
TH
104 newsstats!\\
105 :!*,de.*\\
2832c235
TH
106 :Tc,WmtfbsPNH,Ac:$Path/feedlog.pl
107
108 Please
109
110 * check that you got the path to feedlog.pl right
111 * check that feedlog.pl can be executed by the news user
112 * adapt the pattern (here: 'de.*') to your needs
113
114 b) Check your 'newsfeeds' syntax:
115
116 # ctlinnd checkfile
117
118 and reload 'newsfeeds':
119
120 # ctlinnd reload newsfeeds 'Adding newsstats! feed'
121
122 c) Watch your 'news.notice' and 'errlog' files:
123
124 # tail -f /var/log/news/news.notice
125 ...
126 # tail -f /var/log/news/errlog
127
1282) Watch your $Conf{'DBTableRaw'} table fill.
129
1303) Read the documentation. ;)
131
132Enjoy!
133
134-thh <thh\@inter.net>
f6d15ca7
TH
135INSTALL
136
137my $Upgrade = <<UPGRADE;
138----------
1fa94799 139Your installation was upgraded from $OptUpdate to $PackageVersion.
f6d15ca7
TH
140
141Don't forget to restart your INN feed so that it can pick up the new version:
142
143 # ctlinnd begin 'newsstats!'
144
145(or whatever you called your feed).
146UPGRADE
147
f6d15ca7
TH
148##### --------------------------- End of definitions ---------------------------
149
150### DB init, read list of tables
151print "Reading database information.\n";
152my $DBHandle = InitDB(\%Conf,1);
1fa94799
TH
153my %TablesInDB =
154 %{$DBHandle->table_info('%', '%', '%', 'TABLE')->fetchall_hashref('TABLE_NAME')};
f6d15ca7 155
1fa94799 156if (!$OptUpdate) {
f6d15ca7
TH
157 ##### installation mode
158 print "----------\nStarting database table generation.\n";
159 # check for tables and create them, if they don't exist yet
160 foreach my $Table (keys %DBCreate) {
161 &CreateTable($Table);
162 };
163 print "Database table generation done.\n";
164
165 # Display install instructions
166 print $Install;
167} else {
168 ##### upgrade mode
169 print "----------\nStarting upgrade process.\n";
59d0c5ef 170 $PackageVersion = '0.03';
1fa94799
TH
171 if ($OptUpdate < $PackageVersion) {
172 if ($OptUpdate < 0.02) {
59d0c5ef
TH
173 # 0.01 -> 0.02
174 # &DoMySQL('...;');
175 # print "v0.02: Database upgrades ...\n";
176 # &PrintInstructions('0.02',<<" INSTRUCTIONS");
177 # INSTRUCTIONS
f6d15ca7
TH
178 };
179 };
59d0c5ef 180 # Display general upgrade instructions
f6d15ca7
TH
181 print $Upgrade;
182};
183
184# close handle
185$DBHandle->disconnect;
186
187exit(0);
188
189################################# Subroutines ##################################
190
59d0c5ef 191sub CreateTable {
f6d15ca7
TH
192 my $Table = shift;
193 if (defined($TablesInDB{$Conf{$Table}})) {
1fa94799
TH
194 printf("Database table %s.%s already exists, skipping ....\n",
195 $Conf{'DBDatabase'},$Conf{$Table});
f6d15ca7
TH
196 return;
197 };
198 my $DBQuery = $DBHandle->prepare($DBCreate{$Table});
1fa94799
TH
199 $DBQuery->execute() or
200 &Bleat(2, sprintf("Can't create table %s in database %s: %s%\n",$Table,
201 $Conf{'DBDatabase'},$DBI::errstr));
202 printf("Database table %s.%s created succesfully.\n",
203 $Conf{'DBDatabase'},$Conf{$Table});
f6d15ca7
TH
204 return;
205};
206
59d0c5ef 207sub DoMySQL {
f6d15ca7
TH
208 my $SQL = shift;
209 my $DBQuery = $DBHandle->prepare($SQL);
1fa94799 210 $DBQuery->execute() or &Bleat(1, sprintf("Database error: %s\n",$DBI::errstr));
f6d15ca7
TH
211 return;
212};
213
59d0c5ef
TH
214sub PrintInstructions {
215 my ($UpVersion,$Instructions) = @_;
216 print "v$UpVersion: Upgrade Instructions >>>>>\n";
217 my $Padding = ' ' x (length($UpVersion) + 3);
218 $Instructions =~ s/^ /$Padding/mg;
219 print $Instructions;
220 print "<" x (length($UpVersion) + 29) . "\n";
221};
222
2832c235
TH
223
224__END__
225
226################################ Documentation #################################
227
228=head1 NAME
229
230install - installation script
231
232=head1 SYNOPSIS
233
1fa94799 234B<install> [B<-Vh> [--update I<version>]
2832c235
TH
235
236=head1 REQUIREMENTS
237
1fa94799 238See L<doc/README>.
2832c235
TH
239
240=head1 DESCRIPTION
241
242This script will create database tables as necessary and configured.
243
244=head2 Configuration
245
1fa94799 246B<install> will read its configuration from F<newsstats.conf> via
2832c235
TH
247Config::Auto.
248
1fa94799 249See L<doc/INSTALL> for an overview of possible configuration options.
2832c235
TH
250
251=head1 OPTIONS
252
253=over 3
254
1fa94799 255=item B<-V>, B<--version>
2832c235 256
1fa94799 257Print out version and copyright information and exit.
2832c235 258
1fa94799 259=item B<-h>, B<--help>
2832c235
TH
260
261Print this man page and exit.
262
1fa94799
TH
263=item B<-u>, B<--update> I<version>
264
265Don't do a fresh install, but update from I<version>.
266
2832c235
TH
267=back
268
269=head1 FILES
270
271=over 4
272
273=item F<install.pl>
274
275The script itself.
276
277=item F<NewsStats.pm>
278
279Library functions for the NewsStats package.
280
281=item F<newsstats.conf>
282
1fa94799 283Runtime configuration file.
2832c235
TH
284
285=back
286
287=head1 BUGS
288
289Please report any bugs or feature requests to the author or use the
290bug tracker at L<http://bugs.th-h.de/>!
291
292=head1 SEE ALSO
293
294=over 2
295
296=item -
297
1fa94799 298L<doc/README>
2832c235
TH
299
300=item -
301
1fa94799 302L<doc/INSTALL>
2832c235
TH
303
304=back
305
306This script is part of the B<NewsStats> package.
307
308=head1 AUTHOR
309
310Thomas Hochstein <thh@inter.net>
311
312=head1 COPYRIGHT AND LICENSE
313
1fa94799 314Copyright (c) 2010-2012 Thomas Hochstein <thh@inter.net>
2832c235
TH
315
316This program is free software; you may redistribute it and/or modify it
317under the same terms as Perl itself.
318
319=cut
This page took 0.025751 seconds and 4 git commands to generate.