From 06063462d2af98e46f74de7814c4c2cf081a710e Mon Sep 17 00:00:00 2001 From: Davide Franco Date: Mon, 29 Nov 2010 10:57:56 +0100 Subject: [PATCH] bacula-web: Several internal code improvment - Improved configuration processing - Modified config file format (loadable by parse_ini_file now) - Fixed some html error in templates --- gui/bacula-web/configs/bacula.conf | 113 +++++--------- gui/bacula-web/index.php | 153 +++++++++++++------ gui/bacula-web/lang.php | 8 +- gui/bacula-web/report.php | 9 +- gui/bacula-web/templates/generaldata.tpl | 8 +- gui/bacula-web/templates/header.tpl | 25 +-- gui/bacula-web/templates/index.tpl | 13 +- gui/bacula-web/templates/last_run_report.tpl | 6 +- gui/bacula-web/templates/volumes.tpl | 2 +- 9 files changed, 178 insertions(+), 159 deletions(-) diff --git a/gui/bacula-web/configs/bacula.conf b/gui/bacula-web/configs/bacula.conf index 141153c2a2..9f32ab5763 100644 --- a/gui/bacula-web/configs/bacula.conf +++ b/gui/bacula-web/configs/bacula.conf @@ -1,84 +1,49 @@ -# This is the config file. -# Please, modify with your preferences +; If http://www.domain.com/bacula/ +; root = /bacula +root = '/bacula-web' -# If http://www.domain.com/bacula/ -# root = /bacula -root = /bacula-web - -# Show a box with a detailed report at index or Status report -# I'll remove this in future versions. +; Show a box with a detailed report at index or Status report +; I'll remove this in future versions. IndexReport = 0 -# Secs since last run. Default 24h. -# Unused in this version -# LastRun = 86400 - - -# Mode of index page: Full or Lite -# Only useful if IndexReport = 0 -# -# Lite: Only shows a little report for the last 24h. -# Maybe you would want this if you have very much jobs. -# Full: This shows a full table with detailed data -# Maybe you would want this if you have a bit of jobs. -mode = Lite - - - -# LANGUAGE: -# en_EN -> English -# es_ES -> Spanish, Mantained by Juan Luis Francés Jiménez. -# it_IT -> Italian, Mantained by Gian Domenico Messina (gianni.messina AT c-ict.it). -# fr_FR -> Frech, Mantained by Morgan LEFIEUX (comete AT daknet.org). -# de_DE -> German, Mantained by Florian Heigl. +; Secs since last run. Default 24h. +; Unused in this version +; LastRun = 86400 + +; Mode of index page: Full or Lite +; Only useful if IndexReport = 0 + +; Lite: Only shows a little report for the last 24h. +; Maybe you would want this if you have very much jobs. +; Full: This shows a full table with detailed data +; Maybe you would want this if you have a bit of jobs. +; mode = Lite + +; Language +; en_EN -> English +; es_ES -> Spanish, Mantained by Juan Luis Francés Jiménez. +; it_IT -> Italian, Mantained by Gian Domenico Messina (gianni.messina AT c-ict.it). +; fr_FR -> Frech, Mantained by Morgan LEFIEUX (comete AT daknet.org). +; de_DE -> German, Mantained by Florian Heigl. lang = en_EN - - -# DATABASE INFORMATION AND MULTICATALOG SUPPORT -# --------------------------------------------- -# This section contains the database configuration. -# You must create a user or to give it permissions to access -# from web machine. +; Database connection configuration [.DATABASE] -# Your database host or IP -host = localhost - -# Your database login +host = localhost ; Database host or IP +login = root ; Database account name +pass = p@ssw0rd ; Database account password +db_name = bacula ; Database name +db_type = mysql ; Database type +;db_port = 3306 ; Uncomment if not standard port + +; Multi-Catalog support +; If you want to configure more than 1 Bacula catalog in Bacula-Web, simply copy the previous line (See example below) +; Don't forget the change the name of the section (DATABASE2 in this case) + +[.DATABASE2] +host = 192.168.2.55 login = bacula - -# Your database password. -# For empty passwords use this: -# pass = -pass = - -# Your database name +pass = db_name = bacula - -# Your database type: mysql,sqlite,pgsql db_type = mysql - -# Uncomment this and modify it if your database runs on a non standard port. -# db_port = 3306 - -# MULTICATALOG SUPPORT -# --------------------- -# If you have only one catalog don't remove the comments. -# If you have 2 or more catalogs, please remove the coments of this section -# and configure with your preferences. -# You can add so many as you want. - -#[.DATABASE2] -#host = 192.168.2.55 -#login = bacula -#pass = -#db_name = bacula -#db_type = mysql - -#[.DATABASE3] -#host = 192.168.20.40 -#login = bacula -#pass = -#db_name = bacula -#db_type= pgsql diff --git a/gui/bacula-web/index.php b/gui/bacula-web/index.php index 789675db32..3b086eddb2 100644 --- a/gui/bacula-web/index.php +++ b/gui/bacula-web/index.php @@ -14,15 +14,18 @@ | GNU General Public License for more details. | +-------------------------------------------------------------------------+ */ -// Last Err: session_start(); require ("paths.php"); require($smarty_path."Smarty.class.php"); include "classes.inc"; -$smarty = new Smarty; // Template engine +$smarty = new Smarty; $dbSql = new Bweb(); +require("lang.php"); + +$mode = ""; + $smarty->compile_check = true; $smarty->debugging = false; $smarty->force_compile = true; @@ -30,66 +33,107 @@ $smarty->force_compile = true; $smarty->template_dir = "./templates"; $smarty->compile_dir = "./templates_c"; $smarty->config_dir = "./configs"; + +/* $smarty->config_load("bacula.conf"); // Load config file -$mode = $smarty->get_config_vars("mode"); // Lite o Extend? +$mode = $smarty->get_config_vars("mode"); +*/ // Lite o Extend? -require("lang.php"); +// Getting mode from config file +$mode = $dbSql->get_config_param("mode"); +if( $mode == false ) + $mode = "Lite"; + +$smarty->assign( "mode", $mode ); + +// Determine which template to show +$indexreport = $dbSql->get_config_param( "IndexReport" ); + +if( $indexreport == 0 ) { + $smarty->assign( "last_report", "last_run_report.tpl" ); +}else { + $smarty->assign( "last_report", "report_select.tpl" ); +} + +// Assign to template catalogs number +$smarty->assign( "dbs", $dbSql->Get_Nb_Catalogs() ); //Assign dbs +/* if ( count($dbSql->dbs) >1 ) { $smarty->assign("dbs", $dbSql->dbs); $smarty->assign("dbs_now", $_SESSION['DATABASE']); } +*/ -// generaldata.tpl & last_run_report.tpl (last24bytes) -$client = $dbSql->link->query("select count(*) from Client") - or die ("Error query: 1"); -$totalfiles = $dbSql->link->query("select count(FilenameId) from Filename") - or die ("Error query: 2"); -if ( $dbSql->driver == "mysql") - $last24bytes = $dbSql->link->query("select sum(JobBytes),count(*) from Job where Endtime <= NOW() and UNIX_TIMESTAMP(EndTime) > UNIX_TIMESTAMP(NOW())-86400") - or die ("Error query: 3"); -if ( $dbSql->driver == "pgsql") - $last24bytes = $dbSql->link->query("select sum(JobBytes),count(*) from Job where Endtime <= NOW() and EndTime > NOW() - 86400 * interval '1 second'") - or die ("Error query: 3"); -$bytes_stored =& $dbSql->link->getOne("select SUM(VolBytes) from Media") - or die ("Error query: 4"); - +// generaldata.tpl & last_run_report.tpl ( Last 24 hours report ) +$last24bytes = ""; +$query = ""; + +/*$client = $dbSql->db_link->query("select count(*) from Client") + or die ("Error query: 1");*/ + $totalfiles = $dbSql->db_link->query("select count(FilenameId) from Filename") or die ("Error query: 2"); + + if ( PEAR::isError( $totalfiles ) ) { + die( "Unable to get Total Files information from catalog" . $totalfiles->getMessage() ); + }else { + $tmp = $totalfiles->fetchRow(); + $smarty->assign('files_totales',$tmp[0]); + } + $totalfiles->free(); + + switch( $dbSql->driver ) + { + case 'mysql': + $query = "select sum(JobBytes),count(*) from Job where Endtime <= NOW() and UNIX_TIMESTAMP(EndTime) > UNIX_TIMESTAMP(NOW())-86400"; + break; + case 'pgsql': + $query = "select sum(JobBytes),count(*) from Job where Endtime <= NOW() and EndTime > NOW() - 86400 * interval '1 second'"; + break; + default: + $query = "select sum(JobBytes),count(*) from Job where Endtime <= NOW() and UNIX_TIMESTAMP(EndTime) > UNIX_TIMESTAMP(NOW())-86400"; + break; + } + + $last24bytes = $dbSql->db_link->query( $query ) or die ("Failed to get Total Job Bytes from catalog"); + + if ( PEAR::isError( $last24bytes ) ) { + die( "Unable to get Total Job Bytes from catalog" . $last24bytes->getMessage() ); + }else { + $tmp = $last24bytes->fetchRow(); + var_dump( $tmp ); + // Transfered bytes since last 24 hours + $smarty->assign('bytes_totales', $dbSql->human_file_size( $tmp[0] ) ); + + $smarty->assign('total_jobs', $tmp[1]); + + $last24bytes->free(); + } + // Database size $smarty->assign('database_size', $dbSql->GetDbSize()); // Total bytes stored +$bytes_stored = $dbSql->db_link->getOne("select SUM(VolBytes) from Media") or die ("Failed to get Total stored Bytes from catalog"); $smarty->assign('bytes_stored', $dbSql->human_file_size($bytes_stored) ); // Number of clients -$tmp = $client->fetchRow(); -$smarty->assign('clientes_totales',$tmp[0]); +$nb_clients = $dbSql->Get_Nb_Clients(); +$smarty->assign('clientes_totales',$nb_clients["nb_client"] ); -$tmp = $last24bytes->fetchRow(); /*if ( empty($tmp[0]) ) { // No data for last 24, search last 48 if ( $dbSql->driver == "mysql" ) - $last24bytes = $dbSql->link->query("select sum(JobBytes) from Job where Endtime <= NOW() and UNIX_TIMESTAMP(EndTime) > UNIX_TIMESTAMP(NOW())-172800" ); + $last24bytes = $dbSql->db_link->query("select sum(JobBytes) from Job where Endtime <= NOW() and UNIX_TIMESTAMP(EndTime) > UNIX_TIMESTAMP(NOW())-172800" ); if ( $dbSql->driver == "pgsql") - $last24bytes = $dbSql->link->query("select sum(JobBytes) from Job where Endtime <= NOW() and EndTime > NOW()-172800 * interval '1 second'" ) + $last24bytes = $dbSql->db_link->query("select sum(JobBytes) from Job where Endtime <= NOW() and EndTime > NOW()-172800 * interval '1 second'" ) or die ("Error query: 4.1"); $smarty->assign('when',"yesterday"); $tmp = $last24bytes->fetchRow(); }*/ -// Transfered bytes since last 24 hours -$smarty->assign('bytes_totales', $dbSql->human_file_size( $tmp[0] ) ); - -$smarty->assign('total_jobs', $tmp[1]); - -$tmp = $totalfiles->fetchRow(); -$smarty->assign('files_totales',$tmp[0]); - -$client->free(); -$totalfiles->free(); -$last24bytes->free(); - // report_select.tpl & last_run_report.tpl -$res = $dbSql->link->query("select Name from Job group by Name"); +$res = $dbSql->db_link->query("select Name from Job group by Name"); + $a_jobs = array(); while ( $tmp = $res->fetchRow() ) array_push($a_jobs, $tmp[0]); @@ -101,15 +145,36 @@ $res->free(); $smarty->assign('pools',$dbSql->GetVolumeList() ); // last_run_report.tpl -if ($mode == "Lite" && $_GET['Full_popup'] != "yes") { +if ( $mode == "Lite" && $_GET['Full_popup'] == "yes" ) { $tmp = array(); - if ( $dbSql->driver == "mysql" ) - $status = $dbSql->link->query("select JobId,Name,EndTime,JobStatus from Job where EndTime <= NOW() and UNIX_TIMESTAMP(EndTime) >UNIX_TIMESTAMP(NOW())-86400 and JobStatus!='T'" ) + switch( $dbSql->driver ) + { + case 'mysql': + $query = "SELECT JobId, Name, EndTime, JobStatus"; + $query .= "FROM Job "; + $query .= "WHERE EndTime <= NOW() and UNIX_TIMESTAMP(EndTime) > UNIX_TIMESTAMP(NOW())-86400 and JobStatus!='T'"; + break; + case 'pgsql': + $query = "SELECT JobId, Name, EndTime, JobStatus "; + $query .= "FROM Job "; + $query .= "WHERE EndTime <= NOW() and EndTime >NOW() - 86400 * interval '1 second' and JobStatus!= 'T'"; + break; + } + + $status = $dbSql->db_link->query( $query ); + + if (PEAR::isError( $status ) ) + die( "Unable to get last job status from catalog
" . $status->getMessage() ); + + /* + if ( $dbSql->driver == "mysql" ) + $status = $dbSql->db_link->query("select JobId,Name,EndTime,JobStatus from Job where EndTime <= NOW() and UNIX_TIMESTAMP(EndTime) >UNIX_TIMESTAMP(NOW())-86400 and JobStatus!='T'" ) or die ("Error: query at row 95"); if ( $dbSql->driver == "pgsql" ) - $status = $dbSql->link->query("select JobId,Name,EndTime,JobStatus from Job where EndTime <= NOW() and EndTime >NOW() - 86400 * interval '1 second' and JobStatus!= 'T'") + $status = $dbSql->db_link->query("select JobId,Name,EndTime,JobStatus from Job where EndTime <= NOW() and EndTime >NOW() - 86400 * interval '1 second' and JobStatus!= 'T'") or die ( "Error: query at row 98" ); - $smarty->assign('status', $status->numRows()); + */ + $smarty->assign('status', $status->numRows() ); if ( $status->numRows() ) { while ( $res = $status->fetchRow() ) array_push($tmp, $res); @@ -119,10 +184,10 @@ if ($mode == "Lite" && $_GET['Full_popup'] != "yes") { // Total Elapsed Time. Only for single Job. if ( $dbSql->driver == "mysql" ) - $ret = $dbSql->link->query("select UNIX_TIMESTAMP(EndTime)-UNIX_TIMESTAMP(StartTime) as elapsed from Job where EndTime <= NOW() and UNIX_TIMESTAMP(EndTime) > UNIX_TIMESTAMP(NOW())-84600") + $ret = $dbSql->db_link->query("select UNIX_TIMESTAMP(EndTime)-UNIX_TIMESTAMP(StartTime) as elapsed from Job where EndTime <= NOW() and UNIX_TIMESTAMP(EndTime) > UNIX_TIMESTAMP(NOW())-84600") or die ("Error at row 110"); if ( $dbSql->driver == "pgsql" ) - $ret = $dbSql->link->query("select EndTime - StartTime as elapsed from Job where EndTime <= NOW() and EndTime > NOW() - 84600 * interval '1 second'") + $ret = $dbSql->db_link->query("select EndTime - StartTime as elapsed from Job where EndTime <= NOW() and EndTime > NOW() - 84600 * interval '1 second'") or die ("Error at row 113"); while ( $res = $ret->fetchRow() ) { if ( $TotalElapsed < 1000000000 ) // Temporal "workaround" ;) Fix later @@ -147,7 +212,7 @@ else if ($mode == "Full" || $_GET['Full_popup'] == "yes" ){ as elapsed,Job.Name,Job.StartTime,Job.EndTime,Job.Level,Pool.Name,Job.JobStatus from Job LEFT JOIN Pool ON Job.PoolId=Pool.PoolId where EndTime <= NOW() and EndTime > NOW() - 86400 * interval '1 second' order by elapsed "; - $status = $dbSql->link->query($query) + $status = $dbSql->db_link->query($query) or die ("Error: query at row 138"); while ( $tmp = $status->fetchRow() ) { $tdate = explode (":",$tmp[0]); diff --git a/gui/bacula-web/lang.php b/gui/bacula-web/lang.php index f518d88bad..a3b2107a93 100644 --- a/gui/bacula-web/lang.php +++ b/gui/bacula-web/lang.php @@ -18,11 +18,13 @@ // and we check if it is present at the system if ( function_exists("gettext") ) { - require($smarty_gettext_path."smarty_gettext.php"); + global $dbSql; + + require($smarty_gettext_path."smarty_gettext.php"); $smarty->register_block('t','smarty_translate'); - $vars = $smarty->get_config_vars(); - $language = $vars['lang']; + //$vars = $smarty->get_config_vars(); + $language = $dbSql->get_config_param("lang"); $domain = "messages"; putenv("LANG=$language"); setlocale(LC_ALL, $language); diff --git a/gui/bacula-web/report.php b/gui/bacula-web/report.php index 03c2f9f70e..1d4ab1f3ec 100644 --- a/gui/bacula-web/report.php +++ b/gui/bacula-web/report.php @@ -28,10 +28,11 @@ $smarty->template_dir = "./templates"; $smarty->compile_dir = "./templates_c"; $smarty->config_dir = "./configs"; $smarty->config_load("bacula.conf"); -require("lang.php"); $dbSql = new Bweb(); +require("lang.php"); + if ( $_GET['default'] == 1) { // Default params, 1 month $dbSql->StartDate = strftime("%Y-%m-%d %H:%M:%S",time()-2678400); $dbSql->EndDate = strftime("%Y-%m-%d %H:%M:%S",time()); @@ -49,10 +50,10 @@ $smarty->assign('filesperiod',$files); // Array with jobs data $a_jobs = array(); if ($dbSql->driver == "mysql") - $res_jobs = $dbSql->link->query("select *,SEC_TO_TIME( UNIX_TIMESTAMP(Job.EndTime)-UNIX_TIMESTAMP(Job.StartTime) ) as elapsed from Job where EndTime < '$dbSql->EndDate' and EndTime > '$dbSql->StartDate' and Name='$_GET[server]' order by EndTime") + $res_jobs = $dbSql->db_link->query("select *,SEC_TO_TIME( UNIX_TIMESTAMP(Job.EndTime)-UNIX_TIMESTAMP(Job.StartTime) ) as elapsed from Job where EndTime < '$dbSql->EndDate' and EndTime > '$dbSql->StartDate' and Name='$_GET[server]' order by EndTime") or die("Error query row 50"); else if ($dbSql->driver == "pgsql") - $res_jobs = $dbSql->link->query("select jobid as \"JobId\",job as \"Job\",name as \"Name\",type as \"Type\",level as \"Level\",clientid as \"ClientId\",jobstatus as \"JobStatus\",schedtime as \"SchedTime\",starttime as \"StartTime\",endtime as \"EndTime\",jobtdate as \"JobtDate\",volsessionid as \"VolSessionId\",volsessiontime as \"VolSessionTime\",jobfiles as \"JobFiles\",jobbytes as \"JobBytes\",joberrors as \"JobErrors\",jobmissingfiles as \"JobMissingFiles\",poolid as \"PoolId\",filesetid as \"FilesetId\",purgedfiles as \"PurgedFiles\",hasbase,Job.EndTime::timestamp-Job.StartTime::timestamp as elapsed from Job where EndTime < '$dbSql->EndDate' and EndTime > '$dbSql->StartDate' and Name='$_GET[server]' order by EndTime") + $res_jobs = $dbSql->db_link->query("select jobid as \"JobId\",job as \"Job\",name as \"Name\",type as \"Type\",level as \"Level\",clientid as \"ClientId\",jobstatus as \"JobStatus\",schedtime as \"SchedTime\",starttime as \"StartTime\",endtime as \"EndTime\",jobtdate as \"JobtDate\",volsessionid as \"VolSessionId\",volsessiontime as \"VolSessionTime\",jobfiles as \"JobFiles\",jobbytes as \"JobBytes\",joberrors as \"JobErrors\",jobmissingfiles as \"JobMissingFiles\",poolid as \"PoolId\",filesetid as \"FilesetId\",purgedfiles as \"PurgedFiles\",hasbase,Job.EndTime::timestamp-Job.StartTime::timestamp as elapsed from Job where EndTime < '$dbSql->EndDate' and EndTime > '$dbSql->StartDate' and Name='$_GET[server]' order by EndTime") or die("Error query row 56"); while ( $tmp = $res_jobs->fetchRow(DB_FETCHMODE_ASSOC) ) { @@ -65,7 +66,7 @@ while ( $tmp = $res_jobs->fetchRow(DB_FETCHMODE_ASSOC) ) { $smarty->assign('jobs',$a_jobs); // report_select.tpl -$res = $dbSql->link->query("select Name from Job group by Name"); +$res = $dbSql->db_link->query("select Name from Job group by Name"); $a_jobs = array(); while ( $tmp = $res->fetchRow() ) array_push($a_jobs, $tmp[0]); diff --git a/gui/bacula-web/templates/generaldata.tpl b/gui/bacula-web/templates/generaldata.tpl index e33f0c86d6..cbe7d16fb7 100644 --- a/gui/bacula-web/templates/generaldata.tpl +++ b/gui/bacula-web/templates/generaldata.tpl @@ -12,7 +12,7 @@ - @@ -20,7 +20,7 @@ {$clientes_totales} - @@ -30,7 +30,7 @@ - @@ -38,7 +38,7 @@ {$files_totales} - diff --git a/gui/bacula-web/templates/header.tpl b/gui/bacula-web/templates/header.tpl index be315f936b..ecc1fd6fae 100644 --- a/gui/bacula-web/templates/header.tpl +++ b/gui/bacula-web/templates/header.tpl @@ -13,24 +13,15 @@
  • About
  • + + {if $dbs > 1} +
  • +
    + {t}Catalog{/t}  + +
  • + {/if} - \ No newline at end of file diff --git a/gui/bacula-web/templates/index.tpl b/gui/bacula-web/templates/index.tpl index bb267d99ef..fc7983cb02 100644 --- a/gui/bacula-web/templates/index.tpl +++ b/gui/bacula-web/templates/index.tpl @@ -1,4 +1,3 @@ -{config_load file=bacula.conf} @@ -24,22 +23,18 @@
    - {if !#IndexReport#} - {include file=last_run_report.tpl} - {else} - {include file=report_select.tpl} - {/if} + {include file="$last_report"} +

    General report

    {if $server==""} - + {else} - + {/if}
    -{if #mode# == "Lite" && $smarty.get.Full_popup != "yes"} +{if $mode == "Lite" && $smarty.get.Full_popup != "yes"}
    + {t}Total clients:{/t} + {t}Total bytes stored{/t}:
    + {t}Total files:{/t} + {t}Database size{/t}:
    @@ -136,7 +136,7 @@
    - + --> -
    {t}Select a job:{/t} diff --git a/gui/bacula-web/templates/volumes.tpl b/gui/bacula-web/templates/volumes.tpl index 43bbb619d1..0d3dc7a70a 100644 --- a/gui/bacula-web/templates/volumes.tpl +++ b/gui/bacula-web/templates/volumes.tpl @@ -9,7 +9,7 @@
    +
    {foreach from=$pools item=pool key=pool_name}
    -- 2.39.2