]> git.sur5r.net Git - bacula/bacula/blobdiff - gui/bweb/lib/Bweb.pm
ebl Doesn't display running job more in job hist
[bacula/bacula] / gui / bweb / lib / Bweb.pm
index 96c6d119709f11dbed906016279bec7acfaa7846..5b14313b5ef450d93e8b6068963f0773e82812c4 100644 (file)
@@ -1050,6 +1050,7 @@ our %sql_func = (
              STARTTIME_PDAY => " date_part('day', Job.StartTime) ",
              STARTTIME_PMONTH => " date_part('month', Job.StartTime) ",
              DB_SIZE => " SELECT pg_database_size(current_database()) ",
+             CAT_POOL_TYPE => " MediaType || '_' || Pool.Name ",
          },
          mysql => {
              UNIX_TIMESTAMP => 'UNIX_TIMESTAMP',
@@ -1068,6 +1069,7 @@ our %sql_func = (
              DB_SIZE => " SELECT 0 ",
              # works only with mysql 5
              # DB_SIZE => " SELECT sum(DATA_LENGTH) FROM INFORMATION_SCHEMA.TABLES ",
+             CAT_POOL_TYPE => " CONCAT(MediaType,'_',Pool.Name) ",
          },
         );
 
@@ -1135,7 +1137,7 @@ sub dbh_selectrow_hashref
 # display Mb/Gb/Kb
 sub human_size
 {
-    my @unit = qw(b Kb Mb Gb Tb);
+    my @unit = qw(B KB MB GB TB);
     my $val = shift || 0;
     my $i=0;
     my $format = '%i %s';
@@ -1257,7 +1259,7 @@ sub display_clients
     my ($self) = @_;
 
     my $where='';
-    my $arg = $self->get_form("client", "qre_client", "jclient_groups");
+    my $arg = $self->get_form("client", "qre_client", "jclient_groups", "qnotingroup");
 
     if ($arg->{qre_client}) {
        $where = "WHERE Name $self->{sql}->{MATCH} $arg->{qre_client} ";
@@ -1267,6 +1269,14 @@ sub display_clients
        $where = "JOIN client_group_member ON (Client.ClientId = client_group_member.clientid) 
                   JOIN client_group USING (client_group_id)
                   WHERE client_group_name IN ($arg->{jclient_groups})";
+    } elsif ($arg->{qnotingroup}) {
+       $where =   "
+  WHERE NOT EXISTS
+   (SELECT 1 FROM client_group_member
+     WHERE Client.ClientId = client_group_member.ClientId
+   )
+";
+   
     }
 
     my $query = "
@@ -1375,6 +1385,7 @@ sub get_form
                 maxvoljobs  => 0,
                 maxvolbytes => 0,
                 maxvolfiles => 0,
+                pathid => 1,
                 );
 
     my %opt_ss =(              # string with space
@@ -2003,7 +2014,7 @@ SELECT  Job.JobId       AS jobid,
           LEFT JOIN FileSet  ON (Job.FileSetId = FileSet.FileSetId)
           $cgq
  WHERE Client.ClientId=Job.ClientId
-   AND Job.JobStatus != 'R'
+   AND Job.JobStatus NOT IN ('R', 'C')
  $where
  $limit
 ";
@@ -2068,6 +2079,64 @@ WHERE Job.JobId = $jobid
     $self->display($row, "display_job_zoom.tpl");
 }
 
