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

De WikiEducator
Saltar a: navegación, buscar
 
(12 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__
 +
===Problema acutal con fechas===
 +
===Solución salomónica===
 +
;El tema queda pendiente
 +
tomo la siguiente solución: guardo la fecha como un string y así la localiza
 +
{{MRM_Actividad|Title=Cambios realizados
 +
<source lang=php>
 +
//Monitorizacion_Modeldata::set_data(..){
 +
//...
 +
//CAMBIO MONGODATE STRING
 +
        //$array_criterios[] = array('timestamp', 'eq', $obj_date_current->format('Y-m-d H:i:s'), 'MongoDate');
 +
        $array_criterios[] = array('timestamp', 'eq', $obj_date_current->format('Y-m-d H:i:s'), 'string');
 +
//..
 +
 +
public function object_encode_data($to_utf8 = false) {
 +
        $callback_function = ( $to_utf8 ? 'Controller_Utils::detect_utf8' : 'Controller_Utils::detect_iso8859_1' );
 +
 +
        Logs_Controller::vardump($this->timestamp);
 +
        // CAMBIO MONGODATE_STRING Cambio el tipo a String, pendiente de dejarlo como fecha ....
 +
        //$this->timestamp = Controller_DataBase_MongoDB::datetime_mongodate($this->timestamp, $to_utf8, false);
 +
        $this->timestamp = (string) call_user_func($callback_function, $this->timestamp);
 +
       
 +
        Logs_Controller::vardump($this->timestamp);
 +
 +
        $this->host_id = (string) call_user_func($callback_function, $this->host_id);
 +
    }
 +
 +
 +
</source>
 +
 +
 +
 +
 +
 +
}}
 +
 +
 +
 +
 +
 +
===Código de jorge===
 +
{{Plegable|hide|Metodo 1 jorge|
 +
<source lang=php>
 +
< /**
 +
    * Funcion que devuelve el objeto para un proyecto determinado para el mes actual, y si no
 +
    * existe, lo crea preivamente
 +
    *
 +
    * @param int $project_id
 +
    * @param string [string] $project_data, similar a
 +
    * [project] => Array
 +
    * (
 +
    * [name] => ZGZagua
 +
    * [description] => Aplicacion para notificar a los usuarios los cortes de agua programados en la ciudad de Zaragoza.
 +
    * [web_url] => https://gitlabhq.iternova.net/victorcorbacho/ZGZagua
 +
    * [avatar_url] =>
 +
    * [git_ssh_url] => ssh://git@gitlabhq.iternova.net:8440/victorcorbacho/ZGZagua.git
 +
    * [git_http_url] => https://gitlabhq.iternova.net/victorcorbacho/ZGZagua.git
 +
    * [namespace] => victorcorbacho
 +
    * [visibility_level] => 20
 +
    * [path_with_namespace] => victorcorbacho/ZGZagua
 +
    * [default_branch] => master
 +
    * [homepage] => https://gitlabhq.iternova.net/victorcorbacho/ZGZagua
 +
    * [url] => ssh://git@gitlabhq.iternova.net:8440/victorcorbacho/ZGZagua.git
 +
    * [ssh_url] => ssh://git@gitlabhq.iternova.net:8440/victorcorbacho/ZGZagua.git
 +
    * [http_url] => https://gitlabhq.iternova.net/victorcorbacho/ZGZagua.git
 +
    * )
 +
    *
 +
    * @return GitlabTimeTracker_Model
 +
    */
 +
    public static function get_current_project_object( $project_id, $project_data = '' ) {
 +
        // Objeto a devolver
 +
        $controllervars = Controller_Vars::getController();
 +
        $project_obj = null;
 +
 +
        // Normalizamos variables
 +
        $project_id = (int) $project_id;
 +
 +
        // Buscamos si existe un elemento para el proyecto y fechas dados
 +
        // El string $date_current, como le estamos fijando las horas a 00:00:00 consideramos que ya es UTC (que es
 +
        // lo que queremos guardar en base de datos). Hay que pasarla al timezone de usuario, ya que automaticamente
 +
        // nuestro controlador de Mongo lo convertira de nuestro timezone a UTC+0, y viceversa.
 +
        $date_current = date( 'Y-m-01 00:00:00' );
 +
        $obj_date_current = new DateTime( $date_current, new DateTimeZone( 'UTC' ) );
 +
        $obj_date_current->setTimezone( new DateTimeZone( $controllervars->get( 'user_timezone' ) ) );
 +
 +
        // La busqueda de proyecto: La fecha tenemos que buscarla con el timezone de usuario, ya que el controlador
 +
        // de mongo tambien lo convertira automaticamente a UTC+0...
 +
        $array_opts[] = array( 'project_id', 'eq', $project_id, 'integer' );
 +
        $array_opts[] = array( 'date', 'eq', $obj_date_current->format( 'Y-m-d H:i:s' ), 'MongoDate' );
 +
 +
        $array_obj = self::get_all( $array_opts, '', 0, 1 );
 +
 +
        if ( !empty( $array_obj ) ) {
 +
            // Hay un objeto, vamos a devolverlo
 +
            $project_obj = reset( $array_obj );
 +
        } else {
 +
            // No hay objetos, creamos uno
 +
            $project_obj = new GitlabTimeTracker_Model();
 +
            // Asociamos valores iniciales
 +
            $project_obj->project_id = $project_id;
 +
            $project_obj->date = $obj_date_current->format( 'Y-m-d H:i:s' );
 +
            $project_obj->repository_name = $project_data[ 'name' ];
 +
            $project_obj->gitlab_namespace = $project_data[ 'namespace' ];
 +
            $project_obj->store();
 +
        }
 +
 +
        return $project_obj;
 +
 +
    }
 +
</source>
 +
}}
 +
 +
 +
{{Plegable|hide|Método 2 jorge|
 +
<source lang=php>
 +
  /**
 +
    * Actualizar un objeto de la base de datos (si existe y tiene el mismo identificador que tenemos en nuestro identificador),
 +
    * o bien lo registra si no existe, a partir de los datos de el objeto actual
 +
    *
 +
    * @return string Identificador del objeto actualizado, false en caso contrario
 +
    */
 +
    public function store() {
 +
        // Inicializacion de variables
 +
        $database = Controller_DataBase_MongoDB::getDatabase();
 +
 +
        // Obtengo el fichero a almacenar, en formato array
 +
        $object_attributes_not_required = array();
 +
        $options = array();
 +
 +
        // Codificamos en funcion de atributos y sus tipos de datos
 +
        $this->object_encode_data( true );
 +
 +
        // Almacenamos en base de datos, y devolvemos el $_id del objeto
 +
        $this->_id = $database->store_object( self::$_collection, $this, $object_attributes_not_required, $options );
 +
 +
        // Y aseguramos correcta indexacion
 +
        self::ensureIndex();
 +
 +
        // Y lanzamos notificacion de store correcto
 +
        Controller_EventDispatcher::notify( 'gitlabtimetracker', 'default', 'store', $this->_id );
 +
        return $this->_id;
 +
 +
    }
 +
</source>
 +
}}
 +
{{Plegable|hide|método 3 jorge|
 +
<source lang=php>
 +
  /**
 +
    * Codifica atributos del objeto como corresponda (ISO-8859-1 / UTF-8 en strings), para poder ser almacenados de forma correcta en la base de datos o ser utilizada en el sistema correctamente
 +
    *
 +
    * @param boolean $to_utf8 Indica si se convertira a UTF-8 los strings (true, cuando se tenga que almacenar en la base de datos) o si se convierten a ISO-8859-1 (false, cuando los datos proceden de la base de datos)
 +
    *
 +
    * @return void
 +
    */
 +
    public function object_encode_data( $to_utf8 = false ) {
 +
        $callback_function = ( $to_utf8 ? 'Controller_Utils::detect_utf8' : 'Controller_Utils::detect_iso8859_1' );
 +
 +
        // Primero atributos comunes, de tipo string, o arrays de strings
 +
        $array_fields_strings = array( 'gitlab_namespace', 'repository_name' );
 +
        foreach ( $array_fields_strings as $key ) {
 +
            $this->{$key} = call_user_func( $callback_function, $this->{$key} );
 +
        }
 +
        $array_fields_strings = array( 'data_description', 'data_url' );
 +
        foreach ( $array_fields_strings as $field ) {
 +
            foreach ( $this->{$field} as $key => $data ) {
 +
                $this->{$field}[ $key ] = call_user_func( $callback_function, $data );
 +
            }
 +
        }
 +
 +
        // Atributos comunes, de tipo float
 +
        $array_fields_float = array( 'data_time_estimated', 'data_time_worked' );
 +
        foreach ( $array_fields_float as $field ) {
 +
            foreach ( $this->{$field} as $key => $data ) {
 +
                Controller_Utils::cast_vars( $this->{$field}[ $key ], 'float' );
 +
            }
 +
        }
 +
 +
        // Atributos comunes, de tipo entero
 +
        $array_fields = array( 'project_id' );
 +
        foreach ( $array_fields as $key ) {
 +
            Controller_Utils::cast_vars( $this->{$key}, 'int' );
 +
        }
 +
 +
        // Atributos datetime (MongoDate...)
 +
        $array_fields_datetime = array( 'date', 'data_date' );
 +
        foreach ( $array_fields_datetime as $key ) {
 +
            if ( is_array( $this->{$key} ) ) {
 +
                foreach ( $this->{$key} as $index => $value ) {
 +
                    $this->{$key}[ $index ] = Controller_DataBase_MongoDB::datetime_mongodate( $value, $to_utf8, false );
 +
                }
 +
            } else {
 +
                $this->{$key} = Controller_DataBase_MongoDB::datetime_mongodate( $this->{$key}, $to_utf8, false );
 +
            }
 +
        }
 +
 +
    }</source>
 +
}}
 +
 +
 +
 +
===16/02/2017===
 +
Intento poner el sistema en marcha
 +
;Nombre de los docker ...
 +
#iternova
 +
#nagios1
 +
#nagios2
 +
 +
===Gearman===
 +
*Para ver que existe
 +
ps -ef | grep gear
 +
*Para matarlo por si se ha quedado pillado
 +
killall -9 php; killall -9 gearmand ; gearmand -d
 +
*Su propio sistema verifica periódicamente que el servicio está o no activo y lo mata y lanza de nuevo
 +
 +
 +
 +
Para arrancarlo por si se queda pillado
 +
 +
 +
 +
===Bug===
 +
Si cambio el nombre de un servidor nagios, no se actualiza su nombre en el atributo del host a monitorizar (donde se especifica el  servidor nagios que lo monitoriza).
 +
<source lang=bash>
 +
root@5c43117b78e8:/var/www/smartroads-core/core/crondaemon# php crontab.php
 +
</source>
 +
 +
*Produce la siguiente salida
 +
<source lang=bash>
 +
 +
PHP Warning:  Module 'apcu' already loaded in Unknown on line 0
 +
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20121212/gearman.ini' - /usr/lib/php5/20121212/gearman.ini: cannot open shared object file: No such file or directory in Unknown on line 0
 +
 +
core/crondaemon - crontab - session loaded
 +
core/crondaemon - crontab - controllervars loadedPHP Fatal error:  Class 'MongoClient' not found in /var/www/smartroads-core/core/controller/database/controller_database_mongodb.php on line 1077
 +
 +
</source>
 +
 +
REVISAR INSTALACION  gearman y mongoClient
 +
 +
;Solucion1
 +
El problema de gearman es que en el /etc/php5/mods-available/gearman.ini el contenido era
 +
<source lang=bash>
 +
extension=gearman.ini
 +
</source>
 +
Y debía de ser
 +
<source lang=bash>
 +
extension=gearman.so
 +
</source>
 +
Cambiado rebotado el sistema y todo ok
 +
 +
===Actual===
 +
19/12/2016
 +
*Respecto al cron
 +
Mirar los errores que da al ejecutar php Crontab.php, un módulo para cargar ejecutar cada x tiempo mi método de recoger dátos de los servidores nagios
 +
 +
===Configuración de cron===
 +
Copiamos el método '''''crondeamon.php''''' en el contronlador de monitorizacion Controller_Monitorizacion
 +
<source lang=php>
 +
// Cargamos objeto de configuracion
 +
        $object_configuration = new Crondaemon_Model( 'monitorizacion' );
 +
 +
        // Obtenemos datos para gestion de la funcion
 +
        $datetime_now = date( 'Y-m-d 00:00:00' );
 +
        //  time_last_execution MRM atributo de params
 +
        $datetime_last_execution = $object_configuration->get_module_param( 'monitorizacion', 'time_last_execution' );
 +
        // La tarea se ejecutara por minuto
 +
        $default_time_interval = Controller_Constants::SECONDS_MINUTE;
 +
 +
        // Comprobamos que, desde la ultima ejecucion, haya pasado el tiempo necesario para actualizar los datos diarios
 +
        if ( $datetime_last_execution == '' || Controller_Utils::date_compare( $datetime_now, $datetime_last_execution ) >= $default_time_interval ) {
 +
            // Actualizamos fecha de ultima actualizacion
 +
            $object_configuration->set_module_param( 'monitorizacion', 'time_last_execution', $datetime_now );
 +
 +
            // Actualizamos estadisticas diarias
 +
            self::get_data_server_nagios();
 +
        }
 +
 +
        // Y devolvemos objeto de configuracion de crondaemon actualizado
 +
        return $object_configuration->set();
 +
 +
    }
 +
