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: 24.230 ]
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
Configurando um domínio pelo serviço ipturbo empresarial (Brasil Telecom)
NagVis - Gestor de mapas pra lá de especial
Mais sobre terminais leves....
Integrando Nagios com Asterisk
UltraSurf - Bloqueio definitivo
Minha primeira visita ao iTown
Como utilizar de forma correta os repositórios e pacotes Backports
Formatos de áudio sem perda sonora (lossless)
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Preciso recuperar videos *.mp4 corrompidos (6)
É normal não gostar de KDE? (11)
Secure boot, artigo interessante, nada técnico. (2)









