]> git.sur5r.net Git - bacula/bacula/blobdiff - gui/bweb/lib/Bweb.pm
ebl fix delete jobid
[bacula/bacula] / gui / bweb / lib / Bweb.pm
index ecae6088490639526e09f38c641361f5370d95d5..627a1149ab7d0d45e5c717c80d61b149e84a102f 100644 (file)
@@ -287,6 +287,13 @@ sub save
 {
     my ($self) = @_ ;
 
+    if ($self->{ach_list}) {
+       # shortcut for display_begin
+       $self->{achs} = [ map {{ name => $_ }} 
+                         keys %{$self->{ach_list}}
+                       ];
+    }
+
     unless (open(FP, ">$self->{config_file}"))
     {
        return $self->error("$self->{config_file} : $!\n" .
@@ -316,9 +323,7 @@ sub edit
 sub view
 {
     my ($self) = @_ ;
-    $self->{achs} = [ map { { name => $_ } } keys %{$self->{ach_list}} ];
     $self->display($self, "config_view.tpl");
-    delete $self->{achs};
 }
 
 sub modify
@@ -1002,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
@@ -1014,21 +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 => '',
-                 },
-                 mysql => {
-                     UNIX_TIMESTAMP => 'UNIX_TIMESTAMP',
-                     FROM_UNIXTIME => 'FROM_UNIXTIME',
-                     SEC_TO_INT => '',
-                     TO_SEC => '',
-                     SEC_TO_TIME => 'SEC_TO_TIME',
-                 },
-                );
+         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
 {
@@ -1202,14 +1218,23 @@ sub display_clients
 {
     my ($self) = @_;
 
+    my $where='';
+    my $arg = $self->get_form("client", "qre_client");
+
+    if ($arg->{qre_client}) {
+       $where = "WHERE Name $self->{sql}->{MATCH} $arg->{qre_client} ";
+    } elsif ($arg->{client}) {
+       $where = "WHERE Name = '$arg->{client}' ";
+    }
+
     my $query = "
 SELECT Name   AS name,
        Uname  AS uname,
        AutoPrune AS autoprune,
        FileRetention AS fileretention,
        JobRetention  AS jobretention
-
 FROM Client
+$where
 ";
 
     my $all = $self->dbh_selectall_hashref($query, 'name') ;
@@ -1219,10 +1244,10 @@ FROM Client
        $_->{jobretention} = human_sec($_->{jobretention});
     }
 
-    my $arg = { ID => $cur_id++,
+    my $dsp = { ID => $cur_id++,
                clients => [ values %$all] };
 
-    $self->display($arg, "client_list.tpl") ;
+    $self->display($dsp, "client_list.tpl") ;
 }
 
 sub get_limit
@@ -1244,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} ";
     }
@@ -1317,13 +1346,16 @@ sub get_form
                 media  => 1,
                  ach    => 1,
                  jobtype=> 1,
+                graph  => 1,
+                 gtype  => 1,
+                 type   => 1,
                 );
     my %opt_p = (              # option with path
                 mtxcmd => 1,
                 precmd => 1,
                 device => 1,
                 );
-    
+
     foreach my $i (@what) {
        if (exists $opt_i{$i}) {# integer param
            my $value = CGI::param($i) || $opt_i{$i} ;
@@ -1335,6 +1367,7 @@ sub get_form
            if ($value =~ /^([\w\d\.-]+)$/) {
                $ret{$i} = $1;
            }
+
        } elsif ($i =~ /^j(\w+)s$/) { # quote join args
            my @value = CGI::param($1) ;
            if (@value) {
@@ -1452,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/);
                                
@@ -1462,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
 
@@ -1880,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
 ";
@@ -1956,11 +1980,14 @@ sub display_media
     my ($where, %elt) = $self->get_param('pool',
                                         'location');
 
-    my $arg = $self->get_form('jmedias');
+    my $arg = $self->get_form('jmedias', 'qre_media');
 
     if ($arg->{jmedias}) {
        $where = "AND Media.VolumeName IN ($arg->{jmedias}) $where"; 
     }
+    if ($arg->{qre_media}) {
+       $where = "AND Media.VolumeName $self->{sql}->{MATCH} $arg->{qre_media} $where"; 
+    }
 
     my $query="
 SELECT Media.VolumeName  AS volumename, 
@@ -2083,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");
     }
@@ -2662,6 +2705,7 @@ sub ach_register
     my ($self, $ach) = @_;
 
     $self->{info}->{ach_list}->{$ach->{name}} = $ach;
+
     $self->{info}->save();
     
     return 1;
@@ -2764,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 ",
@@ -2955,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");
 }
@@ -2995,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,
@@ -3017,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,