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