</source>
 +
*Después se modifica el ini, añadiendo esta configuración del  módulo
 +
./core/crondeamo/cronjobs.ini
 +
*En ese fichero añadimos el módulo de monitorización
 +
<source lang=php>
 +
[monitorizacion]
 +
file="modules/monitorizacion/monitorizacion_controller.php"
 +
method="Monitorizacion_Controller::crondaemon";
 +
</source>
 +
 +
*Luego lo configuramos en el sistema ejecutando en línea de comandos
 +
<source lang=bash>
 +
crontab -e -u www-data
 +
*Se abre un fichero de configuración de crontab y escribimos * * * * * para ejecutarlo cada minuto ????
 +
</source>
 +
Ahora podemos ver lo que pasa en el log
 +
<source lang=bash>
 +
cd /var/www/smartroads-core/logs/
 +
  272  less crondaemon.log
 +
</source>
 +
<hr />
 +
12/12/2016
 +
*Problemas con los servicos SSH Mysql y http
 +
*Revisar los índices puestos en la configuración de los nagios
 +
*Para resolver esto vuelvo a instalar nagiso y apunto los nombres por defecto que usa nagios para los diferentes servicios
 +
**SSH  SSH
 +
**Discos  Disk
 +
**Http  HTTP
 +
**ping PING
 +
