# ZerobsStack
The 0BS stack is a starting point for building Elixir and Phoenix applications, presented as an Elixir metapackage. It includes the following features:

- Featureflags (via fun_with_flags)
- Prometheus metrics (via telemetry)
- HTTP Client (Using Tesla with included telemetry reporting)
- Featureflags UI and Prometheus metrics on own port for easier securing
- Load shedding via feature flags per controller action ("Drop 50% of all requests to PageController#index")

### Planned features

- MQTT subscriber (with instrumentation)
- Rate limiting per route/user

## Installation

If [available in Hex](, the package can be installed
by adding `zerobs_stack` to your list of dependencies in `mix.exs`:

def deps do
    {:zerobs_stack, "~> 0.1.0"}

## Usage

### Feature Flags

Run `mix copy_featureflags_migrations` to add the needed Ecto migrations to your `priv/repo/migrations` folder.

### Load shedding

Add `plug ZerobsSTack.LoadShedPlug` to the end of the `def controller do` block in your `ApplicationWeb` module. 

To enable load shedding open your FunWithFlags GUI and add a flag named like `elixir_stackerweb_pagecontroller_index_disabled`. This would drop Traffic for `Elixir.StackerWeb.PageController#index` (We downcase the whole module name and replace `.` with `_`.)