martes, 14 de abril de 2015

IEL: primeros pasos. Parte 1

En este post vamos a ver como dar nuestros primeros pasos con el IEL - BRM Event Loader.

Para configurar el IEL tenemos 2 archivos:
  1. iel.cfg:aquí se configura el IEL en sí.
  2. pin.conf: aquí se configuran los parametrós de conexión a BRM.
El archivo iel.cfg tiene la siguiente estructura (familiar con la estructura de un XML):
[IEL]
    ...
    [CONN_POOL]
        ...
        [CONNECTION_DETAILS]
            ...
        [/CONNECTION_DETAILS]
    [/CONN_POOL]
   
    [FILE_MANAGER]
        ...
        [FILE_MAP]
            ...
        [/FILE_MAP]
        ...
    [/FILE_MANAGER]
     ...
[/IEL]

Hay mas secciones que las escritas arriba. Por ej: EPI_POOL.

En la sección IEL se encuentran los valores de configuración del IEL, tales como:
logfile: indica cual será el archivo de log del IEL.
loglevel: indica el nivel de log. Los valores son los mismos que los que se usan en cualquier pin.conf
logtimefmt: indica el formato de fechas que se enviarán al log.
    1: la fecha es mostrada como: ss.SSSSSS (segundos.microsegundos desde 01/01/1970).
    2: la fecha es mostrada como: DD/MM/YYYY hh:mm:ss.
    3:  la fecha es mostrada como: DD/MM/YYYY hh:mm:ss.SSSSSS
lock_file: indica el archivo que se usará para asegurarse de que solo haya una instancia del IEL.
license: indica la licencia para el IEL. Sin una licencia el IEL no correrá.
semaphore_file: indica el archivo que sera monitoreado para modificar el comportamiento del IEL mientras esta ejecutándose.

En la sección CONN_POOL se encuentran los valores de configuración de los pooles de conexión del IEL a BRM. El IEL puede tener más de un pool de conexiones a BRM. Si esta sección no se encuentra entonces el IEL utiliza los valores del pin.conf. Los valores de esta sección son:
size: cantidad de conexiones que serán mantenidas por el pool para procesar opcodes.
name: nombre del pool de conexiones. Éste nombre se usa en otras secciones del IEL.
CONNECTION_DETAILS: subsección donde se especifican los parámetros de conexión del pool:
    PIN_FLD_POID: service poid type
    PIN_FLD_TYPE: login type
    PIN_FLD_LOGIN: login name
    PIN_FLD_PASSWD_CLEAR: password
    PIN_FLD_CM_PTRS[0].PIN_FLD_CM_PTR:servidor y puerto

En la sección FILE_MANAGER (puede haber más de una) se cofigura el directorio que se estará monitoreando para procesar los archivos del mismo, los directorios de procesados, errores, satisfactorios, rechazados, cantidad de threads procesadores de archivos, frecuencia de búsqueda, etc. Algunos de los valores de esta sección son:

name: nombre para identificar al file manager.
load_buffer: especifica el numero de registros para poner en el buffer y procesarlos de una vez. Si se especifica 0 no hay límite.
in_dir: directorio donde el IEL buscará los archivos para procesar.
done_dir: directorio donde se depositan los archivos procesados.
work_dir: directorio donde se depositan los archivos que estan siendo procesados.
reject_dir: directorio donde se depositan los archivos rechazados por no tener una configuracion definida.
success_dir: directorio donde se depositan los archivos procesados satisfactoriamente.
error_dir: directorio donde se depositan los archivos que dieron error.
filter_dir: directorio donde se depositan los archivos que fueron filtrados por procesamiento.
working_prefix: prefijo que se le pone a los archivos que están siendo procesados.
working_sufix: sufijo que se le pone a los archivos que están siendo procesados.
remove_empty_files: indica si se deben guardar (0) o no (1) los archivos vacios.
file_manager_threads: cantidad de threads que procesarán archivos.
file_queue_size: cantidad de archivos que el IEL puede manejar en cualquier momento.
rater_threads: define el numero de threads independientes que se utilizaran para manejar archivos.
rate_queue_size: máximo número de registros que pueden ser puestos en buffer entre los threads del file-manager y los threads de rating.
search_frequency: cantidad de segundos en las que se realizará cada búsqueda.
group_files:
multiple_account_transactions:
group_by_account: los registros de la misma cuenta son procesados por el mismo thread(1). Primero se procesan los registros de las cuentas mas grandes, las que tienen mayor cantidad de registros (2). No hay agrupamiento por threads(0).
group_tail_percentage:
slurp_files: los archivos serán leídos en memoria en un solo jalón antes que ser procesados registro por registro.
log_queue_status:
timers: se tomarán tiempos de performance para cada archivo procesado (1).
manage_batch_gel: group_output_max_files: group_output_prefix: group_output_suffix: FILE_MAP: subsección dentro del FILE_MANAGER, puede haber más de una. Especifica como cada archivo debe ser procesado por el IEL:
    name: nombre del FILE_MAP
    include: archivo de configuración
    match_expr: expresión para hacer match con los archivos que procesará este FILE_MAP
    conn_pool: nombre del pool de conexiones que se utilizará (definido en la sección CONN_POOL)
    manage_batch_gel:
    sort_by_time:

