você está aqui: Home  → Arquivo de Mensagens

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

Opinião dos Leitores

Rafael Ferreira
28 Fev 2013, 16:12
No arquivo "corpo.php" existe uma referencia a um outro arquivo "jobs.class.php", e este não está no post. Os relatorios não funcionam sem este arquivo.
Naira Kaieski
12 Fev 2013, 10:04
Olá,

A dica é interessante, criar o próprio script permite personalizar da forma que se deseja e necessita a exibição dos dados.
No entanto no site http://wiki.bacula.org/doku.php?id=3rd_party_addons são disponibilizadas uma série de ferramentas que visam proporcionar interfaces gráficas para o Bacula em diversas linguagens de programação e com recursos diferenciados. Temos ferramentas que prometem permitir a execução de jobs de backup e restauração de arquivos e simples relatórios gerenciais. Particularmente acho interessante a ferramenta/script "Send Bacula Backup Report" (http://www.soasi.com/send-bacula-backup-report) que pode ter sua execução agendada no cron do Linux, por exemplo, e enviar por e-mail um relatório com diversas informações dos jobs executados.

De qualquer forma a dica postada é interessante pois fornece o caminho para personalizações de relatórios, o fato do Bacula armazenar as informações sobre os jobs em banco de dados facilita muito esta personalização de relatórios.
*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