Usuario:ManuelRomero/proyecto/proyectoIternova/codigo
De WikiEducator
public static function get_data_server_nagios() { //Obtenemos todos los los servidores nagios de mi modelo y //los host a monitorizar $servers_nagios = Monitorizacion_Modules_Nagios_Model::get_all(); $hosts_monitorizar = Monitorizacion_Model::get_all_host(); //Lo convierto a array para trabajar siempre de la misma manera $servers_nagios = Controller_Utils::cast_object_to_array( $servers_nagios ); $hosts_monitorizar = Controller_Utils::cast_object_to_array( $hosts_monitorizar ); /* Para cada servidor Nagios registrado en la app */ foreach ( $servers_nagios as $nagios ) { //Variables para simplificar $host_nagios = $nagios[ 'host' ]; //MRM Log echo "<h1>SERVIDOR NAGIOS get_data_server_nagios " . $host_nagios . "</h1>"; //Api REST monitorización cada servidor nagios concreto //Información que da $nagios de todos los host que tenga configurados //(OJO la información es de los host configurado en el servidor no en la app) $all_hosts_all_services = Monitorizacion_Controller::get_data_nagios( $nagios ); //Para cada host a monitorizar configurado en la app foreach ( $hosts_monitorizar as $host ) { //Objeto Monitorizacion::ModelData a almacenar en la bd para este host $datos = null; //IMPORTANTE: Solo si ese host lo tengo configurado para ser monitorizado por este nagios if ( $host[ 'nagios_name' ] == $host_nagios ) { $host_name = $host[ 'host_name' ]; $host_ip = $host[ 'host' ]; //MRM Log echo "<h2> get_data_server_nagios Host #$host_name# - ip #$host_ip# </h2>"; //Servicios que quiero monitorizar de éste host $host_services = $host[ 'servicios' ]; //Localizo este host en la collección monitorizacion //donde están los host alamcenados $host_mongo = Monitorizacion_Model::get_host_by_identifier( $host_ip ); $host_id = $host_mongo->_id; $datos = Monitorizacion_Modeldata::get_host_by_date_now( $host_id ); //Busco de cada servicio //la info que me devuelve el api que interroga a nagios foreach ( $host_services as $service ) { //Listado de los índices que quiero monitorizar //de un determinado servicio $indexes_service = Monitorizacion_Controller_Services::get_index_of_service( $service ); //Para cada índice que quiero monitorizar foreach ( $indexes_service as $index_service ) { //Pos si el nagios no da datos para este host if ( isset( $all_hosts_all_services[ $host_name ] ) ) { //Todos los servicios de un host $host_all_services = $all_hosts_all_services[ $host_name ]; //MRM Log información devuelta por nagios de este host // Logs_Controller::vardump($host_all_services); } else $host_all_services = FALSE; $index_service_number = Monitorizacion_Constants::service_to_string( $service ); //Nagios da información para ese indice de servicio? if ( isset( $host_all_services[ $index_service_number ] ) ) { $service_value = $host_all_services[ $index_service_number ][ $index_service ]; } else $service_value = FALSE; //Aquí vamos a extraer la parte del valor que nos interesa $service_value = Monitorizacion_Controller_Services::get_value( $index_service, $service_value ); //Trabajo con string (CPU, PING, ... y no con constantes ...) $service_string = Monitorizacion_Controller::service_host_to_string( $service ); $datos = Monitorizacion_Modeldata::set_data( $datos, $host_id, $service_string, $index_service, $service_value ); }//End foreach $parametros } if ( $datos != null ) { $datos->store(); } } //End si host es monitorizado por ese }//End foreach host } echo "<h1>FINNNNNN</h1>"; // Logs_Controller::vardump($infoServicesHosts); }
Casting los objetos a arrays
Para evitar problemas si una acción me retorna un objeto o un array, convierto siempre todo a array
- Metodo
Controller_Utils::cast_object_to_array($obj)
- Muy bueno que lo hace de forma recursiva.
Estructura de datos
- Servidor nagios
["_id"] => string(24) "5762657febcfa667008b456b" ["url"] => string(17) "http://172.17.0.3" ["host"] => string(12) "e490a9185700" ["usuario"] => string(5) "admin" ["password"] => string(5) "admin" ["descripcion"] => string(35) "Servidor nagios de prueba en docker"
- Host
["_id"] => string(24) "57627b58ebcfa6780f8b4569" ["host"] => string(10) "172.17.0.3" ["host_name"] => string(12) "e490a9185700" ["servicios"] => array(5) { [0] => int(1) [1] => int(2) [2] => int(3) [3] => int(4) [4] => int(5) } ["nagios_id"] => string(24) "5762657febcfa667008b456b" ["nagios_name"] => string(12) "e490a9185700" ["descripcion"] => string(51) "El equipo donde tengo nagios que quiero monitorizar"
- servicios
const SERVICIO_UNDEFINED =-1; //Servicio no definido const SERVICIO_SSH = 1; //SSH const SERVICIO_HTTP = 2; //Servicio http const SERVICIO_MYSQL = 3; //Servicio uso mysql const SERVICIO_DISCOS = 4; // Current_load const SERVICIO_CPU= 5; //Servicio uso de cpu const SERVICIO_PING=6; //PING
- Tradución de los servicios
monitorizacion.servicios.ssh=Servicio de uso de ssh monitorizacion.servicios.http=Servicio de uso web con http monitorizacion.servicios.mysql=Servicio de uso de mysql monitorizacion.servicios.discos=Serivicio de uso de discos monitorizacion.servicios.cpu=Servicio de uso de cpu monitorizacion.servicios.ping=Servicio de ping monitorizacion.service.not_defined =Servicio no definido monitorizacion.descripcion=Descripción
- Pendientes
- mirar crondaemon Mirar en la wiki añadida en la clase de stats
- Webbin *Webbinario que me pasa para mirar ??????
- MongoDB + time-series:
- https://www.mongodb.com/presentations/webinar-mongodb-time-series-data-setting-stage-sensor-management - https://www.mongodb.com/presentations/mongodb-time-series-data-part-2-analyzing-time-series-data-using-aggregation-framework
- 9/10/2016
- Errores varios al visualizar las monitorizaciones
Estaba $obj->nombre y no es un campo de la colección de monitorizacion (host host_name nagios nagios_name, descripcion, servicios)
- Camibio en el directorio stats' del módulo de monitorizacion el nombre de los siguientes ficheros
smarapps_ **** por monitorizacion_*****
- Usado para hacer estadísticas
- Me quedo modificando lo de los servicios
- A partir de intentar borrar una monitorización, he añadido el método get_servicios en controller.
- Esto me ha provocado una serio de errores, volver a lo de monitorizar host
3/5/2016
- Fichero Monitoriazacion_Constants
- Crear una constante por servicio a monitorizar
- Añadir un método que retorne un array con el id del servicio seleccionado y el texto asociado
- Menú
- Que aparezcan un checkbox con los servicios (p.e.)
SSh HTTp Mysql Discos cpu
;En es_ES.lang monitorizacion.servicios=Servicios a monitorizar; ;En monitorizacion:constats.php /** Carga un array con los servicios que los diferentes servidores de nagios podrán monitorizar * @return array asociativo con la lista de servicios */ public static function servicios(){ $servicios =["http"=>"Tráfico http","cpu"=>"Uso de cpu","Mysql"=>"Uso de base de datos Mysqlt"]; return $servicios; } ;en monitoriazación_view.php método static edit /*MRM aquí crearemos los checkbox para los servicios*/ $servicios = Monitorizacion_Constants::servicios(); $error[] = Controller_Forms::field(array('field_type' => 'checkbox_multiple', 'field_id' => 'servicio', 'field_title' => Idiomas_Controller::translate('monitorizacion.servicio', $idioma, $langfile), 'array_keys'=> array_keys($servicios), 'array_values'=>array_values($servicios), 'array_titles'=>array_values($servicios) // 'array_checked'=>$array_checked, 'first' => $first ) )); /*MRM_END*/
class Monitorizacion_Model { /** * @var string $_db_collection Nombre identificador de la coleccion en la base de datos */ private static $_db_collection = 'monitorizacion'; /** * @var string $_id Identificador de registro dentro de la coleccion monitorizacion */ public $_id = null; /** * * @var string ip del host que estamos monitorizando */ public $host = ''; /** * * @var string nombre del host que estamos monitorizando */ public $host_name = ''; /** * * @var array de string lista de servicios que estamos monitorizando */ public $servicios = []; // /** * * @var string url del servidor de nagios que nos da el servicio para este host */ public $nagios_id = ''; /** * * @var string identificador del servidor de nagios */ public $nagios_name = ''; /** * * @var string descripcion de esta monitorizacion concreta (host con n servicios); */ public $descripcion = '';