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: 22.295 ]
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; }
NagVis - Gestor de mapas pra lá de especial
Jogando pesado na segurança de seu SSH
Integrando Nagios com Asterisk
O software livre na administração pública
Mais sobre terminais leves....
Os Caminhos Para Certificação LPI1
Servidor NIS+NFS: Aprenda a montar o seu
Linux 100% virtual em modo gráfico
Comando du - encontrando as maiores pastas e arquivos no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Criando uma VPC na AWS via CLI
Multifuncional HP imprime mas não digitaliza
Dica básica para escrever um Artigo.
Como Exibir Imagens Aleatórias no Neofetch para Personalizar seu Terminal
touchpad não funcona junto do teclado - debian (0)
Acabei zuando meu Linux inteiro e estou desesperado (2)
Microfone que é reconhecido mas não capta aúdio (1)
Erro no cups.file [RESOLVIDO] (10)
Pq me aparece isso quando fui atualizar o Ubuntu 24.10 no terminal? (3)