]> git.sur5r.net Git - bacula/bacula/commitdiff
Merge trunk into branch-2.0 gui/bweb
authorKern Sibbald <kern@sibbald.com>
Sat, 3 Mar 2007 09:20:25 +0000 (09:20 +0000)
committerKern Sibbald <kern@sibbald.com>
Sat, 3 Mar 2007 09:20:25 +0000 (09:20 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/branches/Branch-2.0@4299 91ce42f0-d328-0410-95d8-f526ca767f89

76 files changed:
gui/bweb/INSTALL
gui/bweb/ReleaseNotes
gui/bweb/cgi/bfileview.pl
gui/bweb/cgi/bgraph.pl
gui/bweb/cgi/bweb.pl
gui/bweb/html/bweb.js
gui/bweb/lang/es/tpl/about.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/ach_add.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/ach_content.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/begin.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/change_location.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/client_job_status.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/client_list.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/command.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/config_edit.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/config_view.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/display_client_job.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/display_client_stats.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/display_form_job.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/display_form_media.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/display_job.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/display_job_zoom.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/display_location.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/display_log.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/display_media.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/display_media_zoom.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/display_pool.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/end.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/error.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/fileset_view.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/fv_file_attribs.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/general.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/graph.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/help_extern.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/help_extern_compute.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/help_intern.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/help_intern_compute.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/install.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/location_add.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/location_edit.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/move_media.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/run_job.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/run_job_mod.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/running_job.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/scheduled_job.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/stats.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/update_location.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/update_media.tpl [new file with mode: 0644]
gui/bweb/lang/fr/tpl/config_edit.tpl
gui/bweb/lang/fr/tpl/config_view.tpl
gui/bweb/lang/fr/tpl/display_form_job.tpl
gui/bweb/lang/fr/tpl/fileset_view.tpl
gui/bweb/lang/fr/tpl/location_add.tpl
gui/bweb/lib/Bweb.pm
gui/bweb/tpl/begin.tpl
gui/bweb/tpl/config_edit.tpl
gui/bweb/tpl/config_view.tpl
gui/bweb/tpl/display_client_stats.tpl
gui/bweb/tpl/display_form_job.tpl
gui/bweb/tpl/display_job_zoom.tpl
gui/bweb/tpl/display_media.tpl
gui/bweb/tpl/display_media_zoom.tpl
gui/bweb/tpl/display_pool.tpl
gui/bweb/tpl/error.tpl
gui/bweb/tpl/fileset_view.tpl
gui/bweb/tpl/fv_file_attribs.tpl
gui/bweb/tpl/general.tpl
gui/bweb/tpl/graph.tpl
gui/bweb/tpl/help_extern.tpl
gui/bweb/tpl/help_extern_compute.tpl
gui/bweb/tpl/help_intern.tpl
gui/bweb/tpl/help_intern_compute.tpl
gui/bweb/tpl/move_media.tpl
gui/bweb/tpl/running_job.tpl
gui/bweb/tpl/stats.tpl
gui/bweb/tpl/update_media.tpl

index bdc2dcaec7304bbbdb951aa9d24c0cef35bf92f8..4ef27bc559da3b34f7c0639ffb8e805d33657de6 100644 (file)
@@ -4,9 +4,9 @@
 
 Bweb works well with 1.39 release or later.
 
-1) install perl lib
+1) install Perl lib
 2) copy your files
-3) intialise your configuration file
+3) initialize your configuration file
 4) do some sql stuff (for postgresql users)
 5) use the -n option on bconsole so that it works with Expect
 6) get bacula log more useful
@@ -14,16 +14,26 @@ Bweb works well with 1.39 release or later.
 8) using sudo with autochanger
 9) using bfileview.pl
 10) accessing to bweb
+11) setting mysql read-only account
+12) get more statistics
 
 ################ FILE COPY #####################################
- # you must get bweb cvs files
- cvs -d:pserver:anonymous@bacula.cvs.sourceforge.net:/cvsroot/bacula login 
- cvs -z3 -d:pserver:anonymous@bacula.cvs.sourceforge.net:/cvsroot/bacula co -P gui
- cd gui
+ # you must get bweb svn files
+ svn checkout https://bacula.svn.sourceforge.net/svnroot/bacula/trunk/gui/bweb bweb
 
  # or get them from the released tar files or from the apt or rpms.
 
