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

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