Changes between Version 3 and Version 4 of Version2/Desarrollo/Engine


Ignore:
Timestamp:
Mar 2, 2011, 9:00:29 PM (8 years ago)
Author:
adelcastillo
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Version2/Desarrollo/Engine

    v3 v4  
    11= OGR =
    2 ''ogr'' ó ''OpenGnSys Runner'' es un comando que se ha desarrollado para la versión 2 para facilitar el uso del engine. Se basa en ejecutar comandos que se encuentre en el directorio que marque la variable global $OGEDIR. Si la variable no estuviera seteada se usará por defecto el valor: '/opt/opengnsys/engine/' . En esta carpeta se encontrarán los distintos directorios, al que vamos a llamar módulos a partir de ahora, que tiene el engine:
     2''ogr'' ó ''OpenGnSys Runner'' es un comando que se ha desarrollado para la versión 2 para facilitar el uso del engine. Se basa en ejecutar comandos que se encuentre en el directorio que marque la variable global $OG_ENGINE_DIR. Si la variable no estuviera seteada se usará por defecto el valor: '/opt/opengnsys/engine/'. La herramienta ogr facilita la creación de scripts facilitando algunas tareas repetitivas:
     3* La ayuda: ogr es capaz de leer la documentación de los scripts y mostrarla.
     4* Errores: cuando un script termina con un valor de retorno distinto de 0, busca en la documentación y muestra la excepción que ha ocurrido.
     5* Mensajes de completitud: Los scripts pueden enviar a la salida de errores mensajes sobre el porcentaje de trabajo que se lleva realizado y ogr se encará de hacerlos llegar a quien corresponda.
     6
     7Para ello se ha creado la libreria ogr (libogr.py) que también puede ser usado por los scripts que necesiten funciones más avanzada de ogr como la ejecución de otros scripts.
     8
     9Esto es un pequeño adelanto pero se espera agregar más funcionalidades a esta herramienta.
     10
     11{{{
     12ogr getNumDisk
     13ogr help getNumDisk
     14ogr list web
     15}}}
     16
     17= Engine =
     18
     19El engine se encarga de todas las tareas a bajo nivel de OpenGnSys. Las operaciones van desde saber que IP tiene el cliente, como crear particiones, crear imágenes, arrancar una partición, etc. En el directorio del Engine se encontrarán los distintos directorios, al que vamos a llamar módulos a partir de ahora, que tiene el engine:
    320
    421* net: Scripts para redes.
    522* proto: Scripts de protocolos.
    623* rellenar todos los que falten.
    7 * utils: Aquí encontramos todos los scripts propios de está herramienta que facilitarán el uso del engine:
    8   * help: muestra la ayuda. Si recibe un script como argumento se mostrará la ayuda del script.
    9   * list: muestra todos los comandos disponibles. Si se le pasa como argumento un módulo mostrará sólo los de el módulo en concreto.
    10   * listmodules: muestra la lista de módulos.
    11   * trace: muestra la traza que siguen los scripts.
    12   * debug: muestra la traza que siguen los scripts pero se pueden modificar los argumentos en cada llamada.
    13   * ...
     24* util: Aquí encontramos todos los scripts propios de está herramienta que facilitarán el uso del engine:
     25  * help: muestra la ayuda de un script.
     26  * list: muestra todos los comandos disponibles del módulo pasado como argumento.
     27  * list-modules: muestra la lista de módulos.
     28  * what-module: muestra el módulo al que pertence un script.
     29  * where-is: muestra la ruta completa hasta un script.
     30* web: Aquí encontramos todos los scripts que se usan desde la interfaz web para manejar los clientes y por tanto tienen que trabajar en json.
    1431
    15 Ejemplos de uso:
     32= Requisitos para el Engine =
    1633
     34Los scripts que componen el engine deben cumplir una serie de requisitos para que funcionen de manera correcta con la herramienta OGR.
     35
     36== Lenguajes ==
     37
     38En principio no habría restricciones para el lenguaje que se use para hacer los scripts. La restricción entraría en la instalación dentro del cliente OGLive que habría que agregar.
     39
     40== Documentación ==
     41
     42Ejemplo:
    1743{{{
    18 ogr getNumDisk
    19 ogr help getNumDisk
    20 ogr list
     44#/**
     45#@fn      ogr list module.
     46#@brief   Muestra la lista de script de un módulo.
     47#@param   module: módulo del que queremos mostrar la lista.
     48#@return  lista de script del módulo.
     49#@exception ARG_REQUIRED: Argumento requerido.
     50#@exception MODULE_NOTFOUND: Módulo no encontrado.
     51#@version 0.1 - Primera versión para OpenGnSys.
     52#@author  Alejandro Castaño, Wadobo Software S.L.
     53#@date    27/02/2011
     54#*/
    2155}}}
    2256
    23 = Engine =
    24 El engine se encarga de todas las tareas a bajo nivel de OpenGnSys. Las operaciones van desde saber que IP tiene el cliente, como crear particiones, crear imágenes, arrancar una partición, etc. Dentro del engine divisamos dos niveles diferenciados:
     571. La documentación debe ir al principio del archivo antes de cualquier código ejecutable.
     581. Debe usarse la forma doxygen iniciandose con '/!**' y terminando con '*/'.
     591. Los '#' son necesarios para que tanto bash, como python, como el lenguaje que se use lo tome como un comentario.
     601. Cada argumento de la documentación debe empezar en una línea nueva, aunque cada argumento pueda ocupar más de una línea.
     611. Tanto el autor como la fecha deben tener una versión encima, ya que se consideran fechas y autores de la correspondiente versión.
    2562
    26 * '''Scripts de bajo nivel:''' Son creados principalmente en bash. Realizan las tareas de bajo nivel como saber el número de discos que tiene un ordenador, o el número de particiones de un disco, o qué IP tiene el ordenador asociado, etc. El valor de retorno puede tener los siguiente valores:
    27   * 0: si el script se ejecuto sin problemas.
    28   * -1: si hubo problemas que hace que se cancele la ejecución.
    29   * 1: con problemas pero puede continuar la ejecución.
     63== Excepciones ==
    3064
    31   La salida estándar devuelve el/los valor/es obtenidos por el script y la salida de errores las advertencias o errores que éste tuvo.
     65Cuando algo no fue como se esperaba hay que devolver un número mayor que 0. OGR considerará que el número con el que termino el script corresponderá a la posición que ocupa la excepción dentro de la documentación del script. Por ejemplo si en el ejemplo anterior el script acabará con un 1, OGR mostrará la excepción ARG_REQUIRED, si terminará con un 2, ogr mostrará la excepción MODULE_NOTFOUND.
    3266
    33 * '''Scripts de alto nivel:''' Son creados principalmente en python. Realizan operaciones mucho más compleja como por ejemplo devolver toda la información sobre discos: número de discos, con cuántas particiones cada uno, tamaño, tipo, etc. Además su salida está formateada en json para la comunicación con el WebConsole. Además existe libogr que facilitará la ejecución de comandos desde los scripts python.
     67== Salida ==
     68
     69Como el valor retorno se usa para controla las excepciones, la salida estándar se usa como la salida del comando. Por tanto cualquier información que un comando quiera devolver lo deberá hacer a través de su salida estandar que será recogida por ogr.
     70
     71== Salida de error ==
     72
     73La salida de error puede usarse para dos cosas:
     741. Para dar más información en caso de excepción puede usarse. Esta información sólo se mostrará en caso de excepción.
     751. Si se quieren enviar mensajes de control deberá usarse la salida de error para ello. Estos mensajes tendrán un formato especial que ogr logrará reconocer y distinguir de los anteriores
     76
     77== Mensajes de control ==
     78
     79=== Completitud de un trabajo ===
     80
     81Para enviar mensaje de completitud de un trabajo se deberá escribir en la salida de error con el siguiente formato:
     82{{{
     83[34] Mensaje auxiliar
     84}}}
     85
     86El mensaje auxiliar puede ser todo lo largo que se quiera hasta que se encuentre un salto de línea. Por ahora no hay más mensajes de control.