]> git.sur5r.net Git - bacula/bacula/commitdiff
ebl
authorEric Bollengier <eric@eb.homelinux.org>
Sun, 21 Sep 2008 21:18:12 +0000 (21:18 +0000)
committerEric Bollengier <eric@eb.homelinux.org>
Sun, 21 Sep 2008 21:18:12 +0000 (21:18 +0000)
 bfileview:
  - Add error message for pruned of uncomputed jobs
  - Bugfix for looking /
 Bweb.pm
  - Add support for age=1w2d40m
  - Add new configuration variable to modify default age
 general.tpl
  - Add hyperlink to failed job count

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

gui/bweb/INSTALL
gui/bweb/cgi/bfileview.pl
gui/bweb/cgi/bgraph.pl
gui/bweb/html/bweb.css
gui/bweb/lib/Bweb.pm
gui/bweb/technotes-2.3
gui/bweb/tpl/config_edit.tpl
gui/bweb/tpl/config_view.tpl
gui/bweb/tpl/display_client_stats.tpl
gui/bweb/tpl/general.tpl

index 8a54949b6af0124f8381a5c95edf418a78ddbe56..1650a8984ccd073c25b68894e19867293014e608 100644 (file)
@@ -267,6 +267,9 @@ chown www-data /var/spool/bweb
 You have to remove "<!-- Remove this to activate bfileview" and "-->" from
 tpl/en/display_job_zoom.tpl.
 
+Add (or configure) a writable location to the parameters in bweb.conf 
+   'fv_write_path' => '/var/spool/bweb',
+
 You MUST use brestore.pl -b to initialize the database, and
 you CAN use bfileview.pl mode=batch jobid=xxx where=/ to compute tree size.
 
index dddffd4d67fbe6442ed7fdc32c56bb2315bbd48f..7196ea7ac781d9bf3e1eae595c57b96566a5e92f 100755 (executable)
@@ -78,12 +78,14 @@ $bweb->display_job_zoom($jobid);
 
 unless ($jobid) {
     $bweb->error("Can't get where or jobid");
+    $bweb->display_end();
     exit 0;
 }
 
 unless ($base_fich and -w $base_fich) {
     $bweb->error("fv_write_path ($base_fich) is not writable." . 
                 " See Bweb configuration.");
+    $bweb->display_end();
     exit 0;
 }
 
@@ -94,6 +96,19 @@ if (-f "$base_fich/$md5_rep.png" and -f "$base_fich/$md5_rep.tpl")
     exit 0;
 }
 
+my $r = $bweb->dbh_selectrow_hashref("SELECT PurgedFiles AS ok FROM Job WHERE JobId = $jobid");
+if (!$r || $r->{ok}) {
+    $bweb->error("File information for job $jobid has been pruned from catalog");
+    $bweb->display_end();
+    exit 0;    
+} 
+
+$r = $bweb->dbh_selectrow_hashref("SELECT JobId AS ok FROM brestore_knownjobid WHERE JobId = $jobid");
+if (!$r || !$r->{ok}) {                # TODO: compute information
+    $bweb->error("Path information for job $jobid has not been updated in the catalog");
+    $bweb->display_end();
+    exit 0;    
+} 
 
 # if it's a file, display it
 if ($fnid and $pathid)
