Este repositório contem um conjunto de aplicações que propõem solucionar o Tech Challenge da Fase 4 do curso de pós graduação 6NETT na FIAP.
Na imagem abaixo é ilustrada a arquitetura utilizada para orquestrar as aplicações:
- Pré-requisitos
- Configuração do Projeto
- Endpoints da API
- Uso da API
- Configuração do Monitoramento
- Testes
- Tecnologias Utilizadas
- Docker e Docker Compose (necessário para executar o projeto)
- .NET SDK 8.0 (somente para executar local)
- SQLite (somente para executar local)
- Postman (opcional, para testar a API)
Este projeto pode ser executado via Docker Compose ou em um cluster Kubernetes.
1. Clone o repositório:
git clone https://github.com/Grupo-1-6NETT/fiap6-net-kubernets-f4
2. Inicie todos os serviços (API, Prometheus, Grafana, Node Exporter):
docker-compose up --build
Após iniciar, o gateway estará disponível em:
- API: http://localhost:5000 (porta padrão)
- Prometheus: http://localhost:9090
- Grafana: http://localhost:3000
3. Execução em Kubernetes: Requisitos:
- kubectl
- Um cluster Kubernetes ativo (minikube, Kind, AKS, etc.)
Passos:
- Aplique os manifests Kubernetes contidos no repositório:
kubectl apply -f k8s/
- Verifique os recursos com:
kubectl get all -n monitoring
Principais Serviços:
- API Gateway (LoadBalancer): http://127.0.0.1:80
- Grafana: http://localhost:30300
- Prometheus: http://localhost:30090
- RabbitMQ Management: http://localhost:32624
Utilize o port-forward se necessário, por exemplo:
kubectl port-forward svc/grafana 3000:3000 -n monitoring
Método | Endpoint | Descrição |
---|---|---|
GET | /Token | Gera um token de autenticação para o usuário e senha informados |
POST | /Usuario | Adiciona um Usuário na base de dados |
Método | Endpoint | Descrição |
---|---|---|
GET | /Contatos | Lista os Contatos cadastrados, ordenados por nome, que correspondem aos parâmetros informados |
POST | /AdicionarContato | Adiciona um Contato na base de dados |
PATCH | /AtualizarContato | Atualiza um Contato na base de dados |
DELETE | /RemoverContato/{id} | Remove o contato na base de dados com o ID informado |
Para acessar os endpoints, você precisará autenticar o usuário e incluir o token JWT no cabeçalho das requisições aos endpoints protegidos.
1. Registrar um Novo Usuário Endpoint: POST /Usuario
Corpo da Requisição:
{
"nome": "novo_usuario",
"senha": "SuaSenha123",
"permissao": "admin"
}
2. Gerar Token Endpoint: GET /token
Corpo da Requisição:
{
"usuario": "novo_usuario",
"senha": "SuaSenha123"
}
Resposta:
"eyJhbGciOiJIUzI1NiIsInR5..."
3. Criar um Novo Contato Endpoint: POST /contatos
Cabeçalho: Authorization: Bearer {seu_token_jwt}
Corpo da Requisição:
{
"nome": "Maria Souza",
"telefone": "99999-9999",
"ddd": "11",
"email": "maria.souza@example.com"
}
A API já está configurada para expor métricas no endpoint /metrics
Após acessar o Grafana (http://localhost:3000), siga os passos abaixo:
- Configure o Prometheus como fonte de dados.
- Importe dashboards pré-configurados para métricas de API e sistema.
Para executar os testes, e para cada solução no repositório, use o comando:
dotnet test
Os testes de unidade foram implementados utilizando o Moq e FluentAssertions para validações.
- ASP.NET Core 8 - Framework principal para desenvolvimento da API
- Entity Framework Core - ORM para manipulação do banco de dados
- JWT - JSON Web Token para autenticação
- Swagger - Documentação interativa da API
- RabbitMQ - Message Broker
- MassTransit - Transporte de mensagens
- Azure SQL Database - Banco de dados
- Moq e FluentAssertions - Testes unitários
- Prometheus e Grafana - Monitoramento e visualização de métricas
- Node Exporter - Coleta de métricas de hardware e sistema
- Azure Function - Para obtenção dos dados de contato
- Ocelot - API Gateway
- Docker - Criação de conteiners
- Kubernetes - Orquestração dos containers