Diferencia entre revisiones de «Usuario:ManuelRomero/proyecto/proyectoIternova/codigo»

De WikiEducator
Saltar a: navegación, buscar
 
(6 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 
  
  
Línea 23: Línea 174:
 
smarapps_ **** por monitorizacion_*****
 
smarapps_ **** por monitorizacion_*****
 
*Usado para hacer estadísticas
 
*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===
Línea 63: Línea 219:
  
 
</source>
 
</source>
;Opción edit del controller llama al metodo  edit:
+
<source lang=php>
*Usa el campo first para ver si hay o no datos
+
 
#Si está a false  visualiza el formulario para que insertes datos
+
class Monitorizacion_Model {
#Si no y no hay errores te carga el campo en el registro de la base de datos de mongo
+
 
#Si hay errores te muestra en el campo del formulario correspondiente para mostrarte el error
+
    /**
 +
    * @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
  1. Crear una constante por servicio a monitorizar
  2. Añadir un método que retorne un array con el id del servicio seleccionado y el texto asociado
Menú
  1. 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 = '';