]> git.sur5r.net Git - bacula/bacula/commitdiff
ebl Make working the "compute with directories" option --This line, and those below...
authorEric Bollengier <eric@eb.homelinux.org>
Tue, 5 May 2009 12:53:04 +0000 (12:53 +0000)
committerEric Bollengier <eric@eb.homelinux.org>
Tue, 5 May 2009 12:53:04 +0000 (12:53 +0000)
M    technotes-3.0
M    cgi/bresto.pl
M    html/bresto.js

git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@8804 91ce42f0-d328-0410-95d8-f526ca767f89

gui/bweb/cgi/bresto.pl
gui/bweb/html/bresto.js
gui/bweb/technotes-3.0

index b68e050a2161c4701dbcbfb5430963b74ec25def..fe8f3556bb431e9249a7eb85c7c646e8651fb9f9 100755 (executable)
@@ -794,7 +794,9 @@ if ($action eq 'list_client') {     # list all client [ ['c1'],['c2']..]
     print "]\n";
     exit 0;
     
-} elsif ($action eq 'list_job') { # list jobs for a client [[jobid,endtime,'desc'],..]
+} elsif ($action eq 'list_job') {
+    # list jobs for a client [[jobid,endtime,'desc'],..]
+
     print CGI::header('application/x-javascript');
     
     my $filter = $bvfs->get_client_filter();
@@ -826,50 +828,9 @@ if ($action eq 'list_client') {    # list all client [ ['c1'],['c2']..]
     exit 0;
 }
 
-# get jobid param and apply user filter
-my @jobid = $bvfs->get_jobids(grep { /^\d+(,\d+)*$/ } CGI::param('jobid'));
-# get jobid from date arg
-if (!scalar(@jobid) and $args->{qdate} and $args->{client}) {
-    @jobid = $bvfs->set_job_ids_for_date($args->{client}, $args->{qdate});
-}
-$bvfs->set_curjobids(@jobid);
-print STDERR "limit=$args->{limit}:$args->{offset} date=$args->{qdate} currentjobids = ", join(",", @jobid), "\n";
-$bvfs->set_limits($args->{offset}, $args->{limit});
-
-if (!scalar(@jobid)) {
-    exit 0;
-}
-
-if (CGI::param('init')) { # used when choosing a job
-    $bvfs->update_brestore_table(@jobid);
-}
-
-my $pathid = CGI::param('node') || '';
-my $path = CGI::param('path');
-
-if ($pathid =~ /^(\d+)$/) {
-    $pathid = $1;
-} elsif ($path) {
-    $pathid = $bvfs->get_pathid($path);
-} else {
-    $pathid = $bvfs->get_root();
-}
-$bvfs->ch_dir($pathid);
-
-# permit to use a regex filter
-if ($args->{qpattern}) {
-    $bvfs->set_pattern($args->{qpattern});
-}
-
-if ($action eq 'restore') {
-
-    # TODO: pouvoir choisir le replace et le jobname
-    my $arg = $bvfs->get_form(qw/client storage regexwhere where/);
-
-    if (!$arg->{client}) {
-       print "ERROR: missing client\n";
-       exit 1;
-    }
+sub fill_table_for_restore
+{
+    my (@jobid) = @_;
 
     my $fileid = join(',', grep { /^\d+$/ } CGI::param('fileid'));
     my @dirid = grep { /^\d+$/ } CGI::param('dirid');
@@ -931,6 +892,81 @@ FROM (
 )");
     }
 
+    return "b2$$";
+}
+
+sub get_media_list
+{
+    my ($jobid, $fileid) = @_;
+    my $q="
+ SELECT DISTINCT VolumeName, Enabled, InChanger
+   FROM File,
+    ( -- Get all media from this job
+      SELECT MIN(FirstIndex) AS FirstIndex, MAX(LastIndex) AS LastIndex,
+             VolumeName, Enabled, Inchanger
+        FROM JobMedia JOIN Media USING (MediaId)
+       WHERE JobId IN ($jobid)
+       GROUP BY VolumeName,Enabled,InChanger
+    ) AS allmedia
+  WHERE File.FileId IN ($fileid)
+    AND File.FileIndex >= allmedia.FirstIndex
+    AND File.FileIndex <= allmedia.LastIndex
+";
+    my $lst = $bvfs->dbh_selectall_arrayref($q);
+    return $lst;
+}
+
+# get jobid param and apply user filter
+my @jobid = $bvfs->get_jobids(grep { /^\d+(,\d+)*$/ } CGI::param('jobid'));
+
+# get jobid from date arg
+if (!scalar(@jobid) and $args->{qdate} and $args->{client}) {
+    @jobid = $bvfs->set_job_ids_for_date($args->{client}, $args->{qdate});
+}
+
+$bvfs->set_curjobids(@jobid);
+$bvfs->set_limits($args->{offset}, $args->{limit});
+
+if (!scalar(@jobid)) {
+    exit 0;
+}
+
+if (CGI::param('init')) { # used when choosing a job
+    $bvfs->update_brestore_table(@jobid);
+}
+
+my $pathid = CGI::param('node') || '';
+my $path = CGI::param('path');
+
+if ($pathid =~ /^(\d+)$/) {
+    $pathid = $1;
+} elsif ($path) {
+    $pathid = $bvfs->get_pathid($path);
+} else {
+    $pathid = $bvfs->get_root();
+}
+$bvfs->ch_dir($pathid);
+
+# permit to use a regex filter
+if ($args->{qpattern}) {
+    $bvfs->set_pattern($args->{qpattern});
+}
+
+if ($action eq 'restore') {
+
+    # TODO: pouvoir choisir le replace et le jobname
+    my $arg = $bvfs->get_form(qw/client storage regexwhere where/);
+
+    if (!$arg->{client}) {
+       print "ERROR: missing client\n";
+       exit 1;
+    }
+
+    my $table = fill_table_for_restore(@jobid);
+    if (!$table) {
+        exit 1;
+    }
+
     my $bconsole = $bvfs->get_bconsole();
     # TODO: pouvoir choisir le replace et le jobname
     my $jobid = $bconsole->run(client    => $arg->{client},
@@ -938,9 +974,9 @@ FROM (
                               where     => $arg->{where},
                               regexwhere=> $arg->{regexwhere},
                               restore   => 1,
-                              file      => "?b2$$");
+                              file      => "?$table");
     
-    $bvfs->dbh_do("DROP TABLE b2$$");
+    $bvfs->dbh_do("DROP TABLE $table");
 
     if (!$jobid) {
        print CGI::header('text/html');
@@ -1013,29 +1049,32 @@ if ($action eq 'list_files') {
     print "]\n";
 
 } elsif ($action eq 'get_media') {
+    my ($jobid, $fileid, $table);
 
-    my $jobid = join(',', @jobid);
-    my $fileid = join(',', grep { /^\d+(,\d+)*$/ } CGI::param('fileid'));
+    # in this mode, we compute the result to get all needed media
+    if (CGI::param('force')) {
+        $table = fill_table_for_restore(@jobid);
+        if (!$table) {
+            exit 1;
+        }
 
-    my $q="
- SELECT DISTINCT VolumeName, Enabled, InChanger
-   FROM File,
-    ( -- Get all media from this job
-      SELECT MIN(FirstIndex) AS FirstIndex, MAX(LastIndex) AS LastIndex,
-             VolumeName, Enabled, Inchanger
-        FROM JobMedia JOIN Media USING (MediaId)
-       WHERE JobId IN ($jobid)
-       GROUP BY VolumeName,Enabled,InChanger
-    ) AS allmedia
-  WHERE File.FileId IN ($fileid)
-    AND File.FileIndex >= allmedia.FirstIndex
-    AND File.FileIndex <= allmedia.LastIndex
-";
-    my $lst = $bvfs->dbh_selectall_arrayref($q);
+        $jobid = "SELECT DISTINCT JobId FROM $table";
+        $fileid = "SELECT FileId FROM $table";
+
+    } else {
+        $jobid = join(',', @jobid);
+        $fileid = join(',', grep { /^\d+(,\d+)*$/ } CGI::param('fileid'));
+    }        
+
+    my $lst = get_media_list($jobid, $fileid);
     print "[";
     print join(',', map { "['$_->[0]',$_->[1],$_->[2]]" } @$lst);
     print "]\n";
 
+    if ($table) {
+        $bvfs->dbh_do("DROP TABLE $table");
+    }
+
 }
 
 __END__
index 6ddb522f49f39cbbce79a103af3cbf74a8e860d3..77a605dd2893a57fb3c8e03b0c306647656c241c 100644 (file)
@@ -61,6 +61,8 @@ Ext.brestore.fpattern;
 Ext.brestore.use_filerelocation=false;
 Ext.brestore.limit = 2000;
 Ext.brestore.offset = 0;
+Ext.brestore.force_reload = 0;
+
 function get_node_path(node)
 {
    var temp='';
@@ -845,6 +847,7 @@ Ext.onReady(function(){
         ddGroup : 'TreeDD',
         copy:false,
         notifyDrop : function(dd, e, data){
+            console.info("DropTarget");
             var r;
             if (data.selections) {
                 if (data.grid.id == 'div-files') {
@@ -893,26 +896,37 @@ Ext.onReady(function(){
             return true;
         }});
 
+    function force_reload_media_store() {
+       Ext.brestore.force_reload = 1;
+       reload_media_store();
+       Ext.brestore.force_reload = 0;
+    }
+
     function reload_media_store() {
         var items = file_selection_store.data.items;
         var tab_fileid=new Array();
+        var tab_dirid=new Array();
         var tab_jobid=new Array();
         var enable_compute=false;
         for(var i=0;i<items.length;i++) {
             if (items[i].data['fileid']) {
-                tab_fileid.push(items[i].data['fileid']);
+               tab_fileid.push(items[i].data['fileid']);
             } else {
-                enable_compute=true;
+               tab_dirid.push(items[i].data['pathid']);
+               enable_compute=true;
             }
             tab_jobid.push(items[i].data['jobid']);
         }
         var res = tab_fileid.join(",");
         var res2 = tab_jobid.join(",");
-        
+        var res3 = tab_dirid.join(",");
+
         Ext.brestore.media_store.baseParams = init_params({
             action: 'get_media', 
             jobid: res2, 
-            fileid: res
+            fileid: res,
+            dirid: res3,
+            force: Ext.brestore.force_reload
         });
         Ext.brestore.media_store.load();
         if (enable_compute) {
@@ -1061,7 +1075,7 @@ Ext.onReady(function(){
                 header:    "Volume",
                 id:        'volumename', 
                 dataIndex: 'volumename',
-                width:     140
+                width:     200
             }
             ]);
         
@@ -1072,8 +1086,8 @@ Ext.onReady(function(){
             colModel: media_cm,
             enableDragDrop: false,
             loadMask: true,
-            width: 200,
-            autoHeight: true,
+            width: 400,
+            height: 180,
             frame: true
         });
 
@@ -1104,13 +1118,13 @@ Ext.onReady(function(){
                         xtype          : 'fieldset',
                         title          : 'Media needed',
                         autoHeight     : true,
-                        defaults       : {width: 210},
+                        defaults       : {width: 280},
                         bodyStyle  : 'padding:5px 5px 0',
                         items :[ media_grid, 
                                  {xtype: 'button', id: 'reload_media',
                                   text: 'Compute with directories',
                                   tooltip: 'Can take long time...',
-                                  handler:reload_media_store}]
+                                  handler:force_reload_media_store}]
                     }],
                 }, {
                     xtype   :   'panel',
index 2ddfe390ad5438f648213e79eae6c8e438e91c94..6d25dabb361df4262ba1b38109c5f13efaaf2599 100644 (file)
@@ -1,3 +1,5 @@
+05Apr05
+ebl  Make working the "compute with directories" option 
 04Apr05
 ebl  Add View copies option to bresto
 ebl  Tweak command output to add hide/display button