você está aqui: Home  → Arquivo de Mensagens

Adaptação da Dica de Visualização Backups Bacula para Postgre

Colaboração: Guilherme Fausto

Data de Publicação: 14 de março de 2013

Bom dia,

Vi a dica de visualização dos backups do bacula do dia 12/02/2013. Achei muito interessante e gostei muito, porém no meu servidor bacula trabalho com o banco de dados Postgres, com isso adaptei os scripts da dica do Anderson Angelote e resolvi enviar a vocês essas modificações.

Além da adaptação para o Postgre adicionei uma cor diferente para a visualização de Backups de level "Differential".

Arquivo Conecta.class.php

  <?php
  
         class Connecta
         {
                 private $host = "localhost";
                 private $usuario = 'bacula';
                 private $senha = '';
                 private $banco = 'bacula';
                 private $porta = '5432';
  
                 function Conecta()
                 {
                         $stringConn = "host=$this->host "
                                     ."port=$this->porta "
                                     ."dbname=$this->banco "
                                     ."user=$this->usuario "
                                     ."password=$this->senha ";
  
                         $conn = pg_connect($stringConn);
  
                         if(!$conn)
                         {
                                 die('Não foi possível se conectar ao Banco de Dados.');
                         }
                         else
                         {
                                 return $conn;
                         }
  
                 }
         }

Arquivo jobsDAO.class.php

  <?php
         require_once('Conecta.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();
  
                 //Monta a query
                 $query = "SELECT * FROM client ORDER BY name ";
  
                 //Envia a query para o banco
                 $result = pg_query($con,$query);
  
                 //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 = pg_query($con,$query);
  
                  //Retorna o resultado
                  return $result;
             }
             else
                 return false;
         }
      }

Arquivo 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 ('Conecta.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 = pg_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 = pg_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;
  
                                                         case "D":
                                                             $Status = "DIFF";
                                                             $cor1   = "#FFD700";
  
  
                                                         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;

O arquivo index.php foi mantido da mesma forma:

  <html>
     <?php
        ini_set('display_errors',1);
        include("corpo.php");
     ?>
  </html>
  <meta HTTP-EQUIV="refresh" CONTENT="35">

O script para criação da View no banco de dados teve uma modificação, foi substituído o DATE_FORMAT, usado no mysql pelo TO_CHAR:

  create view vw_Jobs AS
  
  SELECT job.clientid AS id,
  to_char(job.endtime, 'YYYY-MM-DD'::text) AS endtime,
  job.jobstatus, client.name AS nome, job.level, job.jobid
  FROM job
  JOIN client ON job.clientid = client.clientid;

É isso aí, espero que essa dica possa ser útil para diversas pessoas, assim como para mim.



 

 

Veja a relação completa dos artigos de Guilherme Fausto

Opinião dos Leitores

Gabriel
15 Mar 2013, 09:34
Julio,

Parabéns! Mas eu tenho a mesmo dúvida do Julio.
Se um servidor do Bacula der problema, podemos montar um novo servidor. Mas como recuperar os volumes, os catalagos novamente.

Abraço,
Guilherme Augusto
14 Mar 2013, 13:06
Olá.

Só uma observação quanto ao nome do SGBD... O "Postgre" não existe. O que existe é "Postgres", ou, na forma mais completa, "PostgreSQL".

Parabéns pelo texto e ótima dica.
Julio Leal
14 Mar 2013, 10:41
Ótima dica. Mas uma dúvida que sempre me ocorre, quando leio algo sobre o Bacula, e não sei se vocês já passaram por isso. Mas imagine, que os dados dos backups são perdidos, quero dizer os dados da base de dados, configurações e tal. Me sobram efetivamente apenas os arquivos de backup gerados pelo Bacula. Então refaço tudo, o servidor de banco de dados as configurações e tal, como fazer o Bacula reconhecer os arquivos de backup gerados anteriormente ? E a assim, conseguir recuperar os dados destes arquivos ? Isso daria um novo artigo sobre ? :-)
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script