Ir para o conteúdo

Erros

Você pode ter o controle sobre os erros que ocorrem durante a execução de uma tarefa, mapeando informações como rastreamento do código, capturas de tela e arquivos.

Orquestrador BotCity

Você pode visualizar a funcionalidade de Erros diretamente na plataforma do Orquestrador BotCity.

Veja mais em:

Criar um erro simples

Um erro simples consiste em capturar apenas a informação mais básica quando um erro ocorre.

Para registrar um erro com o SDK, você precisa das seguintes informações:

  • ID da tarefa: Referência da tarefa que emitirá o alerta.
  • Exceção: Informação capturada do código dentro de blocos try/except.

Veja um exemplo de captura de erro simples.

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

Criar um erro customizado

Você pode customizar as informações que serão enviadas ao Orquestrador BotCity, incluindo parâmetros opcionais na captura do erro.

Para registrar um erro completo com o SDK, você precisa das seguintes informações:

  • ID da tarefa: Referência da tarefa que emitirá o alerta.
  • Exceção: Informação capturada do código dentro de blocos try/except.
  • Captura de tela: (opcional) Caminho onde a imagem foi salva.
  • Tags: (opcional) Informações em formato de chave/valor armazenadas como texto.
  • Anexos: (opcional) Lista de caminhos onde os arquivos foram salvos.

Captura de tela

É possível adicionar uma captura de tela da tela no momento em que o erro ocorre, passando o caminho onde a imagem foi salva.

Como salvar uma captura?

Você pode usar o método de salvar capturas de tela para automações Desktop e web com os Frameworks BotCity.

Veja como usar em:

Veja um exemplo de erro com captura de tela:

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

Tags personalizáveis

As tags padrão capturadas são as seguintes:

  • Usuário: Nome de usuário que disparou a tarefa.
  • Host: Nome de ambiente onde a tarefa executou.
  • Sistema Operacional: Nome do sistema operacional do ambiente.
  • Versão do SO: Versão do sistema operacional do ambiente.
  • Versão da linguagem: Versão da linguagem utilizada no processo.

Além delas, você pode adicionar tags customizadas com informações que sejam relevantes no caso de erro, no formato de chave/valor;

Veja um exemplo de erro com tags adicionais:

try:
    div = 0 / 0
except Exception as erro:
    tags = {
    "key_1": "value_1",
    "key_2": "value_2",
    "key_3": "value_3",
    }

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

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

Arquivos anexos

Você pode anexar uma lista de arquivos que facilitem o entendimento e correção de erros quando eles ocorrerem, esses arquivos podem ser de qualquer tipo.

Por padrão, o arquivo com informações das dependencias do projeto e suas versão é anexado ao erro, você pode adicionar arquivos extras criando uma lista com os caminhos dos arquivos que devem sem enviados.

Exemplos de arquivos

Pode ser util anexar:

  • Imagens extras
  • Log de código
  • Arquivos usados durante o processo.

Veja um exemplo de erro arquivos anexos:

try:
    div = 0 / 0
except Exception as erro:
    anexos = [
        '/home/test/error.png',
        '/home/test/process.log',
        '/home/test/test.txt'
    ]
    maestro.error(
        task_id=<TASK_ID>, 
        exception=erro, 
        attachments=anexos
    )
try {
int div = 0/0;
} catch (Exception error) {
    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 (erro) {
    const anexos = ['/home/test/error.png', '/home/test/process.log', '/home/test/test.txt']
    await maestro.createError(<TASK_ID>, erro, {}, '', anexos)
}
try {
    eval("hoo bar");
} catch (erro: any) {
    const anexos: string[] = ['/home/test/error.png', '/home/test/process.log', '/home/test/test.txt']
    await maestro.createError(<TASK_ID>, erro, {}, '', anexos)
}
try {
    throw new Exception("test");
} catch (Exception ex) {
    List<string> attachments = ["/home/test/error.png", "/home/test/process.log", "/home/test/test.txt"];
    await instance.CreateErrorAsync(ex, <TASK_ID>, "", null, attachments);
}