**mysql Mysql
 +
"service_description": "CPU", Load
 +
 +
<hr />
 +
28/11/2016
 +
[OK]*Cuando guardo los servicios también se guarda el valor 6.
 +
En teoría solo hay 5 valores
 +
==> Falsa alarma, el problema es que hay un scrolling y ahí si que sale el 6º servicio
 +
MEJORAR => que aparezcan todos los servicios y no el scrolling
 +
<hr />
 +
 +
 +
 +
;16/11/2016
 +
[[Imagen:REST_nagios_nrpe.png]]
 +
*Instalo el api para probar lo de nagios
 +
*descargo el fichero nagios-api (lo tengo en descargas y en la carpeta del proyecto).
 +
*Debo de ejecutar el sql que tiene, cuidado que no tiene el create database , lo añado, es la base de datos smartembedded_na
 +
*Mirar el fichero modulo.ini para ver otros parámetros de configuración como usuario y passoword
 +
*El objetivo es que escribiendo en el url http://172.17.0.3/nagios-api/getternagios/data me aparezca el resultado de monitorizar a alguien
 +
*activo todos los servicos que necesito en esta máquina '''''apache2 - mysql - nagios3 - nagios-nrpe-server'''''
 +
*Estoy en el contenedor '''''nagios1''''' 172.17.0.3 y nombre '''''e490a9185700'''''
 +
