/[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 25 by dpavlin, Wed Jul 13 09:57:41 2005 UTC revision 44 by dpavlin, Sat Aug 20 11:24:55 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] [-v|-v level]
46    
47  Options:  Options:
48          -c      create database on first use          -c      create database on first use
49          -d      delete database before import          -d      delete database before import
50          -m num  import just num increments for one host          -m num  import just num increments for one host
51            -v num  set verbosity (debug) level (default $debug)
52  EOF  EOF
53          exit 1;          exit 1;
54  }  }
# Line 122  if ($opt{d}) { Line 140  if ($opt{d}) {
140          print " done...\n";          print " done...\n";
141  }  }
142    
143    if ($opt{v}) {
144            print "Debug level at $opt{v}\n";
145            $debug = $opt{v};
146    }
147    
148  #################################INSERT VALUES#############################  #################################INSERT VALUES#############################
149    
150  # get hosts  # get hosts
# Line 180  foreach my $host_key (keys %{$hosts}) { Line 203  foreach my $host_key (keys %{$hosts}) {
203          my $inc_nr = 0;          my $inc_nr = 0;
204    
205          foreach my $backup (@backups) {          foreach my $backup (@backups) {
206    
207                  $inc_nr++;                  $inc_nr++;
208                  last if ($opt{m} && $inc_nr > $opt{m});                  last if ($opt{m} && $inc_nr > $opt{m});
209    
210                  my $backupNum = $backup->{'num'};                  my $backupNum = $backup->{'num'};
211                  my @backupShares = ();                  my @backupShares = ();
212    
213                  print $hosts->{$host_key}->{'host'},"\t#$backupNum\n";                  print $hosts->{$host_key}->{'host'},
214                            "\t#$backupNum\t", $backup->{type} || '?', " ",
215                            $backup->{nFilesNew} || '?', "/", $backup->{nFiles} || '?',
216                            " files\n";
217    
218                  $sth->{backups_broj}->execute($hostID, $backupNum);                  $sth->{backups_broj}->execute($hostID, $backupNum);
219                  my ($broj) = $sth->{backups_broj}->fetchrow_array();                  my ($broj) = $sth->{backups_broj}->fetchrow_array();
220                  next if ($broj > 0);                  next if ($broj > 0);
221    
222                    my $files = BackupPC::View->new($bpc, $hostname, \@backups, 1);
223                    foreach my $share ($files->shareList($backupNum)) {
224    
225                            my $t = time();
226    
227                            print strftime($t_fmt,localtime())," ", $share;
228                            $shareID = getShareID($share, $hostID, $hostname);
229                    
230                            my ($f, $nf, $d, $nd) = recurseDir($bpc, $hostname, $files, $backupNum, $share, "", $shareID);
231                            printf(" %d/%d files %d/%d dirs [%.2f/s]\n",
232                                    $nf, $f, $nd, $d,
233                                    ( ($f+$d) / ((time() - $t) || 1) )
234                            );
235                            $dbh->commit();
236                    }
237    
238                  $sth->{insert_backups}->execute(                  $sth->{insert_backups}->execute(
239                          $hostID,                          $hostID,
240                          $backupNum,                          $backupNum,
# Line 200  foreach my $host_key (keys %{$hosts}) { Line 243  foreach my $host_key (keys %{$hosts}) {
243                  );                  );
244                  $dbh->commit();                  $dbh->commit();
245    
                 my $files = BackupPC::View->new($bpc, $hostname, \@backups);  
                 foreach my $share ($files->shareList($backupNum)) {  
   
                         print "\t$share";  
                         $shareID = getShareID($share, $hostID, $hostname);  
                   
                         my ($f, $nf, $d, $nd) = recurseDir($bpc, $hostname, \@backups, $backupNum, $share, "", $shareID);  
                         print " $nf/$f files $nd/$d dirs\n";  
                         $dbh->commit();  
                 }  
246          }          }
247  }  }
248  undef $sth;  undef $sth;
249  $dbh->commit();  $dbh->commit();
250  $dbh->disconnect();  $dbh->disconnect();
251    
252    $pidfile->remove;
253    
254  sub getShareID() {  sub getShareID() {
255    
256          my ($share, $hostID, $hostname) = @_;          my ($share, $hostID, $hostname) = @_;
# Line 269  sub found_in_db { Line 304  sub found_in_db {
304  ####################################################  ####################################################
305  sub recurseDir($$$$$$$$) {  sub recurseDir($$$$$$$$) {
306    
307          my ($bpc, $hostname, $backups, $backupNum, $share, $dir, $shareID) = @_;          my ($bpc, $hostname, $files, $backupNum, $share, $dir, $shareID) = @_;
308    
309            print STDERR "\nrecurse($hostname,$backupNum,$share,$dir,$shareID)\n" if ($debug >= 1);
310    
311          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);
312    
313          my $files = BackupPC::View->new($bpc, $hostname, $backups);                      { # scope
314          my $filesInBackup = $files->dirAttrib($backupNum, $share, $dir);                  my @stack;
315    
316          # first, add all the entries in current directory                  my $filesInBackup = $files->dirAttrib($backupNum, $share, $dir);
         foreach my $path_key (keys %{$filesInBackup}) {  
                 my @data = (  
                         $shareID,  
                         $backupNum,  
                         $path_key,  
                         $filesInBackup->{$path_key}->{'relPath'},  
                         $filesInBackup->{$path_key}->{'fullPath'},  
 #                       $filesInBackup->{$path_key}->{'sharePathM'},  
                         $filesInBackup->{$path_key}->{'mtime'},  
                         $filesInBackup->{$path_key}->{'type'},  
                         $filesInBackup->{$path_key}->{'size'}  
                 );  
   
                 my $key = join(" ", (  
                         $shareID,  
                         $dir,  
                         $path_key,  
                         $filesInBackup->{$path_key}->{'mtime'},  
                         $filesInBackup->{$path_key}->{'size'}  
                 ));  
317    
318                    # first, add all the entries in current directory
319                    foreach my $path_key (keys %{$filesInBackup}) {
320                            my @data = (
321                                    $shareID,
322                                    $backupNum,
323                                    $path_key,
324                                    $filesInBackup->{$path_key}->{'relPath'},
325                                    $filesInBackup->{$path_key}->{'fullPath'},
326            #                       $filesInBackup->{$path_key}->{'sharePathM'},
327                                    $filesInBackup->{$path_key}->{'mtime'},
328                                    $filesInBackup->{$path_key}->{'type'},
329                                    $filesInBackup->{$path_key}->{'size'}
330                            );
331    
332                            my $key = join(" ", (
333                                    $shareID,
334                                    $dir,
335                                    $path_key,
336                                    $filesInBackup->{$path_key}->{'mtime'},
337                                    $filesInBackup->{$path_key}->{'size'}
338                            ));
339    
340    
341                            if (! $beenThere->{$key} && ! found_in_db(@data)) {
342                                    print STDERR "# key: $key [", $beenThere->{$key},"]" if ($debug >= 2);
343                                    $sth->{'insert_files'}->execute(@data);
344                                    if ($filesInBackup->{$path_key}->{'type'} == BPC_FTYPE_DIR) {
345                                            $new_dirs++;
346                                            print STDERR " dir\n" if ($debug >= 2);
347                                    } else {
348                                            $new_files++;
349                                            print STDERR " file\n" if ($debug >= 2);
350                                    }
351                            }
352                            $beenThere->{$key}++;
353    
                 if (! $beenThere->{$key} && ! found_in_db(@data)) {  
                         $sth->{'insert_files'}->execute(@data);  
 #                       print STDERR "$key\n";  
354                          if ($filesInBackup->{$path_key}->{'type'} == BPC_FTYPE_DIR) {                          if ($filesInBackup->{$path_key}->{'type'} == BPC_FTYPE_DIR) {
355                                  $new_dirs++;                                  $nr_dirs++;
356    
357                                    my $full_path = $dir . '/' . $path_key;
358                                    push @stack, $full_path;
359                                    print STDERR "### store to stack: $full_path\n" if ($debug >= 3);
360    
361    #                               my ($f,$nf,$d,$nd) = recurseDir($bpc, $hostname, $backups, $backupNum, $share, $path_key, $shareID) unless ($beenThere->{$key});
362    #
363    #                               $nr_files += $f;
364    #                               $new_files += $nf;
365    #                               $nr_dirs += $d;
366    #                               $new_dirs += $nd;
367    
368                          } else {                          } else {
369                                  $new_files++;                                  $nr_files++;
370                          }                          }
371                  }                  }
                 $beenThere->{$key}++;  
   
                 if ($filesInBackup->{$path_key}->{'type'} == BPC_FTYPE_DIR) {  
                         $nr_dirs++;  
372    
373                          my ($f,$nf,$d,$nd) = recurseDir($bpc, $hostname, $backups, $backupNum, $share, $path_key, $shareID);                  print STDERR "## STACK ",join(", ", @stack),"\n" if ($debug >= 2);
374    
375                    while ( my $dir = shift @stack ) {
376                            my ($f,$nf,$d,$nd) = recurseDir($bpc, $hostname, $files, $backupNum, $share, $dir, $shareID);
377                            print STDERR "# $dir f: $f nf: $nf d: $d nd: $nd\n" if ($debug >= 1);
378                          $nr_files += $f;                          $nr_files += $f;
379                          $new_files += $nf;                          $new_files += $nf;
380                          $nr_dirs += $d;                          $nr_dirs += $d;
381                          $new_dirs += $nd;                          $new_dirs += $nd;
   
                 } else {  
                         $nr_files++;  
382                  }                  }
383          }          }
384    

Legend:
Removed from v.25  
changed lines
  Added in v.44

  ViewVC Help
Powered by ViewVC 1.1.26