Integración instancia GIT en GitLab con instancia de Plataforma Sofia2

asoc-git-01
Se ha incorporado una nueva funcionalidad a la plataforma consistente en la asociación de una instancia de SCM GIT sobre GitLab con la instancia de plataforma Sofia2 para poder utilizar dicho repositorio como repositorio SCM de nuestros desarrollos sobre plataforma, además de futuras incorporaciones de automatizaciones para la gestión de funcionalidades como la exportación e importación de configuración y datos, proyectos web, etc.
No todas las instancias de plataforma tendrán disponible la funcionalidad, puesto que está pensado más bien para su uso con instancias que se utilicen como entorno de desarrollo o pruebas, más que con instancias productivas. Para que la funcionalidad esté disponible se debe de habilitar por configuración en la propia instalación de la instancia.
Lo primero que hay que hacer para poder hacer uso de la funcionalidad es crear la asociación. Para ello, accedemos con usuario administrador a la consola de plataforma y en el menú de administración, pulsamos sobre la opción repositorio GIT
asoc-git-01
Y creamos la asociación:
asoc-git-02
Introducimos los datos de URL del repositorio GIT, usuario, password y el private token del usuario administrador para la integración y marcamos la integración como activa:
asoc-git-03
Para poder realizar el enlace correctamente en el repositorio GIT debe de existir un usuario “project_sofia2” (del que debemos conocer su password y el private token) con rol administrador y un grupo llamado “ProjectSOFIA2” con el usuario administrador anterior como propietario.
asoc-git-04asoc-git-05
Solo se permitirá una configuración de Repositorio GIT por instancia y su activación/desactivación, pero no el borrado:
asoc-git-06
En la ventana de visualización se pueden ver los proyectos existentes en el grupo “ProjectSOFIA2”
asoc-git-07
A partir de este paso, cuando un usuario crea un proyecto en Sofia2, automáticamente se crea un proyecto en el repositorio GIT dentro del grupo ProjectSOFIA2 y el usuario correspondiente al usuario Sofia2 que crea el proyecto como owner del proyecto y añadido al grupo, además de crear una estructura base de proyecto a partir de un template.
Creamos el proyecto en Sofia2 Control Panel:
asoc-git-08
Y se crea proyecto en GIT, en el grupo ProjectSOFIA2:
asoc-git-09
Cada proyecto creado en Git se define con:
asoc-git-10
Finalmente, se crean los usuarios asociados con el proyecto:
  • Un usuario con rol owner en Git para el usuario que crea el proyecto
  • Un usuario con rol developer en Git por cada usuario asociado al proyecto Sofia2
  • Todos los usuarios quedarán asociados al grupo de usuarios del proyecto
A partir de este paso, cuando se añaden usuarios al proyecto Sofia2 con repositorio asociado, se crean y añaden usuarios al repositorio y grupo en GIT.
     – Los datos de los usuarios de Git se tomarán de los datos de usuarios de Sofia2.
     – Datos de usuario en Sofia2: Usuario, Nombre Completo, Email
     – Datos de usuario en GitLab: Usuario, Nombre, Email
     – Contraseña: se envía link al mail desde el API de GitLab con contraseña autogenerada para repositorio.
Si un proyecto ya existiera previa a la asociación del repositorio GIT con la Plataforma se tendría que editar el proyecto para que se realizara todo el proceso igual que si se creara de cero con el enlace a GIT activado.

En posteriores versiones se evolucionará la funcionalidad con algunas mejoras:
  • Marcador a nivel de proyecto para indicar si se quiere asociar o no el proyecto a repositorio GIT.
  • Visualizado de datos de enlace a Git con los datos de Grupo/proyecto y usuarios en Git dentro de la ventana de proyecto.
  • Visualización datos básicos de información de repositorio: Branches, Tags, Files, Activity, Commits, Graph, Compare, etc.
  • Funcionalidades para poder guardar contenidos desde consola en dicho repositorio por cada usuario de proyecto. Se hará especifico en cada una de las funcionalidades, por ejemplo, export/import, proyecto web, notebooks, etc.
Integración instancia GIT en GitLab con instancia de Plataforma Sofia2

Funcionalidad de Export/Import Configuración y Datos en Plataforma Sofia2 (Parte II)

exp-ip-edit

 

En esta segunda parte del post (ver Parte I), nos vamos a centrar en la funcionalidad de exportación e importación de datos de ontologías.

Exportar Datos de Ontologias

