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
=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
{
$label = "last " . human_sec($arg{age});
}
+ if ($arg{groupby}) {
+ $limit .= " GROUP BY $arg{groupby} ";
+ }
+
if ($arg{order}) {
$limit .= " ORDER BY $arg{order} ";
}
media => 1,
ach => 1,
jobtype=> 1,
+ graph => 1,
+ gtype => 1,
+ type => 1,
);
my %opt_p = ( # option with path
mtxcmd => 1,
{
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/);
-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
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
";
$_->{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");
}
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 ",
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");
}
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,
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,