Criação de Painéis - Consumidor de Alerta
Objetivos
O objetivo deste tutorial, é criar um Consumidor de Alertas, este Consumidor gera um alerta sempre que é encontrada determinada situação que o usuário deseja monitorar.
Índice
O que é um Consumidor de Alerta?
Um alerta é, essencialmente, uma pergunta automatizada, agendada para ser executada pelo sistema Geoprocess em intervalos regulares, como diariamente, semanalmente ou mensalmente.
Com os alertas, o usuário pode configurar uma pergunta, como “quantas pessoas em idade escolar não estão matriculadas?”, e deixar que o sistema a execute automaticamente. Sempre que a resposta da pergunta retornar dados relevantes (não vazia), o GeoProcess gerará uma indicação de alerta. Dessa forma, o usuário será notificado apenas quando houver algo significativo a ser consultado, eliminando a necessidade de interações manuais recorrentes.
Preparando o ambiente
Iremos utilizar o módulo pgst-consumer-basic como base para o nosso projeto.
Atenção: Para que que a aplicação funcione, todos arquivos devem estar na pasta geoprocess, criada no primeiro tutorial!
Primeiramente, copie o projeto pgst-consumer-basic para um novo projeto chamado consumer-ibge-alerta, utilizando o comando abaixo:
Abra um terminal na pasta consumer-ibge-alerta, copie o arquivo de configuração do ambiente:
Abra o arquivo env.conf e atualize o nome do consumidor (propriedade CONSUMER_CODE) para o nome tutorial2.
Instale o ambiente virtual para isolar as dependências do Python. Utilize o comando abaixo:
Ative o ambiente virtual no seu computador utilizando o comando abaixo:
Instale as dependências do projeto.
Instale as dependências do projeto pgst-lib dentro do projeto consumidor.
Atenção: Antes de executar o próximo passo, se o dc_portal estiver executando no docker pare a sua execução.
Para executar a aplicação, utilize a linha de comando abaixo:
Usando esse modo a resposta pode ser acessada depois de rodar o teste de contrato no arquivo answer.json na pasta answer.
Abra o resultado da aplicação através da URL: http://127.0.0.1:8000/.
A seguinte tela deverá ser exibida:

Criando um Consumidor de Alerta do IBGE
Neste tutorial, iremos utilizar a mesma base de dados do tutorial anterior. Sobre essa base de dados, um alerta será emitido quando se observar que o IDH de qualquer um dos estados do Brasil for menor que um IDH desejado limiar_idh.
Para isso, crie uma pasta data em consumer-ibge-alerta, iremos inserir o arquivo CSV disponível na pasta docs deste tutorial nela.
O alerta é criado através de uma pergunta no portal GeoProcess, no arquivo questions.json, insira o seguinte conteúdo:
{
"themes": [
{
"consumer_theme_id": "TT2",
"version": "1.0.0",
"title": "Tema Único Alerta",
"role_tag": "TT2",
"consumer_project_id": "TUTORIAL"
}
],
"questions": [
{
"consumer_question_id": "Q1",
"version": "1.0.0",
"consumer_theme_id": "TT2",
"title": "Análise do IDH dos estados do Brasil",
"description": "Quais os estados do Brasil com IDH menor que um determinado limiar?",
"role_tag": "QT2",
"alert": true,
"consumer_sources": [
"Dados Artificiais"
],
"config_items": [
{
"id": "limiar_idh",
"label": "Informe o valor do limiar do IDH",
"placeholder": "_____",
"type": "text",
"maxlength": "4",
"required": true
}
]
}
]
}
Agora que a pergunta está inserida, é necessário configurar a resposta, acesse tests/contract/001/answerRequest.json insira o trecho:
{
"header": {
"type": "answer_request",
"status": "OK",
"next_consumer": null
},
"content": {
"user_info": {
"user": "dev",
"name": "Developer",
"email": "dev@ufla.br",
"ip": "127.0.0.1"
},
"consumer_question_id": "Q1",
"answer_request_id": 11,
"data": {
"limiar_idh": "0.700"
}
}
}
Acesse consumer/basicworker.py e substitua todo o código pelo seguinte trecho:
import logging
import pandas as pd
from baseconsumer.worker import Worker
from baseconsumer.worker import process
from util.answer import Answer
from util.answer import Message
class BasicWorker(Worker):
"""Modelagem da classe BasicWorker que herda da classe Worker.
Esta classe contém o esqueleto básico de um consumidor genérico
que deve ser adaptado para um propósito específico.
"""
logger = logging.getLogger(__name__)
messages = {
"001": Message("001", "Consumidor IBGE Alerta", "Exemplo IBGE Alerta"),
}
def getVersion(self):
"""Retorna a versão do consumidor.
Returns:
(str): Versão do consumidor
"""
return "1.0"
def getName(self):
"""Retorna o nome do consumidor.
Returns:
(str): Nome do consumidor
"""
return "Consumidor IBGE Alerta"
Essa é a parte inicial da criação de um consumer, ainda não é possível visualizar, uma vez que não criamos nenhum gráfico. Dentro de BasicWorker iremos inserir os processos que retornarão gráficos para o portal, no início da classe, podemos definir uma mensagem a ser exibida ao abrir o consumer. No fim do código adicionamos a mensagem ao consumer e retornamos ela ao portal.
Agora, é necessário configurar um alerta. Em consumer, acesse o arquivo basicworker.py e inclua no final o conteúdo abaixo:
@process(name="Answer 1", questionId="Q1")
def process1(self, answer_request):
self.logger.info("Processando a primeira pergunta")
answer = Answer()
limiar_idh = float(answer_request.getPropertie("limiar_idh"))
path = "./data/dados.csv"
df = pd.read_csv(path)
# filtra os estados cujo IDH seja menor que o limiar
filtro = df["IDH"] < limiar_idh
estados_alerta = df.loc[filtro, "Estado"].tolist()
# define se precisa emitir alerta
emitir_alerta = len(estados_alerta) > 0
# se precisar emitir alerta, define a mensagem de alerta
if emitir_alerta:
answer.setAlert(f"Estados com IDH baixo: {estados_alerta}", True, None, 100)
self.logger.info("Término da primeira pergunta")
return answer
A linha a seguir acessa o answerRequest.json e busca o valor passado como parâmetro.
Definimos o alerta como False inicialmente, em seguida, fazemos uma verificação na fonte de dados a fim de detectar algum estado que não obedece ao parâmetro passado, ao encontrar um estado que não obedece, ele é inserido numa lista e o alerta passa a ser True, por conseguinte, o alerta passa a ser exibido no Consumidor.
Antes de executar é necessário instalar a biblioteca pands, no terminal digite:
Em seguida, atualize o arquivo requirements.txt com a biblioteca do pandas e a versão instalada.
Execute o programa para visualizar a alteração:
Abra a aplicação através da URL: http://127.0.0.1:8000/.
A seguinte tela deverá ser exibida:

A função answer.setAlert() possui os seguintes parâmetros:
- message mensagem a ser exibida quando o alerta está ativo.
- triggered define se o alerta está ativo ou não.
- date: data na qual o alerta foi acionado, por padrão, a data é do dia em que é ativado.
- level: valor que varia de 0 a 100 e define a gravidade do alerta. Em que 0 representa pouco grave e 100 é muito grave.
Por fim, iremos executar o consumidor integrado ao portal:
Atenção: O docker deve estar em execução para executar em produção!
Acesse a URL http://127.0.0.1:8000/.
Pronto, agora você é capaz de definir seus próprios alertas!