Lab 2.4: Manipulando estados da tarefa atual
Até o momento, focamos na construção de nossa automação e execução através do Orquestrador BotCity Maestro.
A execução através do Orquestrador BotCity Maestro nos dá, entre outros benefícios, os seguintes:
- Disparo de tarefas pelo time de operação.
- Acompanhamento de execução.
- Execução paralela de tarefas através de múltiplos Runners.
- Gestão de tarefas.
- Acompanhamento de logs, alertas e erros.
- Gerenciamento de arquivos de resultados.
- Gerenciamento de credenciais.
Você pode conferir todas as funcionalidades do Orquestrador BotCity Maestro em nossa documentação. Além disso, elas também estão disponíveis via API.
BotCity Maestro SDK
A BotCity também oferece SDKs específicos para linguagens como Python, Java, Javascript e Typescript.
Nesta etapa do nosso tutorial vamos focar na utilização do BotCity Maestro SDK.
Integração com Orquestrador BotCity Maestro
Todos os projetos criados com o template da BotCity possuem uma instância do BotCity Maestro SDK que pode ser acessada utilizando a referência maestro.
Outro ponto importante a ser ressaltado é que quando executamos nossa automação via BotCity Runner, a instância do BotCity Maestro será autenticada automaticamente através dos parâmetros passados pelo Runner.
...
def main():
# Runner passes the server url, the id of the task being executed,
# the access token and the parameters that this task receives (when applicable).
maestro = BotMaestroSDK.from_sys_args()
## Fetch the BotExecution with details from the task, including parameters
execution = maestro.get_execution()
print(f"Task ID is: {execution.task_id}")
print(f"Task Parameters are: {execution.parameters}")
bot = WebBot()
# Configure whether or not to run on headless mode
bot.headless = False
# Uncomment to change the default Browser to Firefox
bot.browser = Browser.FIREFOX
# Uncomment to set the WebDriver path
bot.driver_path = GeckoDriverManager().install()
...
Atenção
Quando executamos o código localmente, a instância do BotCity Maestro não estará autenticada, podendo ocorrer erros ao tentar utilizar as funcionalidades.
Podemos facilmente tratar isso silenciando os erros com:
# Disable errors if we are not connected to Maestro
BotMaestroSDK.RAISE_NOT_CONNECTED = False
Para simplificar nosso código, vamos assumir que todas execuções serão feitas via BotCity Maestro e Runner
Gestão de tarefas
Na etapa anterior vimos que somos responsáveis por indicar o estado em que a tarefa será finalizada em nossa lógica, caso não seja indicado o estado, a tarefa finalizará acusando erro.
Para finalizar uma tarefa podemos utilizar o método finish_task() do BotCity Maestro SDK.
Vamos alterar o código para que ao final do processo o Orquestrador BotCity Maestro seja notificado do sucesso de nossa tarefa.
Para isso incluiremos duas modificações no código:
-
Defina as variáveis
statusemessageconforme o número de canais processados com sucesso ou falha ao final do bloco de repetição.if canais_sucesso == total_canais: # Define o status de finalização da tarefa message = f"Todos os {total_canais} canais foram processados com sucesso." status = AutomationTaskFinishStatus.SUCCESS elif canais_falha == total_canais: # Define o status de finalização da tarefa message = f"Todos os {total_canais} canais foram processados com erro." status = AutomationTaskFinishStatus.FAILED else: # Define o status de finalização da tarefa message = f'Dos {total_canais} canais pesquisados, número de falha: {canais_falha} e número de sucesso: {canais_sucesso}.' status = AutomationTaskFinishStatus.PARTIALLY_COMPLETED -
Adicione o seguinte bloco de código após definir as variáveis de
messageesucessoem seu robô:maestro.finish_task( task_id=execution.task_id, status=status, message=message, total_items=total_canais, # Número total de itens processados processed_items=canais_sucesso, # Número de itens processados com sucesso failed_items=canais_falha # Número de itens processados com falha )
Note que pegamos o parâmetro task_id através do execution.
Dica
Você pode finalizar a tarefa com os seguintes estados:
- SUCCESS: Sucesso, tudo ocorreu conforme o esperado.
- FAILED: Falha, algum erro ocorreu e o robô não conseguiu executar a tarefa.
- PARTIALLY_COMPLETED: Sucesso parcial, parte da tarefa foi executada com sucesso. Como um exemplo, pense em um robô que processa entradas em uma planilha porém apenas uma parte dos dados é processado com sucesso.
Seguiremos no próximo Lab parametrizando nossa automação.