*Activo los módulso rewrite y cgi (el segundo no sé muy bien porqué)
 +
a2enmod rewrite
 +
a2enmod cgi
 +
*instalo mysqli
 +
apt-get install php-mysql
 +
 +
 
;16/06/2016
 
;16/06/2016
 
*Crear una nueva función para que recoja lo que me de al api de conexión al nagios
 
*Crear una nueva función para que recoja lo que me de al api de conexión al nagios

Última revisión de 20:56 2 may 2017



Problema acutal con fechas

Solución salomónica

El tema queda pendiente

tomo la siguiente solución: guardo la fecha como un string y así la localiza


Icon activity.jpg

Cambios realizados

//Monitorizacion_Modeldata::set_data(..){
//...
//CAMBIO MONGODATE STRING
        //$array_criterios[] = array('timestamp', 'eq', $obj_date_current->format('Y-m-d H:i:s'), 'MongoDate');
        $array_criterios[] = array('timestamp', 'eq', $obj_date_current->format('Y-m-d H:i:s'), 'string');
//..
 
public function object_encode_data($to_utf8 = false) {
        $callback_function = ( $to_utf8 ? 'Controller_Utils::detect_utf8' : 'Controller_Utils::detect_iso8859_1' );
 
        Logs_Controller::vardump($this->timestamp);
        // CAMBIO MONGODATE_STRING Cambio el tipo a String, pendiente de dejarlo como fecha ....
        //$this->timestamp = Controller_DataBase_MongoDB::datetime_mongodate($this->timestamp, $to_utf8, false);
        $this->timestamp = (string) call_user_func($callback_function, $this->timestamp);
 
        Logs_Controller::vardump($this->timestamp);
 
        $this->host_id = (string) call_user_func($callback_function, $this->host_id);
    }
{{{1}}}