@@ -266,8 +281,14 @@ sub fv_get_file_attribute
 {
     my ($jobid, $full_name) = @_;
     
-    my $filename = $bweb->dbh_quote(basename($full_name));
-    my $path     = $bweb->dbh_quote(dirname($full_name) . "/");
+    # default to /
+    my $path = "'/'";
+    my $filename = "''";
+    
+    if ($full_name ne '/') {
+       $filename = $bweb->dbh_quote(basename($full_name));
+       $path     = $bweb->dbh_quote(dirname($full_name) . "/");
+    }
 
     my $attr = $bweb->dbh_selectrow_hashref("
  SELECT 1    AS found,
@@ -277,8 +298,8 @@ sub fv_get_file_attribute
         base64_decode_lstat(12, LStat) AS mtime,
         base64_decode_lstat(13, LStat) AS ctime
 
-   FROM File INNER JOIN Filename USING (FilenameId)
-             INNER JOIN Path     USING (PathId)
+   FROM File JOIN Filename USING (FilenameId)
+             JOIN Path     USING (PathId)
   WHERE Name  = $filename
    AND  Path  = $path
    AND  JobId = $jobid
index f44e73e292f978cf8c9e434a3dd19d019e5ec177..80c26ca83e6214b26b7568df7a38cbad6916c19a 100755 (executable)
@@ -103,7 +103,7 @@ if ($arg->{jclients}) {
 }
 
 my $groupf='';                 # from clause
-my $groupq='';                 # whre clause
+my $groupq='';                 # where clause
 if ($arg->{jclient_groups}) {
     $groupf = " JOIN client_group_member ON (Client.ClientId = client_group_member.clientid) 
                 JOIN client_group USING (client_group_id)";
@@ -231,6 +231,7 @@ sub make_tab
     my $ret = {};
     
     foreach my $row (@$all_row) {
+       # Todo, add Level to label if option is set ->[4]
        my $label = $row->[1] . "/" . $row->[2] ; # client/backup name
 
        $ret->{date}->[$i]   = $row->[0];       
@@ -277,7 +278,8 @@ SELECT
        UNIX_TIMESTAMP(Job.StartTime)  AS starttime,
        Client.Name                    AS clientname,
        Job.Name                       AS jobname,
-       Job.JobBytes                   AS jobbytes
+       Job.JobBytes                   AS jobbytes,
+       Job.Level                      AS joblevel
 FROM $jobt AS Job, FileSet, Client $filter $groupf
 WHERE Job.ClientId = Client.ClientId
   AND Job.FileSetId = FileSet.FileSetId
@@ -315,7 +317,8 @@ SELECT
        UNIX_TIMESTAMP(Job.StartTime)  AS starttime,
        Client.Name                    AS clientname,
        Job.Name                       AS jobname,
-       Job.JobFiles                   AS jobfiles
+       Job.JobFiles                   AS jobfiles,
+       Job.Level                      AS joblevel
 FROM $jobt AS Job, FileSet, Client $filter $groupf
 WHERE Job.ClientId = Client.ClientId
   AND Job.FileSetId = FileSet.FileSetId
@@ -356,7 +359,8 @@ elsif ($graph eq 'file_histo' and $arg->{where}) {
 SELECT UNIX_TIMESTAMP(Job.StartTime)    AS starttime,
        Client.Name                      AS client,
        Job.Name                         AS jobname,
-       base64_decode_lstat(8,LStat)     AS lstat
+       base64_decode_lstat(8,LStat)     AS lstat,
+       Job.Level                        AS joblevel
 
 FROM Job, FileSet, Filename, Path, File, Client $filter
 WHERE Job.ClientId = Client.ClientId
@@ -406,7 +410,8 @@ elsif ($graph eq 'rep_histo' and $arg->{where}) {
 SELECT UNIX_TIMESTAMP(Job.StartTime) AS starttime,
        Client.Name                   AS client,
        Job.Name                      AS jobname,
-       brestore_pathvisibility.size  AS size
+       brestore_pathvisibility.size  AS size,
+       Job.Level                     AS joblevel
 
 FROM Job, Client $filter, FileSet, Path, brestore_pathvisibility
 WHERE Job.ClientId = Client.ClientId
@@ -453,7 +458,8 @@ SELECT
        ($bweb->{sql}->{SEC_TO_INT}(
                           $bweb->{sql}->{UNIX_TIMESTAMP}(EndTime)  
                         - $bweb->{sql}->{UNIX_TIMESTAMP}(StartTime)) + 0.01) 
-         AS rate
+         AS rate,
+       Job.Level                      AS joblevel
 
 FROM $jobt AS Job, FileSet, Client $filter $groupf
 WHERE Job.ClientId = Client.ClientId
@@ -496,7 +502,9 @@ SELECT
        Job.Name                            AS jobname,
   $bweb->{sql}->{SEC_TO_INT}(  $bweb->{sql}->{UNIX_TIMESTAMP}(EndTime)  
                              - $bweb->{sql}->{UNIX_TIMESTAMP}(StartTime)) 
-         AS duration
+         AS duration,
+       Job.Level                      AS joblevel
+
 FROM $jobt AS Job, FileSet, Client $filter $groupf
 WHERE Job.ClientId = Client.ClientId
   AND Job.FileSetId = FileSet.FileSetId
index 0009dec5ab7e0166c074de911f7592638cc0e704..82c509aa1dfee7d7135f3ffa7b793ff111c4ad55 100644 (file)
@@ -10,6 +10,8 @@ button.formulaire { border: 0px; font-size: 9pt;  background-color: transparent;
 button.bp { border: 0px; background-color: transparent; }
 
 td.joberr { background-color: red; color: white;}
+.joberr a:link { color: white; }
+.joberr a:visited { color: #ffe0c0; } 
 
 .pSlice, .pSliceFull, .pSliceError, .pSliceAppend, .pSlicePurged, .pSliceRecycle, 
 .pSliceArchive, .pSliceUsed, .pSliceRead_Only, .pSliceDisabled,
index 2fb9da05e98c672602820d35c3cf2e2901be8783..7d201d1219d923d541df0d60268fb788ab05e2b9 100644 (file)
@@ -234,6 +234,7 @@ our %k_re = ( dbi      => qr/^(dbi:(Pg|mysql):(?:\w+=[\w\d\.-]+;?)+)$/i,
              display_log_time => qr!^(on)?$!,
              enable_security => qr/^(on)?$/,
              enable_security_acl => qr/^(on)?$/,
+             default_age => qr/^(?:\d+(?:[ywdhms]\s*)?)+\s*$/,
              );
 
 =head1 FUNCTION
@@ -273,6 +274,9 @@ sub load
        return $self->error("If you update from an old bweb install, your must reload this page and if it's fail again, you have to configure bweb again...") ;
     }
 
+    # set default values
+    $self->{default_age} = '7d';
+
     foreach my $k (keys %$VAR1) {
        $self->{$k} = $VAR1->{$k};
     }
@@ -1271,7 +1275,6 @@ use DBI;
 use POSIX qw/strftime/;
 
 our $config_file='/etc/bacula/bweb.conf';
-
 our $cur_id=0;
 
 =head1 VARIABLE
@@ -1425,6 +1428,25 @@ sub human_size
     return sprintf($format, $val, $unit[$i]);
 }
 
+sub human_sec_unit
+{
+    my $val = shift;
+    my $orig = $val;
+    if ($val =~ /^(?:\d+(?:[ywdhms]\s*)?)+\s*$/) {
+        for ($val) {
+            s/y/*52w/g;
+            s/w/*7d/g;
+            s/d/*24h/g;
+            s/h/*60m/g;
+            s/m/*60s/g;
+            s/s(\d)/+$1/g;
+            s/s//;
+        }
+        $val = eval $val;
+    }
+    return int($val);
+}
+
 # display Day, Hour, Year
 sub human_sec
 {
@@ -1740,7 +1762,7 @@ sub get_form
                 slot   =>   0,
                 drive  =>   0,
                 priority => 10,
-                age    => 60*60*24*7,
+                age    => $self->{info}->{default_age},
                 days   => 1,
                 maxvoljobs  => 0,
                 maxvolbytes => 0,
@@ -1798,6 +1820,10 @@ sub get_form
            my $value = CGI::param($i) || $opt_i{$i} ;
            if ($value =~ /^(\d+)$/) {
                $ret{$i} = $1;
+           } elsif ($value eq 'age' &&  # can have unit
+                    $i =~ /^(?:\d+(?:[ywdhms]\s*)?)+\s*$/) # 2y1h2m34s
+           {
+               $ret{$i} = human_sec_unit($i);
            }
        } elsif ($opt_s{$i}) {  # simple string param
            my $value = CGI::param($i) || '';
@@ -2212,6 +2238,7 @@ SELECT
 
     $row->{db_size} = human_size($row->{db_size});
     $row->{label} = $label;
+    $row->{age} = $arg{age};
 
     $self->display($row, "general.tpl");
 }
@@ -3618,6 +3645,7 @@ GROUP BY Client.Name
     $row->{ID} = $cur_id++;
     $row->{label} = $label;
     $row->{grapharg} = "client";
+    $row->{age} = $arg{age};
 
     $self->display($row, "display_client_stats.tpl");
 }
index 973d33aa664d6b44e649d1b866fd867eb2d6adbe..d61e392ae09250489a4d7657e0ed48ba6a548b4d 100644 (file)
@@ -1,3 +1,15 @@
+21Sep08
+ebl  
+ bfileview: 
+  - Add error message for pruned of uncomputed jobs
+  - Bugfix for looking /
+ Bweb.pm
+  - Add support for age=1w2d40m
+  - Add new configuration variable to modify default age
+ general.tpl
+  - Add hyperlink to failed job count
+ TODO: add C.png (with something like zzZZzzz)
+
 25Aug08
 ebl  Fix #1132 about typo in directory creation in install_bweb
 
index 38a940ea158c2dc048a91080cc074938ee0bd342..92d48f278c8d65c8f1bb284567287852f95d8f8e 100644 (file)
@@ -53,6 +53,9 @@
            <option id='lang_es' value='es'>__Spanish__</option>
           </select>
      </td></tr>
+     <tr><td>__default_age:__</td>
+         <td> <input class="formulaire" type='text' value='<TMPL_VAR default_age>' title='24h15m' size='64' name='default_age'> 
+         </td></tr>
      <tr><td>display_log_time:</td> 
          <td> <input class="formulaire" title="__Display log timestamp__" type='checkbox' name='display_log_time' <TMPL_IF display_log_time> checked='checked' value='on' </TMPL_IF> > 
          </td></tr>
index b784aa75d29f6b9802a4aa5aacd36cf010b5ed83..d2ef93e06d66a07569e5cfaf3569c8fe57052612 100644 (file)
@@ -19,6 +19,7 @@
     <tr><td title="__use a wiki for jobs documentation?__">wiki_url:</td> <td> <TMPL_VAR wiki_url> </td></tr>
     <tr><td title="/path/to/your/template_dir">template_dir:</td> <td> <TMPL_VAR template_dir> </td></tr>
     <tr><td title="__Default language__">__language:__</td> <td> <TMPL_VAR lang> </td></tr>
+    <tr><td title="__Default Age__">__default_age:__</td> <td> <TMPL_VAR default_age> </td></tr>
     <tr><td title="__display timestamp in job log__">display_log_time:</td> <td> <TMPL_VAR display_log_time> </td></tr>
     <tr><td title="__user managment__">__security:__</td> <td> <TMPL_VAR enable_security> </td></tr>
     <tr><td title="__user filter__">__security acl:__</td> <td> <TMPL_VAR enable_security_acl> </td></tr>
index 00a1dc7de58de88f78b28a99bfe2a369d6b35cea..27babe9edceb7d88fea907d275ff3f8f2f344e19 100644 (file)
@@ -5,9 +5,9 @@
  <div class='bodydiv'>
 <form action='?'>
      <table id='id<TMPL_VAR ID>'></table>
-     <img src="bgraph.pl?<TMPL_VAR grapharg>=<TMPL_VAR clientname>;graph=job_duration;age=2592000;width=420;height=200" alt='Not enough data' > &nbsp;
-     <img src="bgraph.pl?<TMPL_VAR grapharg>=<TMPL_VAR clientname>;graph=job_rate;age=2592000;width=420;height=200" alt='Not enough data'> &nbsp;
-     <img src="bgraph.pl?<TMPL_VAR grapharg>=<TMPL_VAR clientname>;graph=job_size;age=2592000;width=420;height=200" alt='Not enough data'> &nbsp;
+     <img src="bgraph.pl?<TMPL_VAR grapharg>=<TMPL_VAR clientname>;graph=job_duration;age=<TMPL_VAR age>;width=420;height=200" alt='Not enough data' > &nbsp;
+     <img src="bgraph.pl?<TMPL_VAR grapharg>=<TMPL_VAR clientname>;graph=job_rate;age=<TMPL_VAR age>;width=420;height=200" alt='Not enough data'> &nbsp;
+     <img src="bgraph.pl?<TMPL_VAR grapharg>=<TMPL_VAR clientname>;graph=job_size;age=<TMPL_VAR age>;width=420;height=200" alt='Not enough data'> &nbsp;
 <!--   <div class="otherboxtitle">
           __Actions__ &nbsp;
         </div>
index ea0e8442b2133f0cf4d34ff28ba95d4dfa12f66b..b35da8bdeede5c31f7249b94af0a2778fb3e72c7 100644 (file)
@@ -20,7 +20,9 @@ bweb_add_refresh();
    <tr><td>__Job failed__ (<TMPL_VAR label>):</td> 
        
 <td <TMPL_IF nb_err> class='joberr' </TMPL_IF>>
+  <a href="?action=job;level=Any;status=f;age=<TMPL_VAR age>;jobtype=B">
    <TMPL_VAR nb_err> 
+  </a>
 </td>
        <td></td>         <td></td>
        <td></td>         <td></td>