Diferencia entre revisiones de «Usuario:ManuelRomero/proyecto/proyectoIternova/codigo»
De WikiEducator
(11 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 1: | Línea 1: | ||
{{Usuario:ManuelRomero/proyecto/proyectoIternova/nav}} | {{Usuario:ManuelRomero/proyecto/proyectoIternova/nav}} | ||
__NOTOC__ | __NOTOC__ | ||
+ | |||
+ | <source lang=php> | ||
+ | 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); | ||
+ | |||
+ | } | ||
+ | </source> | ||
+ | ===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 | ||
+ | <hr /> | ||
+ | *mirar crondaemon Mirar en la wiki añadida en la clase de stats | ||
+ | <hr /> | ||
+ | *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 | ||
+ | <hr /> | ||
+ | |||
+ | ;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=== | ===3/5/2016=== | ||
;Fichero Monitoriazacion_Constants | ;Fichero Monitoriazacion_Constants | ||
Línea 40: | Línea 219: | ||
</source> | </source> | ||
− | + | <source lang=php> | |
− | * | + | |
− | + | 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 = ''; | ||
+ | |||
+ | </source> |
Última revisión de 03:32 8 sep 2017
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 = '';