--- trunk/bin/BackupPC_updatedb 2005/08/20 14:13:58 48 +++ trunk/bin/BackupPC_updatedb 2005/08/20 16:40:11 51 @@ -17,6 +17,8 @@ my $debug = 0; $|=1; +my $start_t = time(); + my $pidfile = new File::Pid; if (my $pid = $pidfile->running ) { @@ -36,9 +38,10 @@ my $TopDir = $bpc->TopDir(); my $beenThere = {}; -my $dsn = "dbi:SQLite:dbname=$TopDir/$Conf{SearchDB}"; +my $dsn = $Conf{SearchDSN} || die "Need SearchDSN in config.pl\n"; +my $user = $Conf{SearchUser} || ''; -my $dbh = DBI->connect($dsn, "", "", { RaiseError => 1, AutoCommit => 0 }); +my $dbh = DBI->connect($dsn, $user, "", { RaiseError => 1, AutoCommit => 0 }); my %opt; @@ -58,11 +61,18 @@ ###################################create tables############################3 if ($opt{c}) { + sub do_index { + my $index = shift || return; + my ($table,$col,$unique) = split(/_/, $index); + $unique ||= ''; + $dbh->do(qq{ create $unique index $index on $table($col) }); + } + print "creating tables...\n"; $dbh->do(qq{ create table hosts ( - ID INTEGER PRIMARY KEY, + ID SERIAL PRIMARY KEY, name VARCHAR(30) NOT NULL, IP VARCHAR(15) ); @@ -70,7 +80,7 @@ $dbh->do(qq{ create table shares ( - ID INTEGER PRIMARY KEY, + ID SERIAL PRIMARY KEY, hostID INTEGER NOT NULL references hosts(id), name VARCHAR(30) NOT NULL, share VARCHAR(200) NOT NULL, @@ -82,15 +92,17 @@ create table backups ( hostID INTEGER NOT NULL references hosts(id), num INTEGER NOT NULL, - date DATE, - type CHAR(1), + date integer NOT NULL, + type CHAR(4) not null, PRIMARY KEY(hostID, num) ); }); + do_index('backups_num_unique'); + $dbh->do(qq{ create table dvds ( - ID INTEGER PRIMARY KEY, + ID SERIAL PRIMARY KEY, num INTEGER NOT NULL, name VARCHAR(255) NOT NULL, mjesto VARCHAR(255) @@ -99,20 +111,20 @@ $dbh->do(qq{ create table files ( - ID INTEGER NOT NULL PRIMARY KEY, + ID SERIAL PRIMARY KEY, shareID INTEGER NOT NULL references shares(id), backupNum INTEGER NOT NULL references backups(num), name VARCHAR(255) NOT NULL, path VARCHAR(255) NOT NULL, fullpath VARCHAR(255) NOT NULL, - date TIMESTAMP NOT NULL, + date integer NOT NULL, type INTEGER NOT NULL, size INTEGER NOT NULL, dvdid INTEGER references dvds(id) ); }); - print "creating indexes...\n"; + print "creating indexes:"; foreach my $index (qw( hosts_name @@ -126,20 +138,24 @@ files_date files_size )) { - my ($table,$col) = split(/_/, $index); - $dbh->do(qq{ create index $index on $table($col) }); + print " $index"; + do_index($index); } + print "...\n"; + $dbh->commit; } if ($opt{d}) { print "deleting "; - foreach my $table (qw(hosts shares files dvds backups)) { + foreach my $table (qw(files dvds backups shares hosts)) { print "$table "; $dbh->do(qq{ DELETE FROM $table }); } print " done...\n"; + + $dbh->commit; } if ($opt{v}) { @@ -181,6 +197,15 @@ VALUES (?,?,?,?,?,?,?,?) }); +sub fmt_time { + my $t = shift || return; + my $out = ""; + my ($ss,$mm,$hh) = gmtime($t); + $out .= "${hh}h" if ($hh); + $out .= sprintf("%02d:%02d", $mm,$ss); + return $out; +} + foreach my $host_key (keys %{$hosts}) { my $hostname = $hosts->{$host_key}->{'host'} || die "can't find host for $host_key"; @@ -193,7 +218,7 @@ $hosts->{$host_key}->{'ip'} ); - $hostID = $dbh->func('last_insert_rowid'); + $hostID = $dbh->last_insert_id(undef,undef,'hosts',undef); } print("host ".$hosts->{$host_key}->{'host'}.": "); @@ -221,6 +246,14 @@ my ($broj) = $sth->{backups_broj}->fetchrow_array(); next if ($broj > 0); + $sth->{insert_backups}->execute( + $hostID, + $backupNum, + $backup->{'endTime'}, + $backup->{'type'} + ); + $dbh->commit(); + my $files = BackupPC::View->new($bpc, $hostname, \@backups, 1); foreach my $share ($files->shareList($backupNum)) { @@ -230,27 +263,23 @@ $shareID = getShareID($share, $hostID, $hostname); my ($f, $nf, $d, $nd) = recurseDir($bpc, $hostname, $files, $backupNum, $share, "", $shareID); - printf(" %d/%d files %d/%d dirs [%.2f/s]\n", + my $dur = (time() - $t) || 1; + printf(" %d/%d files %d/%d dirs [%.2f/s dur: %s]\n", $nf, $f, $nd, $d, - ( ($f+$d) / ((time() - $t) || 1) ) + ( ($f+$d) / $dur ), + fmt_time($dur) ); $dbh->commit(); } - $sth->{insert_backups}->execute( - $hostID, - $backupNum, - $backup->{'endTime'}, - $backup->{'type'} - ); - $dbh->commit(); - } } undef $sth; $dbh->commit(); $dbh->disconnect(); +print "total duration: ",fmt_time(time() - $start_t),"\n"; + $pidfile->remove; sub getShareID() { @@ -277,7 +306,7 @@ $drop_down =~ s#//+#/#g; $sth->{insert_share}->execute($hostID,$share, $drop_down ,undef); - return $dbh->func('last_insert_rowid'); + return $dbh->last_insert_id(undef,undef,'shares',undef); } sub found_in_db {