/[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 86 by dpavlin, Sun Aug 28 12:35:59 2005 UTC revision 95 by dpavlin, Tue Aug 30 09:55:34 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 {
 if ($opt{i}) {  
89    
90          print curr_time," updating HyperEstraier: files";          my ($host_id, $share_id, $num) = @_;
91    
92            print curr_time," updating HyperEstraier: select 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 99  if ($opt{i}) { Line 113  if ($opt{i}) {
113                          -- files.name                   AS filename,                          -- files.name                   AS filename,
114                          files.path                      AS filepath,                          files.path                      AS filepath,
115                          files.date                      AS date,                          files.date                      AS date,
116                          files.type                      AS filetype,                          files.type                      AS type,
117                          files.size                      AS size,                          files.size                      AS size,
118                          files.shareid                   AS shareid,                          files.shareid                   AS shareid,
119                          backups.date                    AS backup_date                          backups.date                    AS backup_date
# 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, skipping\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    
148          $index_path = $TopDir . '/' . $index_path;          print ", opening index $index_path...";
         $index_path =~ s#//#/#g;  
   
         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                    my $id = $db->uri_to_id($uri);
169                    next unless ($id == -1);
170    
171                  # create a document object                  # create a document object
172                  my $doc = HyperEstraier::Document->new;                  my $doc = HyperEstraier::Document->new;
173    
174                  # add attributes to the document object                  # add attributes to the document object
175                  $doc->add_attr('@uri', 'file:///' . $row->{'fid'});                  $doc->add_attr('@uri', $uri);
176    
177                  foreach my $c (@{ $sth->{NAME} }) {                  foreach my $c (@{ $sth->{NAME} }) {
178                          $doc->add_attr($c, $row->{$c}) if ($row->{$c});                          $doc->add_attr($c, $row->{$c}) if ($row->{$c});
# Line 160  if ($opt{i}) { Line 191  if ($opt{i}) {
191                  # register the document object to the database                  # register the document object to the database
192                  $db->put_doc($doc, $HyperEstraier::Database::PDCLEAN);                  $db->put_doc($doc, $HyperEstraier::Database::PDCLEAN);
193    
194                  $i++;                  $added++;
195                  if ($i % $dot == 0) {                  if ($added % $dot == 0) {
196                          print "$max ";                          print "$max ";
197                          $max--;                          $max--;
198                  }                  }
199    
200          }          }
201    
202          print "sync";          print "sync $added new files";
203          $db->sync();          $db->sync();
204          print " close";          print ", close";
205          $db->close();          $db->close();
206    
207          my $dur = (time() - $t) || 1;          my $dur = (time() - $t) || 1;
208          printf(" [%.2f/s dur: %s]\n",          printf(" [%.2f/s new %.2f/s dur: %s]\n",
209                  ( $results / $dur ),                  ( $results / $dur ),
210                    ( $added / $dur ),
211                  fmt_time($dur)                  fmt_time($dur)
212          );          );
   
         exit;  
213  }  }
214    
215  ###################################create tables############################3  #---- /subs ----
216    
217    
218    ## update index ##
219    if (($opt{i} || ($index_path && ! -e $index_path)) && !$opt{c}) {
220            # update all
221            print "force update of HyperEstraier index ";
222            print "importing existing data" unless (-e $index_path);
223            print "by -i flag" if ($opt{i});
224            print "\n";
225            hest_update();
226    }
227    
228    ## create tables ##
229  if ($opt{c}) {  if ($opt{c}) {
230          sub do_index {          sub do_index {
231                  my $index = shift || return;                  my $index = shift || return;
# Line 273  if ($opt{c}) { Line 315  if ($opt{c}) {
315    
316  }  }
317    
318    ## delete data before inseting ##
319  if ($opt{d}) {  if ($opt{d}) {
320          print "deleting ";          print "deleting ";
321          foreach my $table (qw(files dvds backups shares hosts)) {          foreach my $table (qw(files dvds backups shares hosts)) {
# Line 284  if ($opt{d}) { Line 327  if ($opt{d}) {
327          $dbh->commit;          $dbh->commit;
328  }  }
329    
330  #################################INSERT VALUES#############################  ## insert new values ##
331    
332  # get hosts  # get hosts
333  $hosts = $bpc->HostInfoRead();  $hosts = $bpc->HostInfoRead();
# Line 396  foreach my $host_key (keys %{$hosts}) { Line 439  foreach my $host_key (keys %{$hosts}) {
439                                  ( ($f+$d) / $dur ),                                  ( ($f+$d) / $dur ),
440                                  fmt_time($dur)                                  fmt_time($dur)
441                          );                          );
442    
443                            hest_update($hostID, $shareID, $backupNum);
444                  }                  }
445    
446          }          }

Legend:
Removed from v.86  
changed lines
  Added in v.95

  ViewVC Help
Powered by ViewVC 1.1.26