Skip to content

Projeto de Feature Toggle 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

License

Notifications You must be signed in to change notification settings

guimsmendes/feature-toggle

Repository files navigation

Quality gate

Security Rating Maintainability Rating Reliability Rating

Lines of Code Bugs Code Smells Vulnerabilities

Maven Package GitHub release (latest by date) GitHub Release Date

Tópicos

Descrição

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.

Recursos

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)

Tecnologias utilizadas

Desenvolvimento:

Build/Packaging :

Tests:

Code Review/Inspection:

API Documentation:

Integração Contínua:

Deploy:

Observability:

Pré requisitos

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:

Como rodar a aplicação

API

Via AWS Elastic Container Service:

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:
    1. Selecione a pasta que deseja instalar a aplicação
    2. git clone https://github.com/guimsmendes/feature-toggle.git
    3. cd feature-toggle
    4. mvn install
    5. cd target
    6. 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.

Package

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.

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);

Database

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:

FeatureToggle:

nome tipo valor ligado
(String) "nome-do-feature-toggle" (TipoToggleEnum) VALUE or TOGGLE (BigDecimal) 123.45 (boolean) true or false

Observability

A fim de acompanhar as métricas da saúde da aplicação, foram disponibilizadas métricas via Actuator e seus respectivos endpoints.

Desenvolvedores


Guilherme Mendes

Solução de Problemas

Release 1.0.7

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.

Release 1.0.6

Ajustado erro de cluster no deploy da AWS ECS no arquivo aws.yml

Release 1.0.5

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.

Release 1.0.4

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.

Release 1.0.3

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

https://stackoverflow.com/questions/53679361/cant-import-classes-intellij-showing-boot-inf-prefix-and-it-seems-to-be-relate

Release 1.0.2

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

Release 1.0.1

Na Release 1.0.1 foram configuradas as dependências para documentação da API via Swagger

https://github.com/Nallamachu/SwaggerConfiguration

About

Projeto de Feature Toggle 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

Topics

Resources

License

Stars

Watchers

Forks

Packages