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.
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: