From 380ed20c49f4dc293f9540de86a3f7aed78258b6 Mon Sep 17 00:00:00 2001 From: Eric Bollengier Date: Tue, 22 Aug 2006 20:34:22 +0000 Subject: [PATCH] ebl - change default config file format, use Data::Dumper now - add load_old function to do convert from old_format - add add/del/mod autochanger from configuration git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@3334 91ce42f0-d328-0410-95d8-f526ca767f89 --- gui/bweb/cgi/bweb.pl | 19 ++- gui/bweb/lib/Bweb.pm | 243 ++++++++++++++++++++--------------- gui/bweb/tpl/ach_add.tpl | 45 +++++-- gui/bweb/tpl/ach_content.tpl | 4 +- gui/bweb/tpl/config_edit.tpl | 3 - gui/bweb/tpl/config_view.tpl | 48 +++++-- 6 files changed, 226 insertions(+), 136 deletions(-) diff --git a/gui/bweb/cgi/bweb.pl b/gui/bweb/cgi/bweb.pl index ed41655b91..68cc309478 100755 --- a/gui/bweb/cgi/bweb.pl +++ b/gui/bweb/cgi/bweb.pl @@ -59,7 +59,7 @@ my $arg = $bweb->get_form('jobid', 'limit', 'offset', 'age'); $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'; } @@ -115,7 +115,7 @@ if ($action eq 'begin') { # main display } 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(); @@ -137,18 +137,25 @@ if ($action eq 'begin') { # main display } 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(); @@ -160,7 +167,7 @@ if ($action eq 'begin') { # main display } 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}) { @@ -177,7 +184,7 @@ if ($action eq 'begin') { # main display } 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}) { diff --git a/gui/bweb/lib/Bweb.pm b/gui/bweb/lib/Bweb.pm index 457f47bca5..794ff245ae 100644 --- a/gui/bweb/lib/Bweb.pm +++ b/gui/bweb/lib/Bweb.pm @@ -203,7 +203,6 @@ our %k_re = ( dbi => qr/^(dbi:(Pg|mysql):(?:\w+=[\w\d\.-]+;?)+)$/i, bconsole => qr!^(.+)?$!, syslog_file => qr!^(.+)?$!, log_dir => qr!^(.+)?$!, - ach_list => qr!^(.+)?$!, ); =head1 FUNCTION @@ -224,12 +223,54 @@ sub load { 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 = ) + 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 = ) { chomp($line); my ($k, $v) = split(/\s*=\s*/, $line, 2); - $self->{$k} = $v; + if ($k_re{$k}) { + $self->{$k} = $v; + } } close(FP); @@ -248,15 +289,13 @@ sub save 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; } @@ -277,8 +316,9 @@ sub edit 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 @@ -299,7 +339,7 @@ sub modify } } - $self->display($self, "config_view.tpl"); + $self->view(); if ($self->{error}) { # an error as occured $self->display($self, 'error.tpl'); @@ -467,93 +507,6 @@ use base q/Bweb::Gui/; =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) = @_; @@ -2632,7 +2585,7 @@ sub eject_media 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; } @@ -2679,6 +2632,87 @@ sub restore # 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) = @_; @@ -2693,7 +2727,7 @@ sub ach_add } 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"); @@ -2717,7 +2751,9 @@ sub ach_add device => $arg->{device}, mtxcmd => $arg->{mtxcmd}); - return Bweb::Autochanger::register($a, $self) ; + $self->ach_register($a) ; + + $self->{info}->view(); } sub delete @@ -2772,7 +2808,6 @@ SELECT Job.Name as name, Client.Name as clientname unless ($row) { return $self->error("Can't find $arg->{jobid} in catalog"); } - $query = " SELECT Time AS time, LogText AS log diff --git a/gui/bweb/tpl/ach_add.tpl b/gui/bweb/tpl/ach_add.tpl index 6f11b75620..3ae6612ed3 100644 --- a/gui/bweb/tpl/ach_add.tpl +++ b/gui/bweb/tpl/ach_add.tpl @@ -3,35 +3,39 @@

New autochanger

-
+ - - - - @@ -41,3 +45,28 @@ + + diff --git a/gui/bweb/tpl/ach_content.tpl b/gui/bweb/tpl/ach_content.tpl index da667159ef..8a28f05160 100644 --- a/gui/bweb/tpl/ach_content.tpl +++ b/gui/bweb/tpl/ach_content.tpl @@ -37,11 +37,11 @@ Autochanger : ( Drives

diff --git a/gui/bweb/tpl/config_edit.tpl b/gui/bweb/tpl/config_edit.tpl index c294659b4e..8d2e33bdfc 100644 --- a/gui/bweb/tpl/config_edit.tpl +++ b/gui/bweb/tpl/config_edit.tpl @@ -35,9 +35,6 @@
- - diff --git a/gui/bweb/tpl/config_view.tpl b/gui/bweb/tpl/config_view.tpl index 695c1a32b2..18dce91530 100644 --- a/gui/bweb/tpl/config_view.tpl +++ b/gui/bweb/tpl/config_view.tpl @@ -5,25 +5,47 @@
Name : -
Pre-command : +
mtx command : +
Device : +
Drives
+ index + id='index_' value='' + name='index_' size='3'>
template_dir :
ach_list : -
bconsole :
- - - + + + - + - - - - - -
SQL Connection
DBI :
user :
password :
DBI :
user :
password :
General Options
email_media :
email_media :
Bweb Configuration
template_dir :
ach_list :
graph_font :
bconsole :
debug :
- - info :
+ template_dir : + graph_font : + bconsole : + debug : + + Autochanger + + +
+ + + + + + +
+ + + + +
+ + +
+
+
+ info :
+
-- 2.39.5