$bweb->display_begin();
# if no configuration, we send edit_conf
-unless ($bweb->{info}->{dbi}) {
+if ($action ne 'apply_conf' and !$bweb->{info}->{dbi}) {
$action = 'edit_conf';
}
} elsif ($action eq 'eject') {
my $arg = $bweb->get_form("ach");
- my $a = Bweb::Autochanger::get($arg->{ach}, $bweb);
+ my $a = $bweb->ach_get($arg->{ach});
if ($a) {
$a->status();
} elsif ($action eq 'clear_io') {
my $arg = $bweb->get_form('ach');
- my $a = Bweb::Autochanger::get($arg->{ach}, $bweb);
+ my $a = $bweb->ach_get($arg->{ach});
if (defined $a) {
$a->status();
$a->clear_io();
$a->display_content();
}
+
+} elsif ($action eq 'ach_edit') {
+ $bweb->ach_edit();
+
+} elsif ($action eq 'ach_del') {
+ $bweb->ach_del();
+
} elsif ($action eq 'ach_view') {
# TODO : get autochanger name and create it
$bweb->connect_db();
my $arg = $bweb->get_form('ach');
- my $a = Bweb::Autochanger::get($arg->{ach}, $bweb);
+ my $a = $bweb->ach_get($arg->{ach});
if ($a) {
$a->status();
$a->display_content();
} elsif ($action eq 'ach_load') {
my $arg = $bweb->get_form('ach', 'drive', 'slot');
- my $a = Bweb::Autochanger::get($arg->{ach}, $bweb);
+ my $a = $bweb->ach_get($arg->{ach});
if (defined $a and defined $arg->{drive} and defined $arg->{slot})
{
} elsif ($action eq 'ach_unload') {
my $arg = $bweb->get_form('drive', 'slot', 'ach');
- my $a = Bweb::Autochanger::get($arg->{ach}, $bweb);
+ my $a = $bweb->ach_get($arg->{ach});
if (defined $a and defined $arg->{drive} and defined $arg->{slot})
{
bconsole => qr!^(.+)?$!,
syslog_file => qr!^(.+)?$!,
log_dir => qr!^(.+)?$!,
- ach_list => qr!^(.+)?$!,
);
=head1 FUNCTION
{
return $self->error("$self->{config_file} : $!");
}
+ my $f=''; my $tmpbuffer;
+ while(read FP,$tmpbuffer,4096)
+ {
+ $f .= $tmpbuffer;
+ }
+ close(FP);
+
+ my $VAR1;
+
+ no strict; # I have no idea of the contents of the file
+ eval "$f" ;
+ use strict;
- while (my $line = <FP>)
+ if ($f and $@) {
+ $self->load_old();
+ $self->save();
+ return $self->error("If you update from an old bweb install, your must reload this page and if it's fail again, you have to configure bweb again...") ;
+ }
+
+ foreach my $k (keys %$VAR1) {
+ $self->{$k} = $VAR1->{$k};
+ }
+
+ return 1;
+}
+
+=head1 FUNCTION
+
+ load_old - load old configuration format
+
+=cut
+
+sub load_old
+{
+ my ($self) = @_ ;
+
+ unless (open(FP, $self->{config_file}))
+ {
+ return $self->error("$self->{config_file} : $!");
+ }
+
+ while (my $line = <FP>)
{
chomp($line);
my ($k, $v) = split(/\s*=\s*/, $line, 2);
- $self->{$k} = $v;
+ if ($k_re{$k}) {
+ $self->{$k} = $v;
+ }
}
close(FP);
unless (open(FP, ">$self->{config_file}"))
{
- return $self->error("$self->{config_file} : $!");
- }
-
- foreach my $k (keys %$self)
- {
- next unless (exists $k_re{$k}) ;
- print FP "$k = $self->{$k}\n";
+ return $self->error("$self->{config_file} : $!\n" .
+ "You must add this to your config file\n"
+ . Data::Dumper::Dumper($self));
}
+ print FP Data::Dumper::Dumper($self);
+
close(FP);
return 1;
}
sub view
{
my ($self) = @_ ;
-
- $self->display($self, "config_view.tpl");
+ $self->{achs} = [ map { { name => $_ } } keys %{$self->{ach_list}} ];
+ $self->display($self, "config_view.tpl");
+ delete $self->{achs};
}
sub modify
}
}
- $self->display($self, "config_view.tpl");
+ $self->view();
if ($self->{error}) { # an error as occured
$self->display($self, 'error.tpl');
=cut
-# TODO : get autochanger definition from config/dump file
-my $ach_list ;
-
-sub get
-{
- my ($name, $bweb) = @_;
-
- unless ($name) {
- return $bweb->error("Can't get your autochanger name ach");
- }
-
- unless ($ach_list) {
- unless (get_defined_ach($bweb)) {
- return undef;
- }
- }
-
- my $a = $ach_list->{$name};
-
- unless ($a) {
- $bweb->error("Can't get your autochanger $name from your ach_list");
- return undef;
- }
-
- $a->{bweb} = $bweb;
-
- return $a;
-}
-
-sub get_defined_ach
-{
- my ($bweb) = @_;
- if (defined $bweb->{info}->{ach_list}) {
- if (open(FP, "<$bweb->{info}->{ach_list}")) {
- my $f=''; my $tmpbuffer;
- while(read FP,$tmpbuffer,4096)
- {
- $f .= $tmpbuffer;
- }
- close(FP);
- no strict; # I have no idea of the contents of the file
- eval '$ach_list = ' . $f ;
- use strict;
- } else {
- return $bweb->error("Can't open $bweb->{info}->{ach_list} $!");
- }
- } else {
- return $bweb->error("Can't find your ach_list file in your configuration");
- }
-
- $bweb->debug($ach_list);
-
- return 1;
-}
-
-sub register
-{
- my ($ach, $bweb) = @_;
- my $err;
-
- if (defined $bweb->{info}->{ach_list})
- {
- unless ($ach_list) {
- get_defined_ach($bweb) ;
- }
-
- $ach_list->{$ach->{name}} = $ach;
-
- if (open(FP, ">$bweb->{info}->{ach_list}")) {
- print FP Data::Dumper::Dumper($ach_list);
- close(FP);
- } else {
- $err = $!;
- $err .= "\nCan you put this in $bweb->{info}->{ach_list}\n";
- $err .= Data::Dumper::Dumper($ach_list);
- }
- } else {
- $err = "ach_list isn't defined";
- }
-
- if ($err) {
- return $bweb->error("Can't find to your ach_list (see bweb configuration) $err");
- }
-
- return 1;
-}
-
sub new
{
my ($class, %arg) = @_;
return $self->error("Can't get media selection");
}
- my $a = Bweb::Autochanger::get($arg->{ach}, $self);
+ my $a = $self->ach_get($arg->{ach});
unless ($a) {
return 0;
}
# TODO : make this internal to not eject tape ?
use Bconsole;
+
+sub ach_get
+{
+ my ($self, $name) = @_;
+
+ unless ($name) {
+ return $self->error("Can't get your autochanger name ach");
+ }
+
+ unless ($self->{info}->{ach_list}) {
+ return $self->error("Could not find any autochanger");
+ }
+
+ my $a = $self->{info}->{ach_list}->{$name};
+
+ unless ($a) {
+ $self->error("Can't get your autochanger $name from your ach_list");
+ return undef;
+ }
+
+ $a->{bweb} = $self;
+
+ return $a;
+}
+
+sub ach_register
+{
+ my ($self, $ach) = @_;
+
+ $self->{info}->{ach_list}->{$ach->{name}} = $ach;
+ $self->{info}->save();
+
+ return 1;
+}
+
+sub ach_edit
+{
+ my ($self) = @_;
+ my $arg = $self->get_form('ach');
+ if (!$arg->{ach}
+ or !$self->{info}->{ach_list}
+ or !$self->{info}->{ach_list}->{$arg->{ach}})
+ {
+ return $self->error("Can't get autochanger name");
+ }
+
+ my $ach = $self->{info}->{ach_list}->{$arg->{ach}};
+
+ my $i=0;
+ $ach->{drives} =
+ [ map { { name => $_, index => $i++ } } @{$ach->{drive_name}} ] ;
+
+ my $b = new Bconsole(pref => $self->{info});
+ my @storages = $b->list_storage() ;
+
+ $ach->{devices} = [ map { { name => $_ } } @storages ];
+
+ $self->display($ach, "ach_add.tpl");
+ delete $ach->{drives};
+ delete $ach->{devices};
+ return 1;
+}
+
+sub ach_del
+{
+ my ($self) = @_;
+ my $arg = $self->get_form('ach');
+
+ if (!$arg->{ach}
+ or !$self->{info}->{ach_list}
+ or !$self->{info}->{ach_list}->{$arg->{ach}})
+ {
+ return $self->error("Can't get autochanger name");
+ }
+
+ delete $self->{info}->{ach_list}->{$arg->{ach}} ;
+
+ $self->{info}->save();
+ $self->{info}->view();
+}
+
sub ach_add
{
my ($self) = @_;
}
my @drives ;
- foreach my $drive (CGI::param('drive'))
+ foreach my $drive (CGI::param('drives'))
{
unless (grep(/^$drive$/,@storages)) {
return $self->error("Can't find $drive in storage list");
device => $arg->{device},
mtxcmd => $arg->{mtxcmd});
- return Bweb::Autochanger::register($a, $self) ;
+ $self->ach_register($a) ;
+
+ $self->{info}->view();
}
sub delete
unless ($row) {
return $self->error("Can't find $arg->{jobid} in catalog");
}
-
$query = "
SELECT Time AS time, LogText AS log
<h1 class='newstitle'> New autochanger </h1>
</div>
<div class='bodydiv'>
- <form action="?" method='get'>
+ <form name='form1' action="?" method='get'>
<table>
<tr><td>Name :</td>
<td>
- <select name='ach' class='formulaire'>
+ <select name='ach' class='formulaire' id='ach'>
<TMPL_LOOP devices><option value='<TMPL_VAR name>'><TMPL_VAR name></option></TMPL_LOOP>
</select>
</td>
</tr>
<tr><td>Pre-command :</td>
- <td> <input class="formulaire" type='text' value='sudo' title='can be "sudo" or "ssh storage@storagehost"...' name='precmd'>
+ <td> <input class="formulaire" type='text' id='precmd' value='sudo'
+ title='can be "sudo" or "ssh storage@storagehost"...' name='precmd'>
</td>
</tr>
<tr><td>mtx command :</td>
- <td> <input class="formulaire" type='text' value='/usr/sbin/mtx' name='mtxcmd' size='32'>
+ <td> <input class="formulaire" type='text' name='mtxcmd' size='32'
+ value='/usr/sbin/mtx' id='mtxcmd'>
</td>
</tr>
<tr><td>Device :</td>
- <td> <input class="formulaire" type='text' value='/dev/changer' name='device'>
+ <td> <input class="formulaire" type='text' name='device'
+ value='/dev/changer' id='device'>
</td>
</tr>
<tr><td><b>Drives</b></td><td/></tr>
<TMPL_LOOP devices>
<tr>
- <td><input class='formulaire' type='checkbox'
- name='drive' value='<TMPL_VAR name>'><TMPL_VAR name>
+ <td><input class='formulaire' type='checkbox' id='drive_<TMPL_VAR name>'
+ name='drives' value='<TMPL_VAR name>'><TMPL_VAR name>
</td>
<td>index <input type='text' title='drive index' class='formulaire'
- value='' name='index_<TMPL_VAR name>' size='3'>
+ id='index_<TMPL_VAR name>' value=''
+ name='index_<TMPL_VAR name>' size='3'>
</td>
</tr>
</TMPL_LOOP>
</button>
</form>
</div>
+
+<script language="JavaScript">
+ <TMPL_IF name>
+ for (var i=0; i < document.form1.ach.length; ++i) {
+ if (document.form1.ach[i].value == '<TMPL_VAR name>') {
+ document.form1.ach[i].selected = true;
+ }
+ }
+ </TMPL_IF>
+ <TMPL_IF mtxcmd>
+ document.getElementById('mtxcmd').value='<TMPL_VAR mtxcmd>';
+ </TMPL_IF>
+ <TMPL_IF precmd>
+ document.getElementById('precmd').value='<TMPL_VAR precmd>';
+ </TMPL_IF>
+ <TMPL_IF device>
+ document.getElementById('device').value='<TMPL_VAR device>';
+ </TMPL_IF>
+ <TMPL_IF drives>
+ <TMPL_LOOP drives>
+ document.getElementById('drive_<TMPL_VAR name>').checked=true;
+ document.getElementById('index_<TMPL_VAR name>').value=<TMPL_VAR index>;
+ </TMPL_LOOP>
+ </TMPL_IF>
+</script>
</button>
<br/><br/>
<button type='submit' name='action' value='ach_load' class='formulaire'
- title='load drive'> Load <br/>
+ title='mount drive'>Mount<br/>
<img src='/bweb/load.png'>
</button>
<button type='submit' name='action' value='ach_unload' class='formulaire'
- title='unload drive'>Unload<br/>
+ title='umount drive'>Umount<br/>
<img src='/bweb/unload.png'>
</button>
<tr><td>template_dir :</td>
<td> <input class="formulaire" type='text' value='<TMPL_VAR NAME=template_dir>' size='64' name='template_dir'>
</td></tr>
- <tr><td>ach_list :</td>
- <td> <input class="formulaire" type='text' value='<TMPL_VAR NAME=ach_list>' size='64' name='ach_list'>
- </td></tr>
<tr><td>bconsole :</td>
<td> <input class="formulaire" type='text' value='<TMPL_VAR NAME=bconsole>' size='64' name='bconsole'>
</td></tr>
<div class='bodydiv'>
<table>
<tr> <td><b>SQL Connection</b></td> <td/></tr>
- <tr><td>DBI :</td> <td> <TMPL_VAR NAME=dbi> </td></tr>
- <tr><td>user :</td> <td> <TMPL_VAR NAME=user> </td></tr>
- <tr><td>password :</td> <td> <TMPL_VAR NAME=password> </td></tr>
+ <tr><td>DBI :</td> <td> <TMPL_VAR dbi> </td></tr>
+ <tr><td>user :</td> <td> <TMPL_VAR user> </td></tr>
+ <tr><td>password :</td> <td> <TMPL_VAR password> </td></tr>
<tr> <td><b>General Options</b></td> <td/></tr>
- <tr><td>email_media :</td> <td> <TMPL_VAR NAME=email_media> </td></tr>
+ <tr><td>email_media :</td> <td> <TMPL_VAR email_media> </td></tr>
<tr> <td><b>Bweb Configuration</b></td> <td/></tr>
- <tr><td>template_dir :</td> <td> <TMPL_VAR NAME=template_dir> </td></tr>
- <tr><td title="path to Autochanger dat file">ach_list :</td> <td> <TMPL_VAR NAME=ach_list> </td></tr>
- <tr><td>graph_font :</td> <td> <TMPL_VAR NAME=graph_font> </td></tr>
- <tr><td>bconsole :</td> <td> <TMPL_VAR NAME=bconsole> </td></tr>
- <tr><td>debug :</td> <td> <TMPL_VAR NAME=debug> </td></tr>
- </table>
-
- info : <TMPL_VAR NAME=error> </br>
+ <tr><td>template_dir :</td> <td> <TMPL_VAR template_dir> </td></tr>
+ <tr><td>graph_font :</td> <td> <TMPL_VAR graph_font> </td></tr>
+ <tr><td>bconsole :</td> <td> <TMPL_VAR bconsole> </td></tr>
+ <tr><td>debug :</td> <td> <TMPL_VAR debug> </td></tr>
+ <TMPL_IF achs>
+ <tr> <td><b>Autochanger</b></td> <td/></tr>
+ <tr>
+ <td>
+ <form action='?' method='GET'>
+ <table border='0'>
+ <TMPL_LOOP achs>
+ <tr>
+ <td><input type='radio' name='ach' value='<TMPL_VAR name>'><TMPL_VAR name></td>
+ </tr>
+ </TMPL_LOOP>
+ </table>
+ <td>
+ <button class='formulaire' type='submit' name='action' value='ach_edit' title='edit'><img src='/bweb/edit.png'></button>
+ <button class='formulaire' type='submit' name='action' value='ach_del' title='delete'><img src='/bweb/remove.png'></button>
+ <button class='formulaire' type='submit' name='action' value='ach_view' title='view'><img src='/bweb/zoom.png'></button>
+ </form>
+ </td>
+ </tr>
+ </TMPL_IF achs>
+ </table>
<form action='?' method='GET'>
<button name='action' value='edit_conf' class='formulaire'>
- <img title='Edit' src='/bweb/edit.png'>
+ Edit<br/><img title='Edit' src='/bweb/edit.png'>
+ </button>
+ <button name='action' value='ach_add' class='formulaire'>
+ Add autochanger<br/><img title='Add an autochanger' src='/bweb/add.png'>
</button>
</form>
+ info : <TMPL_VAR error> </br>
+
</div>