]> git.sur5r.net Git - bacula/bacula/blobdiff - gui/bweb/lib/Bweb.pm
ebl fix delete jobid
[bacula/bacula] / gui / bweb / lib / Bweb.pm
index b812b1d9381ac35b8decf43c1f6e72a26d36f053..627a1149ab7d0d45e5c717c80d61b149e84a102f 100644 (file)
@@ -1007,9 +1007,6 @@ use base q/Bweb::Gui/;
 use DBI;
 use POSIX qw/strftime/;
 
-our $bpath="/usr/local/bacula";
-our $bconsole="$bpath/sbin/bconsole -c $bpath/etc/bconsole.conf";
-
 our $cur_id=0;
 
 =head1 VARIABLE
@@ -1019,23 +1016,35 @@ our $cur_id=0;
 =cut
 
 our %sql_func = ( 
-                 Pg => { 
-                     UNIX_TIMESTAMP => '',
-                     FROM_UNIXTIME => '',
-                     TO_SEC => " interval '1 second' * ",
-                     SEC_TO_INT => "SEC_TO_INT",
-                     SEC_TO_TIME => '',
-                     MATCH => " ~ ",
-                 },
-                 mysql => {
-                     UNIX_TIMESTAMP => 'UNIX_TIMESTAMP',
-                     FROM_UNIXTIME => 'FROM_UNIXTIME',
-                     SEC_TO_INT => '',
-                     TO_SEC => '',
-                     SEC_TO_TIME => 'SEC_TO_TIME',
-                     MATCH => " REGEXP ",
-                 },
-                );
+         Pg => { 
+             UNIX_TIMESTAMP => '',
+             FROM_UNIXTIME => '',
+             TO_SEC => " interval '1 second' * ",
+             SEC_TO_INT => "SEC_TO_INT",
+             SEC_TO_TIME => '',
+             MATCH => " ~ ",
+             STARTTIME_DAY  => " date_trunc('day', Job.StartTime) ",
+             STARTTIME_HOUR => " date_trunc('hour', Job.StartTime) ",
+             STARTTIME_MONTH  => " date_trunc('month', Job.StartTime) ",
+             STARTTIME_PHOUR=> " date_part('hour', Job.StartTime) ",
+             STARTTIME_PDAY => " date_part('day', Job.StartTime) ",
+             STARTTIME_PMONTH => " date_part('month', Job.StartTime) ",
+         },
+         mysql => {
+             UNIX_TIMESTAMP => 'UNIX_TIMESTAMP',
+             FROM_UNIXTIME => 'FROM_UNIXTIME',
+             SEC_TO_INT => '',
+             TO_SEC => '',
+             SEC_TO_TIME => 'SEC_TO_TIME',
+             MATCH => " REGEXP ",
+             STARTTIME_DAY  => " DATE_FORMAT(StartTime, '%Y-%m-%d') ",
+             STARTTIME_HOUR => " DATE_FORMAT(StartTime, '%Y-%m-%d %H') ",
+             STARTTIME_MONTH => " DATE_FORMAT(StartTime, '%Y-%m') ",
+             STARTTIME_PHOUR=> " DATE_FORMAT(StartTime, '%H') ",
+             STARTTIME_PDAY => " DATE_FORMAT(StartTime, '%d') ",
+             STARTTIME_PMONTH => " DATE_FORMAT(StartTime, '%m') ",
+         },
+        );
 
 sub dbh_selectall_arrayref
 {
@@ -1260,6 +1269,10 @@ sub get_limit
        $label = "last " . human_sec($arg{age});
     }
 
+    if ($arg{groupby}) {
+       $limit .= " GROUP BY $arg{groupby} ";
+    }
+
     if ($arg{order}) {
        $limit .= " ORDER BY $arg{order} ";
     }
@@ -1333,6 +1346,9 @@ sub get_form
                 media  => 1,
                  ach    => 1,
                  jobtype=> 1,
