perkeep/dev-indexer

81 lines
2.5 KiB
Perl
Executable File

#!/usr/bin/perl
use strict;
use FindBin;
use Getopt::Long;
use DBI;
sub usage {
die "Usage: dev-indexer [--wipe] <portnumber> -- [other_camlistored_opts]";
}
my $opt_wipe;
GetOptions("wipe" => \$opt_wipe)
or usage();
my $port = shift || "3200";
usage() unless $port =~ /^\d+$/;
system("./build.pl", "server/go/blobserver") and die "Failed to build.\n";
# NOTE: Root required but not used by indexer blobserver
my $root = "/tmp/camliroot/port$port/";
if ($opt_wipe && -d $root) {
print "Wiping $root\n";
system("rm", "-rf", $root) and die "Failed to wipe $root.\n";
}
unless (-d $root) {
system("mkdir", "-p", $root) and die "Failed to create $root.\n";
}
my $DBNAME = "devcamlistore";
my $dbh = DBI->connect("DBI:mysql:database=mysql", "root", "root") or
die "Failed to connect to MySQL on localhost with user/pass of root/root.\n";
my $camdb = DBI->connect("DBI:mysql:database=$DBNAME", "root", "root", {
PrintWarn => 0,
PrintError => 0,
});
unless ($camdb) {
print "Database '$DBNAME' doesn't exist; assuming --wipe and initializing.\n";
$opt_wipe = 1;
}
if ($opt_wipe) {
system("mysqladmin", "-uroot", "-proot", "--force", "drop", "$DBNAME");
system("mysqladmin", "-uroot", "-proot", "create", "$DBNAME") and die "Could not create MySQL database on localhost.\n";
my $dbh = DBI->connect("DBI:mysql:database=$DBNAME", "root", "root", {
"RaiseError" => 1,
}) or die "Failed to connect to MySQL on localhost.\n";
# Begin schema creation.
$dbh->do("CREATE TABLE blobs (".
"blobref VARCHAR(100) NOT NULL PRIMARY KEY, ".
"size INTEGER NOT NULL, ".
"type VARCHAR(100)".
")");
$dbh->do("CREATE TABLE claims (".
"blobref VARCHAR(128) NOT NULL PRIMARY KEY, ".
"signer VARCHAR(128) NOT NULL, ".
"date VARCHAR(40) NOT NULL, ".
"INDEX (signer, date), ".
"unverified CHAR(1) NULL, ".
"claim VARCHAR(50) NOT NULL, ".
"permanode VARCHAR(128) NOT NULL, ".
"INDEX (permanode), ".
"attr VARCHAR(128) NULL, ".
"value VARCHAR(128) NULL ".
")");
}
print "Starting blobserver with indexer on http://localhost:$port/ in $root\n";
$ENV{CAMLI_PASSWORD} = "pass$port";
exec("$FindBin::Bin/server/go/blobserver/camlistored",
"-root=$root", # NOTE: Root required but not used by indexer blobserver
"-listen=:$port",
"-devmysqlindexer",
@ARGV);