você está aqui: Home  → Arquivo de Mensagens Programação Shell Linux: Inscrições Abertas

Facilitando a visualização dos backups executados no Bacula

Colaboração: Anderson Angelote

Data de Publicação: 12 de fevereiro de 2013

Neste post, irei colocar os arquivos de uma página PHP que ira gerar um relatório que facilita o acompanhamento dos backups fetos pelo sistema Bacula.

O primeiro passo é instalar o apache e o módulo do php:

aptitude install -y apache2 libapache2-mod-php5

Iremos criar primeiramente o programa que irá conectar o banco:

vim /var/www/Conecta.class.php
<?php
  class Connecta {
     private $Host = "localhost";
     private $Usuario = "root";
     private $Senha = "senhabaculamysql";
     private $Banco = "bacula";
     function Conecta()
     {
         $conn = mysql_connect($this->Host, $this->Usuario,$this->Senha) or die(mysql_error());
         $db = mysql_select_db($this->Banco, $conn) or die(mysql_error());
         $charset = mysql_set_charset('utf8');
         return $conn;
     }
  } ?>

Agora iremos criar o arquivo com as rotinas de busca no banco:

vim /var/www/jobsDAO.class.php
<?php
require_once('Connecta.class.php');

class jobsDAO extends Connecta
{
  private $Nome;
  private $Data;
  private $Id;
  private $JobStatus;

  function ListaClientes($val){
     if($val == true){
       //Instanciando uma conexão com o banco de dados
       $con = parent::Conecta();

       //Monsta a query
       $query = "SELECT * FROM Client ORDER BY Name ";

       //Envia a query para o banco
       $result = mysql_query($query,$con);

       //Retorna o resultado
       return $result;
      }
      else
        return false;
      }

  function ListaJobs($val,$id, $dia){
     if($val == true){
        //Instanciando uma conexão com o banco de dados
       $con = parent::Conecta();

       //Monsta a query
       $query = "SELECT * FROM vw_Jobs WHERE ID = $id AND EndTime = '$dia' AND EndTime <> '0000-00-00' ORDER BY JobId DESC LIMIT 1;" ;

      //Envia a query para o banco
      $result = mysql_query($query,$con);

      //Retorna o resultado
      return $result;
   }
   else
   return false;
   }
}

O próximo passo é criar o arquivo que vai mostrar o resultado dos backups executados:

vim /var/www/corpo.php
<!DOCTYPE html>
< html lang="pt-br">
< head>
< meta charset="UTF-8">
< title>Bacula - Controle ScITech</title>
< meta name="description" content="Template HTML5"> < meta name="keywords" content="lista de palavras chaves">
< meta name="author" content="Anderson Angelote">
< meta name="generator" content="HTML-Kit 292">
</head>

<?php
require_once ('jobsDAO.class.php');
require_once ('jobs.class.php');
?>
< p>< h2 align=center>Backups executados no Bacula </h2></p>
<?php
$hoje=date("d/m/Y");
$conta = 0;
$html = "< table border=0 cellpadding= cellspacing=0>";
$html .= "< thead>";
$html .= "< tr bgcolor=#bebebe font size=1>";
$html .= "< td align=center scope=\"col\">Id</td>";
$html .= "< td scope=\"col\">Nome</td>";
$limite = 31;
$data=date("d/m");
$arr = explode("/", $data);
$dia = $arr[0];
$mes = $arr[1];
for ($n = 0; $n <= $limite; $n++) {
$data_dec = date('d/m', mktime(0, 0, 0, $mes, $dia - $n));
$html .= "< td align=\"center\" width=\"35\" scope=\"col\">$data_dec</td>";
}

$html .= "</tr>";
$html .= "</thead>";

$consulta = new jobsDAO();
$result = $consulta->ListaClientes(true);
if($result)
{
while($serv = mysql_fetch_object($result))
{
if ($conta == 0){
$cor = "#dadada";
$conta = 1;
} else {
$cor = "#bebebe";
$conta = 0;
}
$html .= "< tbody>";
$html .= "< tr bgcolor=$cor >";
$servidor = $serv->ClientId ;
$html .= "< td>" . $serv->ClientId . "</td>";
$html .= "< td>" . $serv->Name . "</td>";

$data=date("d/m/Y");
$arr = explode("/", $data);
$dia = $arr[0];
$mes = $arr[1];
$ano = $arr[2];
for ($n = 0; $n <= $limite; $n++) {
$data_dec = date('Y-m-d', mktime(0, 0, 0, $mes, $dia - $n, $ano));
$cor1 = "#FF0b00";
$html .= "< td ";
$consulta1 = new jobsDAO();
$result1 = $consulta1->ListaJobs(true,$servidor,$data_dec);
if($result1) {
while($serv1 = mysql_fetch_object($result1)) {
switch($serv1->JobStatus){
case "f":
$Status = 'Fatal';
$cor1 = "#FF0b00";
break;
case "T":
switch ($serv1->Level){
case "F":
$Status = "FULL";
$cor1 = "#00bBff";
break;
case "I":
$Status = "INCR";
$cor1 = "#00FF00";
break;
default:
$Status = $serv1->Level;
$cor1 = "#00bBff";
break;
}
break;
case "E":
$Status = 'ERROR';
$cor1 = "#FF0b00";
break;
case "A":
$Status = 'Cancel';
$cor1 = "#FFFF00";
break;
default:
$Status = $serv1->JobStatus;
$cor1 = $cor;
break;
}
$html .= "bgcolor=$cor1>$Status";
}
}
$html .= "</td>";
}
$html .= "</tbody>";
$html .= "</tr>";
}
}

echo $html;
?>

Agora vamos criar a página que vai atualizar a tela a cada 35 segundos:

vim /var/www/index.php
< html>
  <?
     include("corpo.php");
  ?>
</html>
< meta HTTP-EQUIV="refresh" CONTENT="35">

E para finalizar, iremos criar a nossa view no banco MySQL:

mysql -u root -p
create view vw_Jobs AS
select Job.ClientId AS ID,
DATE_FORMAT(Job.EndTime,'%Y-%m-%d') AS EndTime,
Job.JobStatus AS JobStatus,
Client.Name AS Nome,
Job.Level AS Level,
Job.JobId AS JobId
FROM Job
Join Client ON Job.ClientId = Client.ClientId

Espero ter ajudado!

Blog do autor


Veja a relação completa dos artigos de Anderson Angelote