Giter Site home page Giter Site logo

xabaril / esquio Goto Github PK

View Code? Open in Web Editor NEW
429.0 16.0 49.0 30.11 MB

Esquio is a Feature Toggle Library for .NET Developers.

License: Apache License 2.0

PowerShell 0.09% C# 31.93% HTML 3.60% JavaScript 59.86% CSS 3.60% TypeScript 0.40% Shell 0.06% Less 0.46%

esquio's Introduction

Esquio Build

Esquio Build

Documentation Status

About Esquio

Esquio is a Feature Toggles (aka Feature Flags) and A/B testing framework for .NET Core 3.0. Feature Toggle is a powerful technique that allows developers to deliver new functionality to users without changing code. Provides an alternative to to mantain multiples branches (aka feature branches), so any feature can be tested even before it is completed and ready for the release. We can release a version of our product with non production ready features. These non production ready features are hidden (toggled) for the broader set of users but can be enabled to any subset of testing or internal users we want them to try the features. We can use feature toggles to enable or disable features during run time.

Esquio is built with the possibility of using it not only in ASP.NET Core 3.0 in mind but making it possible to use also in other .NET Core 3.0 projects like workers, web jobs, class libraries, ... almost any kind of .NET Core 3.0 project. For the Esquio team, this is not only about using a library, but using a full Feature Toggles framework for all of our projects, and as a delivery mechanism.

We believe Feature Toggling is, somekind, a way of delivering software, making it a first class citizen in your DevOps processes, therefore we are working hard towards integrating it, via extension and pipelines tasks, with Azure DevOps, so you can use Esquio Toggles directly in your releases and delivery flows. Having a full toggle delivery experience.

Esquio Azure DevOps extensions are built in top of the Esquio API, in the case you need to integrate Esquio with any other tool, you can always use this API to handle the toggles.

Additionally, if you need it, Esquio has a full UI developed, so you can be able to handle all your Toggles in it, making it fairly simple to use and manage.

Maintained by awesome community contributors.

For project documentation, please visit readthedocs.

How to build

Esquio is built against the latest NET Core 3.

How to run migrations

For SqlServer

dotnet ef migrations add MigrationName --context StoreDbContext --project src/Esquio.UI.Api --output-dir Infrastructure/Data/Migrations/SqlServer

For Postgres

dotnet ef migrations add MigrationName --context NpgSqlContext --project src/Esquio.UI.Api --output-dir Infrastructure/Data/Migrations/NpgSql

For MySql

dotnet ef migrations add MigrationName --context MySqlContext --project src/Esquio.UI.Api --output-dir Infrastructure/Data/Migrations/MySql

Acknowledgements

Esquio is built using the following great open source projects and free services:

..and last but not least a big thanks to all our contributors!

Code of conduct

This project has adopted the code of conduct defined by the Contributor Covenant to clarify expected behavior in our community. For more information see the .NET Foundation Code of Conduct.

Videos

ASP.NET Community Standup - May 12th 2020 - Esquio Feature Toggles

ASP.NET Community Standup - May 12th 2020 - Esquio Feature Toggles

MeetUp | NetCore y Feature Flags(Spanish)

MeetUp | NetCore y Feature Flags(Spanish)

esquio's People

Contributors

andrew-flatters-bliss avatar carlosrecuero avatar cg505 avatar cjaliaga avatar ckgrafico avatar crahungit avatar evacrespob avatar geothachankary avatar gkfischer avatar igor-toporet avatar ivaneliasoo avatar kklin avatar kronos11 avatar lfraile avatar lurumad avatar meir017 avatar mitch-b avatar unaizorrilla avatar yello001 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

esquio's Issues

Contrib toggles on Esquio Core

A lot of current Esquio.Contrib toggles can work on different scenarios and not depends on external services. Probably we can include this toggles directly on AspNetCore out-of-box !

Custom toggle type fully qualification

At this moment, the UI does not save the assembly name as part of type information, when the feature service is executed, if not assembly name is specified, solve types does not work well.

Archive Feature

After feature flag is tested or released to some ring, users etc this will be enabled or disabled for all rings, users etc. At this moment we have Rollout and Rolloff options to set a feature enabled or disabled for all conditions, but this continue to be showed on the UI.

Adding archive flag to Feature enable us to decide if the feature is managed by the UI or is intented to be archived and removed also from user code.

How do I initialize DB