La exportación de datos de ontologías se puede hacer de todas las ontologías del usuario y sobre las que tiene permisos.

exp-ip-101

Previo a la exportación de ontologías, podemos ver una estadística del contenido de las mismas, para ello seleccionamos de la lista aquellas que queremos mostrar y pulsamos en el botón “Mostrar estadísticas”.

Se nos muestra la información de tamaño, número de registros disponibles y limite de registros exportables permitido para cada ontología y un check para seleccionar aquellas a exportar.

exp-ip-102

Una vez seleccionado el tipo de exportación que queremos realizar pulsamos el botón Exportar para generar los ficheros de exportación a descargar, uno por ontología seleccionada.

exp-ip-103

Los ficheros se generarán mediante un proceso asíncrono en segundo plano y estarán disponibles en la lista inferior de descargas una vez haya finalizado dicho proceso. Para ir viendo los ficheros generados podemos pulsar sobre el botón “Actualizar estados de carga”.

exp-ip-104

Si el proceso de exportación está correcto se mostrará en la lista con estado OK y si el proceso ha fallado se mostrará con estado KO.

Podemos ver el detalle de ejecución del proceso pulsando sobre el icono de “Detalle” que nos abrirá una ventana con todo el detalle:

exp-ip-105exp-ip-106

Para descargar los ficheros generados los seleccionamos de la lista de descargas y pulsamos sobre el botón descargar.

exp-ip-107

Esto nos descargará a local el fichero zip con el contenido de datos de la ontologia exportada (json con los datos).

exp-ip-108

 

Importar Datos de Ontologias

Para realizar la importación de datos de ontologías desde un fichero exportado en otro entorno se debe de contar con el fichero exportado por un usuario en una instancia de Plataforma y con la ontología creada en el nuevo entorno.

No es necesario que el usuario sea el mismo que el que realizó la exportación, pero si que sea propietario o tenga permisos sobre la ontologia en este entorno donde se quiere importar.

Lo primero que hacemos es subir el fichero desde local a servidor:

exp-ip-109

Seleccionamos modo de importación de entre los disponibles (Insert, update, drop) y pulsamos el botón “Importar”:

La diferencia entre los diferentes modos de importación es que en modo insert intenta insertar los elementos sobre la estructura de datos de la ontología respetando los actuales existentes; en modo update actualiza los datos sobra la estructura de datos por los existentes en la importación; y con drop realiza un borrado previo de los datos existentes sobre la estructura de datos de la ontología e insertando los existentes en la importación.

exp-ip-110

El proceso de importación puede tardar bastante tiempo dependiendo del numero de elementos.

exp-ip-111

Cuando finaliza el proceso de importación, el resultado se muestra en la tabla de estado de cargas como OK o KO y con opción de acceder al detalle de importación mediante el icono de “Detalle”

exp-ip-112

exp-ip-113

 

Próximos pasos

En próximas releases de la plataforma se extenderá el comportamiento de la funcionalidad de exportación e importación para en lugar de dejar los ficheros de exportación en un filesystem temporal de la plataforma se guarden en un repositorio GIT para así disponer de un backup parcial de la plataforma tanto de mis configuraciones como de mis datos, que de la misma forma se podrá programar para que se genere automáticamente de forma diaria o semanal.

 

Funcionalidad de Export/Import Configuración y Datos en Plataforma Sofia2 (Parte II)

Funcionalidad de Export/Import Configuración y Datos en Plataforma Sofia2 (Parte I)

exp-ip-001

 

Mediante esta funcionalidad se pretende disponer de un mecanismo para la importación y exportación de datos de configuración (proyectos, ontologías, scripts, etc …) y de datos de negocio (instancias de ontologías) relacionados con un usuario desde una instancia de plataforma a otro, por ejemplo desde una instancia de desarrollo a una instancia de preproducción o producción.

Para acceder a la funcionalidad se debe de hacer con un usuario con rol Colaborador mediante la opción de menú disponible en Herramientas > Exportar/Importar elementos

exp-ip-001

La ventana de Export/Import contiene 2 pestaña:

  • Elementos configuración:  Funcionalidad para Exportar/Importar elementos de configuración (BDC de Plataforma)
  • Datos ontología: Funcionalidad Exportar / Importar Datos o instancias de Ontologias (BDTR de Plataforma)

exp-ip-002

En una primera parte de este post nos centraremos en la funcionalidad de exportación e importación de elementos de configuración.

Exportar Elementos de Configuración

