• Nenhum resultado encontrado

3.3 DESENVOLVIMENTO DO PLUGIN

3.3.4 Informações adicionais capturadas

• Linha 4 até 11 – Testes realizados com o host informado verificando se ele está comunicável pela rede de computadores. Caso sim retorna exit code 0 caso não, retorna exit code 1.

Figura 22. Imagem inicial do webserver da câmera Axis P1343.

Os módulos utilizados para conexão no webserver da câmera foram HTTP:Request e também LWP::UserAgent.

O arquivo check_http-axis.pl é um arquivo desenvolvido com o objetivo de realizar capturas de informações referentes a configuração de vídeo, audio, data e hora configurados, e firmware utilizado pelo equipamento.

Segue ilustração do código para conexão ao webserver e retorno da variável onde se encontram as informações da conexão. Segue ilustração do código no Quadro 8.

1 2 3 4 5 6 7 8 9 10

sub getres {

$objectStatus = 0;

my ($url, $host, $username, $password) = @_;

$host = $host . ":80";

my $req = HTTP::Request->new(GET => $url);

$req->authorization_basic($username, $password);

my $ua = LWP::UserAgent->new();

$ua->timeout(5);

my $resposta = $ua->request($req);

Quadro 8. Rotina de conexão via http no webserver.

• Linha 3 – Criação de uma variável $objectStatus para retorno no final da execução do plugin ao Nagios.

• Linha 4 – Informações como host, URL, usuário e senha recebidos via parâmetro para utilização.

• Linha 6 – A requisição da conexão HTTP é iniciada.

• Linha 7 – Autenticação no host com usuário e senha.

• Linha 10 – Variável $resposta recebe o resultado da conexão através da função request.

O código desenvolvido nas subrotinas para busca de informação via webserver utiliza a variável $resposta que recebe seu conteúdo da execução da rotina getres, explicada anteriormente. Segue ilustração do código no Quadro 9.

1 2 3

my ($host, $username, $password) = @_;

my $site = "http://".$host."/operator/basic.shtml";

my $resposta = getres($site,$host,$username,$password);

Quadro 9. Código para chamada da rotina de conexão ao webserver.

• Linha 1 – Recebimento das informações via parâmetro.

• Linha 2 – Recebe a URL responsável pelas informações que precisaremos do webserver.

• Linha 3 – Chamada para a subrotina getres com o objetivo de conexão no webserver.

Para que estas informações fossem capturadas foi necessário utilizar o conhecimento em expressões regulares para encontrar a informação necessária.

No código abaixo segue a rotina que foi desenvolvida para a busca de configurações de audio. As informações capturadas são configurações de comunicação de audio e origem de audio. Segue ilustração do código no Quadro 10.

1 2 3 4 5 6 7 8 9 10 11

if ($resposta == 1) { $objectStatus = 1;

exit (objectStatus);

}

elsif ($resposta =~ m/" selected>([a-zA-Z\-\s]*)<\/option>/g) { $audioConfig = $1;

}

if ($resposta =~ m/" selected>([a-zA-Z\-\s]*)<\/option>/g) { $audioSource = $1;

}

printf "[OK] - See detailed status.\n";

Quadro 10. Rotina para busca de informações de audio.

• Linha 1 até 4 – Realização do teste para certificar-se que a conexão foi realizada com sucesso.

• Linha 5 até 7 –Busca pela informação na variável $resposta pelos caracteres desejados da configuração de comunicação de audio, caso encontre armazena na variável

$audioConfig.

• Linha 8 até 10 – Busca pela informação na variável $resposta pelos caracteres desejados de origem de audio, caso encontre armazena na variável $audioSource.

• Linha 11 – Impressão de mensagem para verificar os resultados da captura.

O código abaixo tem como objetivo realizar a busca do firmware instalado no dispositivo e mostrar ao operador de redes. Conforme Quadro 11.

1 2 3 4 5 6 7 8 9 10 11 12

if ($resposta == 1) { $objectStatus = 1;

exit ($objectStatus);

}

elsif ($resposta =~ m/<\/b>(.*)<br>/g) { my $var_teste = $1;

$var_teste =~ s/\s//g;

$var_teste =~ s/&.58;/:/g;

$var_teste =~ s/<br>//g;

printf " [OK] - Current firmware: ".$var_teste . "\n";

}

exit ($objectStatus);

Quadro 11. Rotina para busca de informações de firmware.

• Linha 1 até 4 – Realização do teste para certificar-se que a conexão foi realizada com sucesso.

• Linha 5 até 10 – Realização da busca pela informação na variável $resposta pelos caracteres desejados e o tratamento destas informações.

• Linha 12 – O plugin retorna a variável $objectStatus.

O código abaixo se refere à busca de informações de vídeo da câmera. A maneira de encontrar a informação desejada segue a mesma estratégia fazendo a busca por expressão regular recebendo o texto da variável $resposta. As informações desejadas são resolução de vídeo, compressão de vídeo, e rotação de vídeo. Conforme Quadro 12.

1 2 3 4 5 6 7 8 9

elsif ($resposta =~ m/\" selected>(.{13,16})<\/option>/g) { $videoResolution = $1;

}

if ($resposta=~ m/Appearance_Comp\" value=\"([0-9]*)\"onchange/g) { $videoCompression = $1;

}

if ($resposta =~ m/\" selected>([0-9]*)<\/option>/g) { $videoRotation = $1;

}

Quadro 12. Rotina para busca de informações de vídeo.

• Linha 1 até 3 – Realização da busca pela informação na variável $resposta pelos caracteres desejados da resolução de vídeo, caso encontre armazena na variável

$videoResolution.

• Linha 4 até 6 – Realização da busca pela informação na variável $resposta pelos caracteres desejados da compressão de vídeo, caso encontre armazena na variável

$videoCompression.

• Linha 7 até 9 – Realização da busca pela informação na variável $resposta pelos caracteres desejados de rotação de vídeo, caso encontre armazena na variável

$videoRotation.

No código abaixo é mostrado o teste para certificar-se que a informação encontrada pelo plugin é igual à informação de vídeo disponível no webserver.

Segue ilustração conforme o Quadro 13.

1 2 3 4 5 6 7 8 9 10 11 12

if (($videoRotation == 0) || ($videoRotation == 90) ||

($videoRotation == 180) || ($videoRotation == 270)) { printf " Rotation: ".$videoRotation."\n\n";

}else {

$objectStatus = 1;

printf "\n *** Rotation: ".$videoRotation."\n\n";

}

if ($objectStatus == 1) {

printf "[WARNING] - Please make a double check in the information marked with asterisks (***)";

}

Quadro 13. Rotina de testes para confirmar as informações de vídeo.

• Linha 1 até 4 – Realização do teste se o conteúdo da variável $videoRotation é igual a

‘0’ que é um dos valores disponíveis no webserver da câmera. Caso o valor seja igual é impresso na saída principal a mensagem de sucesso, senão a mensagem de saída é modificada e a variável $objectStatus é modificada para ‘1’, marcando o objeto gerenciado como warning no Nagios.

• Linha 9 até 12 – Caso a variável $objectStatus tenha sido modificada para ‘1’ é impresso uma mensagem no final da execução do plugin para verificar se as informações capturadas estão coerentes com o webserver.

Para a rotina que busca informações sobre a data e hora na câmera é utilizado uma estratégia semelhante fazendo a busca de informações via comando m/ e utilizando expressões regulares. Conforme Quadro 14.

1 2 3 4 5 6 7 8 9 10 11

if ($resposta =~ m/CurrentServerDate\" size=\"12\" maxlength=\"10\"

value=\"([0-9-]{10})\"/g) { my $var_teste = $1;

printf "[OK] - See detailed status.\n\n Date: ".$var_teste . "

(AA-mm-dd)\n";

}

if ($resposta =~ m/CurrentServerTime\" size=\"12\" maxlength=\"8\"

value=\"([0-9:]{8})\"/g) { my $var_teste = $1;

printf " Time: ".$var_teste . " (hh:mm:ss)\n";

}

Quadro 14. Rotina de testes para certificar-se a veracidade das informações de vídeo.

• Linha 1 até 6 – Busca pela informação na variável $resposta pelos caracteres desejados da data e impressão do resultado.

• Linha 7 até 10 – Busca pela informação na variável $resposta pelos caracteres desejados da hora e impressão do resultado.

Com esta abordagem de captura de informações via conexão HTTP foi possível buscar informações adicionais para o Nagios através do plugin desenvolvido para a câmera Axis e aumentar sua utilidade.

Documentos relacionados