Giter VIP home page Giter VIP logo

juspay / superposition Goto Github PK

View Code? Open in Web Editor NEW
27.0 8.0 11.0 2.07 MB

Superposition is a context-based configuration management system designed to facilitate safe and flexible rollout of config changes

License: Apache License 2.0

Dockerfile 0.04% Nix 0.55% Haskell 1.87% TypeScript 1.28% JavaScript 7.16% Rust 84.46% PLpgSQL 1.87% CSS 1.45% Shell 0.53% C 0.26% Makefile 0.52%
configuration-management context-aware leptos rust

superposition's Introduction

Superposition

Superposition is a cloud configuration and experimentation management platform that allows software teams to manage their configuration via a central location, run multi-variate experiments for different configuration values and evaluate results of these experiments and conclude them accordingly.

The Superposition platform comes with three components:

  • Context-Aware-Configuration - a flexible configuration management system that supports contextual overrides for configuration keys
  • Experimentation - a experimentation management system that allows supplying different configuration values to equal-sized cohorts (facilitating A/B testing)
  • Metrics - a metrics sub-system that interacts with analytics backends to provide supporting metrics that enable conclusions to be drawn from experiments (TBD)

Detailed documentation

  1. Context-Aware-Configuration
  2. Experimentation
  3. Metrics
  4. Client Context-Aware-Configuration
  5. Client Experimentation
  6. Local setup
  7. Context-Aware-Configuration API Ref - Postman Collection
  8. Experimentation API Ref - Postman Collection

Key highlights

  • Admin UI - Out of the box administration (and tools) UI for configurations and experiments
  • Rich API support - every action on the platform to manage configurations / experiments is supported with an accompanying API
  • Safe configuration changes - support canary testing for releasing configuration changes using experiments
  • Type/Validation support - Comprehensive type support using json-schema and custom validator function support for configuration values
  • Multi-tenant support - a single deployment allows multiple tenants to manage their configurations/experiments in a completely isolated manner
  • Authn/Authz support - control who can make configuration/experimentation changes

superposition's People

Contributors

akshaythota9 avatar ayushjain17 avatar datron avatar knutties avatar leomayleomay avatar mahatoankitkumar avatar prasannajuspay avatar pratikmishra356 avatar ritickmadaan avatar sanchithhegde avatar sauravcv98 avatar sauravcvjuspay avatar sauraww avatar shubhranshusanjeev avatar srid avatar subhash703 avatar

Stargazers

 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

superposition's Issues

UI fixes

  • Add padding to the textareas, and some consistent min-height
  • Text overflows in Context cards for big conditions (check mjos or sdkunified tenants)
  • Context cards take full width of the content on Resolve page, resulting in horizontal scroll, should only span for the width of the screen with content-wrapping
  • Use of null at someplaces in UI, to represent an unavailable value
    • Function Detail Page
    • Default-Config and Dimensions table to represent function name

Add dialog alerts in UI explaining concepts

Superposition should have some info boxes explaining concepts, for example:

  • Updating the priority of a dimension does not re trigger the computation of context priority. That has to be done manually
  • experiments traffic percentage is capped

These are some I can think off. We should do this for any update operation where people may assume that the update cascades automatically (maybe we should do that?)

On make setup error in model.rs for pub tags

--> crates/context_aware_config/src/db/models.rs:88:15 | 88 | pub tags: Option<Vec<String>>, | ^^^^^^ the traitFromSql<diesel::sql_types::Nullablediesel::sql_types::Text, Pg>is not implemented for*const str``

Show context priority in overrides screen

Show the computed priority of a context along with its overrides in override screen and resolve screen. This helps users get an idea of why priority is used, needed and how it impacts contexts. If we can even show how the priority is computed visually, that's great.

List Context with pagination end point

Create a paginated context list end point for displaying full list of all context overrides. Config end point's response is going to grow and this causes issues while rendering for the first time

UI feedback for form submission

UI feedback for form submission (reported by Kartik)

  • Submit button can show a loader
  • Button should be disabled while the request is on-going

Improve test coverage

  • Write unit tests to validate utility functions in frontend and ensure correctness
  • Write unhappy test cases for obvious scenarios where things can go wrong for all APIs in newman-cli (80 - 20 principle)

Update documentation

The documentation and setup guide need to be updated. It guide today forces you to use nix, which is not really necessary. We should clean up the documentation and make it more open source friendly

Merge experiment and cac schemas

Merge experiment and cac schemas to reduce the number of connections made to the database. It also helps manage the database more easily

Js Client

Consistency point:

  • Merge strategy option

Add test for the client and new operators

Refactor service_utils crate

Service utils crate brings in a lot of functions which may or may not be used in the importing crate. Add feature flags to service_utils crate, merge it with superposition_types and remove db and aws folders, replacing them with diesel-multiconnection-manger

Fix clippy warnings or disable clippy in Nix

A full Nix build (via nix run github:srid/nixci build) fails, due to clippy warnings:

image

If clippy is not used, I'd get rid of this:

checks.clippy = check;

To reproduce,

❯ nix flake check
warning: unknown flake output 'haskellFlakeProjectModules'
error: builder for '/nix/store/8qc30sswzi47pagn915asnvdk9ri9j7p-superposition-clippy-0.0.1.drv' failed with exit code 101;
       last 10 log lines:
       >     |
       > 107 |                 s.to_string()
       >     |                  ^^^^^^^^^^^^ help: remove this
       >     |
       >     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args
       >     = note: `-D clippy::to-string-in-format-args` implied by `-D warnings`
       >     = help: to override `-D warnings` add `#[allow(clippy::to_string_in_format_args)]`
       >
       > error: could not compile `service_utils` (lib) due to 21 previous errors
       > error: could not compile `service_utils` (lib test) due to 21 previous errors
       For full logs, run 'nix log /nix/store/8qc30sswzi47pagn915asnvdk9ri9j7p-superposition-clippy-0.0.1.drv'.

Refactor context handlers

  • Refactor context handlers, with a focus on schema validation.
  • Disable override creation with empty context and empty overrides.

Simplify Environment variables

The goal is to reduce the number of envs and better manage them. This includes refactoring code that reads envs.
Some examples
* CAC_HOST → SUPERPOSITION_HOST
* ENABLE_TENANT_AND_SCOPE → ENABLE_MULTI_TENANCY
* CONTEXT_AWARE_CONFIG_VERSION → SUPERPOSITION_VERSION
* MJOS_ALLOWED_ORIGINS → ALLOWED_ORIGINS
* (Not sure about what to do with this, DATABASE_URL contains all the info
* DATABASE_URL
* DB_USER
* DB_HOST
* DB_NAME

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.