ASTNAGIOS 2.0 + FAN - Solução completa para monitoramento
Apresento minhas experiências com o FAN, assim como a segunda versão do script de integração Asterisk + Nagios, o qual já apresentei em artigo anterior.
[ Hits: 25.485 ]
Por: Sidney Alexandre Pagel em 06/04/2015
<?php
//variaveis de conexao
$servername = "192.168.X.X";
$username = "nagios";
$password = "XXXXX";
$dbname = "astnagios";
//cria conexao
$conn = new mysqli($servername, $username, $password, $dbname);
//valida conexao
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$diretorio="/astnagios/";
//variaveis insert
$host_name = shell_exec("cat ".$diretorio."hostiden");
//este é o segredo do processo. No arquivo "hostiden", o Nagios "escreve" o nome do host //que caiu, e a aplicação PHP "lê" o conteúdo deste arquivo, que será inserido no arquivo //call, e entregue ao Asterisk para que o áudio correto seja executado no momento do //atendimento da ligação.
$host_state = shell_exec("cat ".$diretorio."hoststate");
$horario = shell_exec("date +%H:%M:%S");
//cria sql de insert tabela eventos
$sql = "INSERT INTO eventos (host_name, evento, horario) VALUES ('$host_name', '$host_state', '$horario')";
//valida insert
if ($conn->query($sql) === TRUE) {
echo "New record created successfully\n";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
//serão feitas 100 tentativas, até que alguém atenda
for ($i = 0; $i < 100; $i ++){
//sorteio aleatório de 1 dos quatro telefones existentes na tabela de contatos
$seq = rand(1, 4);
//busca no banco pelo telefone "sorteado"
$sql2 = "SELECT telefone from contatos where id_contato='$seq'";
//retorna telefone contato
$result2 = $conn->query($sql2);
while($row = $result2->fetch_assoc()) {
$telefone = $row["telefone"];
}
//seleciona o id do "sortudo"
$sql3 = "SELECT id_contato from contatos where telefone='$telefone'";
$result3 = $conn->query($sql3);
while($row = $result3->fetch_assoc()) {
$id_user = $row["id_contato"];
}
//verifica se o evento já não se encontra na tabela de checados
$sql4 = "select id_evento from eventos where id_evento not in (select id_evento from checados);";
$result4 = $conn->query($sql4);
$y = null;
while ($row = $result4->fetch_assoc()) {
$y = $row["id_evento"];
}
if($y === null){
break;
}else {
//caso não se encontre, trata-se de evento novo e não tratado
//então a função é chamada
//a função só deixará de ser chamada quando a variável retorno receber o valor "1"
$retorno_function = ligacao($telefone, $host_name, $id_user, $y, $diretorio, $seq);
if ($retorno_function === '1'){
echo "OK\n";
}else {
echo "FALHOU\n";
}
}
}
$conn -> close();
//função que realiza a ligação por meio de parâmetros recebidos anteriormente
function ligacao($arg1, $arg2, $arg3, $arg4, $arg5, $arg6){
$z = 0;
//essa variável controla a continuidade. Enquanto "z" for igual a zero, o arquivo //continuará a ser criado, e ligações continuarão a ser realizadas
while ($z === 0){
//criação do arquivo .call que será enviado ao asterisk
file_put_contents($arg5."$arg6.call", "Channel: OOH323/0808$arg1@Avaya\n");
file_put_contents($arg5."$arg6.call", "WaitTime: 60\n",FILE_APPEND);
file_put_contents($arg5."$arg6.call", "set: host=$arg2",FILE_APPEND);
file_put_contents($arg5."$arg6.call", "Extension: 10\n",FILE_APPEND);
file_put_contents($arg5."$arg6.call", "set: id=$arg3\n",FILE_APPEND);
file_put_contents($arg5."$arg6.call", "set: id_evento=$arg4\n",FILE_APPEND);
file_put_contents($arg5."$arg6.call", "Context: astnagios\n",FILE_APPEND);
//setando as permissões do arquivo call
shell_exec("chmod 777 ".$arg5."*.call");
//copiando o arquivo para pasta Asterisk
shell_exec("cp ".$arg5."*.call /astnagios/asterisk/");
//apagando o arquivo call
shell_exec("rm -rf ".$arg5."*.call");
shell_exec("rm -rf ".$arg5."hostiden");
//variaveis de conexao
$servername = "192.168.0X.X";
$username = "nagios";
$password = "XXXXX";
$dbname = "astnagios";
//cria conexao
$conn = new mysqli($servername, $username, $password, $dbname);
//valida conexao
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
sleep (60);
//verificando se alguém atendeu e foi registrado na tabela checados. Se ninguém //atendeu, ou não teclou 3, o campo hangup tem valor nulo, e z continuará valendo //zero, dando continuidade ao laço
$sql5 = "select hangup from checados where id_evento=$arg4";
$result5 = $conn->query($sql5);
while ($row = $result5->fetch_assoc()) {
$z = $row["hangup"];
}
}
//a função retorna o resultado. Caso alguém tenha atendido e teclado 3, z valerá 1, caso //contrário, continuará valendo zero.
return $z;
}
Jogando pesado na segurança de seu SSH
NagVis - Gestor de mapas pra lá de especial
Configurando um domínio pelo serviço ipturbo empresarial (Brasil Telecom)
Mais sobre terminais leves....
Integrando Nagios com Asterisk
Formatos de áudio sem perda sonora (lossless)
Truques e dicas para o Acer Aspire One e o Linpus Linux Lite
Linux_logo: customizando até o SHELL do seu GNU/Linux
Maquina modesta - a vez dos navegadores ferrarem o usuario
Fscrypt: protegendo arquivos do seu usuário sem a lentidão padrão de criptograr o disco
Faça suas próprias atualizações de pacotes/programas no Void Linux e torne-se um Contribuidor
Configurando o Cairo Dock individualmente em ambientes diferentes na mesma maquina
Calculadoras online gratuitas para o dia a dia do usuário Linux
Utilizando a Ferramenta xcheckrestart no Void Linux
Pisando no acelerador do Linux Mint: Kernel XanMod, zRAM e Ajustes de Swap
Como instalar Warsaw no Gentoo? (9)
Isso acontece quando tento ajudar alguém (0)
Governo da França vai trocar Windows por Linux (4)