La exportación de elementos de configuración se puede hacer de todos los elementos de configuración asociados con el usuario (selección en lista de elementos de opción “Total”) o por tipos (Ontologia, KP, Api, etc …).

Los tipos de elementos que se pueden exportar son:

  • Todos: Exporta todos los elementos propiedad del usuario.
  • General: incluye los siguientes elementos generales:
    • Proyectos.
    • Proyectos web.
    • Ontologías.
    • Simulador Ontologias.
    • Consultas Predefinidas.
    • ThinKPs.
  • APIS: Apis REST publicados en API Manager.
  • Reglas:  incluye los siguientes elementos scripts y flujos de procesamiento:
    • Script Ontologia
    • Script CEP
    • Evento CEP
    • Query CEP
    • Script Timer
    • Flujos Node-Red
  • Dashboards: incluye los siguientes elementos de presentación:
    • Gadget
    • Dashboard
    • Sinópticos
  • Assets: incluye los siguientes elementos de gestión de activos:
    • Nodo
    • Tipo Asset
    • Asset
  • Escritorios: incluye los escritorios web definidos para el usuario.
  • Informes: incluye los elementos relacionados con reports.
    • Plantillas de informes
    • Informes almacenados
  • Notebooks: incluye los algoritmos de procesamiento.
  • Dataflows: incluye los pipelines de ingesta.

 

Todos los elementos dependientes de los elementos seleccionados serán exportados también, es decir, si se selecciona como elemento a exportar “Dashboard”, se exportarán también gadget, ontologías…que estén configurados y relacionados con en el mismo.

exp-ip-003

Una vez seleccionado el tipo de exportación que queremos realizar pulsamos el botón Exportar para generar el fichero de exportación a descargar.

exp-ip-004

Al pinchar en el botón se lanza la exportación en servidor y la generación de un fichero zip que contiene un fichero con los elementos de configuración exportados en un formato json y ficheros adicionales que existieran vinculados.

Hay que tener en cuenta que la exportación se realiza en un proceso asíncrono y que puede que tarde un tiempo en generarse.

Si el proceso tiene éxito se muestra el fichero de exportación para su descarga. Si el proceso falla se mostrará mensaje de error de exportación y una tabla indicando los errores oportunos.

exp-ip-005

Para descargarse a local el fichero de export, lo seleccionamos y pulsamos el botón Descargar.

Los ficheros de export generados por el usuario están disponibles en el servidor durante 24 horas, trascurrido ese tiempo el borrado del fichero es automático por el sistema.

exp-ip-006

El formato de estos ficheros es el siguiente y NO se recomienda editar ni modificar manualmente:

exp-ip-007exp-ip-008

 

Importar Elementos de Configuración

Para realizar la importación de elementos de configuración desde un fichero exportado en otro entorno o en éste mismo se debe de contar con el fichero exportado por un usuario en una instancia de Plataforma. No es necesario que el usuario sea el mismo que el que realizó la exportación.

Subimos el fichero desde local a servidor:

exp-ip-009

Y pulsamos el botón “Cargar Datos”:

exp-ip-010

Al pinchar en el botón se lanza la importación en servidor realiza la lectura de elementos disponibles en el fichero por tipos y nos permite seleccionar aquellos que queremos importar:

exp-ip-011

Todos los elementos dependientes de los elementos seleccionados serán importados también, es decir, si se selecciona como elemento a importar un “Dashboard”, se importarán también gadgets, ontologías…que tengan dependencias con el mismo. Si se deselecciona alguna instancia de elemento necesaria para la creación de otro, se mostrará error de este motivo en la importación del segundo, por ejemplo: “Gadget que usa ontología y no importamos ontología”, y la importación del gadget fallará.

El proceso de importación puede tardar bastante tiempo dependiendo del numero de elementos.

exp-ip-012

Cuando finaliza el proceso de importación, el resultado se muestra la misma tabla mediante unos check de color verde o rojo indicando el éxito o no de la operación de importación de cada uno de los elementos.

exp-ip-013exp-ip-014

 

 

Funcionalidad de Export/Import Configuración y Datos en Plataforma Sofia2 (Parte I)

Mejoras en el despliegue y operación de la plataforma Sofia2

Captura de pantalla 2017-05-25 a las 17.14.08

 

Durante las últimas releases de Sofia2 se han ido introduciendo mejoras en los despliegues de la plataforma, apoyándose cada vez más en los principios DevOps.

 