El IEL se puede ejecutar en 2 modos: como un demonio o como un proceso simple.
Modo demonio: se ejecuta el iel sin parámetros. Recodar lanzarlo con nohup y en background.
Modo simple: en la línea de comandos se le pasan como parámetros: -f el nombre del file-manager que queremos que procese los archivos y los archivos que serán procesados por ese file-manager. Ejemplo: iel -f MiFileManager archivo1.txt archivo2.txt
Si se pasa el parámetro -t se ejecutará en modo test y a todas las transacciones se les hará rollback.

Con lo escrito arriba ya se puede configurar el IEL para que se conecte a BRM y procese archivos con un filename pattern específico. Ahora nos falta configurar cómo se procesarán los archivos (FILE_MAP.include) pero eso lo veremos en un otro post con un ejemplo.

Aquí dejo la configuración de una archivo iel.cfg como ejemplo.
[IEL]
 logfile=iel.log
 loglevel=3
 logtimefmt=2
 lock_file=iel.pid
 license=tu_licencia
 semaphore_file=semaphore.txt

 #------------------------------------
 # Conexion
 #------------------------------------
 [CONN_POOL]
  name=MI_CONEXION
  size=1
  [CONNECTION_DETAILS]
   PIN_FLD_POID=fixed|0.0.0.1 /service/pcm_client 1
   PIN_FLD_TYPE=fixed|1
   PIN_FLD_LOGIN=fixed|root.0.0.0.1
   PIN_FLD_PASSWD_CLEAR=fixed|password
   PIN_FLD_CM_PTRS[0].PIN_FLD_CM_PTR=fixed|ip server_ip puerto
  [/CONNECTION_DETAILS]
 [/CONN_POOL]

 #------------------------------------------
 # File Manager - Prueba_IEL
 #------------------------------------------

 [FILE_MANAGER]

  name=Prueba_IEL
  load_buffer=0

  [FILE_MAP]
   name=CambiarNombres
   include=cambiar_nombres.cfg
   match_expr=cuentas_nombres_*\.txt
   conn_pool=MI_CONEXION
   manage_batch_gel=1
   sort_by_time=0
  [/FILE_MAP]

  #--------------------------
  #   Directorios
  #--------------------------
  in_dir=in
  done_dir=done
  work_dir=working
  reject_dir=reject
  success_dir=success
  error_dir=error
  filter_dir=filter
  working_prefix=tmp_
  working_suffix=.tmp

  #------------------------
  #Configuracion 
  #----------------------
  file_manager_threads=1
  file_queue_size=5
  rater_threads=1
  rate_queue_size=1000
  search_frequency=5
  group_files=0
  multiple_account_transactions=0
  group_by_account=0
  group_tail_percentage=0.00
  slurp_files=0
  log_queue_status=0
  timers=1
  remove_empty_files=0
  manage_batch_gel=1
  group_output_max_files=0
  group_output_prefix=tmp_
  group_output_suffix=.tmp
  
 [/FILE_MANAGER]


[/IEL]


Martín Falconi



2 comentarios:

  1. Hola Martin! excelente post! una duda, puedo usar match_expr para que valide en cada registro del archivo si existe un string?

    ResponderBorrar