Trying to get empty DB tables created with Esquio.EntityFrameworkCore.Store
I'm unable to do it, It seems to be created when I use that Esquio.UI, but I might dont want to use it
Is it possible to automaticaly create DB if it does not exist, therefore I can use sql script or use EF migrations to insert data there

services.AddEsquio(setup =>
            {
                setup.RegisterTogglesFromAssemblyContaining<ClaimValueToggle>();
            }
                )
                .AddAspNetCoreDefaultServices()
                .AddEntityFrameworkCoreStore(options =>
                {
                    options.DefaultSchema = "RCM";
                    options.ConfigureDbContext = o => { o.UseSqlServer(Configuration["ConnectionStrings:MSSQLConnection"]); };
                });```

Inconsistent behavior adding and editing products

I have found two abnormal behaviors related to products page.

  1. There is some kind of validation inconsistency with the "New product" modal window. "Save changes" button is being enabled even when validations are invalid. It occurs when I leave name or description fileds untouched.

  2. I can edit product's description and leave it empty, saving correctly.

Here is an animated gif that shows it:

esquio-product-bug

I tried to take a look at the code, but I practically don't know blazor :(

Tracking and Measure Features

Tracking is a fundamental issue in toggles, may it be used to track experiments malfunctions or track usage.

Esquio should be able to track features usage, per session and track possible exceptions derived from features so it can offer usage and exceptions related to toggles.

Design Measure / Tracking API

We need to design measure / tracking feature toggle execution API in order to get statistics about feature / toggle activations.

  • This API need to be async

  • With the feature / toggle information user/app can also send a payload. On ASP.NET Core Request information will be this extra payload.

  • On ASP.NET Core Request dataq can be the extra payload.

  • UI will add new dashboards to show overall information.

NotFound behavior

Consider adding new behavior for NotFound feature scenario with Throw. This could make sense on development to ensure configuration data.

Blazor Wasm component

New Blazor Client Wasm hosted on ASP.NET Core is a perfect model to use Esquio Client Endpoint, we can include a new library to allow use this ClientEndpoint:

  • Adding a new component to filter UI, similar to FeatureTagHelper but on Blazor Razor
  • Add extension method on ServiceCollection to configure Esquio Client endpoint

Error using Build.ps1

If you follow the readme for build:
image

The build fails:
image

This is becouse the script create suffix like ci-local-d802adc and when the command concat it, the result is like 1.0.0ci-local-d802adc that is not accord with nuget package version format.

Esquio UI CORS settings

At this moment, CORS is not enabled on Esquio UI, we need enable it and expose a simple way to configure it directly or from environment variables for docker deployments

Improve Toggle executions

At this moment, the base contract for IToggle depends on IRuntimeFeatureStore to get all the configuration data from the store. This is a hard dependency for implementors and also imply many store queries for each feature.
DefaultFeatureService do this query and can get all the execution context to check if toggle is active or not.

The proposal is create a new abstraction like ToggleExecutionContext and pass this to all IToggle with the enought information to evaluate toggles.

Add change to features

Esquio needs to keep a list of changes of all features in order to have a change log page.

Improve or add new features into HTTP API

Improve HTTP API

  • Set NotFound instead of BadRequest on Product/Flags update or delete resources.
  • Tags need a new method for show existing tags on some Product.
  • Products GET need a filter for existing tags.

Hard dependency on StoreContext

At this moment, our configuration store based on EntityFrameworkCore introduce a hard dependency on StoreContext. If some user need extend this context to introduce new entities, properties etc need inherit from StoreContext. Extensibility with inheritance is not a good idea.

ASP.NET Core Identity solve this problem well and probably we can do the same technique!!

Improve Esquio client endpoint

At this moment, Esquio client endpoint, only Support request state of single feature. Will be interesting to add more features like:

  • allow query multiple features
  • allow get all configured features

We discuss on allow mark some features as client features in order to help the client endpoint.

Implement HeaderValueToggle

At this momment we have GradualRolloutHeaderValueToggle but not HeaderValueToggle. Some toogles like Location can be improved using the Header value added by some cloud providers, gateways.

Remove Product parameter from IFeatureService

Product parameter is configured on AddEsquio and for us there is no sense to use different product names on the sample application. The proposal is removed all productName parameter options on different services and use default configured value on EsquioOptions.

Improve documentation and Overview Slides

We need to improve our documentation and overview slides to include missing topics.

  • Diagnostics / Performance Counters are not included on our docs and overview slides.
  • Azure DevOps task topic is not included on overview slides.

Docs site link

Please add the docs site link to the repository description

So isntead of

Esquio is a Feature Toggle Library for .NET Developers.

It would be

Esquio is a Feature Toggle Library for .NET Developers https://esquio.readthedocs.io

Include Ring option for toggle values

Include Ring option spec for allow different toggle values depending on actual Ring, the idea is tests different environments, deploys with different feature parametrization.

Reconfigure Esquio Demo App release

It should release demo app from repository and publish it in private azure registry.

EsquioUI docker image will take latest tag from DockerHub

GitHub actions for Esquio

Create and improve Github actions for Esquio 3 including new features like Archive features! Added convenient docs for new/modified actions

New Esquio UI

Due to the amount of new features for Esquio 3 and the GA of Blazor Wasm on 2020 Q2 we decide to create a new and awesome. We try to

  • Improve design
  • Improve usability
  • Implement new features of Esquio UI
  • Simplify Permissions and Authorization
  • Show Esquio insights

ClaimValueToggle only first claim

I think ClaimValueToggle only evaluates only first apperance of the claim of the same type.
For example I have claims collection on http context containing claim of type Role with value "Role1" an claim of type Role with value "Role2", I guess it searches only for the firstone, but I have an user assigned to multiple roles so I have multiple claims of type Role assigned in http context

HTTP Store

Add a new store, and probably remove db store, that allow get feature/toggle information using http request to Esquio UI. This allow clientes to get with features but without access to configuration database, and reduce some security concerns related with direct access to configuration db and also multi-tenants apps.
Some interesting features of this store will be:

  • Allow caching support using IDistributedCache
  • Support api leys with different levesl of privileges ( ie, readonly mode )

Slug slug

Well,

We receive a lot of feedback about why not the HTTP API use slug for all items ( products, features etc ). At this moment, the HTTP API is based on resource id's and this experience is not the best for some scenarios like Azure DevOps Task, Esquio CLI etc..

For Esquio 2 we need to consider using slug on our HTTP API.

Document Esquio behaviors

At this moment, Esquio ErrorBehavior and NotFoundBehavior is not on our docs. Add description for this enumerations and also a sample of use.

Why netstandard 2.1 ?

Is there a specific reason that you only started targetting from netstandard 2.1 effectivly limiting this to .net core 3.x? Most of your dependecies support netstandard 2.0 which keeps them open for a broader spectrum of consumers (even in the full .net framework via 4.8). I understand that you would like the UI and api to be run as .net core 3.x apps, but maybe a client could allow for a more relaxed netstandard 2.0 version? Or am I missing something?

Review FeatureTagHelper

Our Feature tag helper define 3 different properties Names, Include and Exclude. There is no difference between Names and Include, probably wiht Include and Exclude is enought.

Make the partitioner plugable

At this momment our partitioner is not plugable and can't be replaced if the behavior don't fit for some customer.

Making the partitioner plugable is not hard and will be a good extension point for Esquio

ClaimValueToggle honor all claims

At this moment, ClaimValue is not honoring all claims of the same type on Identity claims and only evaluate first claim.
This fix is reported on Esquio V2 #111 and is fixed on V2 but we need to fix also on V3

Docs on running Esquio UI in Docker

Are there any docs yet on how to run the Esquio UI in Docker? I can start it just fine, but I'm not able to login, probably because there's no database configured. Not sure how to configure that though, or even what my options are storing the database?

ASP.NET Core Endpoint Fallback fine grain

At this moment, EndpointFallback behavior is configured for all endpoints, but is some scenarios may be necessary configure different fallback behaviors ( not found, redirect to, etc ) for each configured endpoint.

After feedback session we extract more information about this issue:

  • Added contextual information with the RequestDelegate like endpoint name, route or something similar.
  • Create feature samples

Improve UI with Api Key Management

At this moment, UI can only recover a new Api Key from the store, to be used on integration pipelines like Azure DevOps tasks, but is not possible set the name , expiration time, and managing created Api Keys.

We need to improve the UI and include all necessary to maintain Api Keys!

Improve tokenization

On the scenarios where all your feature toggle are by username enable to the 50%, always the same users has them enable. Add the possibility to use the username + the feature name to randomize the users per feature.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.