Código de jorge



16/02/2017

Intento poner el sistema en marcha

Nombre de los docker ...
  1. iternova
  2. nagios1
  3. nagios2

Gearman

  • Para ver que existe
ps -ef | grep gear
  • Para matarlo por si se ha quedado pillado
killall -9 php; killall -9 gearmand ; gearmand -d
  • Su propio sistema verifica periódicamente que el servicio está o no activo y lo mata y lanza de nuevo


Para arrancarlo por si se queda pillado


Bug

Si cambio el nombre de un servidor nagios, no se actualiza su nombre en el atributo del host a monitorizar (donde se especifica el servidor nagios que lo monitoriza).

root@5c43117b78e8:/var/www/smartroads-core/core/crondaemon# php crontab.php
  • Produce la siguiente salida
PHP Warning:  Module 'apcu' already loaded in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20121212/gearman.ini' - /usr/lib/php5/20121212/gearman.ini: cannot open shared object file: No such file or directory in Unknown on line 0
 
core/crondaemon - crontab - session loaded
core/crondaemon - crontab - controllervars loadedPHP Fatal error:  Class 'MongoClient' not found in /var/www/smartroads-core/core/controller/database/controller_database_mongodb.php on line 1077

REVISAR INSTALACION gearman y mongoClient

Solucion1
El problema de gearman es que en el /etc/php5/mods-available/gearman.ini el contenido era
 extension=gearman.ini
Y debía de ser
 extension=gearman.so
Cambiado rebotado el sistema y todo ok

Actual

19/12/2016

  • Respecto al cron

Mirar los errores que da al ejecutar php Crontab.php, un módulo para cargar ejecutar cada x tiempo mi método de recoger dátos de los servidores nagios

Configuración de cron

Copiamos el método crondeamon.php en el contronlador de monitorizacion Controller_Monitorizacion

 // Cargamos objeto de configuracion
        $object_configuration = new Crondaemon_Model( 'monitorizacion' );
 
        // Obtenemos datos para gestion de la funcion
        $datetime_now = date( 'Y-m-d 00:00:00' );
        //  time_last_execution MRM atributo de params
        $datetime_last_execution = $object_configuration->get_module_param( 'monitorizacion', 'time_last_execution' );
        // La tarea se ejecutara por minuto
        $default_time_interval = Controller_Constants::SECONDS_MINUTE;
 
        // Comprobamos que, desde la ultima ejecucion, haya pasado el tiempo necesario para actualizar los datos diarios
        if ( $datetime_last_execution == '' || Controller_Utils::date_compare( $datetime_now, $datetime_last_execution ) >= $default_time_interval ) {
            // Actualizamos fecha de ultima actualizacion
            $object_configuration->set_module_param( 'monitorizacion', 'time_last_execution', $datetime_now );
 
            // Actualizamos estadisticas diarias
            self::get_data_server_nagios();
        }
 
        // Y devolvemos objeto de configuracion de crondaemon actualizado
        return $object_configuration->set();
 
    }
  • Después se modifica el ini, añadiendo esta configuración del módulo
