CONTENEDOR DE KP DICIEMBRE 2014 Versión 1 1 INDICE 1 INDICE ................................................................ ................................................................................................ ............................................ 2 2 INTRODUCCIÓN .............................................................................................................................. ................................ .............................. 3 2.1 OBJETIVOS Y ALCANCE CANCE DEL PRESENTE DOCUMENTO D ................................................................ .................................... 3 3 DESCRIPCIÓN DEL CONTENEDOR ENEDOR DE KPS SOFIA2 ................................................................ ............................................ 4 4 CARACTERISTICAS DE KPS PS CONTENIDOS ......................................................................................... ......................... 5 5 4.1 DIRECTORIO DE EJECUCIÓN:................................................................................................ ................................ ................................... 5 4.2 MENSAJES A ENVIAR AL SIB: ................................................................................................ ................................ .................................. 5 4.3 FORMATO DE MENSAJES ................................................................................................ ................................ ........................................ 5 4.4 LOGS................................................................ ................................................................................................ .................................. 6 4.5 CÓDIGOS DE RESPUESTA ................................................................................................ ................................ ........................................ 7 4.6 FICHEROS EJECUTABLES................................................................................................ ................................ ......................................... 8 4.7 PROPIEDADES DE UN KP ................................................................................................ ................................ ........................................ 9 CONSOLA DE ADMINISTRACIÓN ACIÓN ................................................................................................ ................................... 10 5.1 ALTA DE UN NUEVO KP EN EL CONTENEDOR DE KPS ................................................................ ................................. 10 5.2 LISTADO DE KPS EN CONTENEDOR DE KPS ................................................................ .............................................. 12 5.3 CONSULTA Y MONITORIZACIÓN CIÓN DE UN KP EN EL CONTENEDOR ................................................... ................... 13 Página 2/15 2 INTRODUCCIÓN 2.1 Objetivos y alcance del presente documento En este documento se describe el funcionamiento del contenedor de KPs de Sofia2. Contiene información de interés para cualquier programador de KPs que vayan a ser desplegados en el contenedor de KPs de Sofia2. Página 3/15 3 DESCRIPCIÓN DEL CONTENEDOR DE KPs SOFIA2 El contenedor de KPs de Sofia2 consiste en un entorno para la ejecución de KPs desplegados por usuarios privilegiados de la plataforma. Libera a estos usuarios colaboradores de la necesidad de disponer de un entorno físico de máquinas para ejecutar sus KPs, proporcionándoles una infraestructura 24x7 con conectividad al SIB Sofia2 para ejecutarlos ejecutar KPs. En la Versión 2 del contenedor de KPs desplegado en la Release Sofia2 2.15 se soportan 3 tipos de KPs: • KPs Python: Scripts ripts en lenguaje de programación Python. • KPs Java:: Ficheros jar comprimidos como jar ejecutables. • KPs URL:: URL accesible desde el contenedor de KPs (internet o intranet) que ante una petición HTTP devuelva uno o varios mensajes a enviar al SIB. La ejecución de un KP consiste en invocaciones programadas mediante una expresión CRON. Una vez se cumple la condición temporal del CRON, el contenedor invoca al KP para su ejecución, teniendo un límite temporal para finalizar o de lo contrario el contenedor or de KPs abortará la ejecución. Una vez finaliza la ejecución un KP, el contenedor procede a recuperar los mensajes generados erados y los persiste y los envía al SIB. Página 4/15 4 CARACTERISTICAS DE KPs CONTENIDOS Los KPs contenidos en el contenedor de KPs deben cumplir un conjunto de requisitos para integrarse con este: 4.1 Directorio de Ejecución: Los KPs de tipo Java y Python se despliegan físicamente en el contenedor de KPs en un directorio donde pueden crear ficheros (logs y mensajes) y leer recursos (properties). (prop 4.2 Mensajes a enviar al SIB: Un KP puede generar tras su ejecución uno o varios mensajes para que sean recogidos por el contenedor y enviados al SIB de Sofia2. Estos mensajes serán recogidos por el contenedor y serán enviados en nombre del KP al SIB. Esto es, a efectos de autenticación/autorización se utilizarán las credenciales del propio KP. Los mensajes se informan al SIB tras la ejecución de la siguiente manera: • KPs Java y Python:: Creando el propio KP uno o varios ficheros de mensajes, que el contenedor identificará por el nombre, ya que durante el alta del KP en la consola de administración, se informará el prefijo en el nombre de estos ficheros. • URL: Devolviendo en el cuerpo de la respuesta HTTP el listado de mensajes a enviar al SIB. En el caso de mensajes informados por ficheros, será el propio contenedor de KPs quien borre tales ficheros una vez haya leído los mensajes y persistido para su envio al SIB. 4.3 Formato de mensajes Cada mensaje generado por un KP tras su ejecución para ser recogidos recogidos por el contenedor de KPs, tendrán el siguiente formato de objeto JSON, siendo el contenedor quien construya y envie al SIB un mensaje SSAP INSERT con la información del mensaje: {<ontologia>:{<instancia_ontologia}} Por ejemplo el siguiente objeto representaria un mensaje SSAP INSERT sobre la ontologia SensorTemperatura: Página 5/15 {"SensorTemperatura":{ "Sensor": { "geometry": { "coordinates": [ 40.512967, -3.67495 ], "type": "Point" }, "assetId": "S_Temperatura_00066", "measure": 25, "timestamp": { "$date": "2014-04-29T08:24:54.005Z"}}}}} 29T08:24:54.005Z"}}}}} Dependiendo del tipo de KP, los mensajes serán serán informados al contenedor de una forma u otra: • KPs Java y Python:: Fichero de texto donde cada línea contiene un objeto JSON representando un mensaje.Tras mensaje. finalizar la ejecución del KP, el contenedor leerá el fichero de texto generado línea a línea, construyendo un mensaje SSAP INSERT con cada una. En un mismo fichero es posible generar mensajes haciendo referencia a diferentes ontologías. Por or ejemplo, el siguiente fichero seria un u fichero válido: {"SensorTemperatura":{ "Sensor": { "measure": 25, "timestamp": { "$date": "2014-04 "2014 04-29T08:24:55.005Z"}}}} {"SensorTemperatura":{ "Sensor": { "measure": 24, 2 "timestamp": { "$date": "2014-04 04-29T08:25:25.005Z"}}}} {"SensorTemperatura":{ ":{ "Sensor": { "measure": 25, 2 "timestamp": { "$date": "2014-04 04-29T08:25:55.005Z"}}}} {"SensorTemperatura":{ "Sensor": { "measure": 26, 2 "timestamp": { "$date": "2014-04 04-29T08:26:25.005Z"}}}} {"SensorTemperatura":{ "Sensor": { "measure": 27, 2 "timestamp": { "$date": "2014-04 04-29T08:26:55.005Z"}}}} {"SensorTemperatura":{ "Sensor": { "measure": 26, 2 "timestamp": { "$date": "2014-04 04-29T08:27:25.005Z"}}}} • KPs URL: Respuesta HTTP de tipo mime application/json conteniendo en el cuerpo de la misma un Array JSON con cada uno de los objetos respresentando un mensaje a enviar al SIB. Por ejemplo, el siguiente Array JSON en el cuerpo de la respuesta seria una respuesta válida: [ {"SensorTemperatura":{ "Sensor": { "measure": 25, "timestamp": { "$date": "2014-04 04-29T08:24:55.005Z"}}}}, {"SensorTemperatura":{ "Sensor": { "measure": 24, 2 "timestamp": { "$date": "2014-04 04-29T08:25:25.005Z"}}}}, {"SensorTemperatura":{ "Sensor": { "measure": 25, 2 "timestamp": { "$date": "2014-04 04-29T08:25:55.005Z"}}}}, {"SensorTemperatura":{ eratura":{ "Sensor": { "measure": 26, 2 "timestamp": { "$date": "2014-04 04-29T08:26:25.005Z"}}}}, {"SensorTemperatura":{ "Sensor": { "measure": 27, 2 "timestamp": { "$date": "2014-04 04-29T08:26:55.005Z"}}}}, {"SensorTemperatura":{ "Sensor": { "measure": 26, 2 "timestamp": { "$date": "2014-04 04-29T08:27:25.005Z"}}}} ] 4.4 Logs Los KPs de tipo Java y Python pueden generar durante su ejecución uno o varios ficheros de trazas. Estas trazas serán descargables desde la consola de Administración en un fichero zip. Los ficheros ros de trazas deben ser generados por el propio programa del KP durante en su directorio de ejecución. Página 6/15 El contenido de los ficheros de trazas es libre, ya que el contenedor de KPs no lo analiza. Únicamente es necesario informar durante la creación del KP en en la consola de Administración el prefijo que tendrán como nombre estos ficheros de trazas. Los ficheros de trazas son descargables desde la consola de administración. Una vez se solicita al contenedor la descarga de las trazas, el contenedor escanea el directorio di de ejecución del KP buscando ficheros cuyo nombre comience por el prefijo indicado y los empaqueta en un zip para descargar. 4.5 Códigos digos de respuesta Un KP ejecutado en el contenedor de KPs debe finalizar siempre su ejecución tras un tiempo determinado. En caso de no finalizar en el tiempo que tenga asignado, será el contenedor de KPs quien aborte su ejecución. Los códigos de respuesta válidos interpretables por el contenedor de KPs son: • KPs Java y Python: Finalizarán su ejecución devolviendo en la función main un entero interpretable por el contenedor de KPs: o 0 (EXIT_SUCCESS) (EXIT_SUCCESS): Finalización satisfactoria. El contenedor de KPs contabilizara la ejecución como satisfactoria y procederá a leer los l ficheros de mensajes generados para generar los mensajes de INSERT. o 1 (EXIT_FAILURE_WITH_MESSAGES) (EXIT_FAILURE_WITH_MESSAGES): Finalización errónea pero con mensajes.. El contenedor de KPs contabilizará la ejecución como errónea, pero considerará que los ficheros de mensajes generados generados contienen mensajes a enviar al SIB y procederá a su lectura. o 2 (EXIT_FAILURE_DISCARDING_MESSAGES): Finalización err errónea. El contenedor de KPs contabilizará la ejecución ejecución como errónea y descartará los ficheros de mensajes generados por el KP durante la ejecución. • KPs URL: Devolverán un código HTTP de respuesta: respuesta o 200 (HTTP_OK): Finalización satisfactoria. El contenedor de KPs contabilizará la ejecución como satisfactoria y leerá el cuerpo de la respuesta para generar los mensajes de INSERT. o Otro código: Finalización errónea. El contenedor de KPs contabilizará le ejecución como errónea y no generará mensajes de INSERT. Página 7/15 4.6 Ficheros Ejecutables Los Kps Python y Java necesitan la subida al contenedor de un fichero ejecutable, de manera que debe cumplir ciertas características para poder ser ejecutado por el Runtime correpondiente. • KPs Java: Deben ser empaquetados en un fichero JAR autoejecutable. Esto es: Dentro del JAR se deben incluir todas aquellas clases necesarias para la o ejecución del KP que no estén incluidas incluidas en las librerías de la JRE del contenedor. Debe incluirse un punto de entrada al programa. Esto es, una clase con un o método main que controla el inicio y finalización del programa. Debe indicarse el punto de entrada al programa en un fichero MANIFEST.MF M o indicando la clase donde está el método main mediante la propiedad MainMain Class: Main-Class: Class: com.indra.kp.Main Por ejemplo, un KP java a desplegar en el contenedor tendría esta estructura: Donde: o Main.class:: Clase que contiene el método m main que actua de punto de entrada al programa Java. o MANIFEST.MF Descriptor del ejecutable Java: MANIFEST.MF: Manifest-Version: Version: 1.0 Class-Path: Path: . Main-Class: Class: com.indra.kp.Main • KPs Python: Deben ser desplegados como scripts Python. Esto es: o Deben desplegarse en un fichero que contenga una función main que actue de punto de entrada al programa e incluir todos los import y funciones necesarias para su ejecución. Página 8/15 4.7 Propiedades de un KP Durante el alta de un KP en el contenedor de KPs es posible registrar registrar en la consola de administración un conjunto de propiedades que podrá leer el KP durante su ejecución. En función del tipo de KP de que se trate, las propiedades serán interpretadas por el contenedor de una forma o otra: • KPs Java y Python: El contenedor contenedor de KPs creará en el directorio de ejecución del KP un fichero que contendrá todas las propiedades registradas en formato: <nombre_propiedad>=<valor> Por ejemplo: Propiedad1=valor1 Propiedad2=valor2 Propiedad3=valor3 De manera que el programador del KP podrá leer dichas propiedades leyendo el fichero de propiedades creado por el KP en su directorio de ejecución. El contenedor de KPs creará el fichero de propiedades con el mismo nombre que el KP, pero con extensión .properties • KPs URL: En este tipo de KPs KPs se diferencian dos tipos de propiedades: o Argumentos de Cabecera: El contenedor de KPs añadirá a la cabecera de la petición HTTP las propiedades de este tipo. o Argumentos de Consulta: El contenedor de KPs añadirá a la URL los parámetros indicados de este tipo. t Página 9/15 5 CONSOLA DE ADMINISTRACIÓN La consola de administración de Sofia2 integra las funcionalidades del contenedor de KPs. El contenedor de KPs es accesible desde el menú: menú 5.1 Alta de un nuevo KP en el contenedor de KPs Para dar de alta un nuevo KP en el contenedor de KPs de Sofia2 se dispone en la consola de administración la opción: Contenedor KP’s/APPs > Crear KPs/APPs en contenedor Página 10/15 En esta pantalla es necesario especificar información acerca del KP que se va a dar de alta. La información formación común independientemente del tipo de KP es: o KP:: Identificador del KP registrado en Sofia2 al que pertenece el KP a registrar en el contenedor. o Instancia de KP:: Identificador de KP a registrar en el contenedor o Tipo de contenedor de KP: K : En la versión actual todos son los KPs son temporizados y se lanzan periódicamente conforme a la expresión CRON. o Lenguaje:: Lenguaje de programación del KP, permite al contenedor seleccionar el runtime con el que lanzar el KP. o Timeout:: Tiempo en segundos que el contenedor asigna al KP para completar su ejecución. Si el KP no finaliza en dicho tiempo, el contenedor aborta la ejecución. o Descripción:: Descripción informativa del contenedor. En función del lenguaje elegido será necesario informar también: o Lenguaje Java o Python: Python o Programa: Fichero ejecutable con el código del programa a ejecutar por el contenedor. o Nombre del programa: Nombre que el contenedor dará al programa en el contenedor. o Prefijo de ficheros de mensajes: Prefijo que tendrán los ficheros de mensajes generados por el fichero ejecutable. Será lo que el contenedor utilice para o Propiedades: Pares de clave-valor clave valor con las propiedades que necesita el programa. Estas propiedades se utilizan por el contenedor de KPs para crear un fichero en el directorio directorio de ejecución con dichas propiedades. propiedades El fichero de propiedades tendrá el mismo nombre que el programa junto con la extensión .properties. De este modo si se definen para el programa MiPrograma las siguientes propiedades: El contenedor creará el fichero fi MiPrograma.properties en su directorio de ejecución con el siguiente contenido: Página 11/15 Propiedad2=valor2 Propiedad3=valor3 Propiedad1=valor1 o Lenguaje de tipo URL:: o URL: Dirección n a la que el contenedor hará las peticiones HTTP GET cada vez que se ejecute. o Parámetros Cabecera HTTP: Lista de pares clave-valor valor a incluir en la cabecera de la petición HTTP GET. o Parámetros de la petición HTTP: Lista de pares clave--valor con los query param a añadir a la petición HTTP. 5.2 Listado de KPs en contenedor de KPs Para consultar el listado de KPs en el contenedor de KPs de Sofia2 se dispone en la consola de administración la opción: Contenedor KP’s/APPs > Mis KPs/APPs en Contenedor Página 12/15 Desde esta pantalla es posible buscar filtrando por nombre e identificador de instancia, la lista de KPs que tenemos registrados en el contenedor de KPs. Asimismo, desde la lista de KPs tenemos acceso a las opciones de Consulta, Actualización y borrado de un KP en el contenedor. 5.3 Consulta y monitorización de un KP en el contenedor Desde la pantalla de listado de KPs es posible visualizar un KP con el estado actual de todas sus propiedades: Página 13/15 Así como administrar ciertos aspectos de su ejecución tales como: • Logs:: Es posible descargar en un fichero zip los ficheros de logs generados por un KP así como borrarlos. • Mensajes Erroneos: Son mensajes generados por el KP y que tras intentar su envio al SIB como un mensaje de tipo INSERT, el contenedor de KPs ha descartado descar por alguna razón Es posible tanto descargar en un fichero estos mensajes, como borrarlos. • Estado: Es posible detener la ejecución de un KP de manera que mientras se encuentre detenido, el contenedor de KPs no procederá ejecutarlo aunque se cumplan las condiciones especificadas en la expresión CRON. Página 14/15 Y monitorizar la ejecución del KP obteniendo la siguiente información: • Número total de ejecuciones. • Número mero de ejecuciones abortadas por el contenedor • Número mero de ejecuciones finalizadas devolviendo un código de error. • Tiempo total de ejecución consumido por el KP en el contenedor. • Tiempo médio de cada ejecución. • Número de mensajes enviados satisfactoriamente al SIB. • Número de mensajes leidos por el contenedor y almacenados para envio al SIB. • Número de mensajess erroneos tras su envio al SIB Página 15/15