Ir para o conteúdo

Lab 2.7: Reportando erro ao Orquestrador

A gestão de erros é parte essencial do desenvolvimento de qualquer aplicativo, e com automações isso não é diferente.

Através do código do robô podemos tratar e registrar os erros/exceções que acontecem durante a execução de nosso processo.

error-view

Reportando erros ao Orquestrador BotCity Maestro

Vamos alterar nosso código para tratar qualquer erro durante o processo e enviar as informações ao Orquestrador BotCity Maestro.

Para isso, vamos alterar o código adicionando o bloco try/except/finally da seguinte forma:

...
def main():
    maestro = BotMaestroSDK.from_sys_args()
    execution = maestro.get_execution()

    bot = WebBot()

    # Configurando para rodar em modo headless
    bot.headless = False

    # Setando Firefox
    bot.browser = Browser.FIREFOX

    # Setando caminho do WebDriver
    bot.driver_path = r"resources\geckodriver.exe"

    maestro.alert(
        task_id=execution.task_id,
        title="BotYoutube - Inicio",
        message="Estamos iniciando o processo",
        alert_type=AlertType.INFO
    )

    canais = execution.parameters.get("canais", "botcity_br")

    canais = canais.split(",")

    try:
        for canal in canais:
            # Inicia o navegador
            bot.browse(f"https://www.youtube.com/@{canal}")

            # Retorna lista de elementos
            element = bot.find_elements(selector='//span[@class="yt-core-attributed-string yt-content-metadata-view-model-wiz__metadata-text yt-core-attributed-string--white-space-pre-wrap yt-core-attributed-string--link-inherit-color" and @role="text"]', by=By.XPATH)

            # Captura o texto de cada elemento
            nome_canal = element[0].text
            numero_inscritos = element[1].text
            quantidade_videos = element[2].text
            print(f"Nome do canal: {nome_canal} | Número de inscritos: {numero_inscritos} | Quantidade de vídeos: {quantidade_videos}")


        # Forçando uma exception para registrarmos um erro
        x = 0/0

        status = AutomationTaskFinishStatus.SUCCESS
        message = "Tarefa BotYoutube finalizada com sucesso"

    except Exception as ex:
        # Salvando captura de tela do erro
        bot.save_screenshot("erro.png")

        # Dicionario de tags adicionais
        tags = {"canal": canal}

        # Registrando o erro
        maestro.error(
            task_id=execution.task_id,
            exception=ex,
            screenshot="erro.png",
            tags=tags
        )

        status = AutomationTaskFinishStatus.FAILED
        message = "Tarefa BotYoutube finalizada com falha"

    finally:
        bot.wait(2000)
        bot.stop_browser()

        # Finalizando a tarefa
        maestro.finish_task(
            task_id=execution.task_id,
            status=status,
            message=message
        )
...

No bloco de erros, podemos customizar as informações que serão enviadas, como captura de tela, anexos e tags. Saiba mais na documentação da BotCity.

Testando o envio de erros

Para testarmos o envio de erros para o Orquestrador BotCity Maestro siga as instruções abaixo:

  • Crie uma tarefa no Orquestrador BotCity Maestro.
  • Aguarde até o final do processo onde está sendo forçada uma divisão por 0.

Isso fará com que uma exceção seja lançada, gerando um erro similar a este:

erro erro erro