Skip to content

huemul_Control

Developer Code edited this page Sep 21, 2018 · 2 revisions

huemul_Control

huemul_Control es la clase que posibilita la integración del desarrollo con el gobierno de datos. Control registra todas las definiciones de tablas y datalake en un diccionario de datos en PostgreSQL. Por otro lado genera un registro de actividad en la ejecución de los procesos, identificando automáticamente la trazabilidad del datalake y las tablas.

Inicialización

import com.huemulsolutions.bigdata.common._
import com.huemulsolutions.bigdata.control._

val Control = new huemul_Control(huemulBigDataGov, null,  huemulType_Frequency.MONTHLY)

class huemul_Control (huemulBigDataGov: huemul_BigDataGovernance, ControlParent: huemul_Control, runFrequency: huemulType_Frequency, IsSingleton: Boolean = true, RegisterInControlLog: Boolean = true)

  • huemulBigDataGov: Instancia de la clase huemul_BigDataGovernance
  • ControlParent: Proceso que está invocando este nuevo proceso, con esto se establece la dependencia entre procesos.
  • runFrequency: Frecuencia de ejecución del proceso (solo informativo).
  • IsSingleton: Por default está en true, evita que se ejecute el mismo proceso en paralelo, esto previene un posible conflicto de datos.
  • RegisterInControlLog: Al especificar false no registra la actividad en el modelo de control.

Métodos para configurar parámetros del proceso.

Para facilitar la revisión en la ejecución de procesos a través del tiempo, se han implementado métodos específicos para identificar parámetros de tipo fecha/hora:

  • AddParamYear(name: String, value: Integer): Registra el parámetro de tipo Año
  • AddParamMonth(name: String, value: Integer): Registra el parámetro de tipo Mes
  • AddParamDay(name: String, value: Integer): Registra el parámetro de tipo Dia
  • AddParamHour(name: String, value: Integer): Registra el parámetro de tipo Hora
  • AddParamMin(name: String, value: Integer): Registra el parámetro de tipo Minuto
  • AddParamSec(name: String, value: Integer): Registra el parámetro de tipo Segundo
  • AddParamInformation(name: String, value: String): Registra otros tipos de parámetros del proceso

Métodos de Control y Monitoreo de Procesos.

Cada proceso puede tener muchos pasos, huemul_Control expone métodos para documentar el paso a paso de los procesos, y facilitar su posterior visualización.

  • NewStep(StepName: String): Registra un paso dentro del código de la aplicación.
Control.NewStep("paso 1: asigna valor")
val valor1 = 10
val valor2 = 20
Control.NewStep("paso 2: suma")
val suma = valor1 + valor2
  • FinishProcessOK: Una vez que el proceso ha terminado exitosamente, se debe invocar este método de cierre
  • FinishProcessError(): En caso de que el proceso haya terminado con algún error, se debe invocar este método.
  • RegisterError(ErrorCode: Integer, Message: String, Trace: String, FileName: String, MethodName: String, ClassName: String, LineNumber: Integer, WhoWriteError: String ): Registra el error capturado por try-catch
  • RaiseError(txt: String): Gatilla un error de usuario.

Ejemplo

El siguiente es un ejemplo del correcto uso de huemul_Control para registrar la actividad del proceso.

def process_master(huemulBigDataGov: huemul_BigDataGovernance, ControlParent: huemul_Control, param_ano: Integer, param_mes: Integer): Boolean = {
    val Control = new huemul_Control(huemulBigDataGov, ControlParent,  huemulType_Frequency.MONTHLY)    
    
    try {             
      /*************** AGREGAR PARAMETROS A CONTROL **********************/
      Control.AddParamYear("param_ano", param_ano)
      Control.AddParamMonth("param_mes", param_mes)
      
      /*************** LOGICAS DE NEGOCIO **********************/   
      Control.NewStep("paso 1: asigna valor")
      val valor1 = 10
      val valor2 = 20
      Control.NewStep("paso 2: suma")
      val suma = valor1 + valor2

      Control.NewStep("paso 3: validaciones")    
      if (suma > 40)
        Control.RaiseError(s"User: Error de usuario")
      
      Control.FinishProcessOK
    } catch {
      case e: Exception => {
        Control.Control_Error.GetError(e, this.getClass.getName, null)
        Control.FinishProcessError()
      }
    }
    
    return Control.Control_Error.IsOK()   
  }