Initial checkin of working branch.
[usenet/newsstats.git] / install / install.pl
diff --git a/install/install.pl b/install/install.pl
new file mode 100755 (executable)
index 0000000..9b6b332
--- /dev/null
@@ -0,0 +1,152 @@
+#! /usr/bin/perl -W\r
+#\r
+# install.pl\r
+#\r
+# This script will create database tables as necessary.\r
+# \r
+# It is part of the NewsStats package.\r
+#\r
+# Copyright (c) 2010 Thomas Hochstein <thh@inter.net>\r
+#\r
+# It can be redistributed and/or modified under the same terms under \r
+# which Perl itself is published.\r
+\r
+BEGIN {\r
+  our $VERSION = "0.01";\r
+  use File::Basename;\r
+  # we're in .../install, so our module is in ..\r
+  push(@INC, dirname($0).'/..');\r
+}\r
+use strict;\r
+\r
+use NewsStats qw(:DEFAULT);\r
+\r
+use Cwd;\r
+\r
+use DBI;\r
+\r
+################################# Main program #################################\r
+\r
+### read commandline options\r
+my %Options = &ReadOptions('');\r
+\r
+### change working directory to .. (as we're in .../install)\r
+chdir '..';\r
+\r
+### read configuration\r
+print("Reading configuration.\n");\r
+my %Conf = %{ReadConfig('newsstats.conf')};\r
+\r
+##### --------------------------------------------------------------------------\r
+##### Database table definitions\r
+##### --------------------------------------------------------------------------\r
+\r
+my %DBCreate = ('DBTableRaw'  => <<RAW, 'DBTableGrps' => <<GRPS);\r
+-- \r
+-- Table structure for table DBTableRaw\r
+-- \r
+\r
+CREATE TABLE IF NOT EXISTS `$Conf{'DBTableRaw'}` (\r
+  `id` bigint(20) unsigned NOT NULL auto_increment,\r
+  `day` date NOT NULL,\r
+  `mid` varchar(250) character set ascii NOT NULL,\r
+  `date` datetime NOT NULL,\r
+  `timestamp` bigint(20) NOT NULL,\r
+  `token` varchar(80) character set ascii NOT NULL,\r
+  `size` bigint(20) NOT NULL,\r
+  `peer` varchar(250) NOT NULL,\r
+  `path` varchar(1000) NOT NULL,\r
+  `newsgroups` varchar(1000) NOT NULL,\r
+  `headers` longtext NOT NULL,\r
+  `disregard` tinyint(1) default '0',\r
+  PRIMARY KEY  (`id`),\r
+  KEY `day` (`day`),\r
+  KEY `mid` (`mid`),\r
+  KEY `peer` (`peer`)\r
+) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='Raw data';\r
+RAW\r
+-- \r
+-- Table structure for table DBTableGrps\r
+-- \r
+\r
+CREATE TABLE IF NOT EXISTS `$Conf{'DBTableGrps'}` (\r
+  `id` bigint(20) unsigned NOT NULL auto_increment,\r
+  `month` varchar(7) character set ascii NOT NULL,\r
+  `newsgroup` varchar(100) NOT NULL,\r
+  `postings` int(11) NOT NULL,\r
+  `revision` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,\r
+  PRIMARY KEY  (`id`),\r
+  UNIQUE KEY `month_newsgroup` (`month`,`newsgroup`),\r
+  KEY `newsgroup` (`newsgroup`),\r
+  KEY `postings` (`postings`)\r
+) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='Postings per newsgroup';\r
+GRPS\r
+\r
+##### --------------------------- End of definitions ---------------------------\r
+\r
+### create database tables\r
+print "-----\nStarting database table generation.\n";\r
+# DB init\r
+my $DBHandle = InitDB(\%Conf,1);\r
+\r
+# read tables\r
+my %TablesInDB = %{$DBHandle->table_info('%', '%', '%', 'TABLE')->fetchall_hashref('TABLE_NAME')};\r
+\r
+# check for tables and create them, if they don't exist yet\r
+foreach my $Table (keys %DBCreate) {\r
+  if (defined($TablesInDB{$Conf{$Table}})) {\r
+    printf("Database table %s.%s already exists, skipping ....\n",$Conf{'DBDatabase'},$Conf{$Table});\r
+    next;\r
+  };\r
+  my $DBQuery = $DBHandle->prepare($DBCreate{$Table});\r
+  $DBQuery->execute() or die sprintf("$MySelf: E: Can't create table %s in database %s: %s%\n",$Table,$Conf{'DBDatabase'},$DBI::errstr);\r
+  printf("Database table %s.%s created succesfully.\n",$Conf{'DBDatabase'},$Conf{$Table});\r
+};\r
+\r
+# close handle\r
+$DBHandle->disconnect;\r
+print "Database table generation done.\n";\r
+\r
+### output information on other necessary steps\r
+my $Path = cwd();\r
+print <<TODO;\r
+-----\r
+Things left to do:\r
+\r
+1) Setup an INN feed to feedlog.pl\r
+\r
+   a) Edit your 'newsfeeds' file and insert something like\r
+\r
+          ## gather statistics for NewsStats\r
+          newsstats!\\r
+                  :!*,de.*\\r
+                  :Tc,WmtfbsPNH,Ac:$Path/feedlog.pl\r
+\r
+      Please\r
+\r
+      * check that you got the path to feedlog.pl right\r
+      * check that feedlog.pl can be executed by the news user\r
+      * adapt the pattern (here: 'de.*') to your needs\r
+\r
+   b) Check your 'newsfeeds' syntax:\r
+\r
+         # ctlinnd checkfile\r
+\r
+      and reload 'newsfeeds':\r
+\r
+         # ctlinnd reload newsfeeds 'Adding newsstats! feed'\r
+\r
+   c) Watch your 'news.notice' and 'errlog' files:\r
+\r
+         # tail -f /var/log/news/news.notice\r
+         ...\r
+         # tail -f /var/log/news/errlog\r
+\r
+2) Watch your $Conf{'DBTableRaw'} table fill.\r
+\r
+3) Read the documentation. ;)\r
+\r
+Enjoy!\r
+\r
+-thh <thh\@inter.net>\r
+TODO\r
This page took 0.012139 seconds and 4 git commands to generate.