]> git.sur5r.net Git - bacula/bacula/blobdiff - gui/bweb/lib/Bweb.pm
ebl small fix
[bacula/bacula] / gui / bweb / lib / Bweb.pm
index 7716363ed4dc94d3093eb289cd46f48ff768f9d8..fc70854e55acb1306cc037d3b5c429589025f97c 100644 (file)
@@ -1174,6 +1174,10 @@ sub connect_db
            unless ($self->{dbh});
 
        $self->{dbh}->{FetchHashKeyName} = 'NAME_lc';
+
+       if ($self->{info}->{dbi} =~ /^dbi:Pg/i) {
+           $self->{dbh}->do("SET datestyle TO 'ISO, YMD'");
+       }
     }
 }
 
@@ -1348,6 +1352,7 @@ sub get_form
                 graph  => 1,
                  gtype  => 1,
                  type   => 1,
+                recyclepool => 1,
                 );
     my %opt_p = (              # option with path
                 fileset=> 1,
@@ -1928,6 +1933,7 @@ SELECT DISTINCT Job.JobId       AS jobid,
                 JobFiles        AS jobfiles, 
                 JobBytes        AS jobbytes,
                JobStatus       AS jobstatus,
+                JobErrors       AS joberrors,
                 $self->{sql}->{SEC_TO_TIME}(  $self->{sql}->{UNIX_TIMESTAMP}(EndTime)  
                                             - $self->{sql}->{UNIX_TIMESTAMP}(StartTime)) AS duration
 
@@ -2294,7 +2300,9 @@ SELECT Media.Slot         AS slot,
        Media.MaxVolJobs   AS maxvoljobs,
        Media.MaxVolFiles  AS maxvolfiles,
        Media.VolUseDuration AS voluseduration,
-       Media.VolRetention AS volretention
+       Media.VolRetention AS volretention,
+       Media.Comment      AS comment,
+       Media.RecyclePoolId AS recyclepoolid
 
 FROM Media INNER JOIN Pool ON (Media.PoolId = Pool.PoolId)
            LEFT  JOIN Location ON (Media.LocationId = Location.LocationId)
@@ -2455,8 +2463,21 @@ LEFT JOIN Pool ON (Pool.PoolId = subq.PoolId)
 
     my $all = $self->dbh_selectall_hashref($query, 'name') ;
 
+    $query = "
+SELECT Pool.Name AS name,
+       sum(VolBytes) AS size
+FROM   Media JOIN Pool ON (Media.PoolId = Pool.PoolId)
+WHERE  Media.VolStatus IN ('Recycled', 'Purged')
+GROUP BY Pool.Name;
+";
+    my $empty = $self->dbh_selectall_hashref($query, 'name');
+
     foreach my $p (values %$all) {
-       if ($p->{volmax}) {
+       if ($p->{volmax} > 0) { # mysql returns 0.0000
+           # we remove Recycled/Purged media from pool usage
+           if (defined $empty->{$p->{name}}) {
+               $p->{voltotal} -= $empty->{$p->{name}}->{size};
+           }
            $p->{poolusage} = sprintf('%.2f', $p->{voltotal} * 100/ $p->{volmax}) ;
        } else {
            $p->{poolusage} = 0;
@@ -2764,6 +2785,7 @@ sub do_update_media
     my $arg = $self->get_form(qw/media volstatus inchanger pool
                                 slot volretention voluseduration 
                                 maxvoljobs maxvolfiles maxvolbytes
+                                qcomment recyclepool
                              /);
 
     unless ($arg->{media}) {
@@ -2823,17 +2845,29 @@ sub do_update_media
     }, "command.tpl"); 
 
 
+    my @q;
+    my $media = $self->dbh_quote($arg->{media});
+
     my $loc = CGI::param('location') || '';
     if ($loc) {
-       my $media = $self->dbh_quote($arg->{media});
        $loc = $self->dbh_quote($loc); # is checked by db
-       my $query = "
+       push @q, "LocationId=(SELECT LocationId FROM Location WHERE Location=$loc)";
+    }
+    if ($arg->{recyclepool}) {
+       push @q, "RecyclePoolId=(SELECT PoolId FROM Pool WHERE Name='$arg->{recyclepool}')";
+    }
+    if (!$arg->{qcomment}) {
+       $arg->{qcomment} = "''";
+    }
+    push @q, "Comment=$arg->{qcomment}";
+    
+
+    my $query = "
 UPDATE Media 
-   SET LocationId=(SELECT LocationId FROM Location WHERE Location=$loc)
+   SET " . join (',', @q) . "
  WHERE Media.VolumeName = $media
 ";
-       $self->dbh_do($query);
-    }
+    $self->dbh_do($query);
 
     $self->update_media();
 }
@@ -2843,13 +2877,14 @@ sub update_slots
     my ($self) = @_;
 
     my $ach = CGI::param('ach') ;
-    unless ($ach =~ /^([\w\d\.-]+)$/) {
+    $ach = $self->ach_get($ach);
+    unless ($ach) {
        return $self->error("Bad autochanger name");
     }
 
     print "<pre>";
     my $b = new Bconsole(pref => $self->{info},timeout => 60,log_stdout => 1);
-    $b->update_slots($ach);
+    $b->update_slots($ach->{name});
     print "</pre>\n" 
 }
 
@@ -2878,10 +2913,15 @@ SELECT Job.Name as name, Client.Name as clientname
 
     $query = "
 SELECT Time AS time, LogText AS log
- FROM  Log
- WHERE JobId = $arg->{jobid}
- ORDER BY Time
+ FROM  Log INNER JOIN Job ON (Job.JobId = Log.JobId)
+ WHERE Log.JobId = $arg->{jobid}
+    OR (    Log.JobId = 0 
+        AND Log.Time >= Job.StartTime
+        AND Log.Time <= COALESCE(Job.EndTime, Now())
+       )
+ ORDER BY LogId
 ";
+
     my $log = $self->dbh_selectall_arrayref($query);
     unless ($log) {
        return $self->error("Can't get log for jobid $arg->{jobid}");