De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
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".
<?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;
}
}
}
<?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;
}
}
<!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.