Skip to content

Erlang configuration provider / application:get_env/2 on steroids

License

Notifications You must be signed in to change notification settings

sebmaynard/confetti

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

68 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Confetti

Confetti is configuration provider for your Erlang applications.

Basically it's application:get_env/2 on steroids.

Features

  1. Management console (accessible via telnet) - maintenance department will love you for this:

    • Configuration reload in runtime (designated processes receive notifications on reload)

    • Easily extensible with your own management commands (plugins!)

    • (TODO) broadcast working configuration across the Erlang cluster

       ![Confetti management console](http://mtod.org/assets/c3/w92p4radk4wg8.png)
      
  2. Configuration supervision:

    • Increase your system's uptime - previous working configuration is DETS-cached in case someone messes up the configuration files

    • Broken config for process_a can not break process_b

      Confetti supervision tree

  3. Easy to use

    application:start(confetti).

    then

    %% your process
    %% (...)
    init([]) ->
        confetti:use(my_foo),   %% reads configuration terms
                                %% from "conf/my_foo.conf",
                                %% spawns new configuration provider
                                %% if needed...
    
        confetti:fetch(my_foo),  %% fetches the configuration terms
        {ok, #state{}}.
    
    %% (...)
    %% react to configuration changes
    handle_info({config_reloaded, NewConf}, State) -> (...)
  4. Customizable

    • Write configuration validators and more:

      confetti:use(foo, [
          %% Specify config file location
          {location, {"conf/bar", "foo.cnf"},
      
          %% Make sure it's more than just correct Erlang term
          %% or even transform the terms into something!
          %% Validator funs should accept Config and return {ok, NewConf}
          %% on success, error otherwise.
          {validators, [fun validate_foo_config/1]},
      
          %% ignore notifications for current process
          {subscribe, false}
      ]).
    • Expose any module via the management console:

      -module(my_commands).
      export([foo/1, foo/3]).
      
      foo(help) ->
          "Foo does bar two times!".
      foo(Param1, Param2, Param3) ->
          %% perform command logic
          "bar bar".

      Let confetti know about it:

      %% conf/mgmt_conf.conf
      {port, 50000}.
      {plugins, [my_commands]}.

      Assuming your application is already running, perform live management configruation reload:

      $ telnet localhost 50000
      
      ...
      
      (nonode@nohost)> reload mgmt_conf
      ok
      
    • Provide your own welcome screen to the management console, i.e.:

      $ figlet MyApp > priv/helo.txt
      

Try it out quickly

  1. Obtain the source code
  2. rebar compile; erl -pa ebin -s confetti_app
  3. 1> example_srv:start_link().
  4. telnet localhost 50000
  5. Type help for available commands, and help COMMAND for command usage details.

License

BSD License. See LICENSE file for details.

Authors

Adam Rutkowski <adam.rutkowski@jtendo.com>

Contribute!

Feel encouraged to spot bugs/poor code and implement new sexy features.

Also, make sure, you add yourself to the authors where appropriate! Thanks.

About

Erlang configuration provider / application:get_env/2 on steroids

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Erlang 100.0%