- Descrição
- Tecnologias Utilizadas
- Pré Requisitos
- Como rodar a aplicação
- Observability
- Desenvolvedores
- Solução de Problemas
Este projeto implanta um recurso de Feature Toggle utilizando Clean Architecture com objetivo de alternar entre diferentes caminhos o código fonte de forma que funcionalidades possam ser testadas e completadas antes de serem lançadas em produção.
A aplicação poderá ser utilizada de duas formas: via API ou instalada no seu projeto como uma dependência.
- Para as chamadas via API, o usuário poderá chamar o caminho de três formas, ou via domínio implantado pela AWS Elastic Container Service por integração contínua (URL: http://awseb-awseb-9rii3cdahste-1914091692.us-east-2.elb.amazonaws.com/), via imagem Docker ou via local host (URL: http://localhost:8080). Confira o passo a passo para se conectar com a API no tópico Como rodar a aplicação: API.
- Para ser instalada a dependência no seu projeto, confira o passo a passo para instalar o pacote no tópico Como rodar a aplicação: Package
A API irá expôr 3 endpoints a fim de realizar o cadastro, verificar e deletar uma Feature Flag.
- POST /toggle - deverá receber as informações enviadas no Body da solicitação em Json e registrar a feature toggle no banco de dados em memória contido na aplicação.
- GET /toggle/{nome}?valor=[valor] - deverá receber o nome e opcionalmente, o valor da feature toggle. Caso exista um feature toggle cadastrado no banco de dados em memória, caso o tipo seja TOGGLE, deverá ser retornado considerado como ATIVO (retornando como solicitação com sucesso). Caso o tipo seja VALUE, o valor inserido deverá ser comparado com o valor em memória, e caso o valor inserido seja maior, deverá ser retornado como ATIVO. Caso contrário, como INATIVO.
- DELETE /toggle/{nome} - deverá receber o nome da feature toggle, e caso exista no banco de dados em memória, a feature toggle deverá ser excluída do banco de dados.
Além dos recursos informados, a rota também contém um endpoint do Swagger que expõe a documentação da API:
http://awseb-awseb-9rii3cdahste-1914091692.us-east-2.elb.amazonaws.com/swagger-ui/index.html
Os métodos chamados via API, também foram disponibilizados para ser integrado na sua aplicação pelo package contido neste repositório. Após a instalação da dependência, poderão ser chamados os métodos registrarFeatureFlag(), verificarFeatureFlag() e apagarFeatureFlag() a partir do Controller da aplicação (FeatureToggleController)
Para poder rodar a aplicação na sua máquina, é necessário ter as seguintes tecnologias instaladas:
Para rodar a imagem da aplicação, é necessário apenas ter instalado na sua máquina:
Via AWS Elastic Container Service:
- Para rodar a API, foi disponibilizado um host via deploy na AWS ECS para acessar facilmente os endpoints via Postman:
Via imagem Docker:
-
Para rodar a API pela imagem Docker, faça o download da imagem no link:
-
Caso já tenha o Docker instalado em sua máquina, execute o comando:
-
docker run -p 8080:8080 guimsmendes/feature-toggle-flag
-
Pronto! Agora a aplicação já está rodando no seu:
LocalHost:
- Para rodar a API via localhost, será necessário realizar o clone da aplicação via cmd. Tenha certeza que a sua versão do JDK instalada é a Java JDK 1.8.0_271:
- Selecione a pasta que deseja instalar a aplicação
git clone https://github.com/guimsmendes/feature-toggle.git
cd feature-toggle
mvn install
cd target
java -jar itau-desafio-feature-toggle-1.0.7.jar
- Pronto! Agora a aplicação já está rodando no seu:
Endpoints criados:
/actuator
- Retorna os endpoints com informações de saúde da aplicação/swagger-ui/index.html
- Retorna a documentação da API- POST
/toggle
- Realiza o registro das informações inseridas no body seguindo o modelo JSON:- {"nome": "nome-do-feature-toggle","tipo": "value","valor": 123.45,"ligado": true}
- GET
/toggle/{nome}?valor=[valor]
- Verifica se existe um feature toggle com o nome inserido. Caso o feature toggle seja do tipo Value, deverá ser adicionado ao campo opcional "valor" um valor maior que o registrado para que seja verificado com sucesso. - DELETE
/toggle/{nome}
- Deleta o feature toggle com o nome inserido.
Para realizar a instalação da dependência itau-desafio-feature-toggle no seu projeto, primeiro é necessário gerar um token de acesso via Github.
- Siga o passo a passo utilizando como escopo
read:packages
Com o token em mãos, será necessário criar um arquivo settings.xml
na sua pasta ~/.m2 conforme esta documentação.
- Substitua o campo
OWNER
por guimsmendes - Substitua o campo
REPOSITORY
por feature-toggle - Substitua o campo
USERNAME
pelo seu usuário Github - Substitua o campo
TOKEN
pelo token gerado no passo anterior
PRONTO! Agora é só importar a dependência conforme o package disponível neste repositório no pom.xml
do seu projeto.
Para utilizar os recursos desta biblioteca, será necessário importar o pacote FeatureToggleController na sua classe:
import br.com.itau.seguros.desafio.entrypoint.FeatureToggleController;
Instanciar a classe FeatureToggleController:
FeatureToggleController featureToggleController;
E a partir disso, você está pronto para utilizar os recursos gerados nesta biblioteca:
featureToggleController.registrarFeatureFlag(FeatureToggleRequest featureToggleRequest);
featureToggleController.verificarFeatureFlag(String nome, String valor);
featureToggleController.apagarFeatureFlag(String nome);
As informações inseridas via API ao realizar um post serão incluídas em um embedded database do H2 database na aplicação, que será deletada na próxima vez que a aplicação for executada.
Abaixo segue o modelo de dados deste banco de dados:
nome | tipo | valor | ligado |
---|---|---|---|
(String) "nome-do-feature-toggle" | (TipoToggleEnum) VALUE or TOGGLE | (BigDecimal) 123.45 | (boolean) true or false |
A fim de acompanhar as métricas da saúde da aplicação, foram disponibilizadas métricas via Actuator e seus respectivos endpoints.
Guilherme Mendes |
---|
O recurso AWS ECR para disponibilização de uma imagem Docker só está conseguindo subir para imagens privadas. O comando aws ecr-public
não está mapeado nas versões da aws-cli por mais que esteja sendo indicado o uso nas documentações.
Desta forma, para poder disponibilizar uma imagem pública para o usuário, foi substituído o recurso AWS ECR para uma imagem no DockerHub.
Ajustado erro de cluster no deploy da AWS ECS no arquivo aws.yml
Na Release 1.0.5 foi substituído o serviço AWS Beanstalk para hospedagem da API pelo recurso AWS Elastic Container Service, a fim de facilitar a integração contínua. Foi adicionado um aws.yml
para que toda vez que uma alteração seja disponibilizada em uma Release, um pipeline seja acionado e a imagem Docker seja atualizada, assim como o serviço hospedado no domínio da AWS ECS.
Na Release 1.0.4 foi adicionado o arquivo Dockerfile para subir a imagem da aplicação Docker via workflow AWS para ECR (Elastic Container Registry) a fim de hospedar a imagem na cloud pública para facilitar a execução da aplicação em outras máquinas.
Na Release 1.0.3 foi adicionado o <classifier> exec </classifier>
no spring-boot-maven-plugin a fim de possibilitar o import dos pacotes SpringBoot pela dependência gerada
Na Release 1.0.2 foram ajustados bugs e code smells do código a partir da análise via SonarQube
https://medium.com/swlh/sonarqube-sonarscanner-setup-1a633b654828
https://softwareengineer.medium.com/code-coverage-in-sonarqube-for-maven-projects-56f7a1a4d496
Na Release 1.0.1 foram configuradas as dependências para documentação da API via Swagger