%%%-------------------------------------------------------------------
%%% File    : ttb_autostart.erl
%%% Author  : Bartłomiej Puzoń <bartlomiej.puzon@erlang-solutions.com>
%%% Description : This supervisor is used to resume ttb tracing
%%% Users are able to provide custom restart modules for *_config, as
%%% file:write/read/delete may not be possible on diskless nodes.
%%%
%%% Created : 31 Jul 2010 by <bartlomiej.puzon@erlang-solutions.com>
%%%-------------------------------------------------------------------
-module(ttb_autostart).

-behaviour(gen_server).

%% API
-export([start_link/0,
         read_config/0,
         write_config/1,
         delete_config/0]).

%% gen_server callbacks
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
         terminate/2, code_change/3]).

-define(DEF_AUTOSTART_MODULE, ?MODULE).
-define(AUTOSTART_FILENAME, "ttb_autostart.bin").

start_link() ->
    gen_server:start_link(?MODULE, no_args, []).

delete_config() ->
    file:delete(?AUTOSTART_FILENAME).

read_config() ->
    case file:read_file(?AUTOSTART_FILENAME) of
        {ok, Data} -> {ok, binary_to_term(Data)};
        Error      -> Error
    end.

write_config(Data) ->
    file:write_file(?AUTOSTART_FILENAME, term_to_binary(Data)).

init(no_args) ->
    case application:get_env(runtime_tools, ttb_autostart_module) of
        {ok, _} ->  ok;
        undefined -> application:set_env(runtime_tools, ttb_autostart_module, ?DEF_AUTOSTART_MODULE)
    end,
    observer_backend:ttb_resume_trace(),
    %%As the process is not needed any more, it will shut itself down
    {ok, no_args, 10000}.

handle_call(_,_,_)       -> {noreply, no_args}.
handle_cast(_,_)         -> {noreply, no_args}.
handle_info(timeout,_)   -> {stop, normal, no_args}.
terminate(_,_)           -> ok.
code_change(_,_,_)       -> {ok, no_args}.