-
Actualizar datos módulo mediante API
Hola, me llamo Guillermo y estoy desarrollando actualmente un servicio Web en PHP con el framework Symfony2 que actuaría de intermediario entre algunos dispositivos embebidos y Pandora FMS (por temas de ancho de banda muy limitado). Estoy teniendo algunos problemas a la hora de utilizar la API que os comentaré ahora.
El contexto es el que os comento, la aplicación web recibe los datos que envían los embebidos por POST (una serie de JSON), los parsea y se comunica con la API de Pandora FMS para el intercambio de datos (crear agente si no está, lo mismo con los módulos, etc). Sin ningún problema se crean los agentes y módulos correspondientes para monitorizar los servicios que quiero de los embebidos, el problema aparece al final cuando quiero actualizar los datos de los módulos.
Os copio las funciones que se comunicarían con el API:
public function setModuleData ($module, $data) {
$op = “set”;
$op2 = “module_data”;
$id = $module->getId_module();
$other_mode = “url_encode_separator_|”;
$other = array (
“data”=>$data,
“time”=>”now”,
);
$url = $this->ip.$this->pandora_url.”/include/api.php”.
“?”.”&op=”.$op.”&op2=”.$op2.”&id=”.$id.
“&other=”.$other[“data”].”|”.$other[“time”].
“&other_mode=”.$other_mode.”&apipass=”.$this->apipass.
“&user=”.$this->user.”&pass=”.$this->password;
echo ““.$url.”
“;
$result = PandoraApiComm::curlThis($url);
$aux = htmlentities($result);
echo $aux;
return $result;
}
public static function curlThis($url) {
$url = str_replace(” “,”%20”,$url);
$curlObj = curl_init();
curl_setopt($curlObj, CURLOPT_URL, $url);
curl_setopt($curlObj, CURLOPT_RETURNTRANSFER, 1);
//curl_setopt($curlObj, CURLOPT_HEADER, 0);
$result = curl_exec($curlObj);
//$error = curl_error($curlObj);
//print “Curl error ->”.$error.”
“;
curl_close($curlObj);
return $result;
}
Un ejemplo de URL que se envía con este método:
http://localhost/pandora_console/include/api.php?&op=set&op2=module_data&id=43&other=Unknown|now&other_mode=url_encode_separator_|&apipass=1234&user=admin&pass=pandoraNo tiene demasiado misterio. Envía una petición con CURL con la URL que se construye y recoge la respuesta, que por alguna razón (primera pregunta) es texto XML con algunos datos del agente, por ejemplo:
El problema es que, mientras que al enviar de esta forma varias peticiones de actualización de módulos, el sistema parece “quedarse colgado” actualizando uno o ninguno de ellos, ignorando completamente el resto. He verificado que devuelve para cada uno de las peticiones el XML respuesta que os he comentado, y responde con código 200, así que recibe bien todas las peticiones. Poniendo el log del servidor de pandora en modo verbosity 10 veo que, de todos los módulos que intento actualizar, solo me intenta (a veces ni lo consigue) actualizar uno o dos:
2015-07-09 09:35:02 pandora [V10] Updating keep_alive module for agent ‘pepito’.
2015-07-09 09:35:02 pandora [V10] Processing module ‘process’ for agent ‘pepito’.El problema aparece al hacer la petición como a un servidor pandora local (Ubuntu 14.04 LTS) como a uno remoto (una máquina de Amazon con el mismo Ubuntu 14.04 LTS).
No se si es un bug, o estoy haciendo mal la petición, pero me tiene “loco”.
Un saludo y espero respuestas!