/[BackupPC]/trunk/bin/BackupPC_burnArchiveCLI
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_burnArchiveCLI

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

revision 175 by dpavlin, Tue Oct 11 17:55:48 2005 UTC revision 188 by dpavlin, Wed Oct 12 16:49:02 2005 UTC
# Line 34  my $dbh = DBI->connect($dsn, $user, "", Line 34  my $dbh = DBI->connect($dsn, $user, "",
34  my $tar_dir = $Conf{InstallDir}.'/';  my $tar_dir = $Conf{InstallDir}.'/';
35  $tar_dir .= $Conf{GzipTempDir} || die "GzipTempDir isn't defined in configuration";  $tar_dir .= $Conf{GzipTempDir} || die "GzipTempDir isn't defined in configuration";
36    
37  die "problem with $tar_dir, check GzipTempDir in configuration\n" unless (-d $tar_dir && -w $tar_dir);  die "problem with $tar_dir, check GzipTempDir in configuration\n" unless (-d $tar_dir);
38    
39  my $iso_dir = $Conf{InstallDir}.'/';  my $iso_dir = $Conf{InstallDir}.'/';
40  $iso_dir .= $Conf{ISOTempDir} || die "ISOTempDir isn't defined in configuration";  $iso_dir .= $Conf{ISOTempDir} || die "ISOTempDir isn't defined in configuration";
# Line 55  sub curr_time { Line 55  sub curr_time {
55          return strftime($t_fmt,localtime());          return strftime($t_fmt,localtime());
56  }  }
57    
58    sub dumpArchive2XML($$$)
59    {
60            my ($dbh, $dvd_nr, $filename) = @_;
61            my %archive;    
62            my $output = new IO::File(">$filename");
63            my $writer = new XML::Writer(OUTPUT=>$output, NEWLINES => 1);
64    
65            my $files_sql = q{
66                    SELECT
67                            files.path AS path,
68                            files.date AS date,
69                            files.type AS type,
70                            files.size AS size
71                    FROM files, backups, shares
72                    WHERE files.backupnum=backups.num AND
73                            files.shareid=shares.id AND
74                            shares.hostid=backups.hostid AND
75                            backups.id=?
76            };
77    
78            my $backups_sql = q{
79                    SELECT
80                            backups.id   AS backup_id,
81                            hosts.name   AS host,
82                            backups.num  AS num,
83                            backups.date AS date,
84                            shares.name  AS share,
85                            backups.size AS backup_size,
86                            backups.inc_size AS compress_size
87                    FROM backups, archive_backup, hosts, shares
88                    WHERE archive_backup.backup_id = backups.id
89                            AND hosts.id=backups.hostid
90                            AND shares.id=backups.shareid
91                            AND archive_backup.archive_id = ?
92            };
93    
94            my $sth = $dbh->prepare("SELECT dvd_nr, total_size, note, username, date,id FROM archive WHERE dvd_nr=?");
95            $sth->execute($dvd_nr);
96            my $row = $sth->fetchrow_hashref();
97    
98            my $row_h;
99            foreach my $hide (qw/id note/) {
100                    $row_h->{$hide} = $row->{$hide} || die "no $hide";
101                    delete $row->{$hide};
102            }
103    
104            $writer->startTag("archive", %{$row});
105    
106            $writer->startTag("note");
107            $writer->characters( $row_h->{'note'} );
108            $writer->endTag("note");
109    
110            my $sth_backups = $dbh->prepare( $backups_sql );
111            $sth_backups->execute( $row_h->{'id'} );
112    
113            while (my $row = $sth_backups->fetchrow_hashref()) {
114    
115                    my $sth_files = $dbh->prepare( $files_sql);
116                    $sth_files->execute($row->{'backup_id'});
117    
118                    delete($row->{'backup_id'});
119    
120                    $writer->startTag( "backup", %{$row} );
121    
122                    while (my $row = $sth_files->fetchrow_hashref()) {
123                            # convert filetype to string
124                            $row->{'type'} = BackupPC::Attrib::fileType2Text(undef, $row->{'type'});
125                            my $path = $row->{'path'}; delete $row->{'path'};
126    
127                            $writer->startTag("file", %{$row});
128                            $writer->characters( $path );
129                            $writer->endTag("file");
130                    }
131                    $writer->endTag("backup");
132            }      
133                            
134            $writer->endTag("archive");
135            $writer->end();
136            
137    }
138    
139    
140    
141  #----- main  #----- main
142    
143  my $sth = $dbh->prepare( qq{  my $sth = $dbh->prepare( qq{
# Line 132  sub skip($) { Line 215  sub skip($) {
215  my $sth_archive_backup = $dbh->prepare( qq{  my $sth_archive_backup = $dbh->prepare( qq{
216          select          select
217                  backup_id,                  backup_id,
218                    archive_id,
219                  hosts.name as host,                  hosts.name as host,
220                  shares.name as share,                  shares.name as share,
221                  backups.num as num                  backups.num as num
# Line 143  my $sth_archive_backup = $dbh->prepare( Line 227  my $sth_archive_backup = $dbh->prepare(
227          where archive.dvd_nr = ?          where archive.dvd_nr = ?
228  });  });
229    
230    my $sth_archive_burned = $dbh->prepare( qq{
231            insert into archive_burned
232                    (archive_id, iso_size)
233            values ( (select id from archive where dvd_nr =?), ?)
234    });
235    
236  foreach my $arc (@archives_to_burn) {  foreach my $arc (@archives_to_burn) {
237          exit if ($arc eq ']quit[');          exit if ($arc eq ']quit[');
238    
# Line 155  foreach my $arc (@archives_to_burn) { Line 245  foreach my $arc (@archives_to_burn) {
245    
246          print "Working on DVD #$dvd_nr in $tmp_dir\n";          print "Working on DVD #$dvd_nr in $tmp_dir\n";
247    
248          my $iso_file = "${iso_dir}/${dvd_nr}.iso";          my $list_file = my $iso_file = my $xml_file = "${iso_dir}/${dvd_nr}";
249            $list_file .= '.list';
250          skip "ISO $iso_file allready exists" if (-e $iso_file);          $iso_file .= '.iso';
251            $xml_file .= '.xml';
252    
253            if (-e $iso_file) {
254                    print "ISO $iso_file allready exists\n";
255                    goto BURN;
256            }
257    
258          $sth_archive_backup->execute($dvd_nr);          $sth_archive_backup->execute($dvd_nr);
259    
260          print "Running mkisofs now...\n";          open(my $list, "> $list_file") || skip "can't open $list_file: $!";
261    
262          my $cmd = qq{ mkisofs -A BackupPC -gui -J -r -T --input-charset ISO-8859-2 -V $dvd_nr -o $iso_file -path-list - };          my $inc = 0;
   
         open(my $mkisofs, "| $cmd 2>&1") || skip "can't run $cmd: $!";  
263    
264          while (my $row = $sth_archive_backup->fetchrow_hashref) {          while (my $row = $sth_archive_backup->fetchrow_hashref) {
265                  my $tar_file = BackupPC::SearchLib::getGzipName($row->{'host'}, $row->{'share'}, $row->{'num'});                  my $tar_file = BackupPC::SearchLib::getGzipName($row->{'host'}, $row->{'share'}, $row->{'num'});
266                  skip "can't find increment $tar_file: $!" unless (-r "$tar_dir/$tar_file");                  skip "can't find increment $tar_file: $!" unless (-r "$tar_dir/$tar_file");
267                  print $mkisofs "$tar_dir/$tar_file\n";                  print $list "$tar_dir/$tar_file\n";
268          }                  $inc++;
269    
         while(! -e $iso_file) {  
                 sleep 1;  
270          }          }
271    
272          print "Created $iso_file in ", fmt_time(time() - $t), "\n";          # FIXME add file list in xml and txt and note file
273    
274            dumpArchive2XML($dbh, $dvd_nr, $xml_file);
275            print $list "$xml_file\n";
276    
277            close($list);
278    
279            print "Running mkisofs now for $inc increments...\n";
280    
281            my $cmd = qq{ mkisofs -A BackupPC -gui -J -r -T --input-charset ISO-8859-2 -V $dvd_nr -o $iso_file -path-list $list_file };
282    
283            system($cmd) == 0 or skip "can't run $cmd: $?";
284    
285            my $size = (stat($iso_file))[7];
286    
287            print "Created $iso_file [$size bytes] in ", fmt_time(time() - $t), "\n";
288    
289    BURN:
290            # FIXME add call to cdrecord here!
291            $sth_archive_burned->execute($dvd_nr, $size);
292            print "Media burn for $dvd_nr recorded\n";
293    
294  SKIP:  SKIP:
295    

Legend:
Removed from v.175  
changed lines
  Added in v.188

  ViewVC Help
Powered by ViewVC 1.1.26