+                graph  => 1,
+                 gtype  => 1,
+                 type   => 1,
                 );
     my %opt_p = (              # option with path
                 mtxcmd => 1,
@@ -1469,7 +1485,7 @@ sub display_graph
 {
     my ($self) = @_;
 
-    my $fields = $self->get_form(qw/age level status clients filesets 
+    my $fields = $self->get_form(qw/age level status clients filesets graph gtype type
                                   db_clients limit db_filesets width height
                                   qclients qfilesets qjobnames db_jobnames/);
                                
@@ -1479,16 +1495,6 @@ sub display_graph
                       -query => 1);
     $url =~ s/^.+?\?//;        # http://path/to/bweb.pl?arg => arg
 
-    my $type = CGI::param('graph') || '';
-    if ($type =~ /^(\w+)$/) {
-       $fields->{graph} = $1;
-    }
-
-    my $gtype = CGI::param('gtype') || '';
-    if ($gtype =~ /^(\w+)$/) {
-       $fields->{gtype} = $1;
-    } 
-
 # this organisation is to keep user choice between 2 click
 # TODO : fileset and client selection doesn't work
 
@@ -1897,6 +1903,7 @@ SELECT  Job.JobId       AS jobid,
       Job LEFT JOIN Pool     ON (Job.PoolId    = Pool.PoolId)
           LEFT JOIN FileSet  ON (Job.FileSetId = FileSet.FileSetId)
  WHERE Client.ClientId=Job.ClientId
+   AND Job.JobStatus != 'R'
  $where
  $limit
 ";
@@ -2103,7 +2110,23 @@ SELECT DISTINCT Job.JobId AS jobid,
            $_->{bytes} = human_size($_->{bytes}) ;
        }
 
+       $query = "
+SELECT LocationLog.Date    AS date,
+       Location.Location   AS location,
+       LocationLog.Comment AS comment
+ FROM Media,LocationLog INNER JOIN Location ON (LocationLog.LocationId = Location.LocationId)
+ WHERE Media.MediaId = LocationLog.MediaId
+   AND Media.VolumeName = $mq
+";
+
+       my $logtxt = '';
+       my $log = $self->dbh_selectall_arrayref($query) ;
+       if ($log) {
+           $logtxt = join("\n", map { ($_->[0] . ' ' . $_->[1] . ' ' . $_->[2])} @$log ) ;
+       }
+
        $self->display({ jobs => [ values %$jobs ],
+                        LocationLog => $logtxt,
                         %$media },
                       "display_media_zoom.tpl");
     }
@@ -2785,7 +2808,6 @@ sub delete
     my $b = new Bconsole(pref => $self->{info});
 
     if ($arg->{jobid}) {
-       my $ret = $b->send_cmd("delete jobid=\"$arg->{jobid}\"");
        $self->display({
            content => $b->send_cmd("delete jobid=\"$arg->{jobid}\""),
            title => "Delete a job ",
@@ -2976,7 +2998,7 @@ sub run_job_select
     my ($self) = @_;
     $b = new Bconsole(pref => $self->{info});
 
-    my $joblist = [ map { { name => $_ } } split(/\r\n/, $b->send_cmd(".job")) ];
+    my $joblist = [ map { { name => $_ } } $b->list_job() ];
 
     $self->display({ Jobs => $joblist }, "run_job.tpl");
 }
@@ -3016,12 +3038,12 @@ sub run_job_mod
     my $info = $b->send_cmd("show job=\"$job\"");
     my $attr = $self->run_parse_job($info);
     
-    my $jobs   = [ map {{ name => $_ }} split(/\r\n/, $b->send_cmd(".job")) ];
+    my $jobs   = [ map {{ name => $_ }} $b->list_job() ];
 
-    my $pools  = [ map { { name => $_ } } split(/\r\n/, $b->send_cmd(".pool")) ];
-    my $clients = [ map { { name => $_ } } split(/\r\n/, $b->send_cmd(".client")) ];
-    my $filesets= [ map { { name => $_ } } split(/\r\n/, $b->send_cmd(".fileset")) ];
-    my $storages= [ map { { name => $_ } } split(/\r\n/, $b->send_cmd(".storage")) ];
+    my $pools  = [ map { { name => $_ } } $b->list_pool() ];
+    my $clients = [ map { { name => $_ } }$b->list_client()];
+    my $filesets= [ map { { name => $_ } }$b->list_fileset() ];
+    my $storages= [ map { { name => $_ } }$b->list_storage()];
 
     $self->display({
        jobs     => $jobs,
@@ -3038,7 +3060,7 @@ sub run_job
     my ($self) = @_;
     $b = new Bconsole(pref => $self->{info});
     
-    my $jobs   = [ map {{ name => $_ }} split(/\r\n/, $b->send_cmd(".job")) ];
+    my $jobs   = [ map {{ name => $_ }} $b->list_job() ];
 
     $self->display({
        jobs     => $jobs,