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',
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) ",
},
);
# 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';
my ($self) = @_;
my $where='';
- my $arg = $self->get_form("client", "qre_client");
+ my $arg = $self->get_form("client", "qre_client", "jclient_groups", "qnotingroup");
if ($arg->{qre_client}) {
$where = "WHERE Name $self->{sql}->{MATCH} $arg->{qre_client} ";
} elsif ($arg->{client}) {
$where = "WHERE Name = '$arg->{client}' ";
+ } elsif ($arg->{jclient_groups}) {
+ $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 = "
maxvoljobs => 0,
maxvolbytes => 0,
maxvolfiles => 0,
+ pathid => 1,
);
my %opt_ss =( # string with space
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
";
$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) = @_ ;
{
my ($self) = @_;
- my $query = "
-SELECT client_group_name AS client_group
-FROM client_group ORDER BY client_group_name;
-";
+ my $arg = $self->get_form(qw/db_client_groups/) ;
- my $groups = $self->dbh_selectall_hashref($query, 'client_group');
+ if ($self->{dbh}->errstr) {
+ return $self->error("Can't use groups with bweb, read INSTALL to enable them");
+ }
- $self->debug($groups);
+ $self->debug($arg);
$self->display({ ID => $cur_id++,
- groups => [ values %$groups ] },
+ %$arg},
"display_groups.tpl");
}
my ($self, %arg) = @_ ;
my $client = $self->dbh_quote($arg{clientname});
+
my ($limit, $label) = $self->get_limit(%arg);
my $query = "
sum(Job.JobErrors) AS nb_err,
sum(Job.JobFiles) AS nb_files,
Client.Name AS clientname
-FROM Job INNER JOIN Client USING (ClientId)
+FROM Job JOIN Client USING (ClientId)
WHERE
Client.Name = $client
$limit
$row->{ID} = $cur_id++;
$row->{label} = $label;
+ $row->{grapharg} = "client";
+
+ $self->display($row, "display_client_stats.tpl");
+}
+
+
+sub display_group_stats
+{
+ my ($self, %arg) = @_ ;
+
+ my $carg = $self->get_form(qw/qclient_group/);
+
+ unless ($carg->{qclient_group}) {
+ return $self->error("Can't get group");
+ }
+
+ my ($limit, $label) = $self->get_limit(%arg);
+
+ my $query = "
+SELECT
+ count(Job.JobId) AS nb_jobs,
+ sum(Job.JobBytes) AS nb_bytes,
+ sum(Job.JobErrors) AS nb_err,
+ sum(Job.JobFiles) AS nb_files,
+ client_group.client_group_name AS clientname
+FROM Job JOIN Client USING (ClientId)
+ JOIN client_group_member ON (Client.ClientId = client_group_member.clientid)
+ JOIN client_group USING (client_group_id)
+WHERE
+ client_group.client_group_name = $carg->{qclient_group}
+ $limit
+GROUP BY client_group.client_group_name
+";
+
+ my $row = $self->dbh_selectrow_hashref($query);
+
+ $row->{ID} = $cur_id++;
+ $row->{label} = $label;
+ $row->{grapharg} = "client_group";
$self->display($row, "display_client_stats.tpl");
}
my $whereW = '';
my $arg = $self->get_form('jmediatypes', 'qmediatypes');
- if ($arg->{jmediatypes}) {
+ if ($arg->{jmediatypes}) {
$whereW = "WHERE MediaType IN ($arg->{jmediatypes}) ";
$whereA = "AND MediaType IN ($arg->{jmediatypes}) ";
}
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,
$whereW
";
- my $all = $self->dbh_selectall_hashref($query, 'name') ;
+ my $all = $self->dbh_selectall_hashref($query, 'uniq') ;
$query = "
SELECT Pool.Name AS 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
";
}
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