/[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 88 by dpavlin, Sun Aug 28 12:35:59 2005 UTC revision 89 by dpavlin, Sun Aug 28 17:04:12 2005 UTC
# Line 41  my $beenThere = {}; Line 41  my $beenThere = {};
41  my $dsn = $Conf{SearchDSN} || die "Need SearchDSN in config.pl\n";  my $dsn = $Conf{SearchDSN} || die "Need SearchDSN in config.pl\n";
42  my $user = $Conf{SearchUser} || '';  my $user = $Conf{SearchUser} || '';
43  my $index_path = $Conf{HyperEstraierIndex};  my $index_path = $Conf{HyperEstraierIndex};
44    $index_path = $TopDir . '/' . $index_path;
45    $index_path =~ s#//#/#g;
46    
47    
48  my $dbh = DBI->connect($dsn, $user, "", { RaiseError => 1, AutoCommit => 0 });  my $dbh = DBI->connect($dsn, $user, "", { RaiseError => 1, AutoCommit => 0 });
49    
# Line 80  sub curr_time { Line 83  sub curr_time {
83          return strftime($t_fmt,localtime());          return strftime($t_fmt,localtime());
84  }  }
85    
86  #---- /subs ----  my $hest_db;
87    
88  ## update index ##  sub hest_update {
89  if ($opt{i}) {  
90            my ($host_id, $share_id, $num) = @_;
91    
92          print curr_time," updating HyperEstraier: files";          print curr_time," updating HyperEstraier: files";
93    
94          my $t = time();          my $t = time();
95            
96            my $where = '';
97            if ($host_id && $share_id && $num) {
98                    $where = qq{
99                    WHERE
100                            hosts.id = ? AND
101                            shares.id = ? AND
102                            files.backupnum = ?
103                    };
104            }
105    
106          my $sth = $dbh->prepare(qq{          my $sth = $dbh->prepare(qq{
107                  SELECT                  SELECT
108                          files.id                        AS fid,                          files.id                        AS fid,
# Line 107  if ($opt{i}) { Line 121  if ($opt{i}) {
121                          INNER JOIN shares       ON files.shareID=shares.ID                          INNER JOIN shares       ON files.shareID=shares.ID
122                          INNER JOIN hosts        ON hosts.ID = shares.hostID                          INNER JOIN hosts        ON hosts.ID = shares.hostID
123                          INNER JOIN backups      ON backups.num = files.backupNum and backups.hostID = hosts.ID AND backups.shareID = shares.ID                          INNER JOIN backups      ON backups.num = files.backupNum and backups.hostID = hosts.ID AND backups.shareID = shares.ID
124                    $where
125          });          });
126    
127          $sth->execute();          $sth->execute(@_);
128          my $results = $sth->rows;          my $results = $sth->rows;
129    
130          my $dot = int($results / 15);          if ($results == 0) {
131                    print " no files\n";
132                    return;
133            }
134    
135            my $dot = int($results / 15) || 1;
136    
137          print " $results ($dot/#)";          print " $results ($dot/#)";
138    
# Line 123  if ($opt{i}) { Line 143  if ($opt{i}) {
143                  return $iso;                  return $iso;
144          }          }
145    
         my $i = 0;  
146          my $max = int($results / $dot);          my $max = int($results / $dot);
147    
         $index_path = $TopDir . '/' . $index_path;  
         $index_path =~ s#//#/#g;  
   