- # first, copy the bweb perl library into your PERL5 INC path
+ #
+ # Once you have the gui directory loaded, follow the instructions below
+ #  or edit the environment variables in the file install_bweb
+ #  then execute it. install_web does everything to the next
+ #  set of #######'s.
+ #
+
+ # first, copy the bweb Perl library into your PERL5 INC path
+ perl Makefile.PL
+ make install
+ # or
  install -m 644 -o root -g root  bweb/lib/*.pm /usr/share/perl5
 
  # copy the bweb perl program to your cgi location
@@ -42,11 +52,11 @@ Bweb works well with 1.39 release or later.
 
  # copy the bweb graphics elements (bweb elements must reside in /bweb)
  mkdir /var/www/bweb
- install -m 644 -o root -g root  bweb/html/*.{js,png,css,gif,ico} /var/www/bweb
+ install -m 644 -o root -g root  bweb/html/*.{js,png,css,gif,ico,html} /var/www/bweb
 
  # done !
 
- WARNING : Your www-data user must be able to execute bconsole and able 
+ WARNING : Your www-data (or wwwrun on SuSE) user must be able to execute bconsole and able 
            to read the bconsole.conf file!
            You can create an bconsole group for that.
 
@@ -58,8 +68,8 @@ Simply use lang/fr/tpl/*.tpl files instead of tpl/*.tpl
 
  - perl modules
     - DBI (with mysql or postgresql support DBD::Pg and DBD::mysql)
-    - Gd::Graph
-    - Gd
+    - GD::Graph
+    - GD
     - HTML::Template
     - CGI
     - Expect
@@ -73,9 +83,31 @@ Simply use lang/fr/tpl/*.tpl files instead of tpl/*.tpl
  apt-get install libgd-graph-perl libhtml-template-perl libexpect-perl
  apt-get install libdbd-mysql-perl libdbd-pg-perl libdbi-perl libtime-modules-perl
 
+ Note: the best way to test if you have all the dependencies
+ fullfilled for Perl is to:
+  
+    cd /var/www/cgi-bin/bweb
+    ./bweb.pl 
+
+ you might also want to try:
+
+    ./bgraph.pl 
+
+ To make sure the graphing modules are loaded.  However, running it
+ will spray binary graphics data on your terminal.  Otherwise, you will
+ get an error.
+
+ That should show you if any of the pre-requisites are missing.
+ On SuSE 10.2, I was able to load all the appropriate modules via rpms,
+  with the exception of Expect and Time::ParseDate, which I loaded manually
+  using perl.
+
+  If you experience problems, always consult the Apache error_log
+  file.
+
 ################ APACHE CONFIGURATION ##########################
 
-It could be a good idea to protect your bweb installation.
+It could be a good idea to protect your bweb installation (optional).
 
 Put this in your httpd.conf, and add user with htpasswd
 
@@ -88,9 +120,21 @@ Put this in your httpd.conf, and add user with htpasswd
         Require valid-user
 </Directory>
 
+On SuSE 10.2, the following in /etc/apache2/default-server.conf works. 
+However, it is not secure:
+
+Directory "/srv/www/cgi-bin/bweb">
+ AllowOverride None
+ Options +ExecCGI -Includes
+ Order allow,deny
+ Allow from all
+</Directory>
+
 
 ################ CONFIGURATION #################################
 
+Note, this is automatically installed by the install_bweb script.
+
 /etc/bacula/bweb.conf looks like : (you can edit it inside bweb)
 $VAR1 = bless( {
   'graph_font' => '/usr/share/fonts/truetype/ttf-bitstream-vera/Vera.ttf',
@@ -133,23 +177,35 @@ $VAR1 = bless( {
 ################ BRESTORE ######################################
 
 If you want to use brestore with bweb, you must associate a mime type
-text/brestore with your brestore.pl.
+text/brestore with your brestore.pl, and you must install brestore.
+See gui/brestore/README for instructions on installing brestore.pl.
 
 ################ POSTGRESQL NOTES ##############################
 
 If you want to use PostgreSQL instead of MySQL, you must add
 a function to the PostgreSQL Bacula database to get Bweb to work.
 
-psql -u bacula bacula < script/bweb-postgresql.sql
+psql -U bacula bacula < script/bweb-postgresql.sql
+
+Tips: PL must be enable in your cluster, you can do this with postgres user
+postgres:~$ echo 'CREATE PROCEDURAL LANGUAGE plpgsql;' | psql bacula 
 
 ################ BCONSOLE NOTES ################################
 
 You must use bconsole without conio/readline support. For that, use
-the bconsole -n option.
+the bconsole -n option. This is done automatically with the standard
+configuration file.  In addition, please ensure that the binary
+bconsole file can be executed by your web server. It is normally
+located in /usr/bin/bconsole (or some such file), and must have
+modes 755 or it will not be executable by your web server.  The
+normal Bacula installation usually sets mode 750.
 
 ################ BACULA LOG ####################################
 
-To use Bweb log engine you MUST use catalog message type.
+If you want Bweb to be able to show listings of the Job output,
+you must add a "catalog = all, !skipped, !saved" to your
+messages resource in bacula-dir.conf and restart your Bacula 
+server.  This is shown below:
 
 Messages {
   Name = Standard
@@ -196,7 +252,7 @@ chown www-data /var/spool/bweb
 You have to remove "<!-- Remove this to activate bfileview" and "-->" from
 tpl/display_job_zoom.tpl.
 
-You must use brestore.pl -b to initialise the database, and
+You must use brestore.pl -b to initialize the database, and
 you can use bfileview.pl mode=batch jobid=xxx where=/ to compute tree size.
 
 At this time, it's a good idea to schedule brestore.pl -b after your 
@@ -216,9 +272,42 @@ To upgrade from an old installation, you can use :
 ALTER TABLE brestore_pathvisibility ADD Size int8;
 ALTER TABLE brestore_pathvisibility ADD Files int4;
 
-################ ACCESSING TO BWEB ###############################
+################ ACCESSING TO BWEB ############################
 
 Now, you are able to launch firefox/mozilla and go on
 http://your-server/bweb
 
+################ SETTING MYSQL ACCOUNT ########################
+
+At this time, Bweb needs a write access to :
+- Location 
+- LocationLog
+- Media::LocationId
+- Media::Comment
+- Media::RecyclePoolId (it will change soon)
+
+If your doesn't use Location feature, you can use ReadOnly access
+for all tables, or setup something like :
+
+GRANT SELECT ON bacula.* TO 'bweb'@'%'  IDENTIFIED BY 'password';
+GRANT INSERT,UPDATE,DELETE ON bacula.Location 
+  TO 'bweb'@'%' IDENTIFIED BY 'password';
+GRANT INSERT,UPDATE,DELETE ON bacula.LocationLog 
+  TO 'bweb'@'%' IDENTIFIED BY 'password';
+GRANT UPDATE (LocationId,Comment,RecyclePoolId) ON bacula.Media 
+  TO 'bweb'@'%'  IDENTIFIED BY 'password';
+
+################ GET MORE STATISTICS ###########################
+
+You keep Jobs informations across retention into a job_old table.
+You have to setup stat_job_table = job_old in bweb configuration.
+
+CREATE TABLE job_old (LIKE Job);
+
+And run this on crontab when you want :
+INSERT INTO job_old 
+  (SELECT * FROM Job WHERE JobId NOT IN (SELECT JobId FROM job_old) );
+
+################################################################
+
 Enjoy !
index 760b550353d17f4e431f75d263d8225319ff2e3a..c334dfbda59bdbe37c0a5154d1c5f28ffd74bbed 100644 (file)
@@ -1,5 +1,33 @@
           Release Notes for bweb 2.0
 
+2007/03/01
+ - Add display_time_log option to get timestamp in display_log
+ - Add Warning filter on display_job (see jobstatus=T and joberrors > 0)
+
+2007/02/28
+ - Add limit and offset params to display_log
+
+2007/02/25
+ - Update INSTALL notes (GRANT options for mysql)
+ - You can choose a other table than Job to do your statistics
+   Job is purged by Media or Job retention, it's not very useful
+   to follow trends.
+
+2007/02/14
+ - Add EndTime to display_job if you want add it to your tpl
+
+2007/01/25
+ - Add spanish translation, thanks to Santiago Alberch <caesarneron@gmail.com>
+
+2007/01/15
+ - fix do_update_media timeout bug
+
+2007/01/09
+ - fix stats bug on main page
+
+2007/01/01
+ - Add an index.html page on /bweb
+
 2006/12/31
  - Move /etc/bweb/config to /etc/bacula/bweb.conf
 
index 6092af20582b1b1d463e0b0c166644d04e6f7d8a..4feb1d31661777c879820b92cd76644d586aeb76 100755 (executable)
@@ -79,8 +79,9 @@ unless ($where and $jobid) {
     exit 0;
 }
 
-unless (-w $base_fich) {
-    $bweb->error("$base_fich is not writable");
+unless ($base_fich and -w $base_fich) {
+    $bweb->error("fv_write_path ($base_fich) is not writable." . 
+                " See Bweb configuration.");
     exit 0;
 }
 
index 2e13cf57cf6a18fcf0375b84d05d740b12773cac..2f1af39f2fb14a98f8caf6bd9b908952defb5d21 100755 (executable)
@@ -4,7 +4,7 @@ use strict;
 =head1 LICENSE
 
    Bweb - A Bacula web interface
-   Bacula® - The Network Backup Solution
+   Bacula® - The Network Backup Solution
 
    Copyright (C) 2000-2006 Free Software Foundation Europe e.V.
 
@@ -27,7 +27,7 @@ use strict;
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   Bacula® is a registered trademark of John Walker.
+   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.
@@ -44,36 +44,43 @@ use Data::Dumper;
 use CGI;
 
 use POSIX qw/strftime/;
+use File::Basename qw/basename dirname/;
 
 my $conf = new Bweb::Config(config_file => $Bweb::config_file);
 $conf->load();
-
 my $bweb = new Bweb(info => $conf);
 $bweb->connect_db();
 my $dbh = $bweb->{dbh};
 my $debug = $bweb->{debug};
 
+# Job table keep use Media or Job retention, so it's quite enought
+# for good statistics
+# CREATE TABLE job_old (LIKE Job);
+# INSERT INTO job_old
+#    (SELECT * FROM Job WHERE JobId NOT IN (SELECT JobId FROM job_old) );
+my $jobt = $conf->{stat_job_table} || 'Job';
+
 my $graph = CGI::param('graph') || 'job_size';
 my $legend = CGI::param('legend') || 'on' ;
 $legend = ($legend eq 'on')?1:0;
 
-my $arg = $bweb->get_form(qw/width height limit offset age
+my $arg = $bweb->get_form(qw/width height limit offset age where jobid
                             jfilesets level status jjobnames jclients/);
 
 my ($limitq, $label) = $bweb->get_limit(age   => $arg->{age},
                                        limit => $arg->{limit},
                                        offset=> $arg->{offset},
-                                       order => 'Job.StartTime ASC',
+                                       order => "$jobt.StartTime ASC",
                                        );
 
 my $statusq='';
 if ($arg->{status} and $arg->{status} ne 'Any') {
-    $statusq = " AND Job.JobStatus = '$arg->{status}' ";
+    $statusq = " AND $jobt.JobStatus = '$arg->{status}' ";
 }
     
 my $levelq='';
 if ($arg->{level} and $arg->{level} ne 'Any') {
-    $levelq = " AND Job.Level = '$arg->{level}' ";
+    $levelq = " AND $jobt.Level = '$arg->{level}' ";
 } 
 
 my $filesetq='';
@@ -83,7 +90,7 @@ if ($arg->{jfilesets}) {
 
 my $jobnameq='';
 if ($arg->{jjobnames}) {
-    $jobnameq = " AND Job.Name IN ($arg->{jjobnames}) ";
+    $jobnameq = " AND $jobt.Name IN ($arg->{jjobnames}) ";
 } else {
     $arg->{jjobnames} = 'all'; # skip warning
 } 
@@ -186,14 +193,14 @@ if ($graph eq 'job_size') {
 
     my $query = "
 SELECT 
-       UNIX_TIMESTAMP(Job.StartTime)    AS starttime,
+       UNIX_TIMESTAMP($jobt.StartTime)  AS starttime,
        Client.Name                      AS clientname,
-       Job.Name                         AS jobname,
-       Job.JobBytes                     AS jobbytes
-FROM Job, Client, FileSet
-WHERE Job.ClientId = Client.ClientId
-  AND Job.FileSetId = FileSet.FileSetId
-  AND Job.Type = 'B'
+       $jobt.Name                       AS jobname,
+       $jobt.JobBytes                   AS jobbytes
+FROM $jobt, Client, FileSet
+WHERE $jobt.ClientId = Client.ClientId
+  AND $jobt.FileSetId = FileSet.FileSetId
+  AND $jobt.Type = 'B'
   $clientq
   $statusq
   $filesetq
@@ -223,14 +230,60 @@ if ($graph eq 'job_file') {
 
     my $query = "
 SELECT 
-       UNIX_TIMESTAMP(Job.StartTime)    AS starttime,
+       UNIX_TIMESTAMP($jobt.StartTime)  AS starttime,
        Client.Name                      AS clientname,
+       $jobt.Name                       AS jobname,
+       $jobt.JobFiles                   AS jobfiles
+FROM $jobt, Client, FileSet
+WHERE $jobt.ClientId = Client.ClientId
+  AND $jobt.FileSetId = FileSet.FileSetId
+  AND $jobt.Type = 'B'
+  $clientq
+  $statusq
+  $filesetq
+  $levelq
+  $jobnameq
+$limitq
+";
+
+    print STDERR $query if ($debug);
+
+    my $obj = get_graph('title' => "Job Files : $arg->{jclients}/$arg->{jjobnames}",
+                       'y_label' => 'Number Files',
+                       'y_min_value' => 0,
+                       );
+
+    my $all = $dbh->selectall_arrayref($query) ;
+
+    my ($d, $ret) = make_tab($all);
+    if ($legend) {
+       $obj->set_legend(keys %$ret);
+    }
+    print $obj->plot([$d, values %$ret])->png;
+}
+
+# it works only with postgresql at this time
+# we dont use $jobt because we use File, so job is in Job table
+elsif ($graph eq 'file_histo' and $arg->{where}) {
+    
+    my $dir  = $dbh->quote(dirname($arg->{where}) . '/');
+    my $file = $dbh->quote(basename($arg->{where}));
+
+    my $query = "
+SELECT UNIX_TIMESTAMP(Job.StartTime)    AS starttime,
+       Client.Name                      AS client,
        Job.Name                         AS jobname,
-       Job.JobFiles                     AS jobfiles
-FROM Job, Client, FileSet
+       base64_decode_lstat(8,LStat)     AS lstat
+
+FROM Job, Client, FileSet, Filename, Path, File
 WHERE Job.ClientId = Client.ClientId
   AND Job.FileSetId = FileSet.FileSetId
   AND Job.Type = 'B'
+  AND File.JobId = Job.JobId
+  AND File.FilenameId = Filename.FilenameId
+  AND File.PathId = Path.PathId
+  AND Path.Path = $dir
+  AND Filename.Name = $file
   $clientq
   $statusq
   $filesetq
@@ -241,13 +294,64 @@ $limitq
 
     print STDERR $query if ($debug);
 
-    my $obj = get_graph('title' => "Job Files : $arg->{jclients}/$arg->{jjobnames}",
-                       'y_label' => 'Number Files',
+    my $all = $dbh->selectall_arrayref($query) ;
+
+    my $obj = get_graph('title' => "File size : $arg->{where}",
+                       'y_label' => 'File size',
+                       'y_min_value' => 0,
                        'y_min_value' => 0,
+                       'y_number_format' => \&Bweb::human_size,
                        );
 
+
+    my ($d, $ret) = make_tab($all);
+    if ($legend) {
+       $obj->set_legend(keys %$ret);
+    }
+    print $obj->plot([$d, values %$ret])->png;
+}
+
+# it works only with postgresql at this time
+# TODO: use brestore_missing_path
+elsif ($graph eq 'rep_histo' and $arg->{where}) {
+    
+    my $dir  = $arg->{where};
+    $dir .= '/' if ($dir !~ m!/$!);
+    $dir = $dbh->quote($dir);
+
+    my $query = "
+SELECT UNIX_TIMESTAMP(Job.StartTime) AS starttime,
+       Client.Name                   AS client,
+       Job.Name                      AS jobname,
+       brestore_pathvisibility.size  AS size
+
+FROM Job, Client, FileSet, Path, brestore_pathvisibility
+WHERE Job.ClientId = Client.ClientId
+  AND Job.FileSetId = FileSet.FileSetId
+  AND Job.Type = 'B'
+  AND Job.JobId = brestore_pathvisibility.JobId
+  AND Path.PathId = brestore_pathvisibility.PathId
+  AND Path.Path = $dir
+  $clientq
+  $statusq
+  $filesetq
+  $levelq
+  $jobnameq
+$limitq
+";
+
+    print STDERR $query if ($debug);
+
     my $all = $dbh->selectall_arrayref($query) ;
 
+    my $obj = get_graph('title' => "Directory size : $arg->{where}",
+                       'y_label' => 'Directory size',
+                       'y_min_value' => 0,
+                       'y_min_value' => 0,
+                       'y_number_format' => \&Bweb::human_size,
+                       );
+
+
     my ($d, $ret) = make_tab($all);
     if ($legend) {
        $obj->set_legend(keys %$ret);
@@ -259,19 +363,19 @@ elsif ($graph eq 'job_rate') {
 
     my $query = "
 SELECT 
-       UNIX_TIMESTAMP(Job.StartTime)                          AS starttime,
+       UNIX_TIMESTAMP($jobt.StartTime)  AS starttime,
        Client.Name                      AS clientname,
-       Job.Name                         AS jobname,
-       Job.JobBytes /
+       $jobt.Name                       AS jobname,
+       $jobt.JobBytes /
        ($bweb->{sql}->{SEC_TO_INT}(
                           $bweb->{sql}->{UNIX_TIMESTAMP}(EndTime)  
                         - $bweb->{sql}->{UNIX_TIMESTAMP}(StartTime)) + 0.01) 
          AS rate
 
-FROM Job, Client, FileSet
-WHERE Job.ClientId = Client.ClientId
-  AND Job.FileSetId = FileSet.FileSetId
-  AND Job.Type = 'B'
+FROM $jobt, Client, FileSet
+WHERE $jobt.ClientId = Client.ClientId
+  AND $jobt.FileSetId = FileSet.FileSetId
+  AND $jobt.Type = 'B'
   $clientq
   $statusq
   $filesetq
@@ -303,16 +407,16 @@ elsif ($graph eq 'job_duration') {
 
     my $query = "
 SELECT 
-       UNIX_TIMESTAMP(Job.StartTime)                           AS starttime,
+       UNIX_TIMESTAMP($jobt.StartTime)                         AS starttime,
        Client.Name                                             AS clientname,
-       Job.Name                                                AS jobname,
+       $jobt.Name                                              AS jobname,
   $bweb->{sql}->{SEC_TO_INT}(  $bweb->{sql}->{UNIX_TIMESTAMP}(EndTime)  
                              - $bweb->{sql}->{UNIX_TIMESTAMP}(StartTime)) 
          AS duration
-FROM Job, Client, FileSet
-WHERE Job.ClientId = Client.ClientId
-  AND Job.FileSetId = FileSet.FileSetId
-  AND Job.Type = 'B'
+FROM $jobt, Client, FileSet
+WHERE $jobt.ClientId = Client.ClientId
+  AND $jobt.FileSetId = FileSet.FileSetId
+  AND $jobt.Type = 'B'
   $clientq
   $statusq
   $filesetq
@@ -360,15 +464,18 @@ $limitq
     if ($t eq 'sum' or $t eq 'avg') {
        push @arg, ('y_number_format' => \&Bweb::human_size);
     }
+    
+    my $stime = $bweb->{sql}->{"STARTTIME_$d"};
+    $stime =~ s/Job\./$jobt\./;
 
     my $query = "
 SELECT
-     " . ($per_t?"":"UNIX_TIMESTAMP") . "(" . $bweb->{sql}->{"STARTTIME_$d"} . ") AS A,
+     " . ($per_t?"":"UNIX_TIMESTAMP") . "($stime) AS A,
      $t(JobBytes)                  AS nb
-FROM Job, Client, FileSet
-WHERE Job.ClientId = Client.ClientId
-  AND Job.FileSetId = FileSet.FileSetId
-  AND Job.Type = 'B'
+FROM $jobt, Client, FileSet
+WHERE $jobt.ClientId = Client.ClientId
+  AND $jobt.FileSetId = FileSet.FileSetId
+  AND $jobt.Type = 'B'
   $clientq
   $statusq
   $filesetq
index d4a8cf573afa7bd24a97a1d8f9f9d312294e2c12..6b3dd7d10a60902a3124b4da6fd3baa0bbfcdc88 100755 (executable)
@@ -220,8 +220,15 @@ if ($action eq 'begin') {          # main display
     $bweb->help_extern_compute();
 
 } elsif ($action eq 'extern') {
-    $bweb->eject_media();
+    print "<div style='float: left;'>";
+    my @achs = $bweb->eject_media();
+    for my $ach (@achs) {
+        CGI::param('ach', $ach);
+       $bweb->update_slots();
+    }
+    print "</div><div style='float: left;margin-left: 20px;'>";
     $bweb->move_media();
+    print "</div>";
 
 } elsif ($action eq 'move_email') {
     $bweb->move_email();
index 774347438f37d6b6cbd954b97d25c8739f452bf4..72b50e8f0e7576563ef00ed3911d5efb86dd16b6 100644 (file)
@@ -1,19 +1,31 @@
-// 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.
+//
+// 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// 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.
 
  var even_cell_color = "#FFFFFF";
  var odd_cell_color  = "#EEEEEE";
diff --git a/gui/bweb/lang/es/tpl/about.tpl b/gui/bweb/lang/es/tpl/about.tpl
new file mode 100644 (file)
index 0000000..01d944b
--- /dev/null
@@ -0,0 +1,39 @@
+<br/>
+<div class='titlediv'>
+  <h1 class='newstitle'> Acerca </h1>
+</div>
+<div class='bodydiv'>
+<pre>
+   Bweb - A Bacula web interface
+   Bacula® - The Network Backup Solution
+
+   Copyright (C) 2000-2006 Free Software Foundation Europe e.V.
+
+   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.
+
+   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.
+
+   nrsTable Copyright 2005 New Roads School (GPL)
+   kaiska css Copyright Willy Morin (BWL)
+</pre>
+</div>
diff --git a/gui/bweb/lang/es/tpl/ach_add.tpl b/gui/bweb/lang/es/tpl/ach_add.tpl
new file mode 100644 (file)
index 0000000..ddf03a2
--- /dev/null
@@ -0,0 +1,72 @@
+<br/>
+<div class='titlediv'>
+  <h1 class='newstitle'><TMPL_UNLESS name>Nueva</TMPL_UNLESS> Autochanger </h1>
+</div>
+<div class='bodydiv'>
+   Tiene que crear una Ubicación, la cual deberá tener el mismo nombre.<br/><br/>
+
+   <form name='form1' action="?" method='get'>
+    <table>
+     <tr><td>Nombre :</td>     
+         <td>
+          <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-comando :</td> 
+         <td> <input class="formulaire" type='text' id='precmd' value='sudo'
+           title='can be "sudo" or "ssh storage@storagehost"...' name='precmd'>
+         </td>
+     </tr>
+     <tr><td>Comando mtx :</td> 
+         <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' 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' 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'
+               id='index_<TMPL_VAR name>' value='' 
+                name='index_<TMPL_VAR name>' size='3'>
+     </td>
+    </tr>
+    </TMPL_LOOP>
+    </table>
+    <input type="image" name='action' value='ach_add' src='/bweb/save.png'>
+   </form>
+</div>
+
+<script type="text/javascript" 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>
diff --git a/gui/bweb/lang/es/tpl/ach_content.tpl b/gui/bweb/lang/es/tpl/ach_content.tpl
new file mode 100644 (file)
index 0000000..63e61f5
--- /dev/null
@@ -0,0 +1,161 @@
+<br/>
+ <div class='titlediv'>
+  <h1 class='newstitle'> 
+Autochanger : <TMPL_VAR Name> (<TMPL_VAR nb_drive> Drives
+<TMPL_IF nb_io><TMPL_VAR nb_io> IMPORT/EXPORT</TMPL_IF>)</h1>
+ </div>
+ <div class='bodydiv'>
+   <form action='?' method='get'>
+    <input type='hidden' name='ach' value='<TMPL_VAR name>'>
+    <TMPL_IF "Update">
+    <font color='red'> Debe ejecutar el comando update slot, El estado del Autochanger es diferente al de las slots de bacula </font>
+    <br/>
+    </TMPL_IF>
+    <table border='0'>
+    <tr>
+    <td valign='top'>
+    <div class='otherboxtitle'>
+     Tools
+    </div>
+    <div class='otherbox'>
+<label>
+<input type="image" name='action' value='label_barcodes'
+        title='run label barcodes' src='/bweb/label.png'>Label
+</label>
+<TMPL_IF nb_io>
+<label>
+<input type="image" name='action' value='eject'
+        title='put selected media on i/o' src='/bweb/extern.png'>
+Exportar
+</label>
+<label>
+<input type="image" name='action' value='clear_io'
+        title='Clear i/o' src='/bweb/intern.png'>
+Limpiar I/O
+</label>
+</TMPL_IF>
+<label>
+<input type="image" name='action' value='update_slots'
+        title='run update slots' src='/bweb/update.png'>
+Actualizar
+</label>
+<br/><br/>
+<label>
+<input type="image" name='action' value='ach_load'
+       title='mount drive' src='/bweb/load.png'>
+Montar
+</label>
+<label>
+<input type="image" name='action' value='ach_unload'
+       title='umount drive' src='/bweb/unload.png'>
+Desmontar
+</label>
+
+   </div>
+    <td width='200'/>
+    <td>
+    <b> Drives: </b><br/>
+    <table id='id_drive'></table> <br/>
+    </td>
+    </tr>
+    </table>
+    <b> Contenido: </b><br/>
+    <table id='id_ach'></table>
+   </form>
+ </div>
+
+<script type="text/javascript" language="JavaScript">
+
+var header = new Array("Slot Real", "Slot", "Nombre Volumen","Bytes Vol","Estado Vol",
+                      "Tipo Medio","Nombre Pool","Fecha Escritura", 
+                       "Expiración", "Selección");
+
+var data = new Array();
+var chkbox;
+
+<TMPL_LOOP Slots>
+chkbox = document.createElement('INPUT');
+chkbox.type  = 'checkbox';
+chkbox.name = 'slot';
+chkbox.value = '<TMPL_VAR realslot>';
+
+data.push( new Array(
+"<TMPL_VAR realslot>",
+"<TMPL_VAR slot>",
+"<TMPL_VAR volumename>",
+human_size(<TMPL_VAR volbytes>),
+"<TMPL_VAR volstatus>",
+"<TMPL_VAR mediatype>",
+"<TMPL_VAR name>",
+"<TMPL_VAR lastwritten>",
+"<TMPL_VAR expire>",
+chkbox
+ )
+);
+</TMPL_LOOP>
+
+nrsTable.setup(
+{
+ table_name:     "id_ach",
+ table_header: header,
+ table_data: data,
+ up_icon: up_icon,
+ down_icon: down_icon,
+ prev_icon: prev_icon,
+ next_icon: next_icon,
+ rew_icon:  rew_icon,
+ fwd_icon:  fwd_icon,
+// natural_compare: false,
+ even_cell_color: even_cell_color,
+ odd_cell_color: odd_cell_color, 
+ header_color: header_color,
+// page_nav: true,
+// rows_per_page: rows_per_page,
+// disable_sorting: new Array(5,6)
+ padding: 3
+}
+);
+
+var header = new Array("Index", "Nombre Drive", "Nombre Volumen", "Selección");
+
+var data = new Array();
+var chkbox;
+
+<TMPL_LOOP Drives>
+chkbox = document.createElement('INPUT');
+chkbox.type  = 'checkbox';
+chkbox.name = 'drive';
+chkbox.value = '<TMPL_VAR index>';
+
+data.push( new Array(
+"<TMPL_VAR index>",
+"<TMPL_VAR name>",
+"<TMPL_VAR load>",
+chkbox
+ )
+);
+</TMPL_LOOP>
+
+nrsTable.setup(
+{
+ table_name:     "id_drive",
+ table_header: header,
+ table_data: data,
+ up_icon: up_icon,
+ down_icon: down_icon,
+ prev_icon: prev_icon,
+ next_icon: next_icon,
+ rew_icon:  rew_icon,
+ fwd_icon:  fwd_icon,
+// natural_compare: false,
+ even_cell_color: even_cell_color,
+ odd_cell_color: odd_cell_color, 
+ header_color: header_color,
+// page_nav: true,
+// rows_per_page: rows_per_page,
+// disable_sorting: new Array(5,6),
+ padding: 3
+}
+);
+
+</script>
diff --git a/gui/bweb/lang/es/tpl/begin.tpl b/gui/bweb/lang/es/tpl/begin.tpl
new file mode 100644 (file)
index 0000000..2c63817
--- /dev/null
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
+<html>
+<head>
+<title>Bweb - Bacula Web Interface</title>
+<link rel="SHORTCUT ICON" href="/bweb/favicon.ico">
+<script type="text/javascript" language="JavaScript" src="/bweb/natcompare.js"></script>
+<script type="text/javascript" language="JavaScript" src="/bweb/nrs_table.js"></script>
+<script type="text/javascript" language="JavaScript" src="/bweb/bweb.js"></script>
+<link type="text/css" rel="stylesheet" href="/bweb/style.css"/>
+<link type="text/css" rel="stylesheet" href="/bweb/kaiska.css"/>
+<link type="text/css" rel="stylesheet" href="/bweb/bweb.css"/>
+</head>
+<body>
+
+<script type="text/javascript" language="JavaScript">
+if (navigator.appName == 'Konqueror') {
+        alert("Sorry at this moment, bweb works only with mozilla.");
+}
+</script>
+
+<ul id="menu">
+ <li><a href="bweb.pl?">Principal</a> </li>
+ <li><a href="bweb.pl?action=client">Clientes</a></li>
+ <li><a href="bweb.pl?action=run_job">Jobs</a>
+   <ul> 
+     <li><a href="bweb.pl?action=run_job">Jobs Definidos</a>
+     <li><a href="bweb.pl?action=job">Últimos Jobs</a> </li>
+     <li><a href="bweb.pl?action=running">Jobs en Ejecución</a>
+     <li><a href="bweb.pl?action=next_job">Próximos Jobs</a> </li>
+     <li><a href="bweb.pl?action=restore" title="Launch brestore">Recuperación</a> </li>
+   </ul>
+ </li>
+ <li style="padding: 0.25em 2em;">Medios
+  <ul>
+     <li><a href="bweb.pl?action=pool">Pools</a> </li>
+     <li><a href="bweb.pl?action=location">Ubicaciones</a> </li>
+     <li><a href="bweb.pl?action=media">Todos los Medios</a><hr></li>
+     <li><a href="bweb.pl?action=extern_media">Expulsar Medio</a> </li>
+     <li><a href="bweb.pl?action=intern_media">Cargar Medio</a> </li>
+  </ul>
+ </li>
+<TMPL_IF achs>
+ <li style="padding: 0.25em 2em;">Libreria
+  <ul>
+<TMPL_LOOP achs>
+   <li><a href="bweb.pl?action=ach_view;ach=<TMPL_VAR name>"><TMPL_VAR name></a></li>
+</TMPL_LOOP>
+  </ul>
+ </li>
+</TMPL_IF> 
+ <li><a href="bweb.pl?action=graph"> Estadísticas </a></li>
+ <li> <a href="bweb.pl?action=view_conf"> Configuración </a> </li>
+ <li> <a href="bweb.pl?action=about"> Acerca </a> </li>
+ <li style="padding: 0.25em 2em;float: right;">&nbsp;Usuario  <TMPL_VAR NAME=loginname> </li>
+ <li style="float: right;white-space: nowrap;">
+<input type="image" class="button" title="buscar medio" onclick="search_media();" src="/bweb/tape.png"><input type="image" title="buscar cliente" onclick="search_client();" src="/bweb/client.png">&nbsp;<input class='formulaire' style="margin: 0 2px 0 2px; padding: 0 0 0 0;" id='searchbox' type='text' size='8' value="buscar..." onclick="this.value='';" title="buscar por medio o cliente"></li>
+</ul>
+
+<form name="search" action="bweb.pl?" method='GET'>
+ <input type="hidden" name="action" value="">
+ <input type="hidden" name="re_media" value="">
+ <input type="hidden" name="re_client" value="">
+</form>
+
+<div style="clear: left;">
+<div style="float: left;">
diff --git a/gui/bweb/lang/es/tpl/change_location.tpl b/gui/bweb/lang/es/tpl/change_location.tpl
new file mode 100644 (file)
index 0000000..496c61a
--- /dev/null
@@ -0,0 +1,37 @@
+<br/>
+<div class='titlediv'>
+  <h1 class='newstitle'> 
+   Mover medio
+  </h1>
+ </div>
+ <div class='bodydiv'>
+
+<form action="?" method='GET'>
+<table>
+<tr>
+<td><b>Para: </b></td><td><input class='formulaire' name='email' value='<TMPL_VAR email>'></td>
+</tr><tr>
+<td><b>Asunto: </b></td><td><input class='formulaire' name='subject' value='[BACULA] Mover medio a <TMPL_VAR newlocation>' size='80'></td>
+</tr><tr>
+<td></td>
+<td>
+<textarea name='content' class='formulaire' cols='80' rows='32'>
+Estimado,
+
+Puede mover este medio a <TMPL_VAR newlocation>
+Medio :
+<TMPL_LOOP Medias>
+ - <TMPL_VAR VolumeName>  (<TMPL_VAR location>)
+</TMPL_LOOP>
+
+Cuando finalice, puede actualizar la ubicacion del medio ? 
+(puede usar este link : <TMPL_VAR url>).
+
+Gracias
+</textarea>
+</td></tr></table>
+<input class='formulaire' type='submit' name='action' value='move_email'>
+</form>
+<br>
+<a href="<TMPL_VAR url>"><img alt='update now' src='/bweb/update.png'>Actualizar Ahora</a>
+</div>
diff --git a/gui/bweb/lang/es/tpl/client_job_status.tpl b/gui/bweb/lang/es/tpl/client_job_status.tpl
new file mode 100644 (file)
index 0000000..ecd64e1
--- /dev/null
@@ -0,0 +1,40 @@
+<br/>
+ <div class='titlediv'>
+  <h1 class='newstitle'> 
+       Job ejecutándose <TMPL_VAR JobName> en <TMPL_VAR Client>
+  </h1>
+ </div>
+ <div class='bodydiv'>
+
+<table>
+ <tr>
+  <td> <b> Nombre Job: </b> <td> <td> <TMPL_VAR jobname> (<TMPL_VAR jobid>) <td> 
+ </tr>
+ <tr>
+  <td> <b> Archivo en proceso: </b> <td> <td> <TMPL_VAR "processing file"> </td>
+ </tr>
+ <tr>
+  <td> <b> Velocidad: </b> <td> <td> <TMPL_VAR "bytes/sec"> B/s</td>
+ </tr>
+ <tr>
+  <td> <b> Archivos Examinados: </b> <td> <td> <TMPL_VAR "files examined"></td>
+ </tr>
+ <tr>
+  <td> <b> Bytes: </b> <td> <td> <TMPL_VAR bytes></td>
+ </tr>
+</table>
+<form name='form1' action='?' method='GET'>
+<input type="image" name='action' value='dsp_cur_job' 
+ src='/bweb/update.png' title='refresh'>&nbsp;
+<input type='hidden' name='client' value='<TMPL_VAR Client>'>
+<input type='hidden' name='jobid' value='<TMPL_VAR JobId>'>
+<input type="image" name='action' value='cancel_job'
+       onclick="return confirm('Do you want to cancel this job ?')"
+        title='Cancel job' src='/bweb/cancel.png'>&nbsp;
+</form>
+ </div>
+
+<script type="text/javascript" language="JavaScript">
+  bweb_add_refresh();
+</script>
+
diff --git a/gui/bweb/lang/es/tpl/client_list.tpl b/gui/bweb/lang/es/tpl/client_list.tpl
new file mode 100644 (file)
index 0000000..b200cf9
--- /dev/null
@@ -0,0 +1,70 @@
+<br/>
+ <div class='titlediv'>
+  <h1 class='newstitle'> Clientes</h1>
+ </div>
+ <div class='bodydiv'>
+<form action='?' method='GET'>
+     <table id='id<TMPL_VAR NAME=ID>'></table>
+       <div class="otherboxtitle">
+          Acciones &nbsp;
+        </div>
+        <div class="otherbox">
+<!--        <h1>Acciones</h1> -->      
+       <label>
+       <input type="image" name='action' value='job' title='Mostrar Ãºltimos jobs' src='/bweb/zoom.png'>Últimos Jobs</label> &nbsp;
+       <label>
+       <input type="image" name='action' value='dsp_cur_job' title='Mostrar job actual' src='/bweb/zoom.png'>Jobs Actuales</label> &nbsp;
+       <label>
+       <input type="image" name='action' value='client_status' title='Mostrar estado del cliente' src='/bweb/zoom.png'>Estado</label> &nbsp;
+       <label>
+       <input type="image" name='action' value='client_stats' title='Estadísticas del Cliente' src='/bweb/chart.png'>Estadísticas</label> &nbsp;
+       </label>
+        </div>
+
+</form>
+ </div>
+
+<script type="text/javascript" language="JavaScript">
+var header = new Array("Nombre", "Selección", "Descripción", "Auto Prune", "Retención Archivos", "Retención Jobs");
+
+var data = new Array();
+var chkbox ;
+
+<TMPL_LOOP NAME=Clients>
+chkbox = document.createElement('INPUT');
+chkbox.type  = 'checkbox';
+chkbox.name = 'client';
+chkbox.value = '<TMPL_VAR NAME=Name>';
+
+data.push( 
+  new Array( "<TMPL_VAR NAME=Name>", 
+             chkbox,
+            "<TMPL_VAR NAME=Uname>",
+            "<TMPL_VAR NAME=AutoPrune>",
+            human_sec(<TMPL_VAR NAME=FileRetention>),
+            human_sec(<TMPL_VAR NAME=JobRetention>)
+              )
+) ; 
+</TMPL_LOOP>
+
+nrsTable.setup(
+{
+ table_name:     "id<TMPL_VAR NAME=ID>",
+ table_header: header,
+ table_data: data,
+ up_icon: up_icon,
+ down_icon: down_icon,
+ prev_icon: prev_icon,
+ next_icon: next_icon,
+ rew_icon:  rew_icon,
+ fwd_icon:  fwd_icon,
+// natural_compare: false,
+ even_cell_color: even_cell_color,
+ odd_cell_color: odd_cell_color, 
+ header_color: header_color,
+ page_nav: true,
+ rows_per_page: rows_per_page,
+ disable_sorting: new Array(1)
+}
+);
+</script>
diff --git a/gui/bweb/lang/es/tpl/command.tpl b/gui/bweb/lang/es/tpl/command.tpl
new file mode 100644 (file)
index 0000000..ce9a906
--- /dev/null
@@ -0,0 +1,9 @@
+<br/>
+ <div class='titlediv'>
+  <h1 class='newstitle'> <TMPL_VAR title> : <TMPL_VAR name></h1>
+ </div>
+ <div class='bodydiv'>
+  <pre id='log' style='font-size: 10px'>
+<TMPL_VAR content>
+  </pre>
+ </div>
diff --git a/gui/bweb/lang/es/tpl/config_edit.tpl b/gui/bweb/lang/es/tpl/config_edit.tpl
new file mode 100644 (file)
index 0000000..3c9b690
--- /dev/null
@@ -0,0 +1,55 @@
+<br/>
+<div class='titlediv'>
+  <h1 class='newstitle'> Configuración </h1>
+</div>
+<div class='bodydiv'>
+   <form action="?" method='post'>
+    <table>
+     <tr>  <td><b>SQL Connection</b></td>  <td/></tr>
+     <tr><td>DBI :</td>     
+         <td> 
+          <input class="formulaire" type='text' value='<TMPL_VAR dbi>' size='64' name='dbi'> 
+         </td>
+     </tr>
+     <tr><td>Usuario :</td> 
+         <td> <input class="formulaire" type='text' value='<TMPL_VAR user>' name='user'>
+         </td>
+     </tr>
+     <tr><td>Clave :</td> 
+         <td> <input class="formulaire" type='password' value='<TMPL_VAR password>' name='password'> 
+         </td></tr>
+
+     <tr>  <td><b>Opciones Generales</b></td>  <td/></tr>
+
+     <tr><td>email_media :</td> 
+         <td> <input class="formulaire" type='text' value='<TMPL_VAR email_media>' name='email_media'> 
+         </td></tr>
+         </td></tr>
+
+     <tr>  <td><b>Configuración Bweb</b></td>  <td/></tr>
+
+     <tr><td>graph_font :</td> 
+         <td> <input class="formulaire" type='text' value='<TMPL_VAR graph_font>' size='64' name='graph_font'> 
+         </td></tr>
+     <tr><td>template_dir :</td> 
+         <td> <input class="formulaire" type='text' value='<TMPL_VAR template_dir>' size='64' name='template_dir'> 
+         </td></tr>
+     <tr><td>fv_write_path :</td> 
+         <td> <input class="formulaire" title="Este directorio debe tener permisos de escritura para el usuario apache y debe ser accesible en /bweb/fv" type='text' value='<TMPL_VAR fv_write_path>' size='64' name='fv_write_path'> 
+         </td></tr>
+     <tr><td>stat_job_table :</td> 
+         <td> <input class="formulaire" title="You can choose the Job table that you want to use to get statistics" type='text' value='<TMPL_IF stat_job_table><TMPL_VAR stat_job_table><TMPL_ELSE>Job</TMPL_IF>' size='64' name='stat_job_table'>
+     <tr><td>bconsole :</td> 
+         <td> <input class="formulaire" type='text' value='<TMPL_VAR bconsole>' size='64' name='bconsole'> 
+         </td></tr>
+     <tr><td>display_log_time :</td>
+         <td> <input class="formulaire" title="display log timestamp" type='checkbox' name='display_log_time' <TMPL_IF display_log_time> checked='checked' value='on' </TMPL_IF> >
+         </td></tr>
+     <tr><td>debug :</td> 
+         <td> <input class="formulaire" type='checkbox' name='debug' <TMPL_IF debug> checked='checked' value='on' </TMPL_IF> > 
+         </td></tr>
+    </table>
+    <input type="image" name='action' value='apply_conf' src='/bweb/save.png'>
+   </form>
+</div>
diff --git a/gui/bweb/lang/es/tpl/config_view.tpl b/gui/bweb/lang/es/tpl/config_view.tpl
new file mode 100644 (file)
index 0000000..7380b74
--- /dev/null
@@ -0,0 +1,64 @@
+<br/>
+<div class='titlediv'>
+  <h1 class='newstitle'> Configuración </h1>
+</div>
+<div class='bodydiv'>
+   <table>
+    <tr>  <td><b>Conexión SQL</b></td>  <td/></tr>
+    <tr><td>DBI :</td>      <td> <TMPL_VAR dbi>      </td></tr>
+    <tr><td>Ususario :</td>     <td> <TMPL_VAR user>     </td></tr>
+    <tr><td>Clave :</td> <td> xxxxx </td></tr>
+    <tr>  <td><b>Opciones Generales</b></td>  <td/></tr>
+    <tr><td>email_media :</td> <td> <TMPL_VAR email_media> </td></tr>
+    <tr>  <td><b>Configuración Bweb</b></td>  <td/></tr>
+    <tr><td>config_file :</td> <td> <TMPL_VAR config_file> </td></tr>
+    <tr><td title="/path/a/tu/template_dir">template_dir :</td> <td> <TMPL_VAR template_dir> </td></tr>
+    <tr><td title="/path/a/a/font.ttf">graph_font :</td> <td> <TMPL_VAR graph_font> </td></tr>
+    <tr><td title="Este directorio debe tener permisos de escritura para el usuario apache y debe ser accesible en /bweb/fv">fv_write_path :</td> <td> <TMPL_VAR fv_write_path> </td></tr>
+    <tr><td title="You can choose the Job table that you want to use to get statistics">stat_job_table :</td> <td> <TMPL_IF stat_job_table><TMPL_VAR stat_job_table><TMPL_ELSE>Job</TMPL_IF> </td></tr>
+    <tr><td title="/path/a/bconsole -n -c /path/to/bconsole.conf">bconsole :</td> <td> <TMPL_VAR bconsole> </td></tr>
+    <tr><td title="display timestamp in job log">display_log_time :</td> <td> <TMPL_VAR display_log_time> </td></tr>
+    <tr><td>debug :</td> <td> <TMPL_VAR debug> </td></tr>
+    <TMPL_IF achs>
+    <tr>  <td><b>Libreria</b></td>  <td/></tr>
+    <tr>
+     <td>
+     <form action='?' method='GET'>
+     <table border='0'>
+    <TMPL_LOOP achs>
+      <tr> 
+       <td>
+<label>
+ <input type='radio' name='ach' value='<TMPL_VAR name>'><TMPL_VAR name>
+</label>
+       </td>
+      </tr>
+    </TMPL_LOOP>
+    </table>
+   <td>
+  
+   <input type="image" name="action" value="ach_edit" title="editar" src='/bweb/edit.png'> 
+   <input type="image" name='action' value='ach_del' title='borrar' src='/bweb/remove.png'>
+   <input type='image' name='action' value='ach_view' title='ver' src='/bweb/zoom.png'>
+    </form>
+    </td>
+   </tr>
+   </TMPL_IF achs>
+   <tr>
+   <td><hr></td><td></td>
+   </tr>
+  </table>
+
+  <form action='?' method='GET'>
+   <label>
+   <input name='action' value='edit_conf' type="image" title='Edit' src='/bweb/edit.png'> Editar
+   </label>
+   <label>
+   <input name='action' value='ach_add' type="image" title='Add an autochanger' src='/bweb/add.png'> Agregar libreria
+   </label>
+  </form>
+
+  <TMPL_IF error>
+  info :  <TMPL_VAR error> </br>
+  </TMPL_IF>
+</div>
diff --git a/gui/bweb/lang/es/tpl/display_client_job.tpl b/gui/bweb/lang/es/tpl/display_client_job.tpl
new file mode 100644 (file)
index 0000000..ba62845
--- /dev/null
@@ -0,0 +1,65 @@
+<br/>
+ <div class='titlediv'>
+  <h1 class='newstitle'> Ã¼ltimos jobs de <TMPL_VAR clientname> (<TMPL_VAR Filter>)
+  </h1>
+ </div>
+ <div class='bodydiv'>
+
+   <table id='id<TMPL_VAR ID>'></table>
+
+<a href="bgraph.pl?client=<TMPL_VAR clientname>;action=job_size;status=T">
+    <img src="/bweb/chart.png" alt="backup size" title="backup size evolution"/>
+    </a>
+<a href="bgraph.pl?client=<TMPL_VAR clientname>;action=job_duration;status=T">
+    <img src="/bweb/chart.png" alt="backup duration" title="backup time evolution"/>
+    </a>
+<a href="bgraph.pl?client=<TMPL_VAR clientname>;action=job_rate;status=T">
+    <img src="/bweb/chart.png" alt="backup rate" title="backup rate evolution"/>
+    </a>                               
+ </div>
+
+
+<script type="text/javascript" language="JavaScript">
+var header = new Array("IdJob", "Nombre Job", "File Set", "Nivel", "Tiempo Inicio", 
+                  "Archivos Job", "Bytes Job", "Errors");
+
+var data = new Array();
+
+<TMPL_LOOP Jobs>
+data.push( new Array(
+"<TMPL_VAR JobId>",
+"<TMPL_VAR JobName>",    
+"<TMPL_VAR FileSet>",
+"<TMPL_VAR Level>",
+"<TMPL_VAR StartTime>",
+"<TMPL_VAR JobFiles>",   
+human_size(<TMPL_VAR JobBytes>),
+"<TMPL_VAR JobErrors>"   
+ )
+);
+</TMPL_LOOP>
+
+nrsTable.setup(
+{
+ table_name:     "id<TMPL_VAR ID>",
+ table_header: header,
+ table_data: data,
+ up_icon: up_icon,
+ down_icon: down_icon,
+ prev_icon: prev_icon,
+ next_icon: next_icon,
+ rew_icon:  rew_icon,
+ fwd_icon:  fwd_icon,
+// natural_compare: true,
+ even_cell_color: even_cell_color,
+ odd_cell_color: odd_cell_color, 
+ header_color: header_color,
+ page_nav: true,
+ rows_per_page: rows_per_page,
+ disable_sorting: new Array(5,6)
+}
+);
+
+// get newest job first
+nrsTables['id<TMPL_VAR ID>'].fieldSort(0);
+</script>
diff --git a/gui/bweb/lang/es/tpl/display_client_stats.tpl b/gui/bweb/lang/es/tpl/display_client_stats.tpl
new file mode 100644 (file)
index 0000000..da4f445
--- /dev/null
@@ -0,0 +1,59 @@
+<br/>
+ <div class='titlediv'>
+  <h1 class='newstitle'> Cliente : <TMPL_VAR NAME=clientname> (<TMPL_VAR NAME=label>)</h1>
+ </div>
+ <div class='bodydiv'>
+<form action='?'
+     <table id='id<TMPL_VAR NAME=ID>'></table>
+     <img src="bgraph.pl?client=<TMPL_VAR NAME=clientname>;graph=job_duration;age=2592000;width=420;height=200" alt='Not enough data' > &nbsp;
+     <img src="bgraph.pl?client=<TMPL_VAR NAME=clientname>;graph=job_rate;age=2592000;width=420;height=200" alt='Not enough data'> &nbsp;
+     <img src="bgraph.pl?client=<TMPL_VAR NAME=clientname>;graph=job_size;age=2592000;width=420;height=200" alt='Not enough data'> &nbsp;
+<!--   <div class="otherboxtitle">
+          Actions &nbsp;
+        </div>
+        <div class="otherbox">
+       <h1>Acciones</h1> 
+       <input type="image" name='action' value='job' title='Mostrar Ãºltimo job'
+        src='/bweb/zoom.png'> &nbsp;
+       <input type="image" name='action' value='dsp_cur_job' title='Mostrar job actual' src='/bweb/zoom.png'> &nbsp;
+       <input type="image" name='action' value='client_stat' title='Estadísticas Cliente' src='/bweb/zoom.png'> &nbsp;
+        </div>
+-->
+</form>
+ </div>
+
+<script type="text/javascript" language="JavaScript">
+var header = new Array("Nombre", "Nb Jobs", "Nb Bytes", "Nb Files", "Nb Errors");
+
+var data = new Array();
+
+data.push( 
+  new Array( "<TMPL_VAR NAME=clientname>", 
+            "<TMPL_VAR NAME=nb_jobs>",
+            human_size(<TMPL_VAR NAME=nb_bytes>),
+            "<TMPL_VAR NAME=nb_files>",
+            "<TMPL_VAR NAME=nb_err>"
+             )
+) ; 
+
+nrsTable.setup(
+{
+ table_name:     "id<TMPL_VAR NAME=ID>",
+ table_header: header,
+ table_data: data,
+ up_icon: up_icon,
+ down_icon: down_icon,
+ prev_icon: prev_icon,
+ next_icon: next_icon,
+ rew_icon:  rew_icon,
+ fwd_icon:  fwd_icon,
+// natural_compare: false,
+ even_cell_color: even_cell_color,
+ odd_cell_color: odd_cell_color, 
+ header_color: header_color,
+ page_nav: true,
+// disable_sorting: new Array(1),
+ rows_per_page: rows_per_page
+}
+);
+</script>
diff --git a/gui/bweb/lang/es/tpl/display_form_job.tpl b/gui/bweb/lang/es/tpl/display_form_job.tpl
new file mode 100644 (file)
index 0000000..acc13b7
--- /dev/null
@@ -0,0 +1,127 @@
+<br/>
+<div class="otherboxtitle">
+  Filter &nbsp;
+</div>
+<div class="otherbox">
+<form name='form1' action='?' method='GET'>
+<table border='0'>
+<tr>
+  <td valign='top'>
+    <h2>Nivel</h2>
+    <select name='level' class='formulaire'>
+      <option id='level_Any' value='Any'>Cualquiera</option>
+      <option id='level_F' value='F'>Completo</option>
+      <option id='level_D' value='D'>Diferencial</option>
+      <option id='level_I' value='I'>Incremental</option>
+    </select>     
+  </td>
+</tr>
+<tr>
+ <td valign='top'>
+    <h2>Estado</h2>
+    <select name='status' class='formulaire'>
+      <option id='status_Any' value='Any'>Cualquiera</option>
+      <option id='status_T'   value='T'>Ok</option>
+      <option id='status_W'   value='W'>Warning</option>
+      <option id='status_f'   value='f'>Error</option>
+      <option id='status_A'   value='A'>Cancelados</option>
+    </select>     
+  </td>
+</tr>
+<tr>
+ <td valign='top'>
+    <h2>Pool</h2>
+    <select name='pool' class='formulaire'>
+      <option id='pool_all' value=''>Todos</option>
+<TMPL_LOOP NAME=db_pools>
+      <option id='pool_<TMPL_VAR name>'><TMPL_VAR name></option>
+</TMPL_LOOP>
+    </select>
+  </td>
+</tr>
+<tr>
+  <td valign='top'>
+    <h2>Tiempo</h2>
+    <select name='age' class='formulaire'>
+      <option id='age_604800'   value='604800'>Esta semana</option>
+      <option id='age_2678400'  value='2678400'>Últimos 30 dias</option>
+      <option id='age_15552000' value='15552000'>Últimos 6 meses</option>
+    </select>     
+  </td>
+ </tr>
+ <tr>
+  <td valign='bottom'> 
+    <h2>Number of items</h2>
+    <input type='text' name='limit' value='<TMPL_VAR NAME=limit>' 
+       class='formulaire' size='4'>
+  </td>
+</tr>
+<tr>
+  <td valign='top'> 
+    <h2>Tipo Job</h2>
+    <select name='jobtype' class='formulaire'>
+      <option id='jobtype_any' value='all type'>Cualquiera</option>
+      <option id='jobtype_B' value='B'>Backup</option>
+      <option id='jobtype_R' value='R'>Recuperación</option>
+    </select>
+  </td>
+</tr>
+<tr>
+  <td valign='top'> 
+    <h2>Clientes</h2>
+    <select name='client' size='15' class='formulaire' multiple>
+<TMPL_LOOP NAME=db_clients>
+      <option id='client_<TMPL_VAR clientname>'><TMPL_VAR clientname></option>
+</TMPL_LOOP>
+    </select>
+  </td>
+</tr>
+<!--
+<tr>
+  <td valign='top'> 
+    <h2>FileSet</h2>
+    <select name='fileset' size='15' class='formulaire' multiple>
+<TMPL_LOOP NAME=db_filesets>
+      <option id='client_<TMPL_VAR fileset>'><TMPL_VAR NAME=fileset></option>
+</TMPL_LOOP>
+    </select>
+  </td>
+</tr>
+-->
+</table>
+  <input type="image" name='action' value='job' src='/bweb/update.png'>
+
+</form>
+</div>
+<script type="text/javascript" language="JavaScript">
+
+  <TMPL_LOOP qclients>
+     document.getElementById('client_' + <TMPL_VAR name>).selected = true;
+  </TMPL_LOOP>
+
+  <TMPL_IF status>
+     document.getElementById('status_<TMPL_VAR status>').selected=true;
+  </TMPL_IF>
+
+  <TMPL_IF level>
+     document.getElementById('level_<TMPL_VAR level>').selected=true;
+  </TMPL_IF>
+
+  <TMPL_IF age>
+     document.getElementById('age_<TMPL_VAR age>').selected=true;
+  </TMPL_IF>
+
+  <TMPL_IF jobtype>
+     document.getElementById('jobtype_<TMPL_VAR jobtype>').selected=true;
+  </TMPL_IF>
+
+  <TMPL_LOOP qfilesets>
+     document.getElementById('fileset_' + <TMPL_VAR name>).selected = true;
+  </TMPL_LOOP>
+
+  <TMPL_LOOP qpools>
+     document.getElementById('pool_' + <TMPL_VAR name>).selected = true;
+  </TMPL_LOOP>
+
+</script>
+
diff --git a/gui/bweb/lang/es/tpl/display_form_media.tpl b/gui/bweb/lang/es/tpl/display_form_media.tpl
new file mode 100644 (file)
index 0000000..fccaa31
--- /dev/null
@@ -0,0 +1,91 @@
+<div class="otherboxtitle">
+  Filter &nbsp;
+</div>
+<div class="otherbox">
+<form name='form1' action='?' method='GET'>
+<table border='0'>
+<tr>
+  <td valign='top'>
+    <h2>Tipo Medio</h2>
+    <select name='mediatype' class='formulaire'>
+      <option id='mediatype_all' value=''></option>
+<TMPL_LOOP NAME=db_mediatypes>
+      <option id='mediatype_<TMPL_VAR mediatype>'><TMPL_VAR mediatype></option>
+</TMPL_LOOP>
+    </select>     
+  </td>
+</tr>
+<tr>
+  <td valign='top'>
+    <h2>Ubicación</h2>
+    <select name='location' class='formulaire'>
+      <option id='location_all>' value=''></option>
+<TMPL_LOOP NAME=db_locations>
+      <option id='location_<TMPL_VAR location>'><TMPL_VAR location></option>
+</TMPL_LOOP>
+    </select>     
+  </td>
+</tr>
+<tr>
+ <td valign='top'>
+    <h2>Estado</h2>
+    <select name='volstatus' class='formulaire'>
+      <option id='volstatus_All' value=''></option>
+      <option id='volstatus_Append' value='Append'>Abierta</option>
+      <option id='volstatus_Full'   value='Full'>Llena</option>
+      <option id='volstatus_Error'  value='Error'>Error</option>
+      <option id='volstatus_Used'   value='Used'>Usada</option>
+      <option id='volstatus_Purged' value='Purged'>Purgada</option>
+    </select>     
+  </td>
+</tr>
+<tr>
+ <td valign='top'>
+    <h2>Pool</h2>
+    <select name='pool' class='formulaire'>
+      <option id='pool_all>' value=''></option>
+<TMPL_LOOP NAME=db_pools>
+      <option id='pool_<TMPL_VAR name>'><TMPL_VAR name></option>
+</TMPL_LOOP>
+    </select>     
+  </td>
+</tr>
+ <tr>
+  <td valign='bottom'> 
+    <h2>Nombre</h2>
+    <input type='text' name='re_media' 
+      <TMPL_IF qre_media>value=<TMPL_VAR qre_media></TMPL_IF>
+       class='formulaire' size='8'>
+  </td>
+</tr>
+ <tr>
+  <td valign='bottom'> 
+    <h2>Number of items</h2>
+    <input type='text' name='limit' value='<TMPL_VAR limit>' 
+       class='formulaire' size='4'>
+  </td>
+</tr>
+
+</table>
+  <input type="image" name='action' value='media' src='/bweb/update.png'>
+
+</form>
+</div>
+<script type="text/javascript" language="JavaScript">
+  <TMPL_IF volstatus>
+     document.getElementById('volstatus_<TMPL_VAR volstatus>').selected=true;
+  </TMPL_IF>
+
+  <TMPL_LOOP qmediatypes>
+     document.getElementById('mediatype_' + <TMPL_VAR name>).selected = true;
+  </TMPL_LOOP>
+
+  <TMPL_LOOP qpools>
+     document.getElementById('pool_' + <TMPL_VAR name>).selected = true;
+  </TMPL_LOOP>
+  <TMPL_LOOP qlocations>
+     document.getElementById('location_' + <TMPL_VAR name>).selected = true;
+  </TMPL_LOOP>
+
+</script>
+
diff --git a/gui/bweb/lang/es/tpl/display_job.tpl b/gui/bweb/lang/es/tpl/display_job.tpl
new file mode 100644 (file)
index 0000000..73d97ab
--- /dev/null
@@ -0,0 +1,81 @@
+ <div class='titlediv'>
+  <h1 class='newstitle'> Ãšltimos Jobs (<TMPL_VAR Filter>)</h1>
+ </div>
+ <div class='bodydiv'>
+    <table id='id<TMPL_VAR ID>'></table>
+ </div>
+
+<script type="text/javascript" language="JavaScript">
+<TMPL_IF status>
+document.getElementById('status_<TMPL_VAR status>').checked = true;
+</TMPL_IF>
+
+
+
+var header = new Array("IdJob",
+                      "Cliente",
+                      "Nombre Job", 
+                      "FileSet",
+//                     "Pool",
+                       "Nivel",
+                       "Inicio",
+                      "Duración",
+                       "Archivos Job",
+                       "Bytes Job", 
+                       "Errores",
+                      "Estado");
+
+var data = new Array();
+
+<TMPL_LOOP Jobs>
+a = document.createElement('A');
+a.href='?action=job_zoom;jobid=<TMPL_VAR JobId>';
+
+img = document.createElement("IMG");
+img.src=bweb_get_job_img("<TMPL_VAR JobStatus>", <TMPL_VAR joberrors>);
+img.title=jobstatus['<TMPL_VAR JobStatus>']; 
+
+a.appendChild(img);
+
+data.push( new Array(
+"<TMPL_VAR JobId>",
+"<TMPL_VAR Client>",     
+"<TMPL_VAR JobName>",    
+"<TMPL_VAR FileSet>",    
+//"<TMPL_VAR Pool>",
+"<TMPL_VAR Level>",      
+"<TMPL_VAR StartTime>",
+"<TMPL_VAR Duration>",
+"<TMPL_VAR JobFiles>",   
+human_size(<TMPL_VAR JobBytes>),
+"<TMPL_VAR joberrors>",   
+a
+ )
+);
+</TMPL_LOOP>
+
+nrsTable.setup(
+{
+ table_name:     "id<TMPL_VAR ID>",
+ table_header: header,
+ table_data: data,
+ up_icon: up_icon,
+ down_icon: down_icon,
+ prev_icon: prev_icon,
+ next_icon: next_icon,
+ rew_icon:  rew_icon,
+ fwd_icon:  fwd_icon,
+// natural_compare: true,
+ even_cell_color: even_cell_color,
+ odd_cell_color: odd_cell_color, 
+ header_color: header_color,
+ page_nav: true,
+ rows_per_page: rows_per_page,
+ disable_sorting: new Array(10),
+ padding: 3
+}
+);
+
+// get newest backup first
+nrsTables['id<TMPL_VAR ID>'].fieldSort(0);
+</script>
diff --git a/gui/bweb/lang/es/tpl/display_job_zoom.tpl b/gui/bweb/lang/es/tpl/display_job_zoom.tpl
new file mode 100644 (file)
index 0000000..fd9f86b
--- /dev/null
@@ -0,0 +1,129 @@
+ <div class='titlediv'>
+  <h1 class='newstitle'>Información acerca jobs</h1>
+ </div>
+ <div class="bodydiv">
+ <table id='id0'></table>
+ <table><td>
+ <form action='bweb.pl?'>
+  <input type='hidden' name='jobid' value='<TMPL_VAR jobid>'>
+  <label>
+  <input type="image" name='action' value='delete' title='delete this job'
+ onclick="return confirm('¿ Seguro quiere borrar este job del catálogo ?');"
+   src='/bweb/purge.png'> Borrar
+  </label>
+ </form>
+ </td><td>
+ <form action='bweb.pl?'>
+  <TMPL_LOOP volumes>
+   <input type='hidden' name='media' value='<TMPL_VAR VolumeName>'>
+  </TMPL_LOOP>   
+  <label>
+  <input type="image" name='action' value='media' title='view media' 
+   src='/bweb/zoom.png'>Ver medio
+  </label>
+ </form>
+ </td>
+ <td>
+ <form action='bweb.pl?'>
+  <input type='hidden' name='client' value='<TMPL_VAR Client>'>
+  <label>
+  <input type="image" name='action' value='job' title='view <TMPL_VAR Client> jobs' src='/bweb/zoom.png'>Ver jobs
+  </label>
+ </form>
+ </td>
+ <td>
+ <form action='bweb.pl?'>
+  <input type='hidden' name='age' value='2678400'>
+  <input type='hidden' name='client' value='<TMPL_VAR Client>'>
+  <input type='hidden' name='jobname' value='<TMPL_VAR jobname>'>
+  <label>
+  <input type="image" name='action' value='graph' title='view trends'
+   src='/bweb/chart.png'> Ver estadísticas
+  </label>
+ </form>
+ </td>
+ <td>
+ <form action='bweb.pl?'>
+  <input type='hidden' name='fileset' value='<TMPL_VAR FileSet>'>
+  <label>
+  <input type="image" name='action' value='fileset_view' title='view fileset'
+   src='/bweb/zoom.png'> Ver FileSet
+  </label>
+ </form>
+ </td>
+<!-- Remove this to activate bfileview -->
+ <td>
+ <form action='bfileview.pl?'>
+  <input type='hidden' name='jobid' value='<TMPL_VAR jobid>'>
+  <input type='hidden' name='where' value='/'>
+  <label>
+  <input type="image" name='action' value='bfileview' title='view file usage'
+   src='/bweb/colorscm.png' onclick='if (<TMPL_VAR JobFiles> > 50000) { return confirm("Puede demorar, Â¿ Seguro quiere continuar ?")} else { return 1; }'> Ver uso de archivos
+  </label>
+ </form>
+ </td>
+<!-- -->
+ </table>
+</div>
+
+<script type="text/javascript" language='JavaScript'>
+var header = new Array("IdJob",
+                      "Cliente",
+                      "Nombre Job", 
+                      "FileSet",
+                       "Nivel",
+                       "Inicio", 
+                      "Duración",
+                       "Archivos Job",
+                       "Bytes Job",
+                       "Errores",
+                      "Pool",
+                       "Nombre Volumen",
+                      "Estado");
+
+var data = new Array();
+
+img = document.createElement("IMG");
+img.src=bweb_get_job_img("<TMPL_VAR JobStatus>", <TMPL_VAR joberrors>);
+img.title=jobstatus['<TMPL_VAR JobStatus>']; 
+
+data.push( new Array(
+"<TMPL_VAR JobId>",
+"<TMPL_VAR Client>",     
+"<TMPL_VAR JobName>",    
+"<TMPL_VAR FileSet>",    
+"<TMPL_VAR Level>",      
+"<TMPL_VAR StartTime>",
+"<TMPL_VAR duration>",
+"<TMPL_VAR JobFiles>",   
+human_size(<TMPL_VAR JobBytes>),
+"<TMPL_VAR joberrors>",
+"<TMPL_VAR poolname>",
+"<TMPL_LOOP volumes><TMPL_VAR VolumeName>\n</TMPL_LOOP>",   
+img
+ )
+);
+
+nrsTable.setup(
+{
+ table_name:     "id0",
+ table_header: header,
+ table_data: data,
+ up_icon: up_icon,
+ down_icon: down_icon,
+ prev_icon: prev_icon,
+ next_icon: next_icon,
+ rew_icon:  rew_icon,
+ fwd_icon:  fwd_icon,
+// natural_compare: true,
+ even_cell_color: even_cell_color,
+ odd_cell_color: odd_cell_color, 
+ header_color: header_color,
+ page_nav: true,
+ rows_per_page: rows_per_page,
+// disable_sorting: new Array(6)
+ padding: 3
+}
+);
+
+</script>
diff --git a/gui/bweb/lang/es/tpl/display_location.tpl b/gui/bweb/lang/es/tpl/display_location.tpl
new file mode 100644 (file)
index 0000000..14c1d2f
--- /dev/null
@@ -0,0 +1,66 @@
+<br/>
+ <div class='titlediv'>
+  <h1 class='newstitle'>Ubicaciones</h1>
+ </div>
+ <div class="bodydiv">
+   <form action='?' method='get'>
+    <table id='id<TMPL_VAR ID>'></table>
+    <input type="image" name='action' value='location_add' title='Agregar Ubicación' src='/bweb/add.png'>&nbsp;
+    <input type="image" name='action' value='location_del' title='Remover Ubicación' src='/bweb/remove.png'>&nbsp;
+    <input type="image" name='action' value='location_edit' title='Editar Ubicación' src='/bweb/edit.png'>&nbsp;
+
+    <input type="image" name='action' value='media' title='Mostrar contenido'
+     src='/bweb/zoom.png'>
+   </form>
+ </div>
+
+<script type="text/javascript" language="JavaScript">
+
+var header = new Array("Nombre","Activado", "Cost", "Nb volumes", "Selección");
+
+var data = new Array();
+var chkbox;
+
+var img;
+
+<TMPL_LOOP Locations>
+img = document.createElement('IMG');
+img.src = '/bweb/inflag<TMPL_VAR enabled>.png';
+
+chkbox = document.createElement('INPUT');
+chkbox.type  = 'radio';
+chkbox.name  = 'location';
+chkbox.value = '<TMPL_VAR Location>';
+
+data.push( new Array(
+"<TMPL_VAR Location>",
+img,
+"<TMPL_VAR Cost>",
+"<TMPL_VAR name=volnum>",
+chkbox
+ )
+);
+</TMPL_LOOP>
+
+nrsTable.setup(
+{
+ table_name:     "id<TMPL_VAR ID>",
+ table_header: header,
+ table_data: data,
+ up_icon: up_icon,
+ down_icon: down_icon,
+ prev_icon: prev_icon,
+ next_icon: next_icon,
+ rew_icon:  rew_icon,
+ fwd_icon:  fwd_icon,
+// natural_compare: false,
+ even_cell_color: even_cell_color,
+ odd_cell_color: odd_cell_color, 
+ header_color: header_color,
+ page_nav: true,
+ padding: 3,
+// disable_sorting: new Array(5,6),
+ rows_per_page: rows_per_page
+}
+);
+</script>
diff --git a/gui/bweb/lang/es/tpl/display_log.tpl b/gui/bweb/lang/es/tpl/display_log.tpl
new file mode 100644 (file)
index 0000000..f71f209
--- /dev/null
@@ -0,0 +1,9 @@
+<br/>
+ <div class='titlediv'>
+  <h1 class='newstitle'> Log : <TMPL_VAR name> en <TMPL_VAR client> (<TMPL_VAR jobid>)</h1>
+ </div>
+ <div class='bodydiv'>
+  <pre id='log'>
+<TMPL_VAR lines>
+  </pre>
+ </div>
diff --git a/gui/bweb/lang/es/tpl/display_media.tpl b/gui/bweb/lang/es/tpl/display_media.tpl
new file mode 100644 (file)
index 0000000..f803c6e
--- /dev/null
@@ -0,0 +1,91 @@
+ <div class='titlediv'>
+  <h1 class='newstitle'> 
+   Medios
+  </h1>
+ </div>
+ <div class='bodydiv'>
+
+<TMPL_IF Pool>
+<h2>
+Pool : <a href="?action=pool;pool=<TMPL_VAR Pool>">
+         <TMPL_VAR Pool>
+       </a>
+</h2>
+</TMPL_IF>
+<TMPL_IF Location>
+<h2>
+Location : <TMPL_VAR location>
+</h2>
+</TMPL_IF>
+
+   <form action='?action=test' method='get'>
+    <table id='id_pool_<TMPL_VAR ID>'></table>
+      <input type="image" name='action' value='extern' title='Move out' src='/bweb/extern.png' onclick='return confirm("¿Seguro quiere expulsar el medio seleccionado?");'>&nbsp;
+      <input type="image" name='action' value='intern' title='Move in' src='/bweb/intern.png'>&nbsp;
+      <input type="image" name='action' value='update_media' title='Update medium' src='/bweb/edit.png'>&nbsp;
+      <input type="image" name='action' value='media_zoom' title='Informations' src='/bweb/zoom.png'>&nbsp;
+<!--
+      <input type="image" name='action' value='purge' title='Purge' src='/bweb/purge.png'>&nbsp;
+-->
+      <input type="image" name='action' value='prune' title='Prune' src='/bweb/prune.png'>
+   </form>
+ </div>
+
+<script type="text/javascript" language="JavaScript">
+
+var header = new Array("Nombre Volumen","Online","Bytes Vol", "Uso Vol", "Estado Vol",
+                      "Pool", "Tipo Medio",
+                      "Fecha Escritura", "Expiración", "Selección");
+
+var data = new Array();
+var img;
+var chkbox;
+var d;
+
+<TMPL_LOOP Medias>
+d = percent_usage(<TMPL_VAR volusage>);
+
+img = document.createElement('IMG');
+img.src = '/bweb/inflag<TMPL_VAR online>.png';
+
+chkbox = document.createElement('INPUT');
+chkbox.type  = 'checkbox';
+chkbox.name = 'media';
+chkbox.value = '<TMPL_VAR volumename>';
+
+data.push( new Array(
+"<TMPL_VAR volumename>",
+img,
+human_size(<TMPL_VAR volbytes>),
+d,
+"<TMPL_VAR volstatus>",
+"<TMPL_VAR poolname>",
+"<TMPL_VAR mediatype>",
+"<TMPL_VAR lastwritten>",
+"<TMPL_VAR expire>",
+chkbox
+ )
+);
+</TMPL_LOOP>
+
+nrsTable.setup(
+{
+ table_name:     "id_pool_<TMPL_VAR ID>",
+ table_header: header,
+ table_data: data,
+ up_icon: up_icon,
+ down_icon: down_icon,
+ prev_icon: prev_icon,
+ next_icon: next_icon,
+ rew_icon:  rew_icon,
+ fwd_icon:  fwd_icon,
+ even_cell_color: even_cell_color,
+ odd_cell_color: odd_cell_color, 
+ header_color: header_color,
+ page_nav: true,
+ padding: 3,
+ rows_per_page: rows_per_page,
+ disable_sorting: new Array(1,3,9)
+}
+);
+</script>
diff --git a/gui/bweb/lang/es/tpl/display_media_zoom.tpl b/gui/bweb/lang/es/tpl/display_media_zoom.tpl
new file mode 100644 (file)
index 0000000..6f7b564
--- /dev/null
@@ -0,0 +1,163 @@
+<table>
+<td valign='top'>
+ <div class='titlediv'>
+  <h1 class='newstitle'> Medium : <TMPL_VAR volumename> <TMPL_VAR comment></h1>
+ </div>
+ <div class='bodydiv'>
+    <b> Medium Infos</b><br/>
+    <table id='id_info_<TMPL_VAR volumename>'></table>
+    <b> Medium Stats</b><br/>
+    <table id='id_media_<TMPL_VAR volumename>'></table>
+    <b> Job List </b></br>
+    <table id='id_jobs_<TMPL_VAR volumename>'></table>
+    <b> Actions </b></br>
+   <form action='?' method='get'>
+      <input type='hidden' name='media' value='<TMPL_VAR volumename>'>
+<TMPL_IF online>&nbsp;
+      <input type="image" name='action' value='extern' onclick='return confirm("Do you want to eject this medium ?");' title='move out' src='/bweb/extern.png'>&nbsp;
+<TMPL_ELSE>
+      <input type="image" name='action' value='intern' title='move in' src='/bweb/intern.png'>&nbsp;
+</TMPL_IF>
+      <input type="image" name='action' value='update_media' title='Update' src='/bweb/edit.png'>&nbsp;
+      <input type="image" name='action' value='purge' title='Purge' src='/bweb/purge.png' onclick="return confirm('Do you want to purge this volume ?')">&nbsp;
+      <input type="image" name='action' value='prune' title='Prune' src='/bweb/prune.png'>&nbsp;
+<TMPL_IF Locationlog>
+      <a href='#' onclick='document.getElementById("locationlog").style.visibility="visible";'><img title='View location log' src='/bweb/zoom.png'></a>
+</TMPL_IF>
+   </form>
+ </div>
+</td>
+<td valign='top'style="visibility:hidden;" id='locationlog'>
+ <div class='titlediv'>
+  <h1 class='newstitle'> Location log </h1>
+ </div>
+ <div class='bodydiv'>
+<pre>
+ <TMPL_VAR LocationLog>
+</pre>
+ </div>
+</td>
+</table>
+<script type="text/javascript" language="JavaScript">
+
+var header = new Array("Pool","Online","Location","Vol Status", "Vol Bytes", "Expire",
+                      "Retention","Max use duration", "Max jobs" );
+
+var data = new Array();
+var img;
+
+img = document.createElement('IMG');
+img.src = '/bweb/inflag<TMPL_VAR online>.png';
+
+data.push( new Array(
+"<TMPL_VAR poolname>",
+img,
+"<TMPL_VAR location>",
+"<TMPL_VAR volstatus>",
+human_size(<TMPL_VAR nb_bytes>),
+"<TMPL_VAR expire>",
+human_sec(<TMPL_VAR volretention>),
+human_sec(<TMPL_VAR voluseduration>),
+"<TMPL_VAR maxvoljobs>"
+ )
+);
+
+nrsTable.setup(
+{
+ table_name:     "id_info_<TMPL_VAR volumename>",
+ table_header: header,
+ up_icon: up_icon,
+ down_icon: down_icon,
+ prev_icon: prev_icon,
+ next_icon: next_icon,
+ rew_icon:  rew_icon,
+ fwd_icon:  fwd_icon,
+ table_data: data,
+ header_color: header_color,
+ padding: 3,
+ disable_sorting: new Array(1)
+}
+);
+
+var header = new Array( "Vol Mounts", "Recycle count", "Read time", "Write time", "Errors");
+
+var data = new Array();
+data.push( new Array(
+"<TMPL_VAR nb_mounts>",
+"<TMPL_VAR recyclecount>",
+human_sec(<TMPL_VAR volreadtime>),
+human_sec(<TMPL_VAR volwritetime>),
+"<TMPL_VAR nb_errors>"
+ )
+);
+
+nrsTable.setup(
+{
+ table_name:     "id_media_<TMPL_VAR volumename>",
+ table_header: header,
+ up_icon: up_icon,
+ down_icon: down_icon,
+ prev_icon: prev_icon,
+ next_icon: next_icon,
+ rew_icon:  rew_icon,
+ fwd_icon:  fwd_icon,
+ table_data: data,
+ header_color: header_color,
+// disable_sorting: new Array()
+ padding: 3
+}
+);
+
+
+var header = new Array("IdJob","Nombre","Inicio","Tipo",
+                      "Nivel", "Archivos", "Bytes", "Estado");
+
+var data = new Array();
+var a;
+var img;
+
+<TMPL_LOOP jobs>
+a = document.createElement('A');
+a.href='?action=job_zoom;jobid=<TMPL_VAR JobId>';
+
+img = document.createElement("IMG");
+img.src="/bweb/<TMPL_VAR status>.png";
+img.title=jobstatus['<TMPL_VAR status>']; 
+
+a.appendChild(img);
+
+data.push( new Array(
+"<TMPL_VAR jobid>",
+"<TMPL_VAR name>",
+"<TMPL_VAR starttime>",
+"<TMPL_VAR type>",
+"<TMPL_VAR level>",
+"<TMPL_VAR files>",
+human_size(<TMPL_VAR bytes>),
+a
+ )
+);
+</TMPL_LOOP>
+
+nrsTable.setup(
+{
+ table_name:     "id_jobs_<TMPL_VAR volumename>",
+ table_header: header,
+ table_data: data,
+ up_icon: up_icon,
+ down_icon: down_icon,
+ prev_icon: prev_icon,
+ next_icon: next_icon,
+ rew_icon:  rew_icon,
+ fwd_icon:  fwd_icon,
+// natural_compare: false,
+ even_cell_color: even_cell_color,
+ odd_cell_color: odd_cell_color, 
+ header_color: header_color,
+ page_nav: true,
+ padding: 3,
+// disable_sorting: new Array(5,6),
+ rows_per_page: rows_per_page
+}
+);
+</script>
diff --git a/gui/bweb/lang/es/tpl/display_pool.tpl b/gui/bweb/lang/es/tpl/display_pool.tpl
new file mode 100644 (file)
index 0000000..e1d3fd7
--- /dev/null
@@ -0,0 +1,88 @@
+<br/>
+ <div class='titlediv'>
+  <h1 class='newstitle'>Pools</h1>
+ </div>
+ <div class="bodydiv">
+   <form action='?' method='get'>
+    <table id='id<TMPL_VAR ID>'></table>
+    <input type="image" type='submit' name='action' value='media' title='Mostrar contenido' src='/bweb/zoom.png'>
+<TMPL_LOOP MediaType>
+    <input type='hidden' name='mediatype' value=<TMPL_VAR name>>
+</TMPL_LOOP>
+   </form>
+   <br/>
+   Nota: Para modificar las propiedades de un pool, se debe editar la configuración de Bacula
+   y aplicar el comando "reload", Luego se debe ejecutar "update pool=mypool" con la bconsole.
+ </div>
+
+<script type="text/javascript" language="JavaScript">
+
+var header = new Array("Nombre","Reciclado","Retención","Use Duration",
+                       "Máx Jobs/Volumen","Máx Archivos/Volumen", 
+                       "Máx Tamaño/Volumen","Nb volumes", "Estado Volumen", "Uso", "Selección");
+
+var data = new Array();
+var chkbox;
+var img;
+var img2;
+
+<TMPL_LOOP Pools>
+
+img = percent_display([
+<TMPL_IF nb_recycle>{ name: "Reciclado", nb: <TMPL_VAR nb_recycle> },</TMPL_IF>
+<TMPL_IF nb_purged> { name: "Purgado", nb: <TMPL_VAR nb_purged> },</TMPL_IF>
+<TMPL_IF nb_append> { name: "Abierto", nb: <TMPL_VAR nb_append> },</TMPL_IF>
+<TMPL_IF nb_full>   { name: "Lleno", nb: <TMPL_VAR nb_full> },    </TMPL_IF>
+<TMPL_IF nb_disabled>   { name: "Disactivado", nb: <TMPL_VAR nb_disabled> },    </TMPL_IF>
+<TMPL_IF nb_error>  { name: "Error", nb: <TMPL_VAR nb_error> },  </TMPL_IF>
+<TMPL_IF nb_archive>{ name: "Archivado", nb: <TMPL_VAR nb_archive> },</TMPL_IF>
+<TMPL_IF nb_used>   { name: "Usado", nb: <TMPL_VAR nb_used> },    </TMPL_IF>
+<TMPL_IF NAME='nb_read-only'> { name: "Lectura", nb: <TMPL_VAR NAME='nb_read-only'> }, </TMPL_IF>
+{}
+]);
+
+chkbox = document.createElement('INPUT');
+chkbox.type  = 'radio';
+chkbox.value = '<TMPL_VAR Name>';
+chkbox.name  = 'pool';
+
+img2 = percent_usage(<TMPL_VAR poolusage>);
+
+data.push( new Array(
+"<TMPL_VAR Name>",
+"<TMPL_VAR Recycle>",
+human_sec(<TMPL_VAR VolRetention>),
+human_sec(<TMPL_VAR VolUseDuration>),
+"<TMPL_VAR MaxVolJobs>",
+"<TMPL_VAR MaxVolFiles>",
+human_size(<TMPL_VAR MaxVolBytes>),
+"<TMPL_VAR VolNum>",
+img,
+img2,
+chkbox
+ )
+);
+</TMPL_LOOP>
+
+nrsTable.setup(
+{
+ table_name:     "id<TMPL_VAR ID>",
+ table_header: header,
+ table_data: data,
+ up_icon: up_icon,
+ down_icon: down_icon,
+ prev_icon: prev_icon,
+ next_icon: next_icon,
+ rew_icon:  rew_icon,
+ fwd_icon:  fwd_icon,
+// natural_compare: false,
+ even_cell_color: even_cell_color,
+ odd_cell_color: odd_cell_color, 
+ header_color: header_color,
+ page_nav: true,
+ padding: 3,
+// disable_sorting: new Array(5,6),
+ rows_per_page: rows_per_page
+}
+);
+</script>
diff --git a/gui/bweb/lang/es/tpl/end.tpl b/gui/bweb/lang/es/tpl/end.tpl
new file mode 100644 (file)
index 0000000..072a52b
--- /dev/null
@@ -0,0 +1,5 @@
+</div>
+<div style="float: right;"></div>
+</div>
+</body>
+</html>
diff --git a/gui/bweb/lang/es/tpl/error.tpl b/gui/bweb/lang/es/tpl/error.tpl
new file mode 100644 (file)
index 0000000..56ea697
--- /dev/null
@@ -0,0 +1,4 @@
+<h1>Un error ha ocurrido :</h1>
+<pre>
+<TMPL_VAR NAME=error>
+</pre>
diff --git a/gui/bweb/lang/es/tpl/fileset_view.tpl b/gui/bweb/lang/es/tpl/fileset_view.tpl
new file mode 100644 (file)
index 0000000..17d666b
--- /dev/null
@@ -0,0 +1,20 @@
+ <div class='titlediv'>
+  <h1 class='newstitle'> 
+   FileSet <TMPL_VAR fileset>
+  </h1>
+ </div>
+ <div class='bodydiv'>
+
+ <img src="/bweb/add.png" alt="included"> Incluido :
+ <pre>
+<TMPL_LOOP I><TMPL_VAR file>
+</TMPL_LOOP></pre>
+
+ <img src="/bweb/remove.png" alt="excluded"> Excluido :
+ <pre>
+<TMPL_LOOP E><TMPL_VAR file>
+</TMPL_LOOP></pre>
+
+Nota: Cuidado, este es el fileset actual, puede haber cambiado...
+
+ </div>
diff --git a/gui/bweb/lang/es/tpl/fv_file_attribs.tpl b/gui/bweb/lang/es/tpl/fv_file_attribs.tpl
new file mode 100644 (file)
index 0000000..613c854
--- /dev/null
@@ -0,0 +1,12 @@
+<div class='titlediv'>
+  <h1 class='newstitle'> Información acerca <TMPL_VAR filename> </h1>
+</div>
+<div class='bodydiv'>
+   <table>
+    <tr><td>size : </td> <td> <TMPL_VAR size>  </td></tr>
+    <tr><td>ctime :</td> <td> <TMPL_VAR atime> </td></tr>
+    <tr><td>mtime :</td> <td> <TMPL_VAR mtime> </td></tr>
+    <tr><td>atime :</td> <td> <TMPL_VAR atime> </td></tr>
+    <tr><td>md5 :  </td> <td> <TMPL_VAR md5>   </td></tr>
+   </table>
+</div>
diff --git a/gui/bweb/lang/es/tpl/general.tpl b/gui/bweb/lang/es/tpl/general.tpl
new file mode 100644 (file)
index 0000000..f8da969
--- /dev/null
@@ -0,0 +1,30 @@
+
+<script type="text/javascript" language="JavaScript">
+bweb_add_refresh();
+</script>
+<div class='titlediv'>
+  <h1 class="newstitle">
+   Informaciones
+  </h1>
+</div>
+<div class="bodydiv">
+  <table>
+   <tr><td>Cantidad Clientes:</td>  <td> <TMPL_VAR nb_client> </td>
+       <td>Bytes Almacenados:</td> <td> <TMPL_VAR nb_bytes> </td>
+       <td>Cantidad Medios:</td>        <td> <TMPL_VAR nb_media> </td>
+   </tr>
+   <tr><td>Tamaño Base de Datos:</td>      <td> <TMPL_VAR db_size> </td>
+       <td>Cantidad Pools:</td>         <td> <TMPL_VAR nb_pool> </td>
+       <td>Cantidad Jobs:</td>         <td> <TMPL_VAR nb_job> </td>
+   </tr>
+   <tr><td>Jobs fallados (<TMPL_VAR label>):</td> 
+       
+<td <TMPL_IF nb_err> class='joberr' </TMPL_IF>>
+   <TMPL_VAR nb_err> 
+</td>
+       <td></td>         <td></td>
+       <td></td>         <td></td>
+   </tr>
+  
+  </table>
+</div>
diff --git a/gui/bweb/lang/es/tpl/graph.tpl b/gui/bweb/lang/es/tpl/graph.tpl
new file mode 100644 (file)
index 0000000..7683901
--- /dev/null
@@ -0,0 +1,172 @@
+<br/>
+ <div class='titlediv'>
+  <h1 class='newstitle'>Estadísticas</h1>
+ </div>
+ <div class='bodydiv'>
+<table border='0'>
+<td>
+<form name='form1' action='?' method='GET'>
+        <div class="otherboxtitle">
+          Options &nbsp;
+        </div>
+        <div class="otherbox">
+<table border='0'>
+<tr>
+  <td valign='top'>
+    <h2>Nivel</h2>
+    <select name='level' class='formulaire'>
+      <option id='level_Any' value='Any'>Cualquiera</option>
+      <option id='level_F' value='F'>Completo</option>
+      <option id='level_D' value='D'>Diferencial</option>
+      <option id='level_I' value='I'>Incremental</option>
+    </select>     
+  </td><td valign='top'>
+    <h2>Estado</h2>
+    <select name='status' class='formulaire'>
+      <option id='status_Any' value='Any'>Cualquiera</option>
+      <option id='status_T'   value='T'>Ok</option>
+      <option id='status_f'   value='f'>Error</option>
+      <option id='status_A'   value='A'>Cancelado</option>
+    </select>   
+  </td>
+</tr>
+<tr>
+  <td valign='top'>
+    <h2>Tiempo</h2>
+    <select name='age' class='formulaire'>
+      <option id='age_604800'   value='604800'>Esta Semana</option>
+      <option id='age_2678400'  value='2678400'>Últimos 30 días</option>
+      <option id='age_15552000' value='15552000'>Últimos 6 meses</option>
+    </select>     
+  </td>
+  <td  valign='top'>
+    <h2>Tamaño</h2>
+     Ancho: &nbsp;<input class='formulaire' type='text' 
+                         name='width' value='<TMPL_VAR width>' size='4'><br/>
+     Alto:  <input type='text' class='formulaire' 
+                name='height' value='<TMPL_VAR height>' size='4'><br/>
+  </td>
+</tr>
+<tr>
+  <td valign='top'> 
+    <h2>Clients</h2>
+    <select name='client' size='15' class='formulaire' multiple>
+<TMPL_LOOP NAME=db_clients>
+      <option id='client_<TMPL_VAR clientname>'><TMPL_VAR clientname></option>
+</TMPL_LOOP>
+    </select>
+  </td>
+  <td valign='top'> 
+    <h2>Nombre Job</h2>
+    <select name='jobname' size='15' class='formulaire' multiple>
+<TMPL_LOOP NAME=db_jobnames>
+      <option><TMPL_VAR NAME=jobname></option>
+</TMPL_LOOP>
+    </select>
+  </td>
+</tr>
+<tr>
+  <td> <h2> Tipo </h2> 
+ <select name='graph' class='formulaire'>
+   <option id='job_size'     value='job_size' title="Job size per job for the period">Tamaño Job</option>
+   <option id='job_duration' value='job_duration' title="Job duration per job for the period">Duración Job</option>
+   <option id='job_rate' value='job_rate' title="Job rate per job for the period">Velocidad Job</option>
+   <option id='job_file' value='job_file' title="Number of backed files per job for the period">Archivos Job</option>
+   <option id='job_count_phour' value='job_count_phour' title="Number of jobs per hour for the period">Job por hora</option>
+   <option id='job_count_pday' value='job_count_pday' title="Number of jobs per day for the period">Job por dia</option>
+   <option id='job_avg_phour' value='job_avg_pday' title="Average backup size per day for the period">Job avg B/hour</option>
+   <option id='job_avg_pday' value='job_avg_pday' title="Average backup size per hour for the period">Job avg B/day</option>
+   <option id='job_sum_phour' value='job_sum_phour' title="Job size per hour">Job total B/hour</option>
+   <option id='job_sum_pday' value='job_sum_pday' title="Job size per day">Job total B/day</option>
+   <option id='job_count_hour' value='job_count_hour' title="Number of jobs per hour for the period">Jobs Count (h)</option>
+   <option id='job_count_day' value='job_count_day' title="Number of jobs per day for the period">Jobs Count (d)</option>
+   <option id='job_avg_hour' value='job_avg_hour' title="Average backup size per hour for the period">Job avg size (h)</option>
+   <option id='job_avg_day' value='job_avg_day' title="Average backup size per day for the period">Job avg size (d)</option>
+   <option id='job_sum_hour' value='job_sum_hour' title="Job size per hour for the period">Job Bytes (h)</option>
+   <option id='job_sum_day' value='job_sum_day' title="Job size per day for the period">Job Bytes (d)</option>
+ </select>
+  </td>
+  <td valign='bottom'> 
+    <h2>Número de items</h2>
+    <input type='text' name='limit' value='<TMPL_VAR NAME=limit>' 
+        class='formulaire' size='4'>
+  </td>
+</tr>
+<tr>
+<td><h2> Tipo de Gráfico </h2> 
+  <select name='gtype' class='formulaire'>
+    <option id='gtype_bars' value='bars'>Barras</option>
+<!--  <option id='gtype_bars3d' value='bars3d'>Barras3d</option> -->
+    <option id='gtype_lines' value='lines'>Líneas</option>
+    <option id='gtype_linespoints' value='linespoints'>Líneas y puntos</option>
+</td>
+<td>
+  <input type='hidden' name='action' value='graph'>
+  <input type='submit' name='_action' value='graficar' class='formulaire'> 
+</td>
+</tr>
+</table>
+        </div>
+
+</form>
+</td>
+<td>
+
+ <div class="otherboxtitle">
+ Current &nbsp;
+ </div>
+ <div class="otherbox">
+ <img src='bgraph.pl?<TMPL_VAR NAME=url>' alt='Nothing to display, Try a bigger date range'>
+ </div>
+
+</td>
+</table>
+ </div>
+
+<script type="text/javascript" language="JavaScript">
+
+  <TMPL_LOOP qclients>
+     document.getElementById('client_' + <TMPL_VAR name>).selected = true;
+  </TMPL_LOOP>
+
+  <TMPL_IF status>
+     document.getElementById('status_<TMPL_VAR status>').selected=true;
+  </TMPL_IF>
+
+  <TMPL_IF level>
+     document.getElementById('level_<TMPL_VAR level>').selected=true;
+  </TMPL_IF>
+
+  <TMPL_IF age>
+     document.getElementById('age_<TMPL_VAR age>').selected=true;
+  </TMPL_IF>
+
+<TMPL_IF qfilesets>
+  for (var i=0; i < document.form1.fileset.length; ++i) {
+  <TMPL_LOOP qfilesets>
+     if (document.form1.fileset[i].value == <TMPL_VAR name>) {
+        document.form1.fileset[i].selected = true;
+     }
+  </TMPL_LOOP>
+  }
+</TMPL_IF>
+
+<TMPL_IF qjobnames>
+  for (var i=0; i < document.form1.jobname.length; ++i) {
+  <TMPL_LOOP qjobnames>
+     if (document.form1.jobname[i].value == <TMPL_VAR name>) {
+        document.form1.jobname[i].selected = true;
+     }
+  </TMPL_LOOP>
+  }
+</TMPL_IF>
+
+  <TMPL_IF graph>
+     document.getElementById('<TMPL_VAR graph>').selected=true;
+  </TMPL_IF>
+
+  <TMPL_IF gtype>
+     document.getElementById('gtype_<TMPL_VAR gtype>').selected=true;
+  </TMPL_IF>
+
+</script>
diff --git a/gui/bweb/lang/es/tpl/help_extern.tpl b/gui/bweb/lang/es/tpl/help_extern.tpl
new file mode 100644 (file)
index 0000000..d46cdaa
--- /dev/null
@@ -0,0 +1,45 @@
+<br/>
+<div class='titlediv'>
+ <h1 class='newstitle'> Ayuda para expulsar medios (part 1/2)</h1>
+</div>
+<div class='bodydiv'>
+Se seleccionará el mejor candidato para expulsar. Se le pedirá
+realizar su selección en la próxima pantalla.
+  <form action="?" method='GET'>
+   <table>
+    <tr><td>Pool:</td>      
+        <td><select name='pool' class='formulaire' multiple>
+<TMPL_LOOP NAME=db_pools>
+             <option><TMPL_VAR NAME=name></option>
+</TMPL_LOOP>
+           </select>
+        </td>
+    </tr>
+    <tr><td>Tipo Medio:</td>      
+        <td><select name='mediatype' class='formulaire' multiple>
+<TMPL_LOOP NAME=db_mediatypes>
+             <option><TMPL_VAR NAME=mediatype></option>
+</TMPL_LOOP>
+           </select>
+        </td>
+    </tr>
+    <tr><td> Ubicación : </td>
+        <td><select name='location' class='formulaire'>
+  <TMPL_LOOP NAME=db_locations>
+      <option id='loc_<TMPL_VAR NAME=location>' value='<TMPL_VAR NAME=location>'><TMPL_VAR NAME=location></option>
+  </TMPL_LOOP>
+    </select>
+        </td>
+    </tr>
+    <tr>
+        <td>Número de medio <br/> a expulsar:</td> 
+        <td> <input type='text' name='limit' size='3' class='formulaire' 
+              value='10'> </td>
+    </tr>
+    <tr>
+        <td><input type="image" name='action' value='compute_extern_media' title='Siguiente' src='/bweb/next.png'>
+        </td><td/>
+    </tr>
+   </table>
+   </form>
+</div>
diff --git a/gui/bweb/lang/es/tpl/help_extern_compute.tpl b/gui/bweb/lang/es/tpl/help_extern_compute.tpl
new file mode 100644 (file)
index 0000000..ac1a3db
--- /dev/null
@@ -0,0 +1,67 @@
+<br/>
+ <div class='titlediv'>
+  <h1 class='newstitle'> Ayuda para expulsar medios (part 2/2)</h1>
+ </div>
+ <div class='bodydiv'>
+  Ahora puede verificar la selección y expulsar el medio.
+   <form action='?' method='get'>
+    <table id='compute'></table>
+    <table><tr>
+    <td style='align: left;'>
+    <input type="image" onclick='javascript:window.history.go(-2);' title='Volver' src='/bweb/prev.png'>
+    </td><td style='align: right;'>
+    <input type="image" name='action' value='extern' src='/bweb/extern.png' title='Expulsar selección'>
+   </td></tr>
+   </form>
+ </div>
+
+<script type="text/javascript" language="JavaScript">
+
+var header = new Array("Nombre Volumen","Estado Volumen",
+                       "Tipo Medio","Nombre Pool","Fecha Escritura", 
+                       "Expiración", "Selección");
+
+var data = new Array();
+var chkbox;
+
+<TMPL_LOOP NAME=Medias>
+chkbox = document.createElement('INPUT');
+chkbox.type  = 'checkbox';
+chkbox.value = '<TMPL_VAR NAME=volumename>';
+chkbox.name  = 'media';
+chkbox.checked = 'on';
+
+data.push( new Array(
+"<TMPL_VAR NAME=volumename>",
+"<TMPL_VAR NAME=volstatus>",
+"<TMPL_VAR NAME=mediatype>",
+"<TMPL_VAR NAME=name>",
+"<TMPL_VAR NAME=lastwritten>",
+"<TMPL_VAR NAME=expire>",
+chkbox
+ )
+);
+</TMPL_LOOP>
+
+nrsTable.setup(
+{
+ table_name:     "compute",
+ table_header: header,
+ table_data: data,
+ up_icon: up_icon,
+ down_icon: down_icon,
+ prev_icon: prev_icon,
+ next_icon: next_icon,
+ rew_icon:  rew_icon,
+ fwd_icon:  fwd_icon,
+// natural_compare: false,
+ even_cell_color: even_cell_color,
+ odd_cell_color: odd_cell_color, 
+ header_color: header_color,
+ page_nav: true,
+ padding: 3,
+// disable_sorting: new Array(5,6)
+ rows_per_page: rows_per_page
+}
+);
+</script>
diff --git a/gui/bweb/lang/es/tpl/help_intern.tpl b/gui/bweb/lang/es/tpl/help_intern.tpl
new file mode 100644 (file)
index 0000000..314764c
--- /dev/null
@@ -0,0 +1,52 @@
+<br/>
+<div class='titlediv'>
+  <h1 class='newstitle'> Ayuda para cargar medios (part 1/2)</h1>
+</div>
+<div class="bodydiv">
+Se seleccionará el mejor candidato para cargar. Se le pedirá
+realizar su selección en la próxima pantalla.
+  <form action="?" method='GET'>
+   <table>
+    <tr><td>Pool:</td>      
+        <td><select name='pool' class='formulaire' multiple>
+<TMPL_LOOP db_pools>
+             <option><TMPL_VAR name></option>
+</TMPL_LOOP>
+           </select>
+        </td>
+    </tr>
+    <tr><td>Tipo Medio:</td>      
+        <td><select name='mediatype' class='formulaire' multiple>
+<TMPL_LOOP db_mediatypes>
+             <option><TMPL_VAR mediatype></option>
+</TMPL_LOOP>
+           </select>
+        </td>
+    </tr>
+    <tr><td>
+    Ubicación : 
+    </td><td><select name='location' class='formulaire'>
+  <TMPL_LOOP db_locations>
+      <option value='<TMPL_VAR location>'><TMPL_VAR location></option>
+  </TMPL_LOOP>
+    </select>
+    </td>
+    </tr>
+    <tr>
+        <td>Expiración :</td> 
+        <td> <input type='checkbox' name='expired' class='formulaire' 
+                checked> </td>
+    </tr>
+    <tr>
+        <td>Número de medio <br/> a cargar:</td> 
+        <td> <input type='text' name='limit' class='formulaire' 
+                size='3' value='10'> </td>
+    </tr>
+    <tr>
+        <td><input type="image" name='action' value='compute_intern_media' 
+                title='Siguiente' src='/bweb/next.png'>
+        </td><td/>
+    </tr>
+   </table>
+   </form>
+</div>
diff --git a/gui/bweb/lang/es/tpl/help_intern_compute.tpl b/gui/bweb/lang/es/tpl/help_intern_compute.tpl
new file mode 100644 (file)
index 0000000..8a8cd5c
--- /dev/null
@@ -0,0 +1,67 @@
+<br/>
+ <div class='titlediv'>
+  <h1 class='newstitle'> Ayuda para cargar medios (part 2/2)</h1>
+ </div>
+ <div class='bodydiv'>
+  Ahora puede verificar la selección y cargar el medio
+   <form action='?' method='get'>
+    <table id='compute'></table>
+    <table><tr>
+    <td style='align: left;'>
+    <input type="image" onclick='javascript:window.history.go(-2);' title='Volver' src='/bweb/prev.png'>
+    </td><td style='align: right;'>
+    <input type="image" name='action' value='move_media' title='Cargar selección' src='/bweb/intern.png'>
+   </td></tr>
+   </form>
+ </div>
+
+<script type="text/javascript" language="JavaScript">
+
+var header = new Array("Nombre Volumen","Estado Volumen",
+                       "Tipo de Medio","Nombre Pool","Fecha Escritura", 
+                       "Expiración", "Selección");
+
+var data = new Array();
+var chkbox;
+
+<TMPL_LOOP NAME=Medias>
+chkbox = document.createElement('INPUT');
+chkbox.type  = 'checkbox';
+chkbox.name = 'media';
+chkbox.value= '<TMPL_VAR NAME=volumename>';
+chkbox.checked = 'on';
+
+data.push( new Array(
+"<TMPL_VAR NAME=volumename>",
+"<TMPL_VAR NAME=volstatus>",
+"<TMPL_VAR NAME=mediatype>",
+"<TMPL_VAR NAME=name>",
+"<TMPL_VAR NAME=lastwritten>",
+"<TMPL_VAR NAME=expire>",
+chkbox
+ )
+);
+</TMPL_LOOP>
+
+nrsTable.setup(
+{
+ table_name:     "compute",
+ table_header: header,
+ table_data: data,
+ up_icon: up_icon,
+ down_icon: down_icon,
+ prev_icon: prev_icon,
+ next_icon: next_icon,
+ rew_icon:  rew_icon,
+ fwd_icon:  fwd_icon,
+// natural_compare: false,
+ even_cell_color: even_cell_color,
+ odd_cell_color: odd_cell_color, 
+ header_color: header_color,
+ page_nav: true,
+ padding: 3,
+// disable_sorting: new Array(5,6)
+ rows_per_page: rows_per_page
+}
+);
+</script>
diff --git a/gui/bweb/lang/es/tpl/install.tpl b/gui/bweb/lang/es/tpl/install.tpl
new file mode 100644 (file)
index 0000000..749c5d2
--- /dev/null
@@ -0,0 +1,9 @@
+<br/>
+<div class='titlediv'>
+  <h1 class='newstitle'> Install notes </h1>
+</div>
+<div class='bodydiv'>
+
+
+
+</div>
diff --git a/gui/bweb/lang/es/tpl/location_add.tpl b/gui/bweb/lang/es/tpl/location_add.tpl
new file mode 100644 (file)
index 0000000..7b5ab20
--- /dev/null
@@ -0,0 +1,28 @@
+<br/>
+<div class='titlediv'>
+  <h1 class='newstitle'> Nueva Ubicación </h1>
+</div>
+<div class='bodydiv'>
+   <form action="?" method='get'>
+    <table>
+     <tr><td>Ubicación :</td>     
+         <td> 
+          <input class="formulaire" type='text' value='' size='32' name='location'> 
+         </td>
+     </tr>
+     <tr><td>Cost :</td> 
+         <td> <input class="formulaire" type='text' value='10' name='cost' size='3'>
+         </td>
+     </tr>
+     <tr><td>Activado :</td> 
+         <td> <input class="formulaire" type='checkbox' value='10' name='enabled'>
+         </td>
+     </tr>
+    </table>
+    <input type="image" name='action' value='location_add' title="save"
+      src='/bweb/save.png'>
+   </form>
+
+Tips: It's a good idea to have a location per autochanger. 
+
+</div>
diff --git a/gui/bweb/lang/es/tpl/location_edit.tpl b/gui/bweb/lang/es/tpl/location_edit.tpl
new file mode 100644 (file)
index 0000000..11856be
--- /dev/null
@@ -0,0 +1,26 @@
+<br/>
+<div class='titlediv'>
+  <h1 class='newstitle'> Ubicación : <TMPL_VAR Location></h1>
+</div>
+<div class='bodydiv'>
+   <form action="?" method='get'>
+    <input type='hidden' name='location' value='<TMPL_VAR location>'>
+    <table>
+     <tr><td>Ubicación :</td>     
+         <td> 
+          <input class="formulaire" type='text' value='<TMPL_VAR location>' size='32' name='newlocation'> 
+         </td>
+     </tr>
+     <tr><td>Cost :</td> 
+         <td> <input class="formulaire" type='text' value='<TMPL_VAR cost>' name='cost' size='3'>
+         </td>
+     </tr>
+     <tr><td>Activado :</td> 
+         <td> <input class="formulaire" type='checkbox' name='enabled' <TMPL_IF enabled> checked </TMPL_IF> >
+         </td>
+     </tr>
+    </table>
+    <input type="image" name='action' value='location_save'
+     src='/bweb/save.png'>
+   </form>
+</div>
diff --git a/gui/bweb/lang/es/tpl/move_media.tpl b/gui/bweb/lang/es/tpl/move_media.tpl
new file mode 100644 (file)
index 0000000..797d766
--- /dev/null
@@ -0,0 +1,85 @@
+<br/>
+ <div class='titlediv'>
+  <h1 class='newstitle'>Mover Medio</h1>
+ </div>
+ <div class="bodydiv">
+   <form action='?' method='get'>
+    <table id='id<TMPL_VAR NAME=ID>'></table>
+    <table border='0'>
+    <tr><td> Nueva Ubicación: </td><td>
+<select name='newlocation' class='formulaire'>
+    <TMPL_LOOP NAME=db_locations>
+    <option value='<TMPL_VAR NAME=location>'><TMPL_VAR NAME=location></option>
+    </TMPL_LOOP>
+</select>
+    </td></tr><tr><td> Estado: </td><td>
+<select name='volstatus' class='formulaire'>
+    <option value=''>No Actualizar</option>
+    <option value='Append'>Listo</option>
+    <option value='Archive'>Archivado</option>
+    <option value='Disabled'>Desactivado</option>
+    <option value='Cleaning'>Limpieza</option>
+    <option value='Error'>Error</option>
+    <option value='Full'>Lleno</option>
+    <option value='Purged'>Purgado</option>
+    <option value='Read-Only'>ectura</option>
+    <option value='Recycle'>Reciclado</option>
+    <option value='Used'>Usado</option>
+</select>
+    </td><tr><td> Usuario: </td><td>
+<input type='text' name='user' value='<TMPL_VAR loginname>' class='formulaire'>
+    </td></tr>
+    </td></tr><tr><td> Comentario: </td><td>
+<textarea name="comment" class='formulaire'></textarea>
+    </td></tr>
+    </table>
+    <label>
+    <input type="image" type='submit' name='action' value='change_location' src='/bweb/apply.png'> Mover
+    </label>
+   </form>
+ </div>
+
+<script type="text/javascript" language="JavaScript">
+
+var header = new Array("Nombre Volumen", "Ubicación", "Selección");
+
+var data = new Array();
+var chkbox;
+
+<TMPL_LOOP NAME=medias>
+chkbox = document.createElement('INPUT');
+chkbox.type  = 'checkbox';
+chkbox.value = '<TMPL_VAR name=volumename>';
+chkbox.name  = 'media';
+chkbox.checked = 1;
+
+data.push( new Array(
+"<TMPL_VAR NAME=volumename>",
+"<TMPL_VAR NAME=location>",
+chkbox
+ )
+);
+</TMPL_LOOP>
+
+nrsTable.setup(
+{
+ table_name:     "id<TMPL_VAR NAME=ID>",
+ table_header: header,
+ table_data: data,
+ up_icon: up_icon,
+ down_icon: down_icon,
+ prev_icon: prev_icon,
+ next_icon: next_icon,
+ rew_icon:  rew_icon,
+ fwd_icon:  fwd_icon,
+// natural_compare: false,
+ even_cell_color: even_cell_color,
+ odd_cell_color: odd_cell_color, 
+ header_color: header_color,
+ page_nav: true,
+ padding: 3,
+// disable_sorting: new Array(5,6),
+ rows_per_page: rows_per_page
+}
+);
+</script>
diff --git a/gui/bweb/lang/es/tpl/run_job.tpl b/gui/bweb/lang/es/tpl/run_job.tpl
new file mode 100644 (file)
index 0000000..f0692e4
--- /dev/null
@@ -0,0 +1,33 @@
+<br/>
+ <div class='titlediv'>
+  <h1 class='newstitle'> Jobs Definidos: </h1>
+ </div>
+ <div class='bodydiv'>
+  <form name='form1' action='?' method='GET'>  
+  <table border='0'>
+
+   <tr><td>Nombre Job: </td><td>
+   <select name='job'>
+    <TMPL_LOOP jobs>
+     <option value='<TMPL_VAR name>'>
+       <TMPL_VAR name>
+     </option>
+    </TMPL_LOOP>
+   </select>
+   </td></tr>
+   </table>
+   <br/>
+   <label>
+   <input type="image" name='action' value='enable_job' title='Activar'
+    src='/bweb/inflag1.png'> Activado
+   </label>
+   <label>
+   <input type="image" name='action' value='disable_job' title='Desactivar'
+    src='/bweb/inflag0.png'> Desactivado
+   </label>
+   <label>
+   <input type="image" name='action' value='run_job_mod' title='Ejecutar Ahora'
+    src='/bweb/R.png'> Ejecutar Ahora
+   </label>
+  </form>
+ </div>
diff --git a/gui/bweb/lang/es/tpl/run_job_mod.tpl b/gui/bweb/lang/es/tpl/run_job_mod.tpl
new file mode 100644 (file)
index 0000000..0229122
--- /dev/null
@@ -0,0 +1,138 @@
+<br/>
+ <div class='titlediv'>
+  <h1 class='newstitle'> Ejecutar Job : <TMPL_VAR job> on <TMPL_VAR client></h1>
+ </div>
+ <div class='bodydiv'>
+  <form name='form1' action='?' method='GET'>  
+  <table border='0'>
+
+   <tr><td>Nombre del Job: </td><td>
+   <select name='job'>
+    <TMPL_LOOP jobs>
+     <option value='<TMPL_VAR name>'>
+       <TMPL_VAR name>
+     </option>
+    </TMPL_LOOP>
+   </select>
+   </td></tr><tr><td>Pool: </td><td>
+
+   <select name='pool'>        
+     <option value=''></option>
+    <TMPL_LOOP pools>
+     <option value='<TMPL_VAR name>'>
+       <TMPL_VAR name>
+     </option>
+    </TMPL_LOOP>
+   </select>
+   </td></tr><tr><td>Cliente: </td><td>
+
+   <select name='client'>
+    <TMPL_LOOP clients>
+     <option value='<TMPL_VAR name>'>
+       <TMPL_VAR name>
+     </option>
+    </TMPL_LOOP>
+   </select>
+
+   </td></tr><tr><td>FileSet: </td><td>
+   <select name='fileset'>
+    <TMPL_LOOP filesets>
+     <option value='<TMPL_VAR name>'>
+       <TMPL_VAR name>
+     </option>
+    </TMPL_LOOP>
+   </select>
+
+   </td></tr><tr><td>Almacenamiento: </td><td>
+   <select name='storage'>
+    <TMPL_LOOP storages>
+     <option value='<TMPL_VAR name>'>
+       <TMPL_VAR name>
+     </option>
+    </TMPL_LOOP>
+   </select>
+
+   </td></tr><tr><td>Nivel: </td><td>
+   <select name='level'>
+     <option id='level_Incremental' value='Incremental'>Incremental</option>
+     <option id='level_Full' value='Full'>Completo</option>
+     <option id='level_Differential' value='Differential'>Diferencial</option>
+   </select>
+
+   </td></tr><tr id='more1' style="visibility:hidden"><td>Hora Inicio: </td><td>
+   <input class='formulaire' 
+         type='text' title='YYYY-MM-DD HH:MM:SS'
+          size='17' name='when' value='<TMPL_VAR when>'>
+
+   </td></tr><tr id='more2' style="visibility:hidden"><td>Prioridad: </td><td>
+   <input class='formulaire' type='text' 
+          size='3' name='priority' value='<TMPL_VAR priority>'>
+
+   </td></tr>
+   </table>
+   <br/>
+  <label onclick='
+           document.getElementById("more1").style.visibility="visible";
+           document.getElementById("more2").style.visibility="visible";'>
+  <img title='Muestra más opciones' src='/bweb/add.png'>Más opciones</label>
+  <label>
+  <input type="image" name='action' value='run_job_now' title='Ejecutar job'
+   src='/bweb/R.png'>Ejecutar Ahora
+  </label>
+  <label>
+  <input type="image" name='action' value='fileset_view' title='Ver FileSet'
+   src='/bweb/zoom.png'>Ver FileSet
+  </label>
+  </form>
+ </div>
+
+<script type="text/javascript" language="JavaScript">
+  <TMPL_IF job>
+     ok=1;
+     for(var i=0; ok && i < document.form1.job.length; i++) {
+       if (document.form1.job[i].value == '<TMPL_VAR job>') {
+           document.form1.job[i].selected=true;
+           ok=0;
+       }
+     }
+  </TMPL_IF>
+  <TMPL_IF client>
+     ok=1;
+     for(var i=0; ok && i < document.form1.client.length; i++) {
+       if (document.form1.client[i].value == '<TMPL_VAR client>') {
+           document.form1.client[i].selected=true;
+           ok=0;
+       }
+     }
+  </TMPL_IF>
+  <TMPL_IF pool>
+     ok=1;
+     for(var i=0; ok && i < document.form1.pool.length; i++) {
+       if (document.form1.pool[i].value == '<TMPL_VAR pool>') {
+           document.form1.pool[i].selected=true;
+           ok=0;
+       }
+     }
+  </TMPL_IF>
+  <TMPL_IF storage>
+     ok=1;
+     for(var i=0; ok && i < document.form1.storage.length; i++) {
+       if (document.form1.storage[i].value == '<TMPL_VAR storage>') {
+           document.form1.storage[i].selected=true;
+           ok=0;
+       }
+     }
+  </TMPL_IF>
+  <TMPL_IF level>
+<!--     document.getElementById('level_<TMPL_VAR level>').selected=true; -->
+  </TMPL_IF>
+  <TMPL_IF fileset>
+     ok=1;
+     for(var i=0; ok && i < document.form1.fileset.length; i++) {
+       if (document.form1.fileset[i].value == '<TMPL_VAR fileset>') {
+           document.form1.fileset[i].selected=true;
+           ok=0;
+       }
+     }
+  </TMPL_IF>
+</script>
diff --git a/gui/bweb/lang/es/tpl/running_job.tpl b/gui/bweb/lang/es/tpl/running_job.tpl
new file mode 100644 (file)
index 0000000..7acda4e
--- /dev/null
@@ -0,0 +1,96 @@
+<br/>
+ <div class='titlediv'>
+  <h1 class='newstitle'> Jobs en Ejecución </h1>
+ </div>
+ <div class='bodydiv'>
+   <form action='?' method='GET'>
+   <table id='id<TMPL_VAR NAME=ID>'></table>
+   <br/>
+<label>
+<input type='image' name='action' value='dsp_cur_job' 
+ title='Ver job' src='/bweb/zoom.png'>
+</label>
+<label>
+<input type="image" type='submit' name='action' value='cancel_job'
+ onclick="return confirm('Esta seguro que quiere cancelar el Job?')"
+ title='Cancelar job' src='/bweb/cancel.png'>
+</label>
+   </form>
+
+ </div>
+
+<script type="text/javascript" language="JavaScript">
+var header = new Array("JobId",
+                       "Cliente",
+                       "Nombre Job", 
+                       "Nivel",
+                       "Inicio", 
+                       "Duración", 
+//                       "Archivos Job",
+//                       "Bytes Job", 
+                       "Estado",
+                       "Selección"
+        );
+
+var data = new Array();
+var chkbox;
+var img;
+
+<TMPL_LOOP NAME=Jobs>
+a = document.createElement('A');
+a.href='?action=dsp_cur_job;jobid=<TMPL_VAR JobId>';
+
+img = document.createElement("IMG");
+img.src = '/bweb/<TMPL_VAR NAME=JobStatus>.png';
+img.title = jobstatus['<TMPL_VAR NAME=JobStatus>'];
+
+a.appendChild(img);
+
+chkbox = document.createElement('INPUT');
+chkbox.type  = 'radio';
+chkbox.name = 'jobid';
+chkbox.value = '<TMPL_VAR NAME=jobid>';
+
+data.push( new Array(
+"<TMPL_VAR NAME=JobId>",
+"<TMPL_VAR NAME=ClientName>",     
+"<TMPL_VAR NAME=JobName>",    
+joblevel['<TMPL_VAR NAME=Level>'],      
+"<TMPL_VAR NAME=StartTime>",
+"<TMPL_VAR NAME=duration>",
+//"<TMPL_VAR NAME=JobFiles>",   
+//"<TMPL_VAR NAME=JobBytes>",
+a,
+chkbox
+ )
+);
+</TMPL_LOOP>
+
+nrsTable.setup(
+{
+ table_name:     "id<TMPL_VAR NAME=ID>",
+ table_header: header,
+ table_data: data,
+ up_icon: up_icon,
+ down_icon: down_icon,
+ prev_icon: prev_icon,
+ next_icon: next_icon,
+ rew_icon:  rew_icon,
+ fwd_icon:  fwd_icon,
+// natural_compare: true,
+ even_cell_color: even_cell_color,
+ odd_cell_color: odd_cell_color, 
+ header_color: header_color,
+ page_nav: true,
+ rows_per_page: rows_per_page,
+// disable_sorting: new Array(6)
+ padding: 3
+}
+);
+
+// get newest backup first
+nrsTables['id<TMPL_VAR NAME=ID>'].fieldSort(0);
+
+bweb_add_refresh();
+
+</script>
diff --git a/gui/bweb/lang/es/tpl/scheduled_job.tpl b/gui/bweb/lang/es/tpl/scheduled_job.tpl
new file mode 100644 (file)
index 0000000..4b23904
--- /dev/null
@@ -0,0 +1,71 @@
+<br/>
+ <div class='titlediv'>
+  <h1 class='newstitle'> Próximos Jobs </h1>
+ </div>
+ <div class='bodydiv'>
+    <form action='?' method='GET'>
+     <table id='id<TMPL_VAR ID>'></table>
+     <label>
+     <input type="image" name='action' value='run_job_mod'
+      src='/bweb/R.png' title='Ejecutar Ahora'>  Ejecutar Ahora
+     </label>
+     <label>
+      <input type="image" name='action' value='disable_job'
+       src='/bweb/inflag0.png' title='Desactivar'> Desactivar
+      </label>
+    </form>
+ </div>
+
+<script type="text/javascript" language="JavaScript">
+
+var header = new Array("Programado",
+                       "Nivel",
+                      "Tipo",
+                      "Prioridad", 
+                       "Nombre",
+                       "Volumen",
+                      "Selección");
+
+var data = new Array();
+var chkbox;
+
+<TMPL_LOOP list>
+chkbox = document.createElement('INPUT');
+chkbox.type  = 'radio';
+chkbox.name = 'job';
+chkbox.value = '<TMPL_VAR name>';
+
+data.push( new Array(
+"<TMPL_VAR date>",    
+"<TMPL_VAR level>",
+"<TMPL_VAR type>",     
+"<TMPL_VAR priority>",    
+"<TMPL_VAR name>",      
+"<TMPL_VAR volume>",
+chkbox
+ )
+);
+</TMPL_LOOP>
+
+nrsTable.setup(
+{
+ table_name:     "id<TMPL_VAR ID>",
+ table_header: header,
+ table_data: data,
+ up_icon: up_icon,
+ down_icon: down_icon,
+ prev_icon: prev_icon,
+ next_icon: next_icon,
+ rew_icon:  rew_icon,
+ fwd_icon:  fwd_icon,
+// natural_compare: true,
+ even_cell_color: even_cell_color,
+ odd_cell_color: odd_cell_color, 
+ header_color: header_color,
+ page_nav: true,
+ rows_per_page: rows_per_page,
+// disable_sorting: new Array(6),
+ padding: 3
+}
+);
+</script>
diff --git a/gui/bweb/lang/es/tpl/stats.tpl b/gui/bweb/lang/es/tpl/stats.tpl
new file mode 100644 (file)
index 0000000..a3bd1ce
--- /dev/null
@@ -0,0 +1,9 @@
+<div class='titlediv'>
+  <h1 class='newstitle'> Estadísticas </h1>
+</div>
+<div class='bodydiv'>
+<a href='?action=job;age=172800;jobtype=B'>
+<img width='450' height='200' src='bgraph.pl?age=2678400;width=450;height=200;graph=job_sum_day;limit=500;action=graph;legend=off' alt='Nothing to display'>
+</a>
+</div>
+
diff --git a/gui/bweb/lang/es/tpl/update_location.tpl b/gui/bweb/lang/es/tpl/update_location.tpl
new file mode 100644 (file)
index 0000000..11b4335
--- /dev/null
@@ -0,0 +1,65 @@
+<br/>
+ <div class='titlediv'>
+  <h1 class='newstitle'>Actualizar Ubicación del Medio</h1>
+ </div> 
+ <div class="bodydiv">
+   <form action='?' method='get'>
+    <table id='id<TMPL_VAR NAME=ID>'></table>
+    New location : <select class='formulaire' name='newlocation'>
+   <TMPL_LOOP NAME=db_locations>
+      <option id='loc_<TMPL_VAR NAME=location>' value='<TMPL_VAR NAME=location>'><TMPL_VAR NAME=location></option>
+   </TMPL_LOOP>
+  </select>
+  <input type="image" name='action' value='save_location' src='/bweb/apply.png'>
+   </form>
+ </div>
+
+<script type="text/javascript" language="JavaScript">
+
+var header = new Array("Nombre del Volumen", "Ubicación", "Selección");
+
+var data = new Array();
+var chkbox;
+
+<TMPL_LOOP NAME=medias>
+chkbox = document.createElement('INPUT');
+chkbox.type  = 'checkbox';
+chkbox.value = '<TMPL_VAR name=volumename>';
+chkbox.name  = 'media';
+chkbox.checked = 1;
+
+data.push( new Array(
+"<TMPL_VAR NAME=volumename>",
+"<TMPL_VAR NAME=location>",
+chkbox
+ )
+);
+</TMPL_LOOP>
+
+nrsTable.setup(
+{
+ table_name:     "id<TMPL_VAR NAME=ID>",
+ table_header: header,
+ table_data: data,
+ up_icon: up_icon,
+ down_icon: down_icon,
+ prev_icon: prev_icon,
+ next_icon: next_icon,
+ rew_icon:  rew_icon,
+ fwd_icon:  fwd_icon,
+// natural_compare: false,
+ even_cell_color: even_cell_color,
+ odd_cell_color: odd_cell_color, 
+ header_color: header_color,
+ page_nav: true,
+ padding: 3,
+// disable_sorting: new Array(5,6)
+ rows_per_page: rows_per_page
+}
+);
+
+<TMPL_IF qnewlocation>
+ document.getElementById('loc_' + <TMPL_VAR qnewlocation>).selected=true;
+</TMPL_IF>
+
+</script>
diff --git a/gui/bweb/lang/es/tpl/update_media.tpl b/gui/bweb/lang/es/tpl/update_media.tpl
new file mode 100644 (file)
index 0000000..e9f41be
--- /dev/null
@@ -0,0 +1,159 @@
+<br/>
+<div class='titlediv'>
+ <h1 class='newstitle'> Actualizar Medio <TMPL_VAR volumename></h1>
+</div>
+<div class='bodydiv'>
+  <form name='form1' action="?" method='GET'>
+   <table>
+    <tr><td>Nombre del Volumen:</td>
+        <td><input type='text' name='media' class='formulaire' value='<TMPL_VAR volumename>' title='Change this to update an other media'>
+        </td>
+    </tr>
+    <tr><td>Pool:</td>
+        <td><select name='pool' class='formulaire'>
+<TMPL_LOOP db_pools>
+             <option value='<TMPL_VAR name>'><TMPL_VAR name></option>
+</TMPL_LOOP>
+           </select>
+        </td>
+    </tr>
+    <tr><td>Estado:</td>
+        <td><select name='volstatus' class='formulaire'>
+           <option value='Append'>Listo</option>
+           <option value='Archive'>Archivado</option>
+           <option value='Disabled'>Desactivado</option>
+           <option value='Cleaning'>Limpieza</option>
+           <option value='Error'>Error</option>
+          <option value='Full'>Lleno</option>
+           <option value='Read-Only'>Lectura</option>
+           <option value='Used'>Usado</option>
+           </select>
+        </td>
+    </tr>
+
+    <tr><td>Slot:</td>
+        <td> 
+          <input class='formulaire' type='text' 
+                 name='slot' value='<TMPL_VAR slot>'>
+        </td>
+    </tr>
+
+    <tr><td>Cargado:</td>
+        <td> 
+          <input class='formulaire' type='checkbox' 
+               name='inchanger' <TMPL_IF inchanger>checked</TMPL_IF>>
+        </td>
+    </tr>
+
+    <tr><td> Ubicación : </td>
+        <td><select name='location' class='formulaire'>
+        <option value=''></option>
+  <TMPL_LOOP db_locations>
+      <option value='<TMPL_VAR location>'><TMPL_VAR location></option>
+  </TMPL_LOOP>
+    </select>
+        </td>
+    </tr>
+    <tr><td> Período de Retención: </td>
+        <td>
+          <input class='formulaire' type='text' title='ex: 3 days, 1 month'
+               name='volretention' value='<TMPL_VAR volretention>'>
+        </td>
+    </tr>
+    <tr><td> Use duration: </td>
+        <td>
+          <input class='formulaire' type='text' title='ex: 3 days, 1 month'
+               name='voluseduration' value='<TMPL_VAR voluseduration>'>
+        </td>
+    </tr>
+    <tr><td> Jobs Máximos: </td>
+        <td>
+          <input class='formulaire' type='text' title='ex: 10'
+               name='maxvoljobs' value='<TMPL_VAR maxvoljobs>'>
+        </td>
+    </tr>
+    <tr><td> Archivos Máximos: </td>
+        <td>
+          <input class='formulaire' type='text' title='ex: 10000'
+               name='maxvolfiles' value='<TMPL_VAR maxvolfiles>'>
+        </td>
+    </tr>
+    <tr><td> Bytes Máximos: </td>
+        <td>
+          <input class='formulaire' type='text' title='ex: 10M, 11G'
+               name='maxvolbytes' value='<TMPL_VAR maxvolbytes>'>
+        </td>
+    </tr>
+    <tr><td>Recycle Pool:</td>
+        <td><select name='poolrecycle' class='formulaire'>
+<TMPL_LOOP db_pools>
+             <option value='<TMPL_VAR name>'><TMPL_VAR name></option>
+</TMPL_LOOP>
+           </select>
+        </td>
+    </tr>
+    <tr><td> Comentario: </td>
+        <td>
+          <input class='formulaire' type='text' title='a comment'
+               name='comment' value='<TMPL_VAR comment>'>
+        </td>
+    </tr>
+
+    </table>
+<table>
+ <td>
+ <label>
+  <input type="image" name='action' value='do_update_media' src='/bweb/apply.png'> Apply
+  </label>
+  <label>
+  <input type="image" name='action' title='Update from pool'
+    value='update_from_pool' src='/bweb/update.png'> Actualizar del Pool
+  </label>
+ </form>
+ </td>
+ <td>
+  <form action='?' method='GET'>
+   <input type='hidden' name='pool' value='<TMPL_VAR poolname>'>
+   <label>
+    <input type="image" name='action' value='media'
+     src='/bweb/zoom.png'> Ver Pool
+   </label>
+  </form>
+ </td>
+</table>
+</div>
+
+<script type="text/javascript" language='JavaScript'>
+var ok=1;
+for (var i=0; ok && i < document.form1.pool.length; ++i) {
+   if (document.form1.pool[i].value == '<TMPL_VAR poolname>') {
+      document.form1.pool[i].selected = true;
+      ok=0;
+   }
+}
+
+ok=1;
+for (var i=0; ok && i < document.form1.pool.length; ++i) {
+   if (document.form1.poolrecycle[i].value == '<TMPL_VAR poolrecycle>') {
+      document.form1.poolrecycle[i].selected = true;
+      ok=0;
+   }
+}
+
+ok=1;
+for (var i=0; ok && i < document.form1.location.length; ++i) {
+   if (document.form1.location[i].value == '<TMPL_VAR location>') {
+      document.form1.location[i].selected = true;
+      ok=0;
+   }
+}
+
+ok=1;
+for (var i=0; ok && i < document.form1.volstatus.length; ++i) {
+   if (document.form1.volstatus[i].value == '<TMPL_VAR volstatus>') {
+      document.form1.volstatus[i].selected = true;
+      ok=0;
+   }
+}
+
+</script>
index d5fdb7cf3c3001044c8dec61f56f177b8b10f66d..847c404059ad66ea4868737a867d066642c5b77a 100644 (file)
      <tr><td>fv_write_path :</td> 
          <td> <input class="formulaire" title="Ce répertoire doit Ãªtre accessible en Ã©criture pour apache et Ãªtre sous /bweb/fv" type='text' value='<TMPL_VAR fv_write_path>' size='64' name='fv_write_path'> 
          </td></tr>
+     <tr><td>stat_job_table :</td> 
+         <td> <input class="formulaire" title="Vous pouvez choisir une autre table que Job pour calculer vos statisques" type='text' value='<TMPL_IF stat_job_table><TMPL_VAR stat_job_table><TMPL_ELSE>Job</TMPL_IF>' size='64' name='stat_job_table'> 
+         </td></tr>
      <tr><td>bconsole :</td> 
          <td> <input class="formulaire" title="/chemin/vers/bconsole -n -c /chemin/vers/bconsole.conf" type='text' value='<TMPL_VAR NAME=bconsole>' size='64' name='bconsole'> 
          </td></tr>
+     <tr><td>display_log_time :</td>
+         <td> <input class="formulaire" title="affiche les heures dans les logs" type='checkbox' name='display_log_time' <TMPL_IF display_log_time> checked='checked' value='on' </TMPL_IF> >
+         </td></tr>
      <tr><td>debug :</td> 
-         <td> <input class="formulaire" type='checkbox' name='debug'> 
+         <td> <input class="formulaire" type='checkbox' name='debug' <TMPL_IF debug> checked='checked' value='on' </TMPL_IF> 
          </td></tr>
     </table>
     <input type="image" name='action' value='apply_conf' src='/bweb/save.png'>
index a028858e71a12bf577ff44788617a013f676997e..c179d74b810a2a3abd09450987e46d21743b96aa 100644 (file)
@@ -15,7 +15,9 @@
     <tr><td title="/chemin/vers/votre/template_dir">template_dir :</td> <td> <TMPL_VAR template_dir> </td></tr>
     <tr><td title="/chemin/vers/une/font.ttf">graph_font :</td> <td> <TMPL_VAR graph_font> </td></tr>
     <tr><td title="Ce répertoire doit Ãªtre accessible en ecriture pour apache et Ãªtre sous /bweb/fv">fv_write_path :</td> <td> <TMPL_VAR fv_write_path> </td></tr>
+    <tr><td title="Vous pouvez utiliser une autre table que Job pour vos statistiques">stat_job_table :</td> <td> <TMPL_IF stat_job_table><TMPL_VAR stat_job_table><TMPL_ELSE>Job</TMPL_IF> </td></tr>
     <tr><td title="/chemin/vers/bconsole -n -c /chemin/vers/bconsole.conf">bconsole :</td> <td> <TMPL_VAR bconsole> </td></tr>
+    <tr><td title="affiche les heures dans le log des jobs">display_log_time :</td> <td> <TMPL_VAR display_log_time> </td></tr>
     <tr><td>debug :</td> <td> <TMPL_VAR debug> </td></tr>
     <TMPL_IF achs>
     <tr>  <td><b>Robotique (Autochanger)</b></td>  <td/></tr>
index f205dd0407012296f6538a340d9a273df437f1a0..0402547dabab2c7098eaa89570d360ef570ba8a2 100644 (file)
@@ -22,6 +22,7 @@
     <select name='status' class='formulaire'>
       <option id='status_Any' value='Any'>Tous</option>
       <option id='status_T'   value='T'>Ok</option>
+      <option id='status_W'   value='W'>Warning</option>
       <option id='status_f'   value='f'>Erreur</option>
       <option id='status_A'   value='A'>Annulé</option>
     </select>     
index 15b508173aae7970ab6b7b7904db20c1dd97a511..3ac58e2cbfa51f08d25b991edfd39791dba7e66e 100644 (file)
@@ -5,16 +5,16 @@
  </div>
  <div class='bodydiv'>
 
- <img src="/bweb/add.png" alt="included"> Ce qui est inclu :
+ <img src="/bweb/add.png" alt="included"> Ce qui est inclus :
  <pre>
 <TMPL_LOOP I><TMPL_VAR file>
 </TMPL_LOOP></pre>
 
- <img src="/bweb/remove.png" alt="excluded"> Ce qui est exclu :
+ <img src="/bweb/remove.png" alt="excluded"> Ce qui est exclus :
  <pre>
 <TMPL_LOOP E><TMPL_VAR file>
 </TMPL_LOOP></pre>
 
-Tips : Attention, ceci est le FileSet courant, sur une ancienne sauvegarde, il peut avoir changé.
+Tips : Attention ceci est le FileSet courant. Il peut avoir changàsur une ancienne sauvegarde.
 
  </div>
index f85c0090d191ee1e0b96e1c1ea3758e4f01fb0fc..49b5c5529fcb95a5a8bca51ffc0626a1c3a48ee1 100644 (file)
@@ -14,7 +14,7 @@
          <td> <input class="formulaire" type='text' value='10' name='cost' size='3'>
          </td>
      </tr>
-     <tr><td>Enabled :</td> 
+     <tr><td>En ligne :</td> 
          <td> <input class="formulaire" type='checkbox' value='10' name='enabled'>
          </td>
      </tr>
index c178dc3a651707fc6706c3a5feddc55e9bedb704..8676a3f8a542ae39ed999eb2fcf9b7773a236aa8 100644 (file)
@@ -207,7 +207,7 @@ use CGI;
 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\.-]+)$/,
@@ -215,6 +215,8 @@ our %k_re = ( dbi      => qr/^(dbi:(Pg|mysql):(?:\w+=[\w\d\.-]+;?)+)$/i,
              bconsole    => qr!^(.+)?$!,
              syslog_file => qr!^(.+)?$!,
              log_dir     => qr!^(.+)?$!,
+             stat_job_table => qr!^(\w*)$!,
+             display_log_time => qr!^(on)?$!,
              );
 
 =head1 FUNCTION
@@ -860,12 +862,13 @@ sub send_to_io
 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;
@@ -901,13 +904,17 @@ sub clear_io
        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";
            }
        }
     }
@@ -969,7 +976,7 @@ WHERE Media.VolumeName IN ($media_list)
 
            } else {            # empty or no label
                push @{ $param }, {realslot => $slot,
-                                  volstatus => 'Unknow',
+                                  volstatus => 'Unknown',
                                   volumename => $self->{slot}->[$slot]} ;
            }
        } else {                # empty
@@ -1834,7 +1841,9 @@ sub get_param
            $ret{status} = $1;
            if ($1 eq 'f') {
                $limit .= "AND Job.JobStatus IN ('f','E') ";            
-           } else {
+           } elsif ($1 eq 'W') {
+               $limit .= "AND Job.JobStatus = 'T' AND Job.JobErrors > 0 ";             
+            } else {
                $limit .= "AND Job.JobStatus = '$1' ";          
            }
        }
@@ -1923,6 +1932,7 @@ SELECT  Job.JobId       AS jobid,
        Job.Name        AS jobname,
         Level           AS level,
         StartTime       AS starttime,
+        EndTime         AS endtime,
         Pool.Name       AS poolname,
         JobFiles        AS jobfiles, 
         JobBytes        AS jobbytes,
@@ -2406,7 +2416,7 @@ sub change_location
     }
     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");
 
@@ -2432,7 +2442,7 @@ INSERT LocationLog (Date, Comment, MediaId, LocationId, NewVolStatus)
     $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");
@@ -2618,9 +2628,11 @@ WHERE JobStatus IN ('C','R','B','e','D','F','S','m','M','s','j','c','d','t','p')
                   "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}) {
@@ -2643,6 +2655,7 @@ WHERE Media.VolumeName IN ($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();
@@ -2651,11 +2664,12 @@ WHERE Media.VolumeName IN ($arg->{jmedias})
 
        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
@@ -2712,7 +2726,8 @@ sub ach_get
        return undef;
     }
 
-    $a->{bweb} = $self;
+    $a->{bweb}  = $self;
+    $a->{debug} = $self->{debug};
 
     return $a;
 }
@@ -2868,28 +2883,23 @@ sub do_update_media
        $update .= " pool=$arg->{pool} " ;
     }
 
-    $arg->{volretention} ||= 0 ; 
-    if ($arg->{volretention}) {
+    if (defined $arg->{volretention}) {
        $update .= " volretention=\"$arg->{volretention}\" " ;
     }
 
-    $arg->{voluseduration} ||= 0 ; 
-    if ($arg->{voluseduration}) {
+    if (defined $arg->{voluseduration}) {
        $update .= " voluse=\"$arg->{voluseduration}\" " ;
     }
 
-    $arg->{maxvoljobs} ||= 0;
-    if ($arg->{maxvoljobs}) {
+    if (defined $arg->{maxvoljobs}) {
        $update .= " maxvoljobs=$arg->{maxvoljobs} " ;
     }
     
-    $arg->{maxvolfiles} ||= 0;
-    if ($arg->{maxvolfiles}) {
+    if (defined $arg->{maxvolfiles}) {
        $update .= " maxvolfiles=$arg->{maxvolfiles} " ;
     }    
 
-    $arg->{maxvolbytes} ||= 0;
-    if ($arg->{maxvolbytes}) {
+    if (defined $arg->{maxvolbytes}) {
        $update .= " maxvolbytes=$arg->{maxvolbytes} " ;
     }    
 
@@ -2949,12 +2959,16 @@ sub get_job_log
 {
     my ($self) = @_;
 
-    my $arg = $self->get_form('jobid');
+    my $arg = $self->get_form('jobid', 'limit', 'offset');
     unless ($arg->{jobid}) {
        return $self->error("Can't get jobid");
     }
 
-    my $t = CGI::param('time') || '';
+    if ($arg->{limit} == 100) {
+        $arg->{limit} = 1000;
+    }
+
+    my $t = CGI::param('time') || $self->{info}->{display_log_time} || '';
 
     my $query = "
 SELECT Job.Name as name, Client.Name as clientname
@@ -2975,7 +2989,9 @@ SELECT Time AS time, LogText AS log
     OR (Log.JobId = 0 AND Time >= (SELECT StartTime FROM Job WHERE JobId=$arg->{jobid}) 
                       AND Time <= (SELECT COALESCE(EndTime,NOW()) FROM Job WHERE JobId=$arg->{jobid})
        )
- ORDER BY LogId;
+ ORDER BY LogId
+ LIMIT $arg->{limit}
+ OFFSET $arg->{offset}
 ";
 
     my $log = $self->dbh_selectall_arrayref($query);
@@ -2995,6 +3011,8 @@ SELECT Time AS time, LogText AS log
                     jobid => $arg->{jobid},
                     name  => $row->{name},
                     client => $row->{clientname},
+                    offset => $arg->{offset},
+                    limit  => $arg->{limit},
                 }, 'display_log.tpl');
 }
 
@@ -3009,6 +3027,16 @@ sub label_barcodes
        return $self->error("Can't find autochanger name");
     }
 
+    my $a = $self->ach_get($arg->{ach});
+    unless ($a) {
+       return $self->error("Can't find autochanger name in configuration");
+    } 
+
+    my $storage = $a->get_drive_name($arg->{drive});
+    unless ($storage) {
+       return $self->error("Can't get your drive name");
+    }
+
     my $slots = '';
     my $t = 300 ;
     if ($arg->{slots}) {
@@ -3019,12 +3047,27 @@ sub label_barcodes
     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 => $arg->{ach},
+    $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 
+                             FROM Pool
+                            WHERE Name = 'Scratch')
+       AND (LocationId = 0 OR LocationId IS NULL)
+");
+
 }
 
 sub purge
index 8ac9df276f6ef5546431c1ff3aa648e988f5da2d..316ea223d658a8cc6e364f45ea7f2a5c8d0038cb 100644 (file)
@@ -14,7 +14,7 @@
 
 <script type="text/javascript" language="JavaScript">
 if (navigator.appName == 'Konqueror') {
-       alert("Sorry at this moment, bweb works only with mozilla.");
+        alert("Sorry at this moment, bweb works only with mozilla.");
 }
 </script>
 
@@ -30,13 +30,13 @@ if (navigator.appName == 'Konqueror') {
      <li><a href="bweb.pl?action=restore" title="Launch brestore">Restore</a> </li>
    </ul>
  </li>
- <li style="padding: 0.25em 2em;">Medias
+ <li style="padding: 0.25em 2em;">Media
   <ul>
      <li><a href="bweb.pl?action=pool">Pools</a> </li>
      <li><a href="bweb.pl?action=location">Locations</a> </li>
-     <li><a href="bweb.pl?action=media">All Medias</a><hr></li>
-     <li><a href="bweb.pl?action=extern_media">Eject Medias</a> </li>
-     <li><a href="bweb.pl?action=intern_media">Load Medias</a> </li>
+     <li><a href="bweb.pl?action=media">All Media</a><hr></li>
+     <li><a href="bweb.pl?action=extern_media">Eject Media</a> </li>
+     <li><a href="bweb.pl?action=intern_media">Load Media</a> </li>
   </ul>
  </li>
 <TMPL_IF achs>
index 3e7fe994fe87d26d389c65fac18214153f766095..c918cf29885afad17cc10ab0b76d6598c24ae707 100644 (file)
          </td></tr>
      <tr><td>fv_write_path :</td> 
          <td> <input class="formulaire" title="This folder must be writable by apache user and must be accessible on /bweb/fv" type='text' value='<TMPL_VAR fv_write_path>' size='64' name='fv_write_path'> 
+     <tr><td>stat_job_table :</td> 
+         <td> <input class="formulaire" title="You can choose the Job table that you want to use to get statistics" type='text' value='<TMPL_IF stat_job_table><TMPL_VAR stat_job_table><TMPL_ELSE>Job</TMPL_IF>' size='64' name='stat_job_table'> 
          </td></tr>
      <tr><td>bconsole :</td> 
          <td> <input class="formulaire" type='text' value='<TMPL_VAR bconsole>' size='64' name='bconsole'> 
          </td></tr>
+     <tr><td>display_log_time :</td> 
+         <td> <input class="formulaire" title="display log timestamp" type='checkbox' name='display_log_time' <TMPL_IF display_log_time> checked='checked' value='on' </TMPL_IF> > 
+         </td></tr>
      <tr><td>debug :</td> 
-         <td> <input class="formulaire" type='checkbox' name='debug'> 
+         <td> <input class="formulaire" type='checkbox' name='debug' <TMPL_IF debug> checked='checked' value='on' </TMPL_IF> 
          </td></tr>
     </table>
     <input type="image" name='action' value='apply_conf' src='/bweb/save.png'>
index a505b0375948e3de8c3fd75ac460270fe3eba10a..5056458da267066bd9b71c9ad0b1ffc10ed21e56 100644 (file)
@@ -15,7 +15,9 @@
     <tr><td title="/path/to/your/template_dir">template_dir :</td> <td> <TMPL_VAR template_dir> </td></tr>
     <tr><td title="/path/to/a/font.ttf">graph_font :</td> <td> <TMPL_VAR graph_font> </td></tr>
     <tr><td title="This folder must be writable by apache user and must be accessible on /bweb/fv">fv_write_path :</td> <td> <TMPL_VAR fv_write_path> </td></tr>
+    <tr><td title="You can choose the Job table that you want to use to get statistics">stat_job_table :</td> <td> <TMPL_IF stat_job_table><TMPL_VAR stat_job_table><TMPL_ELSE>Job</TMPL_IF> </td></tr>
     <tr><td title="/path/to/bconsole -n -c /path/to/bconsole.conf">bconsole :</td> <td> <TMPL_VAR bconsole> </td></tr>
+    <tr><td title="display timestamp in job log">display_log_time :</td> <td> <TMPL_VAR display_log_time> </td></tr>
     <tr><td>debug :</td> <td> <TMPL_VAR debug> </td></tr>
     <TMPL_IF achs>
     <tr>  <td><b>Autochanger</b></td>  <td/></tr>
index 19a7c4df350847852e4ba8105e4f9879ac042376..d93cd8e24233377d4fb808fb6b585b3261da9708 100644 (file)
@@ -52,8 +52,8 @@ nrsTable.setup(
  odd_cell_color: odd_cell_color, 
  header_color: header_color,
  page_nav: true,
- rows_per_page: rows_per_page,
-// disable_sorting: new Array(1)
+// disable_sorting: new Array(1),
+ rows_per_page: rows_per_page
 }
 );
 </script>
index 370a8e1493ca7c13ecd7f3e562bae2cf7890abdb..5368ed591e7c6b13205d20a2b86f60b28a4913f5 100644 (file)
@@ -22,6 +22,7 @@
     <select name='status' class='formulaire'>
       <option id='status_Any' value='Any'>Any</option>
       <option id='status_T'   value='T'>Ok</option>
+      <option id='status_W'   value='W'>Warning</option>
       <option id='status_f'   value='f'>Error</option>
       <option id='status_A'   value='A'>Canceled</option>
     </select>     
index 8203ef13ca91b23485117600de74fa5762a9800a..f8b29fe1b89b50ad15e779ce210a13a112b54aef 100644 (file)
   </label>
  </form>
  </td>
-<!-- Remove this to activate bfileview
+<!-- Remove this to activate bfileview -->
  <td>
  <form action='bfileview.pl?'>
   <input type='hidden' name='jobid' value='<TMPL_VAR jobid>'>
   <input type='hidden' name='where' value='/'>
   <label>
   <input type="image" name='action' value='bfileview' title='view file usage'
-   src='/bweb/colorscm.png' onclick='if (<TMPL_VAR JobFiles> > 5000) { return confirm("It could take long time, do you want to continue ?")} else { return 1; }'> View file usage
+   src='/bweb/colorscm.png' onclick='if (<TMPL_VAR JobFiles> > 50000) { return confirm("It could take long time, do you want to continue ?")} else { return 1; }'> View file usage
   </label>
  </form>
  </td>
--->
+<!-- -->
  </table>
 </div>
 
index 2ebbc35e6d2122b3614b103093dd7aa499cf56c4..e4a029b44fec3a6195fcdcd89408435abf47dbd0 100644 (file)
@@ -22,8 +22,8 @@ Location : <TMPL_VAR location>
     <table id='id_pool_<TMPL_VAR ID>'></table>
       <input type="image" name='action' value='extern' title='Move out' src='/bweb/extern.png' onclick='return confirm("Do you want to eject selected media ?");'>&nbsp;
       <input type="image" name='action' value='intern' title='Move in' src='/bweb/intern.png'>&nbsp;
-      <input type="image" name='action' value='update_media' title='Update media' src='/bweb/edit.png'>&nbsp;
-      <input type="image" name='action' value='media_zoom' title='Informations' src='/bweb/zoom.png'>&nbsp;
+      <input type="image" name='action' value='update_media' title='Update medium' src='/bweb/edit.png'>&nbsp;
+      <input type="image" name='action' value='media_zoom' title='Information' src='/bweb/zoom.png'>&nbsp;
 <!--
       <input type="image" name='action' value='purge' title='Purge' src='/bweb/purge.png'>&nbsp;
 -->
@@ -34,8 +34,8 @@ Location : <TMPL_VAR location>
 <script type="text/javascript" language="JavaScript">
 
 var header = new Array("Volume Name","Online","Vol Bytes", "Vol Usage", "Vol Status",
-                      "Pool", "Media Type",
-                      "Last Written", "When expire ?", "Select");
+                       "Pool", "Media Type",
+                       "Last Written", "When expire ?", "Select");
 
 var data = new Array();
 var img;
index c0503a1cbe4e7f337df37df571b887f89dd903cf..6dcadbad3569a5628e159b36a3406eb075c2c2d8 100644 (file)
@@ -1,12 +1,12 @@
 <table>
 <td valign='top'>
  <div class='titlediv'>
-  <h1 class='newstitle'> Media : <TMPL_VAR volumename> <TMPL_VAR comment></h1>
+  <h1 class='newstitle'> Medium : <TMPL_VAR volumename> <TMPL_VAR comment></h1>
  </div>
  <div class='bodydiv'>
-    <b> Media Infos</b><br/>
+    <b> Medium Infos</b><br/>
     <table id='id_info_<TMPL_VAR volumename>'></table>
-    <b> Media Stats</b><br/>
+    <b> Medium Stats</b><br/>
     <table id='id_media_<TMPL_VAR volumename>'></table>
     <b> Job List </b></br>
     <table id='id_jobs_<TMPL_VAR volumename>'></table>
@@ -14,7 +14,7 @@
    <form action='?' method='get'>
       <input type='hidden' name='media' value='<TMPL_VAR volumename>'>
 <TMPL_IF online>&nbsp;
-      <input type="image" name='action' value='extern' onclick='return confirm("Do you want to eject this media ?");' title='move out' src='/bweb/extern.png'>&nbsp;
+      <input type="image" name='action' value='extern' onclick='return confirm("Do you want to eject this medium ?");' title='move out' src='/bweb/extern.png'>&nbsp;
 <TMPL_ELSE>
       <input type="image" name='action' value='intern' title='move in' src='/bweb/intern.png'>&nbsp;
 </TMPL_IF>
index 3148e0fe7dea917d24efc6032e0db69aebed0e0f..9891c837152a2dd54b2ae39fa78a3e8a5ed66413 100644 (file)
 </TMPL_LOOP>
    </form>
    <br/>
-   Tips: To modify pool properties, you have to edit your bacula configuration
-   and reload it. After, you have to run "update pool=mypool" on bconsole.
+   Tips: To modify pool properties, you have to edit your Bacula configuration
+   and reload it. After, you have to run "update pool=mypool" with bconsole.
  </div>
 
 <script type="text/javascript" language="JavaScript">
 
 var header = new Array("Name","Recycle","Retention","Use Duration",
-                      "Max job per volume","Max file per volume", 
+                       "Max jobs per volume","Max files per volume", 
                        "Max volume size","Nb volumes", "Vol Status", "Usage", "Select");
 
 var data = new Array();
index 154b805627b691ac3772b37ec258d83006ac981b..e8d15f134efe91b085c9540e24e32c8a1e7c333b 100644 (file)
@@ -1,4 +1,4 @@
-<h1>An error as occured :</h1>
+<h1>An error has occurred :</h1>
 <pre>
 <TMPL_VAR NAME=error>
-</pre>
\ No newline at end of file
+</pre>
index 68f4343a45edc818adca633d21fde5f1c734bc9c..3a53cc3f8d16b5eda624e924f9ae3ecccbd0d993 100644 (file)
@@ -15,6 +15,6 @@
 <TMPL_LOOP E><TMPL_VAR file>
 </TMPL_LOOP></pre>
 
-Tips: Warning, this is the current fileset, it could have change...
+Tips: Warning, this is the current fileset, it could have change...
 
  </div>
index 0032c5b520dfaccbb32d317b5632b2ecf8146870..858e7bdac36e67dfb73133e4e1c2631a03c7566c 100644 (file)
@@ -1,5 +1,5 @@
 <div class='titlediv'>
-  <h1 class='newstitle'> Informations about <TMPL_VAR filename> </h1>
+  <h1 class='newstitle'> Information about <TMPL_VAR filename> </h1>
 </div>
 <div class='bodydiv'>
    <table>
index 3f3f467fceabcbc21f56faccbb8fe5135ffae37a..a8629395be73b8fd8a6a79449f35ee0bae76d23f 100644 (file)
@@ -4,7 +4,7 @@ bweb_add_refresh();
 </script>
 <div class='titlediv'>
   <h1 class="newstitle">
-   Informations
+   Information
   </h1>
 </div>
 <div class="bodydiv">
index 5ad94e1aa07f4a1b64223782af61afa590ba471c..c80a58f645a8b904ac22e9586774377a6798b5fa 100644 (file)
@@ -6,7 +6,7 @@
 <table border='0'>
 <td>
 <form name='form1' action='?' method='GET'>
-       <div class="otherboxtitle">
+        <div class="otherboxtitle">
           Options &nbsp;
         </div>
         <div class="otherbox">
@@ -42,9 +42,9 @@
   <td  valign='top'>
     <h2>Size</h2>
      Width: &nbsp;<input class='formulaire' type='text' 
-                        name='width' value='<TMPL_VAR width>' size='4'><br/>
+                         name='width' value='<TMPL_VAR width>' size='4'><br/>
      Height:  <input type='text' class='formulaire' 
-               name='height' value='<TMPL_VAR height>' size='4'><br/>
+                name='height' value='<TMPL_VAR height>' size='4'><br/>
   </td>
 </tr>
 <tr>
    <option id='job_size'     value='job_size' title="Job size per job for the period">Job Size</option>
    <option id='job_duration' value='job_duration' title="Job duration per job for the period">Job Duration</option>
    <option id='job_rate' value='job_rate' title="Job rate per job for the period">Job Rate</option>
-   <option id='job_file' value='job_file' title="Number of backped file per job for the period">Job Files</option>
-   <option id='job_count_phour' value='job_count_phour' title="Number of job per hour for the period">Job per hour</option>
-   <option id='job_count_pday' value='job_count_pday' title="Number of job per day for the period">Job per day</option>
+   <option id='job_file' value='job_file' title="Number of backed files per job for the period">Job Files</option>
+   <option id='job_count_phour' value='job_count_phour' title="Number of jobs per hour for the period">Job per hour</option>
+   <option id='job_count_pday' value='job_count_pday' title="Number of jobs per day for the period">Job per day</option>
    <option id='job_avg_phour' value='job_avg_pday' title="Average backup size per day for the period">Job avg B/hour</option>
    <option id='job_avg_pday' value='job_avg_pday' title="Average backup size per hour for the period">Job avg B/day</option>
    <option id='job_sum_phour' value='job_sum_phour' title="Job size per hour">Job total B/hour</option>
    <option id='job_sum_pday' value='job_sum_pday' title="Job size per day">Job total B/day</option>
-   <option id='job_count_hour' value='job_count_hour' title="Number of job per hour for the period">Jobs Count (h)</option>
-   <option id='job_count_day' value='job_count_day' title="Number of job per day for the period">Jobs Count (d)</option>
+   <option id='job_count_hour' value='job_count_hour' title="Number of jobs per hour for the period">Jobs Count (h)</option>
+   <option id='job_count_day' value='job_count_day' title="Number of jobs per day for the period">Jobs Count (d)</option>
    <option id='job_avg_hour' value='job_avg_hour' title="Average backup size per hour for the period">Job avg size (h)</option>
    <option id='job_avg_day' value='job_avg_day' title="Average backup size per day for the period">Job avg size (d)</option>
    <option id='job_sum_hour' value='job_sum_hour' title="Job size per hour for the period">Job Bytes (h)</option>
@@ -89,7 +89,7 @@
   <td valign='bottom'> 
     <h2>Number of items</h2>
     <input type='text' name='limit' value='<TMPL_VAR NAME=limit>' 
-       class='formulaire' size='4'>
+        class='formulaire' size='4'>
   </td>
 </tr>
 <tr>
   </TMPL_IF>
 
 </script>
-
index 0c15d2c2714d347400c02f34ee3762a1d736f715..15fd28563985978dbe52fa9ed005d7de01439126 100644 (file)
@@ -1,10 +1,10 @@
 <br/>
 <div class='titlediv'>
- <h1 class='newstitle'> Help to eject media (part 1/2)</h1>
+ <h1 class='newstitle'> Help ejecting media (part 1/2)</h1>
 </div>
 <div class='bodydiv'>
-This tool will select for you best candidate to eject. You will
-be asked for choose inside the selection in the next screen. 
+This tool will select the best candidates to eject. You will
+be asked to make your selection on the next screen. 
   <form action="?" method='GET'>
    <table>
     <tr><td>Pool:</td>      
index 449a0226a0c2d07f5623b525fc5a71db9a62fe9f..816353d8f90a4b7abed24bad084d43ed93e287c2 100644 (file)
@@ -3,7 +3,7 @@
   <h1 class='newstitle'> Help to eject media (part 2/2)</h1>
  </div>
  <div class='bodydiv'>
-  Now, you can verify the selection and eject media.
+  Now, you can verify the selection and eject the media.
    <form action='?' method='get'>
     <table id='compute'></table>
     <table><tr>
@@ -18,7 +18,7 @@
 <script type="text/javascript" language="JavaScript">
 
 var header = new Array("Volume Name","Vol Status",
-                      "Media Type","Pool Name","Last Written", 
+                       "Media Type","Pool Name","Last Written", 
                        "When expire ?", "Select");
 
 var data = new Array();
index 357895506bab641d02cb351bde9d803b72e568f7..85028ea387faec983accfb0018e89d21f78b4d2d 100644 (file)
@@ -1,10 +1,10 @@
 <br/>
 <div class='titlediv'>
-  <h1 class='newstitle'> Help to load media (part 1/2)</h1>
+  <h1 class='newstitle'> Help loading media (part 1/2)</h1>
 </div>
 <div class="bodydiv">
-This tool will select for you best candidate to load. You will
-be asked for choose inside the selection in the next screen. 
+This tool will select the best candidates to load. You will
+be asked to make your selection on the next screen. 
   <form action="?" method='GET'>
    <table>
     <tr><td>Pool:</td>      
@@ -35,16 +35,16 @@ be asked for choose inside the selection in the next screen.
     <tr>
         <td>Expired :</td> 
         <td> <input type='checkbox' name='expired' class='formulaire' 
-               checked> </td>
+                checked> </td>
     </tr>
     <tr>
         <td>Number of media <br/> to load:</td> 
         <td> <input type='text' name='limit' class='formulaire' 
-               size='3' value='10'> </td>
+                size='3' value='10'> </td>
     </tr>
     <tr>
         <td><input type="image" name='action' value='compute_intern_media' 
-               title='Next' src='/bweb/next.png'>
+                title='Next' src='/bweb/next.png'>
         </td><td/>
     </tr>
    </table>
index 7fa6c193cf4502511f2fa594d854d343b019b8b1..0f10329d55d18ae210b1aa608171f7dde039d4e4 100644 (file)
@@ -3,7 +3,7 @@
   <h1 class='newstitle'> Help to load media (part 2/2)</h1>
  </div>
  <div class='bodydiv'>
-  Now, you can verify the selection and load media.
+  Now, you can verify the selection and load the media.
    <form action='?' method='get'>
     <table id='compute'></table>
     <table><tr>
@@ -19,7 +19,7 @@
 <script type="text/javascript" language="JavaScript">
 
 var header = new Array("Volume Name","Vol Status",
-                      "Media Type","Pool Name","Last Written", 
+                       "Media Type","Pool Name","Last Written", 
                        "When expire ?", "Select");
 
 var data = new Array();
index 683a0e29ba88e9c98aec282615e0e5f072e22a5a..80520a13a5374e620a65db1870fd6e04bc08ec6d 100644 (file)
@@ -78,8 +78,8 @@ nrsTable.setup(
  header_color: header_color,
  page_nav: true,
  padding: 3,
- rows_per_page: rows_per_page,
-// disable_sorting: new Array(5,6)
+// disable_sorting: new Array(5,6),
+ rows_per_page: rows_per_page
 }
 );
 </script>
index 0ed0b4a066506035d3b212dfe65e7c13487b196f..cf3655d66d258ed87107d06ecb38d6ba322b3119 100644 (file)
@@ -12,7 +12,7 @@
 </label>
 <label>
 <input type="image" type='submit' name='action' value='cancel_job'
- onclick="return confirm('Do you want to cancel selected job ?')"
+ onclick="return confirm('Do you want to cancel the selected job?')"
  title='Cancel job' src='/bweb/cancel.png'>
 </label>
    </form>
 
 <script type="text/javascript" language="JavaScript">
 var header = new Array("JobId",
-                      "Client",
-                      "Job Name", 
+                       "Client",
+                       "Job Name", 
                        "Level",
                        "Start Time", 
                        "Duration", 
 //                       "Job Files",
 //                       "Job Bytes", 
-                      "Status",
-                      "Select"
-       );
+                       "Status",
+                       "Select"
+        );
 
 var data = new Array();
 var chkbox;
index a70a07fac93db7dc4a6b5d02bc163b1ef99ccdbf..15fd57d99ab9d82e99f13710a39f439b2062b8ba 100644 (file)
@@ -3,7 +3,7 @@
 </div>
 <div class='bodydiv'>
 <a href='?action=job;age=172800;jobtype=B'>
-<img src='bgraph.pl?age=2678400;width=450;height=200;graph=job_sum_day;limit=500;action=graph;legend=off' alt='Nothing to display'>
+<img width='450' height='200' src='bgraph.pl?age=2678400;width=450;height=200;graph=job_sum_day;limit=500;action=graph;legend=off' alt='Nothing to display'>
 </a>
 </div>
 
index 2dc7416ca20cc30294e14638b6bd97627fdd95b4..d48ecb1cc306517a731f9ee29782f41adf7b312d 100644 (file)
@@ -6,7 +6,7 @@
   <form name='form1' action="?" method='GET'>
    <table>
     <tr><td>Volume Name:</td>
-        <td><input type='text' name='media' class='formulaire' value='<TMPL_VAR volumename>' title='Change this to update an other media'>
+        <td><input type='text' name='media' class='formulaire' value='<TMPL_VAR volumename>' title='Change this to update an other volume'>
         </td>
     </tr>
     <tr><td>Pool:</td>