La CI/CD se ha adaptado al despliegue con contenedores y se han introducido algunas características nuevas de Jenkins, mejorando significativamente la parte Dev de Sofia2, tales como:

 

  • Pipelines declarativos, estos estrechan aún más la distancia entre los desarrollos y los despliegues mediante un DSL más accesible y/o legible e integrado con Docker.
  • BlueOcean, este nuevo plugin permite visualizar de manera más limpia cada uno de los stages o fases de los pipelines de Jenkins.

Captura de pantalla 2017-05-25 a las 9.51.45

Para la mejora de la parte Ops, cada uno de los módulos (ControlPanel, IoTBroker, Stream Process,…) se ha contenerizado con Docker y mediante Kubernetes se automatizan los despliegues de los mismos en los distintos nodos disponibles.

 

Kubernetes es un sistema Open Source de Google que permite automatizar despliegues apoyándose en la tecnología de contenedores, además, gracias al concepto de Replication Controller de Kubernetes se garantiza el auto escalado de cualquiera de los módulos, manteniendo constante el número de réplicas (pods) de un determinado módulo.

 

La accesibilidad entre los pods de distintos módulos en el cluster se consigue mediante servicios, que además se encargan de realizar el balanceo de carga entre todas las réplicas de un mismo módulo.

 

Captura de pantalla 2017-04-06 a las 15.55.43

Mejoras en el despliegue y operación de la plataforma Sofia2

Sofia2 IoT example with Android: Tag, you’re it!

example-overview.png

This post is an example on how easy is to integrate an IoT scenario using Sofia2 IoT platform. The example was presented on February 17th during an introduction lecture on Sofia2 basics for the Embedded & Distributed Systems Sofware Master course at the Universidad Politécnica de Madrid (UPM).

The setup will simulate a typical IoT scenario with just a couple of elements:

  • Android Smarpthone (running at least a 4.4 Android version)
  • BLE (Bluetooth Low Energy) Beacon
  • An upgraded user for Sofia2.com platform (ROL_COLABORADOR)

 

example-overview.png

The demo app will periodically fetch data from the smartphone’s accelerometer sensor and GPS. It will also operate as a BLE scanner, triggering an asynchronous event when the selected beacon is placed nearby. Data will be modeled using a Sofia2’s Ontology. Using Sofia2 console, we will create a Dashboard to represent periodic real-time data. A Groovy script will be also generated to evaluate whether the beacon was detected. If that is the case, it will send an e-mail to the user: “Tag, you’re it!”

Seguir leyendo “Sofia2 IoT example with Android: Tag, you’re it!”

Sofia2 IoT example with Android: Tag, you’re it!

Caso ejemplo Sofia2 IoT con Android : ¡Tú la llevas!

En este post se presentará un sencillo ejemplo de integración IoT sobre la plataforma Sofia2. Este ejemplo fue presentado el día 17 de Febrero en una charla de presentación y de formación de conceptos básicos de la plataforma IoT Sofia2 a los alumnos del Máster en Software de Sistemas Distribuidos y Empotrados, en el grupo de investigación SYST de la Universidad Politécnica de Madrid (UPM).

El escenario simulará un escenario típico de IoT con un par de elementos sencillos:

  • Smartphone Android (versión igual o superior a 4.4)
  • Dispositivo beacon con BLE (Bluetooth Low Energy)
  • Usuario en plataforma Sofia2.com, con nivel de ROL_COLABORADOR

 

example-overview.png

 

Para el demostrador se obtendrán datos periódicamente de los sensores de acelerómetro del terminal móvil y de la geo-posición del mismo. Además se realizará un escaneo sobre Bluetooth Low Energy (BLE) que cuando detecte la cercanía del Beacon seleccionado, dispare un evento asíncrono. En Sofia2, se recogerán los datos en una Ontología, representando acto seguido los valores periódicos en un Dashboard, y evaluando la ocurrencia del evento asíncrono en un Script que notificará de manera instantánea la detección del evento en el e-mail del usuario: ¡Tú la llevas!

Seguir leyendo “Caso ejemplo Sofia2 IoT con Android : ¡Tú la llevas!”

Caso ejemplo Sofia2 IoT con Android : ¡Tú la llevas!

Device Management Support with Sofia2

Device management is one of the ten more relevant Internet of Things technologies for next years, according to Gardner:

image0012

In this post we will share with you all, how we understand device management, what are the tools that Sofia2 provides for it, and the evolution we are working on, for this functionality.

Seguir leyendo “Device Management Support with Sofia2”

Device Management Support with Sofia2