Datapool¶
A funcionalidade do Datapool pode ser utilizada para gerenciar uma fila de itens em grande volume que precisam ser processados e acompanhados granularmente.
Nessa seção você encontra mais detalhes sobre como interagir com esse recurso do Orquestrador BotCity através do SDK.
Orquestrador BotCity
Você pode utilizar a funcionalidade do Datapool diretamente na plataforma do Orquestrador BotCity.
Veja mais em:
Criar um Datapool¶
Você pode criar a estrutura de um novo Datapool e fazer as configurações via SDK.
Você precisa das seguintes informações:
- Label: Identificador único do Datapool.
- Nome: Nome amigável para reconhecimento do Datapool.
- Reprocessamento: O número máximo de tentativas de reprocessamento em caso de erro no item.
- Abortar em caso de erro: O número máximo de erros consecutivos até inativar a fila.
- Tempo de processamento: O tempo em minutos esperado para processamento do item.
- Schema: Lista de campos que compões o Datapool, definidos com a classe
SchemaField:label: Identificador do campo.type: Tipo de dado, definido porFieldType:TEXT,INTEGERouDOUBLE.unique_id: Define como um ID unico:TrueouFalse.display_value: Define como visivel aos usuários:TrueouFalse.
Criar via interface do Orquestrador
Apesar do Maestro SDK possibilitar a criação de um Datapool via código, recomendamos que você utilize a interface web do Orquestrador para conseguir realizar as configurações de forma mais intuitiva e detalhada sobre cada parâmetro necessário.
Veja mais em:
# Exemplo de Schema com campos: 'id', 'name' e 'price'
product_id = SchemaField(
label="id",
type=FieldType.TEXT,
unique_id=True,
display_value=True
)
product_name = SchemaField(
label="name",
type=FieldType.TEXT,
unique_id=False,
display_value=True
)
product_price = SchemaField(
label="price",
type=FieldType.DOUBLE,
unique_id=False,
display_value=False
)
# Lista com os campos
schema = [product_id, product_name, product_price]
# Criando o objeto do Datapool
datapool = DataPool(
label="ProductsData",
name="ProductsData",
max_auto_retry=2,
max_errors_before_inactive=5,
item_max_processing_time=3,
schema=schema
)
# Criando a estrutura do Datapool no Orquestrador
maestro.create_datapool(datapool)
Operações com o Datapool¶
Você pode realizar algumas operações com o Datapool criado, entre elas:
- Obter: Retorna a referência do Datapool.
Label: Parâmetro de identificação do Datapool.
- Está ativo: Verifica se o Datapool obtido está ativo:
TrueouFalse. - Está vazio: Verifica se não há itens pendentes no Datapool obtido:
TrueouFalse. - Tem próximo: Verifica se há um próximo item pendente na fila no Datapool obtido:
TrueouFalse. - Ativar: Faz a ativação do Datapool obtido.
- Desativar: Faz a inativação do Datapool obtido.
Exemplos de uso:
# Obtendo a referência do Datapool
datapool = maestro.get_datapool("ProductsData")
# Verificando se o Datapool está ativo
print(datapool.is_active())
# Verificando se o Datapool está vazio de itens pendentes
print(datapool.is_empty())
# Verificando se há um próximo item pendente
print(datapool.has_next())
# Marcando o Datapool como ativo
datapool.activate()
# Marcando o Datapool como inativo
datapool.deactivate()
// Obtendo a referência do Datapool
Datapool datapool = await maestro.GetDatapoolAsync("ProductsData");
// Verificando se o Datapool está vazio
Console.WriteLine(await datapool.IsActiveAsync());
// Checking if the Datapool is empty
Console.WriteLine(await datapool.IsEmptyAsync());
// Marcando o Datapool como ativo
await datapool.ActivateAsync();
// Marcando o Datapool como inativo
await datapool.DeactivateAsync();
Operações com o itens¶
Com o Datapool criado, você pode fazer operações com os itens, veja a seguir as ações possiveis.
Adicionar novos itens¶
Você pode adicionar itens diretamente por uma automação ou script utilizando o SDK.
Você precisa das seguintes informações:
- Label: Referência do Datapool criado.
- Item: Valores de entrada de um novo item, definidos com a classe
DataPoolEntry:values: Estrutura dechaveevalorconforme os campos criados para o Datapool de referência.
Dica
Você pode criar um script que faz entrada de valores no Datapool e outro que faz o consumo e processamento desses dados.
Exemplo de entrada de um item:
# Instanciando um novo item do Datapool com base no Schema que foi definido
new_item = DataPoolEntry(
values={
"id": "Electronic#001"
"name": "Smartphone",
"price": "2000"
}
)
# Obtendo a referência do Datapool
datapool = maestro.get_datapool("ProductsData")
# Adicionando um novo item
datapool.create_entry(new_item)
// Instanciando um novo item do Datapool com base no Schema que foi definido
var values = new Dictionary<string, object>
{
{ "id", "Electronic#001" },
{ "name", "Smartphone" },
{ "price", 2000 }
};
DatapoolEntry new_item = new DatapoolEntry(0,values);
// Obtendo a referência do Datapool
Datapool datapool = await maestro.GetDatapoolAsync("ProductsData");
// Adicionando um novo item
await datapool.CreateEntryAsync(new_item);
Cancelar itens¶
Você pode cancelar itens que estão pendentes de processamento na fila. Isso significa que o item não será processado, porém, se mantém no histórico do Datapool.
Você precisa das seguintes informações:
- Label: Referência do Datapool.
- ID do Item: Identificador único do item.
- Mensagem de finalização:
(opcional)Mensagem de cancelamento.
Estado do item
Somente itens que possuem o estado de PENDENTE podem ser cancelados.
Exemplo de cancelamento de um item:
Deletar itens¶
Você pode excluir itens que estão na fila do Datapool.
Você precisa das seguintes informações:
- Label: Referência do Datapool.
- ID do Item: Identificador unico do item.
Estado do item
Itens que estão no estado de PROCESSANDO ou TIMEOUT não podem ser excluídos.
Obter itens¶
Você pode obter a referência dos itens para processamento ou para verificação de seus valores.
Você precisa das seguintes informações:
- Label: Referência do Datapool.
- ID do Item: Identificador unico do item.
Atenção!
O método next() altera o estado de um item de PENDENTE para PROCESSANDO.
Acessar valores dos itens¶
Após obter a referência do item, você pode acessar seus valores com base no Schema que foi criado.
Você precisa das seguintes informações:
- Item: Referência do item obtido.
- Label: Identificador do campo definido no Schema.
Reportar o estado de finalização¶
Reportar o estado de finalização de um item é essencial para que eles sejam contabilizados da forma correta.
Cada item processado pode ser finalizado com um estado de CONCLUÍDO ou ERRO.
Você precisa das seguintes informações:
- Item: Referência do item obtido.
- Sucesso: Reporta o estado de concluido.
- Erro: Reporta o estado de erro, definido o tipo:
ErrorType.SYSTEM: indica um erro de sistema.ErrorType.BUSINESS: indica um erro de negócio.
- Mensagem:
(opcional)valor customizado para finalização.
Tipo de erro
Por padrão, todo erro será considerado do tipo SYSTEM quando não for especificado no reporte.
Itens reportados com erros do tipo BUSINESS não serão considerados para os cenários de auto-retry e abortar em caso de erros. Para esses cenários, somente itens com erro do tipo SYSTEM serão considerados.
# Busca o próximo item disponível do Datapool
item = datapool.next(task_id=<TASK_ID>)
# Finalizando como 'CONCLUÍDO' após o processamento
item.report_done(finish_message="Processado com sucesso!")
# Finalizando o processamento do item indicando um erro de sistema
item.report_error(error_type=ErrorType.SYSTEM, finish_message="Sistema indisponível.")
# Finalizando o processamento do item indicando um erro de negócio
item.report_error(error_type=ErrorType.BUSINESS, finish_message="Dados inválidos.")
Sugestão de estrutura de consumo do Datapool¶
O Datapool pode ser consumido de diversas formas, utilizando os métodos de operações de itens.
Veja um exemplo de implementação para consumo de uma sequência de itens em uma única tarefa:
# Consumindo o próximo item disponível e reportando o estado de finalização ao final
datapool = maestro.get_datapool(label="Items-To-Process")
while datapool.has_next():
# Busca o próximo item do Datapool
item = datapool.next(task_id=<TASK_ID>)
if item is None:
# O item poderia ser 'None', caso outro processo o consumisse antes
break
try:
# Processando o item...
# Finalizando como 'CONCLUÍDO' após o processamento
item.report_done(finish_message="Processado com sucesso!")
except Exception:
# Finalizando o processamento do item como 'ERRO'
item.report_error(finish_message="Falha no processamento.")
// Consumindo o próximo item disponível e reportando o estado de finalização ao final
Datapool datapool = await maestro.GetDatapoolAsync("Items-To-Process");
while (await dataPool.HasNextAsync()) {
// Busca o próximo item do Datapool
DatapoolEntry item = await datapool.NextAsync(<TASK_ID>);
if (item == null) {
// O item poderia ser 'null', caso outro processo o consumisse antes
break;
}
try {
// Processando o item...
// Finalizando como 'CONCLUÍDO' após o processamento
await item.ReportDoneAsync();
} catch (Exception ex) {
// Finalizando o processamento do item como 'ERRO'
await item.ReportErrorAsync();
}
}
Aviso
Lembre-se de sempre incluir no código o reporte referente ao estado de finalização de cada item que foi processado.
Isso é extremamente importante para que os estados dos itens sejam atualizados dentro do Datapool no Orquestrador BotCity.