=head1 LICENSE
- Copyright (C) 2006 Eric Bollengier
- All rights reserved.
+ Bweb - A Bacula web interface
+ Bacula® - The Network Backup Solution
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- any later version.
+ Copyright (C) 2000-2006 Free Software Foundation Europe e.V.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ The main author of Bweb is Eric Bollengier.
+ The main author of Bacula is Kern Sibbald, with contributions from
+ many others, a complete list can be found in the file AUTHORS.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ This program is Free Software; you can redistribute it and/or
+ modify it under the terms of version two of the GNU General Public
+ License as published by the Free Software Foundation plus additions
+ that are listed in the file LICENSE.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+
+ Bacula® is a registered trademark of John Walker.
+ The licensor of Bacula is the Free Software Foundation Europe
+ (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zurich,
+ Switzerland, email:ftf@fsfeurope.org.
=head1 VERSION
pref => $arg{pref}, # Pref object
bconsole => undef, # Expect object
log_stdout => $arg{log_stdout} || 0,
- timeout => $arg{debug} || 10,
+ timeout => $arg{timeout} || 20,
debug => $arg{debug} || 0,
};
return 0;
}
- print "=> $cmd yes\n";
-
+ print STDERR "===> $cmd yes\n";
$self->{bconsole}->clear_accum();
$self->send("$cmd yes\n");
$self->expect_it('-re',qr/^[*]/);
}
}
+# for brestore.pl::BwebConsole
+sub prepare
+{
+ # do nothing
+}
+
sub send
{
my ($self, $what) = @_;
{
my ($self, @what) = @_;
unless ($self->{bconsole}->expect($self->{timeout}, @what)) {
- $self->{error} = $!;
- return 0;
+ return $self->error($self->{bconsole}->error());
}
return 1;
}
my ($self, $how) = @_;
if ($self->{bconsole}) {
- $self->{bconsole}->log_stdout($how);
+ $self->{bconsole}->log_stdout($how);
}
-
+
$self->{log_stdout} = $how;
}
+sub error
+{
+ my ($self, $error) = @_;
+ $self->{error} = $error;
+ if ($error) {
+ print STDERR "E: bconsole (", $self->{pref}->{bconsole}, ") $! $error\n";
+ }
+ return 0;
+}
+
sub connect
{
my ($self) = @_;
unless ($self->{bconsole}) {
my @cmd = split(/\s+/, $self->{pref}->{bconsole}) ;
unless (@cmd) {
- $self->{error} = "bconsole string not found";
- return 0;
+ return $self->error("bconsole string not found");
}
$self->{bconsole} = new Expect;
$self->{bconsole}->raw_pty(0);
{
my $sav = $SIG{__DIE__};
$SIG{__DIE__} = sub { _exit 1 ;};
+ my $old = $ENV{COLUMNS};
+ $ENV{COLUMNS} = 300;
$ret = $self->{bconsole}->spawn(@cmd) ;
+ delete $ENV{COLUMNS};
+ $ENV{COLUMNS} = $old if ($old) ;
$SIG{__DIE__} = $sav;
}
unless ($ret) {
- $self->{error} = $!;
- return 0;
+ return $self->error($self->{bconsole}->error());
}
# TODO : we must verify that expect return the good value
return $self->before();
}
-sub send_cmd_with_drive
-{
- my ($self, $cmd, $drive) = @_;
- $drive = $drive || '0';
-
- unless ($self->connect()) {
- return '';
- }
- $self->send("$cmd\n");
- $self->expect_it('-re', '\[0\]\s*:');
-
- $self->send("$drive\n");
- $self->expect_it('-re', '[0-9]');
- $self->{bconsole}->clear_accum();
- $self->expect_it('-re',qr/^[*]/);
- return $self->before();
-}
-
sub label_barcodes
{
my ($self, %arg) = @_;
$arg{drive} = $arg{drive} || '0' ;
$arg{pool} = $arg{pool} || 'Scratch';
- my $cmd = "label barcodes pool=\"$arg{pool}\" storage=\"$arg{storage}\"";
+ my $cmd = "label barcodes drive=$arg{drive} pool=\"$arg{pool}\" storage=\"$arg{storage}\"";
if ($arg{slots}) {
$cmd .= " slots=$arg{slots}";
}
$self->send("$cmd\n");
- $self->expect_it('-re', '\[0\]\s*:');
- $self->send("$arg{drive}\n");
- $self->expect_it('-re', '[?].+\)\s*:');
+ $self->expect_it('-re', '[?].+\).*:');
my $res = $self->before();
$self->send("yes\n");
$self->expect_it("yes");
sub update_slots
{
my ($self, $storage, $drive) = @_;
-
- return $self->send_cmd_with_drive("update slots storage=$storage", $drive);
+ $drive = $drive || 0;
+
+ return $self->send_cmd("update slots storage=$storage drive=$drive");
}
sub get_fileset
$sel .= " volume=$1";
} else {
- $self->{error} = "Sorry media is bad";
+ $self->error("Sorry media is bad");
return '';
}
}
sub purge_volume
{
- my ($self, @volume) = @_;
+ my ($self, $volume) = @_;
- my $sel = $self->_get_volume(@volume);
+ my $sel = $self->_get_volume($volume);
my $ret;
if ($sel) {
$ret = $self->send_cmd("purge $sel");
sub prune_volume
{
- my ($self, @volume) = @_;
+ my ($self, $volume) = @_;
- my $sel = $self->_get_volume(@volume);
+ my $sel = $self->_get_volume($volume);
my $ret;
if ($sel) {
- $ret = $self->send_cmd_yes("prune $sel");
+ $ret = $self->send_cmd("prune $sel yes");
} else {
$ret = $self->{error};
}
$sel .= " jobid=$1";
} else {
- $self->{error} = "Sorry jobid is bad";
- return 0;
+ return $self->error("Sorry jobid is bad");
}
}
print "job : ", join(',', $c->list_job()), "\n";
print "storage : ", join(',', $c->list_storage()), "\n";
#print "prune : " . $c->prune_volume('000001'), "\n";
-#print "update : " . $c->send_cmd_with_drive('update slots storage=SDLT-1-2'), "\n";
+#print "update : " . $c->send_cmd('update slots storage=SDLT-1-2, drive=0'), "\n";
#print "label : ", join(',', $c->label_barcodes(storage => 'SDLT-1-2',
# slots => 6,
# drive => 0)), "\n";