+sub display_job_group
+{
+    my ($self, %arg) = @_;
+
+    my ($limit, $label) = $self->get_limit(groupby => 'client_group_name',  %arg);
+
+    my ($where, undef) = $self->get_param('client_groups',
+                                         'level',
+                                         'pools');
+    
+    my $query = 
+"
+SELECT client_group_name AS client_group_name,
+       COALESCE(jobok.jobfiles,0)  + COALESCE(joberr.jobfiles,0)  AS jobfiles,
+       COALESCE(jobok.jobbytes,0)  + COALESCE(joberr.jobbytes,0)  AS jobbytes,
+       COALESCE(jobok.joberrors,0) + COALESCE(joberr.joberrors,0) AS joberrors,
+       COALESCE(jobok.nbjobs,0)  AS nbjobok,
+       COALESCE(joberr.nbjobs,0) AS nbjoberr,
+       COALESCE(jobok.duration, '0:0:0') AS duration
+
+FROM client_group LEFT JOIN (
+    SELECT client_group_name AS client_group_name, COUNT(1) AS nbjobs, 
+           SUM(JobFiles) AS jobfiles, SUM(JobBytes) AS jobbytes, 
+           SUM(JobErrors) AS joberrors,
+           SUM($self->{sql}->{SEC_TO_TIME}(  $self->{sql}->{UNIX_TIMESTAMP}(EndTime)  
+                              - $self->{sql}->{UNIX_TIMESTAMP}(StartTime)))
+                        AS duration
+
+    FROM Job JOIN client_group_member ON (Job.ClientId = client_group_member.ClientId)
+             JOIN client_group USING (client_group_id)
+    
+    WHERE JobStatus = 'T'
+    $where
+    $limit
+) AS jobok USING (client_group_name) LEFT JOIN
+
+(
+    SELECT client_group_name AS client_group_name, COUNT(1) AS nbjobs, 
+           SUM(JobFiles) AS jobfiles, SUM(JobBytes) AS jobbytes, 
+           SUM(JobErrors) AS joberrors
+    FROM Job JOIN client_group_member ON (Job.ClientId = client_group_member.ClientId)
+             JOIN client_group USING (client_group_id)
+    
+    WHERE JobStatus IN ('f','E', 'A')
+    $where
+    $limit
+) AS joberr USING (client_group_name)
+
+    ";
+
+    my $all = $self->dbh_selectall_hashref($query, 'client_group_name');
+
+    my $rep = { groups => [ values %$all ], age => $arg{age}, filter => $label };
+                
+    $self->debug($rep);
+    $self->display($rep, "display_job_group.tpl");
+}
+
 sub display_media
 {
     my ($self, %arg) = @_ ;
@@ -2745,7 +2814,9 @@ SELECT subq.volmax        AS volmax,
        Pool.MaxVolJobs    AS maxvoljobs,
        Pool.MaxVolFiles   AS maxvolfiles,
        Pool.MaxVolBytes   AS maxvolbytes,
-       subq.PoolId        AS PoolId
+       subq.PoolId        AS PoolId,
+       subq.MediaType     AS mediatype,
+       $self->{sql}->{CAT_POOL_TYPE}  AS uniq
 FROM
   (
     SELECT COALESCE(media_avg_size.volavg,0) * count(Media.MediaId) AS volmax,
@@ -2766,7 +2837,7 @@ LEFT JOIN Pool ON (Pool.PoolId = subq.PoolId)
 $whereW
 ";
 
-    my $all = $self->dbh_selectall_hashref($query, 'name') ;
+    my $all = $self->dbh_selectall_hashref($query, 'uniq') ;
 
     $query = "
 SELECT Pool.Name AS name,
@@ -2792,7 +2863,8 @@ GROUP BY Pool.Name;
        $query = "
   SELECT VolStatus AS volstatus, count(MediaId) AS nb
     FROM Media 
-   WHERE PoolId=$p->{poolid} 
+   WHERE PoolId=$p->{poolid}
+     AND Media.MediaType = '$p->{mediatype}'
          $whereA
 GROUP BY VolStatus
 ";
@@ -3279,36 +3351,37 @@ sub label_barcodes
     }
 
     my $slots = '';
+    my $slots_sql = '';
     my $t = 300 ;
     if ($arg->{slots}) {
        $slots = join(",", @{ $arg->{slots} });
+       $slots_sql = " AND Slot IN ($slots) ";
        $t += 60*scalar( @{ $arg->{slots} }) ;
     }
 
-    my $b = new Bconsole(pref => $self->{info}, timeout => $t,log_stdout => 1);
-    print "<h1>This command can take long time, be patient...</h1>";
-    print "<pre>" ;
-    $b->label_barcodes(storage => $storage,
-                      drive => $arg->{drive},
-                      pool  => 'Scratch',
-                      slots => $slots) ;
-    $b->close();
-    print "</pre>";
-
     $self->dbh_do("
   UPDATE Media 
        SET LocationId =   (SELECT LocationId 
                              FROM Location 
                             WHERE Location = '$arg->{ach}'),
 
-           RecyclePoolId = PoolId
-
-     WHERE Media.PoolId = (SELECT PoolId 
+           RecyclePoolId = (SELECT PoolId 
                              FROM Pool
                             WHERE Name = 'Scratch')
-       AND (LocationId = 0 OR LocationId IS NULL)
+
+     WHERE (LocationId = 0 OR LocationId IS NULL)
+       $slots_sql
 ");
 
+    my $b = new Bconsole(pref => $self->{info}, timeout => $t,log_stdout => 1);
+    print "<h1>This command can take long time, be patient...</h1>";
+    print "<pre>" ;
+    $b->label_barcodes(storage => $storage,
+                      drive => $arg->{drive},
+                      pool  => 'Scratch',
+                      slots => $slots) ;
+    $b->close();
+    print "</pre>";
 }
 
 sub purge