Skip to content

Erlang configuration provider / application:get_env/2 on steroids

License

Notifications You must be signed in to change notification settings

jtendo/confetti

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

71 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 <[email protected]>

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

Packages

No packages published

Languages