./core/crondeamo/cronjobs.ini
  • En ese fichero añadimos el módulo de monitorización
[monitorizacion]
file="modules/monitorizacion/monitorizacion_controller.php"
method="Monitorizacion_Controller::crondaemon";
  • Luego lo configuramos en el sistema ejecutando en línea de comandos
 crontab -e -u www-data
*Se abre un fichero de configuración de crontab y escribimos * * * * * para ejecutarlo cada minuto ????

Ahora podemos ver lo que pasa en el log

 cd /var/www/smartroads-core/logs/
  272  less crondaemon.log

12/12/2016

  • Problemas con los servicos SSH Mysql y http
  • Revisar los índices puestos en la configuración de los nagios
  • Para resolver esto vuelvo a instalar nagiso y apunto los nombres por defecto que usa nagios para los diferentes servicios
    • SSH SSH
    • Discos Disk
    • Http HTTP
    • ping PING
    • mysql Mysql
"service_description": "CPU", Load

28/11/2016 [OK]*Cuando guardo los servicios también se guarda el valor 6. En teoría solo hay 5 valores ==> Falsa alarma, el problema es que hay un scrolling y ahí si que sale el 6º servicio MEJORAR => que aparezcan todos los servicios y no el scrolling



16/11/2016

REST nagios nrpe.png

  • Instalo el api para probar lo de nagios
  • descargo el fichero nagios-api (lo tengo en descargas y en la carpeta del proyecto).
  • Debo de ejecutar el sql que tiene, cuidado que no tiene el create database , lo añado, es la base de datos smartembedded_na
  • Mirar el fichero modulo.ini para ver otros parámetros de configuración como usuario y passoword
  • El objetivo es que escribiendo en el url http://172.17.0.3/nagios-api/getternagios/data me aparezca el resultado de monitorizar a alguien
  • activo todos los servicos que necesito en esta máquina apache2 - mysql - nagios3 - nagios-nrpe-server
  • Estoy en el contenedor nagios1 172.17.0.3 y nombre e490a9185700
  • Activo los módulso rewrite y cgi (el segundo no sé muy bien porqué)
a2enmod rewrite
a2enmod cgi
  • instalo mysqli
apt-get install php-mysql


16/06/2016
  • Crear una nueva función para que recoja lo que me de al api de conexión al nagios

1.- Creo una función en config/test/modules llamda monitorizacion

    De momento solo creo un método view_data_server_nagios

2.- En monitorizacion controller


14/06/2016 ==> OK
  • Tengo que modificar el modelo de la monitorización y guardar el _id de los servidores nagios y el nombre
  • Acciones
    • Cambiar el modelo y vista de monitorizacion para los campos (ahora un select)
    • añadir un método en el modelo del nagios para que retorne la lista (_id y nombre) de los servidores nagios
  1. modelo monitorizacion
    1. atributos
add nagios_id y nagios_name
    1. método set
    2. método object_encode_data
  1. modelo nagios
    1. add método get_servidores


  1. view monitorizacion
    1. view
aquí cargo los datos del modelo de nagios con get_servidores
    1. edit
cambio el field a select
    1. listing
camibo nagios_host a nagios_name
  1. Asignando datos
    1. en controller método edit tengo que pillar el name e _id y dárselo a PSOT


27/05/2016
  • Tengo un error en visualizar los datos una vez guardados


10/05/2016
  • Vamos a mirar que cargue bien los datos
  • Que funcione el edit, el borrar y el visualizar cada uno de los registros guardados
  • Vamos anotando el significado del funcionamiento del MVC


6/05/2016

Ahora al insertar un nuevo elemento a monitorizar y darle aceptar me ocurre que me duplica en un formulario la información de lo que acabo de inertar Proyecto 1.png

  • El dar a aceptar ejecuta la opción edit del controller, me quedo aquí mirando eso
Solucionado (sobraba un div)