Diferencia entre revisiones de «Usuario:ManuelRomero/proyecto/proyectoIternova/bitacora»
(14 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__ | ||
− | ;14/06/2016 | + | ===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 | ||
+ | *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 | *Tengo que modificar el modelo de la monitorización y guardar el _id de los servidores nagios y el nombre | ||
*Acciones | *Acciones | ||
**Cambiar el modelo y vista de monitorizacion para los campos (ahora un select) | **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 | **añadir un método en el modelo del nagios para que retorne la lista (_id y nombre) de los servidores nagios | ||
+ | # modelo monitorizacion | ||
+ | ##atributos | ||
+ | add nagios_id y nagios_name | ||
+ | ##método set | ||
+ | ##método object_encode_data | ||
+ | #modelo nagios | ||
+ | ## add método get_servidores | ||
+ | |||
+ | |||
+ | #view monitorizacion | ||
+ | ##view | ||
+ | aquí cargo los datos del modelo de nagios con get_servidores | ||
+ | ##edit | ||
+ | cambio el field a select | ||
+ | ##listing | ||
+ | camibo nagios_host a nagios_name | ||
+ | |||
+ | #Asignando datos | ||
+ | ## en controller método edit tengo que pillar el name e _id y dárselo a PSOT | ||
Ú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
{{{1}}}
|
Código de jorge
Metodo 1 jorge |
---|
< /** * 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; } |
Método 2 jorge |
---|
/** * 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; } |
método 3 jorge |
---|
/** * 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 ); } } } |
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).
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
- 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
- modelo monitorizacion
- atributos
add nagios_id y nagios_name
- método set
- método object_encode_data
- modelo nagios
- add método get_servidores
- view monitorizacion
- view
aquí cargo los datos del modelo de nagios con get_servidores
- edit
cambio el field a select
- listing
camibo nagios_host a nagios_name
- Asignando datos
- 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
- El dar a aceptar ejecuta la opción edit del controller, me quedo aquí mirando eso
- Solucionado (sobraba un div)