/[BackupPC]/trunk/bin/BackupPC_updatedb
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/bin/BackupPC_updatedb

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 29 by dpavlin, Sun Jul 31 12:40:51 2005 UTC revision 39 by dpavlin, Fri Aug 19 15:28:59 2005 UTC
# Line 7  use BackupPC::Lib; Line 7  use BackupPC::Lib;
7  use BackupPC::View;  use BackupPC::View;
8  use Data::Dumper;  use Data::Dumper;
9  use Getopt::Std;  use Getopt::Std;
10    use Time::HiRes qw/time/;
11    use File::Pid;
12    use POSIX qw/strftime/;
13  use constant BPC_FTYPE_DIR => 5;  use constant BPC_FTYPE_DIR => 5;
14    
15    my $debug = 0;
16  $|=1;  $|=1;
17    
18    my $pidfile = new File::Pid;
19    
20    if (my $pid = $pidfile->running ) {
21            die "$0 already running: $pid\n";
22    } elsif ($pidfile->pid ne $$) {
23            $pidfile->remove;
24            $pidfile = new File::Pid;
25    }
26    $pidfile->write;
27    print STDERR "$0 using pid ",$pidfile->pid," file ",$pidfile->file,"\n";
28    
29    my $t_fmt = '%Y-%m-%d %H:%M:%S';
30    
31  my $hosts;  my $hosts;
32  my $bpc = BackupPC::Lib->new || die;  my $bpc = BackupPC::Lib->new || die;
33  my %Conf = $bpc->Conf();  my %Conf = $bpc->Conf();
# Line 23  my $dbh = DBI->connect($dsn, "", "", { R Line 40  my $dbh = DBI->connect($dsn, "", "", { R
40    
41  my %opt;  my %opt;
42    
43  if ( !getopts("cdm:", \%opt ) ) {  if ( !getopts("cdm:v", \%opt ) ) {
44          print STDERR <<EOF;          print STDERR <<EOF;
45  usage: $0 [-c|-d] [-m num]  usage: $0 [-c|-d] [-m num]
46    
# Line 122  if ($opt{d}) { Line 139  if ($opt{d}) {
139          print " done...\n";          print " done...\n";
140  }  }
141    
142    if ($opt{v}) {
143            print "Debug level at $opt{v}\n";
144            $debug = $opt{v};
145    }
146    
147  #################################INSERT VALUES#############################  #################################INSERT VALUES#############################
148    
149  # get hosts  # get hosts
# Line 186  foreach my $host_key (keys %{$hosts}) { Line 208  foreach my $host_key (keys %{$hosts}) {
208                  my $backupNum = $backup->{'num'};                  my $backupNum = $backup->{'num'};
209                  my @backupShares = ();                  my @backupShares = ();
210    
211                  print $hosts->{$host_key}->{'host'},"\t#$backupNum\n";                  print $hosts->{$host_key}->{'host'}, "\t#$backupNum\n";
212    
213                  $sth->{backups_broj}->execute($hostID, $backupNum);                  $sth->{backups_broj}->execute($hostID, $backupNum);
214                  my ($broj) = $sth->{backups_broj}->fetchrow_array();                  my ($broj) = $sth->{backups_broj}->fetchrow_array();
215                  next if ($broj > 0);                  next if ($broj > 0);
216    
217                  my $files = BackupPC::View->new($bpc, $hostname, \@backups);                  my $files = BackupPC::View->new($bpc, $hostname, \@backups, 1);
218                  foreach my $share ($files->shareList($backupNum)) {                  foreach my $share ($files->shareList($backupNum)) {
219    
220                          print "\t$share";                          my $t = time();
221    
222                            print strftime($t_fmt,localtime())," ", $share;
223                          $shareID = getShareID($share, $hostID, $hostname);                          $shareID = getShareID($share, $hostID, $hostname);
224                                    
225                          my ($f, $nf, $d, $nd) = recurseDir($bpc, $hostname, \@backups, $backupNum, $share, "", $shareID);                          my ($f, $nf, $d, $nd) = recurseDir($bpc, $hostname, $files, $backupNum, $share, "", $shareID);
226                          print " $nf/$f files $nd/$d dirs\n";                          printf(" %d/%d files %d/%d dirs [%.2f/s]\n",
227                                    $nf, $f, $nd, $d,
228                                    ( ($f+$d) / ((time() - $t) || 1) )
229                            );
230                          $dbh->commit();                          $dbh->commit();
231                  }                  }
232    
# Line 217  undef $sth; Line 244  undef $sth;
244  $dbh->commit();  $dbh->commit();
245  $dbh->disconnect();  $dbh->disconnect();
246    
247    $pidfile->remove;
248    
249  sub getShareID() {  sub getShareID() {
250    
251          my ($share, $hostID, $hostname) = @_;          my ($share, $hostID, $hostname) = @_;
# Line 270  sub found_in_db { Line 299  sub found_in_db {
299  ####################################################  ####################################################
300  sub recurseDir($$$$$$$$) {  sub recurseDir($$$$$$$$) {
301    
302          my ($bpc, $hostname, $backups, $backupNum, $share, $dir, $shareID) = @_;          my ($bpc, $hostname, $files, $backupNum, $share, $dir, $shareID) = @_;
303    
304  #print STDERR "recurse($hostname,$backupNum,$share,$dir,$shareID)\n";          print STDERR "recurse($hostname,$backupNum,$share,$dir,$shareID)\n" if ($debug >= 1);
305    
306          my ($nr_files, $new_files, $nr_dirs, $new_dirs) = (0,0,0,0);          my ($nr_files, $new_files, $nr_dirs, $new_dirs) = (0,0,0,0);
307    
308          { # scope          { # scope
309                  my @stack;                  my @stack;
310    
                 my $files = BackupPC::View->new($bpc, $hostname, $backups);              
311                  my $filesInBackup = $files->dirAttrib($backupNum, $share, $dir);                  my $filesInBackup = $files->dirAttrib($backupNum, $share, $dir);
312    
313                  # first, add all the entries in current directory                  # first, add all the entries in current directory
# Line 306  sub recurseDir($$$$$$$$) { Line 334  sub recurseDir($$$$$$$$) {
334    
335    
336                          if (! $beenThere->{$key} && ! found_in_db(@data)) {                          if (! $beenThere->{$key} && ! found_in_db(@data)) {
337  ##print STDERR "# key: $key [", $beenThere->{$key},"]";                                  print STDERR "# key: $key [", $beenThere->{$key},"]" if ($debug >= 2);
338                                  $sth->{'insert_files'}->execute(@data);                                  $sth->{'insert_files'}->execute(@data);
339                                  if ($filesInBackup->{$path_key}->{'type'} == BPC_FTYPE_DIR) {                                  if ($filesInBackup->{$path_key}->{'type'} == BPC_FTYPE_DIR) {
340                                          $new_dirs++;                                          $new_dirs++;
341  ##print STDERR " dir\n";                                          print STDERR " dir\n" if ($debug >= 2);
342                                  } else {                                  } else {
343                                          $new_files++;                                          $new_files++;
344  ##print STDERR " file\n";                                          print STDERR " file\n" if ($debug >= 2);
345                                  }                                  }
346                          }                          }
347                          $beenThere->{$key}++;                          $beenThere->{$key}++;
# Line 323  sub recurseDir($$$$$$$$) { Line 351  sub recurseDir($$$$$$$$) {
351    
352                                  my $full_path = $dir . '/' . $path_key;                                  my $full_path = $dir . '/' . $path_key;
353                                  push @stack, $full_path;                                  push @stack, $full_path;
354  ##print STDERR "### store to stack: $full_path\n";                                  print STDERR "### store to stack: $full_path\n" if ($debug >= 3);
355    
356  #                               my ($f,$nf,$d,$nd) = recurseDir($bpc, $hostname, $backups, $backupNum, $share, $path_key, $shareID) unless ($beenThere->{$key});  #                               my ($f,$nf,$d,$nd) = recurseDir($bpc, $hostname, $backups, $backupNum, $share, $path_key, $shareID) unless ($beenThere->{$key});
357  #  #
# Line 337  sub recurseDir($$$$$$$$) { Line 365  sub recurseDir($$$$$$$$) {
365                          }                          }
366                  }                  }
367    
368  ##print STDERR "# STACK ",join(", ", @stack),"\n";                  print STDERR "## STACK ",join(", ", @stack),"\n" if ($debug >= 2);
369    
370                  while ( my $dir = shift @stack ) {                  while ( my $dir = shift @stack ) {
371                          my ($f,$nf,$d,$nd) = recurseDir($bpc, $hostname, $backups, $backupNum, $share, $dir, $shareID);                          my ($f,$nf,$d,$nd) = recurseDir($bpc, $hostname, $files, $backupNum, $share, $dir, $shareID);
372  #       print STDERR "## $dir f: $f nf: $nf d: $d nd: $nd\n";                          print STDERR "# $dir f: $f nf: $nf d: $d nd: $nd\n" if ($debug >= 1);
373                          $nr_files += $f;                          $nr_files += $f;
374                          $new_files += $nf;                          $new_files += $nf;
375                          $nr_dirs += $d;                          $nr_dirs += $d;

Legend:
Removed from v.29  
changed lines
  Added in v.39

  ViewVC Help
Powered by ViewVC 1.1.26