148          print " index $index_path...";          print " index $index_path...";
149          use HyperEstraier;          use HyperEstraier;
150          my $db = HyperEstraier::Database->new();          my $db = HyperEstraier::Database->new();
151    
152    #       unless ($hest_db) {
153    #               print " open reader";
154    #               $hest_db = HyperEstraier::Database->new();
155    #
156    #       }
157    
158    
159          $db->open($index_path, $HyperEstraier::Database::DBWRITER | $HyperEstraier::Database::DBCREAT);          $db->open($index_path, $HyperEstraier::Database::DBWRITER | $HyperEstraier::Database::DBCREAT);
160    
161            my $added = 0;
162    
163          while (my $row = $sth->fetchrow_hashref()) {          while (my $row = $sth->fetchrow_hashref()) {
164    
165                    my $fid = $row->{'fid'} || die "no fid?";
166                    my $uri = 'file:///' . $fid;
167    
168                    next if ($db->uri_to_id($uri));
169    
170                  # create a document object                  # create a document object
171                  my $doc = HyperEstraier::Document->new;                  my $doc = HyperEstraier::Document->new;
172    
173                  # add attributes to the document object                  # add attributes to the document object
174                  $doc->add_attr('@uri', 'file:///' . $row->{'fid'});                  $doc->add_attr('@uri', $uri);
175    
176                  foreach my $c (@{ $sth->{NAME} }) {                  foreach my $c (@{ $sth->{NAME} }) {
177                          $doc->add_attr($c, $row->{$c}) if ($row->{$c});                          $doc->add_attr($c, $row->{$c}) if ($row->{$c});
# Line 160  if ($opt{i}) { Line 190  if ($opt{i}) {
190                  # register the document object to the database                  # register the document object to the database
191                  $db->put_doc($doc, $HyperEstraier::Database::PDCLEAN);                  $db->put_doc($doc, $HyperEstraier::Database::PDCLEAN);
192    
193                  $i++;                  $added++;
194                  if ($i % $dot == 0) {                  if ($added % $dot == 0) {
195                          print "$max ";                          print "$max ";
196                          $max--;                          $max--;
197                  }                  }
198    
199          }          }
200    
201          print "sync";          print "sync $added new files";
202          $db->sync();          $db->sync();
203          print " close";          print " close";
204          $db->close();          $db->close();
205    
206          my $dur = (time() - $t) || 1;          my $dur = (time() - $t) || 1;
207          printf(" [%.2f/s dur: %s]\n",          printf(" [%.2f/s new %.2f/s dur: %s]\n",
208                  ( $results / $dur ),                  ( $results / $dur ),
209                    ( $added / $dur ),
210                  fmt_time($dur)                  fmt_time($dur)
211          );          );
   
         exit;  
212  }  }
213    
214  ###################################create tables############################3  #---- /subs ----
215    
216    
217    ## update index ##
218    if ($opt{i} || ($index_path && ! -e $index_path)) {
219            # update all
220            print "force update of HyperEstraier index ";
221            print "importing existing data" unless (-e $index_path);
222            print "by -i flag" if ($opt{i});
223            print "\n";
224            hest_update();
225    }
226    
227    ## create tables ##
228  if ($opt{c}) {  if ($opt{c}) {
229          sub do_index {          sub do_index {
230                  my $index = shift || return;                  my $index = shift || return;
# Line 273  if ($opt{c}) { Line 314  if ($opt{c}) {
314    
315  }  }
316    
317    ## delete data before inseting ##
318  if ($opt{d}) {  if ($opt{d}) {
319          print "deleting ";          print "deleting ";
320          foreach my $table (qw(files dvds backups shares hosts)) {          foreach my $table (qw(files dvds backups shares hosts)) {
# Line 284  if ($opt{d}) { Line 326  if ($opt{d}) {
326          $dbh->commit;          $dbh->commit;
327  }  }
328    
329  #################################INSERT VALUES#############################  ## insert new values ##
330    
331  # get hosts  # get hosts
332  $hosts = $bpc->HostInfoRead();  $hosts = $bpc->HostInfoRead();
# Line 396  foreach my $host_key (keys %{$hosts}) { Line 438  foreach my $host_key (keys %{$hosts}) {
438                                  ( ($f+$d) / $dur ),                                  ( ($f+$d) / $dur ),
439                                  fmt_time($dur)                                  fmt_time($dur)
440                          );                          );
441    
442                            hest_update($hostID, $shareID, $backupNum);
443                  }                  }
444    
445          }          }

Legend:
Removed from v.88  
changed lines
  Added in v.89

  ViewVC Help
Powered by ViewVC 1.1.26