Saltar a contenido

Errores

Puedes tener control sobre los errores que ocurren durante la ejecución de una tarea, mapeando información como el rastreo del código, capturas de pantalla y archivos.

Orquestador BotCity

Puedes visualizar la funcionalidad de Errores directamente en la plataforma del Orquestador BotCity.

Consulta más en:

Crear un error simple

Un error simple consiste en capturar solo la información más básica cuando ocurre un error.

Para registrar un error con el SDK, necesitas la siguiente información:

  • ID de la tarea: Referencia de la tarea que emitirá la alerta.
  • Excepción: Información capturada del código dentro de bloques try/except.

Aquí un ejemplo de captura de error simple:

try:
    div = 0 / 0
except Exception as error:
    maestro.error(
        task_id=<TASK_ID>, 
        exception=error
    )
try {
    int div = 0/0;
} catch (Exception error) {
    maestro.createError(<TASK_ID>, error, null, null, null);
}
try {
    eval("hoo bar");
} catch (error) {
    await maestro.createError(<TASK_ID>, error)
}
try {
    eval("hoo bar");
} catch (error: any) {
    await maestro.createError(<TASK_ID>, error)
}
try {
    throw new Exception("test");
} catch (Exception ex) {
    await instance.CreateErrorAsync(ex, <TASK_ID>);
}

Crear un error personalizado

Puedes personalizar la información que se enviará al Orquestador BotCity, incluyendo parámetros opcionales en la captura del error.

Para registrar un error completo con el SDK, necesitas la siguiente información:

  • ID de la tarea: Referencia de la tarea que emitirá la alerta.
  • Excepción: Información capturada del código dentro de bloques try/except.
  • Captura de pantalla: (opcional) Ruta donde se guardó la imagen.
  • Tags: (opcional) Información en formato de clave/valor almacenada como texto.
  • Adjuntos: (opcional) Lista de rutas donde se guardaron los archivos.

Captura de pantalla

Es posible agregar una captura de pantalla en el momento en que ocurre el error, indicando la ruta donde se guardó la imagen.

¿Cómo guardar una captura?

Puedes usar el método de guardar capturas de pantalla para automatizaciones Desktop y web con los Frameworks BotCity.

Consulta cómo usarlo en:

Aquí un ejemplo de error con captura de pantalla:

try:
    div = 0 / 0
except Exception as error:
    # Ruta del archivo de captura de pantalla
    file_path = '/home/test/screenshot.png'
    maestro.error(
        task_id=<TASK_ID>, 
        exception=error, 
        screenshot=file_path
    )
try {
    int div = 0/0;
} catch (Exception error) {
    // Archivo de captura de pantalla
    File screenshot = new File("/home/test/screenshot.png");
    maestro.createError(<TASK_ID>, error, screenshot, null, null);
}
try {
    eval("hoo bar");
} catch (error) {
    // Ruta del archivo de captura de pantalla
    const file_path = '/home/test/screenshot.png'
    await maestro.createError(<TASK_ID>, error, {}, file_path)
}
try {
    eval("hoo bar");
} catch (error: any) {
    // Ruta del archivo de captura de pantalla
    const file_path: string = '/home/test/screenshot.png'
    await maestro.createError(<TASK_ID>, error, {}, file_path)
}
try {
    throw new Exception("test");
} catch (Exception ex) {
    // Ruta del archivo de captura de pantalla
    string filepath = "/home/test/screenshot.png";
    await instance.CreateErrorAsync(ex, <TASK_ID>, filepath);
}

Tags personalizables

Las tags predeterminadas capturadas son las siguientes:

  • Usuario: Nombre de usuario que disparó la tarea.
  • Host: Nombre del entorno donde se ejecutó la tarea.
  • Sistema Operativo: Nombre del sistema operativo del entorno.
  • Versión del SO: Versión del sistema operativo del entorno.
  • Versión del lenguaje: Versión del lenguaje utilizado en el proceso.

Además de estas, puedes agregar tags personalizadas con información relevante en caso de error, en formato de clave/valor.

Aquí un ejemplo de error con tags adicionales:

try:
    div = 0 / 0
except Exception as error:
    # Tags personalizadas en formato clave/valor
    tags = {
        "key_1": "value_1",
        "key_2": "value_2",
        "key_3": "value_3",
    }

    maestro.error(
        task_id=<TASK_ID>, 
        exception=error, 
        tags=tags
    )
try {
    int div = 0/0;
} catch (Exception error) {
    // Tags personalizadas en formato clave/valor
    Map<String, Object> tags = new HashMap<>();
    tags.put("custom", "tag");

    maestro.createError(<TASK_ID>, error, null, tags, null);
}
try {
    eval("hoo bar");
} catch (error) {
    // Tags personalizadas en formato clave/valor
    await maestro.createError(<TASK_ID>, error, {"custom": "tag"})
}
try {
    eval("hoo bar");
} catch (error: any) {
    // Tags personalizadas en formato clave/valor
    await maestro.createError(<TASK_ID>, error, {"custom": "tag"})
}
try {
    throw new Exception("test");
} catch (Exception ex) {
    // Tags personalizadas en formato clave/valor
    Dictionary<string, object> additionalTags = new Dictionary<string, object>
    {
        { "custom", "tag" },
    };
    await instance.CreateErrorAsync(ex, <TASK_ID>, null, additionalTags);
}

Archivos adjuntos

Puedes adjuntar una lista de archivos que faciliten la comprensión y corrección de errores cuando ocurran. Estos archivos pueden ser de cualquier tipo.

Por defecto, el archivo con información de las dependencias del proyecto y sus versiones se adjunta al error. Puedes agregar archivos adicionales creando una lista con las rutas de los archivos que deben enviarse.

Ejemplos de archivos

Puede ser útil adjuntar:

  • Imágenes adicionales
  • Log del código
  • Archivos utilizados durante el proceso.

Aquí un ejemplo de error con archivos adjuntos:

try:
    div = 0 / 0
except Exception as error:
    # Lista de rutas de archivos adjuntos
    attachments = [
        '/home/test/error.png',
        '/home/test/process.log',
        '/home/test/test.txt'
    ]
    maestro.error(
        task_id=<TASK_ID>, 
        exception=error, 
        attachments=attachments
    )
try {
    int div = 0/0;
} catch (Exception error) {
    // Lista de archivos adjuntos
    List<File> attachments = new ArrayList<>();
    attachments.add(new File("/home/test/error.png"));
    attachments.add(new File("/home/test/process.log"));
    attachments.add(new File("/home/test/test.txt"));

    maestro.createError(<TASK_ID>, error, null, null, attachments);
}
try {
    eval("hoo bar");
} catch (error) {
    // Lista de rutas de archivos adjuntos
    const attachments = ['/home/test/error.png', '/home/test/process.log', '/home/test/test.txt']
    await maestro.createError(<TASK_ID>, error, {}, '', attachments)
}
try {
    eval("hoo bar");
} catch (error: any) {
    // Lista de rutas de archivos adjuntos
    const attachments: string[] = ['/home/test/error.png', '/home/test/process.log', '/home/test/test.txt']
    await maestro.createError(<TASK_ID>, error, {}, '', attachments)
}
try {
    throw new Exception("test");
} catch (Exception ex) {
    // Lista de rutas de archivos adjuntos
    List<string> attachments = ["/home/test/error.png", "/home/test/process.log", "/home/test/test.txt"];
    await instance.CreateErrorAsync(ex, <TASK_ID>, "", null, attachments);
}