Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Erlang configuration provider / application:get_env/2 on steroids
Erlang
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
conf
include Make it easier to overwrite helofile
priv
src Fix misconception about inet_parse interface
.gitignore
LICENSE
README.md
rebar.config

README.md

Confetti

Confetti is configuration provider for your Erlang applications.

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

Features

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

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

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) -> (...)

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 -boot start_sasl -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.

Something went wrong with that request. Please try again.