our %k_re = ( dbi => qr/^(dbi:(Pg|mysql):(?:\w+=[\w\d\.-]+;?)+)$/i,
user => qr/^([\w\d\.-]+)$/i,
password => qr/^(.*)$/i,
- fv_write_path => qr!^([/\w\d\.-]+)$!,
+ fv_write_path => qr!^([/\w\d\.-]*)$!,
template_dir => qr!^([/\w\d\.-]+)$!,
debug => qr/^(on)?$/,
email_media => qr/^([\w\d\.-]+@[\d\w\.-]+)$/,
bconsole => qr!^(.+)?$!,
syslog_file => qr!^(.+)?$!,
log_dir => qr!^(.+)?$!,
+ stat_job_table => qr!^(\w*)$!,
);
=head1 FUNCTION
sub transfer
{
my ($self, $src, $dst) = @_ ;
- print "<pre>$self->{precmd} $self->{mtxcmd} -f $self->{device} transfer $src $dst</pre>\n";
+ if ($self->{debug}) {
+ print "<pre>$self->{precmd} $self->{mtxcmd} -f $self->{device} transfer $src $dst</pre>\n";
+ }
my $out = `$self->{precmd} $self->{mtxcmd} -f $self->{device} transfer $src $dst 2>&1`;
if ($? == 0) {
my $content = $self->get_slot($src);
- print "$content ($src) => $dst<br/>";
$self->{slot}->[$src] = 'empty';
$self->set_slot($dst, $content);
return 1;
if ($self->slot_is_full($slot))
{
my $free = $self->slot_get_first_free() ;
- print "want to move $slot to $free\n";
+ print "move $slot to $free :\n";
if ($free) {
- $self->transfer($slot, $free) || print "$self->{error}\n";
+ if ($self->transfer($slot, $free)) {
+ print "<img src='/bweb/T.png' alt='ok'><br/>\n";
+ } else {
+ print "<img src='/bweb/E.png' alt='ok' title='$self->{error}'><br/>\n";
+ }
} else {
- $self->{error} = "E : Can't find free slot";
+ $self->{error} = "<img src='/bweb/E.png' alt='ok' title='E : Can t find free slot'><br/>\n";
}
}
}
} else { # empty or no label
push @{ $param }, {realslot => $slot,
- volstatus => 'Unknow',
+ volstatus => 'Unknown',
volumename => $self->{slot}->[$slot]} ;
}
} else { # empty
Job.Name AS jobname,
Level AS level,
StartTime AS starttime,
+ EndTime AS endtime,
Pool.Name AS poolname,
JobFiles AS jobfiles,
JobBytes AS jobbytes,
}
my $newloc = CGI::param('newlocation');
- my $user = CGI::param('user') || 'unknow';
+ my $user = CGI::param('user') || 'unknown';
my $comm = CGI::param('comment') || '';
$comm = $self->dbh_quote("$user: $comm");
$self->display({ email => $self->{info}->{email_media},
url => $url,
newlocation => $newloc,
- # [ { volumename => 'vol1' }, { volumename => 'vol2' },..]
+ # [ { volumename => 'vol1' }, { volumename => 'vol2'\81 },..]
medias => [ values %$medias ],
},
"change_location.tpl");
"running_job.tpl") ;
}
+# return the autochanger list to update
sub eject_media
{
my ($self) = @_;
+ my %ret;
my $arg = $self->get_form('jmedias');
unless ($arg->{jmedias}) {
foreach my $vol (values %$all) {
my $a = $self->ach_get($vol->{location});
next unless ($a) ;
+ $ret{$vol->{location}} = 1;
unless ($a->{have_status}) {
$a->status();
print "eject $vol->{volumename} from $vol->{storage} : ";
if ($a->send_to_io($vol->{slot})) {
- print "ok</br>";
+ print "<img src='/bweb/T.png' alt='ok'><br/>";
} else {
- print "err</br>";
+ print "<img src='/bweb/E.png' alt='err'><br/>";
}
}
+ return keys %ret;
}
sub move_email
return undef;
}
- $a->{bweb} = $self;
+ $a->{bweb} = $self;
+ $a->{debug} = $self->{debug};
return $a;
}
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
+ FROM Pool
+ WHERE Name = 'Scratch')
+ AND (LocationId = 0 OR LocationId IS NULL)
+");
+
}
sub purge