Rename couch_stats_stats_collector to couch_stats_aggregator
Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch-stats/repo Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch-stats/commit/d40741a6 Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-stats/tree/d40741a6 Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-stats/diff/d40741a6 Branch: refs/heads/master Commit: d40741a6556910c7cff5cf1146561f220883be82 Parents: b4543ab Author: Benjamin Anderson <b...@banjiewen.net> Authored: Thu Jan 16 15:16:03 2014 -0800 Committer: Robert Newson <rnew...@apache.org> Committed: Tue Aug 19 14:48:31 2014 +0100 ---------------------------------------------------------------------- src/couch_stats.app.src | 2 +- src/couch_stats.erl | 2 +- src/couch_stats_aggregator.erl | 117 +++++++++++++++++++++++++++++++ src/couch_stats_stats_collector.erl | 117 ------------------------------- src/couch_stats_sup.erl | 2 +- 5 files changed, 120 insertions(+), 120 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/couchdb-couch-stats/blob/d40741a6/src/couch_stats.app.src ---------------------------------------------------------------------- diff --git a/src/couch_stats.app.src b/src/couch_stats.app.src index 4f94d46..665636e 100644 --- a/src/couch_stats.app.src +++ b/src/couch_stats.app.src @@ -1,7 +1,7 @@ {application, couch_stats, [ {description, "Simple statistics collection"}, {vsn, git}, - {registered, [couch_stats_stats_collector, couch_stats_process_tracker]}, + {registered, [couch_stats_aggregator, couch_stats_process_tracker]}, {applications, [kernel, stdlib, folsom]}, {mod, {couch_stats_app, []}}, {env, [ http://git-wip-us.apache.org/repos/asf/couchdb-couch-stats/blob/d40741a6/src/couch_stats.erl ---------------------------------------------------------------------- diff --git a/src/couch_stats.erl b/src/couch_stats.erl index f4d753a..563a67c 100644 --- a/src/couch_stats.erl +++ b/src/couch_stats.erl @@ -26,7 +26,7 @@ stop() -> application:stop(couch_stats). fetch() -> - couch_stats_stats_collector:fetch(). + couch_stats_aggregator:fetch(). -spec sample(any()) -> stat(). sample(Name) -> http://git-wip-us.apache.org/repos/asf/couchdb-couch-stats/blob/d40741a6/src/couch_stats_aggregator.erl ---------------------------------------------------------------------- diff --git a/src/couch_stats_aggregator.erl b/src/couch_stats_aggregator.erl new file mode 100644 index 0000000..fae59f1 --- /dev/null +++ b/src/couch_stats_aggregator.erl @@ -0,0 +1,117 @@ +-module(couch_stats_aggregator). + +-behaviour(gen_server). + +-export([ + fetch/0 +]). + +-export([ + start_link/0, + init/1, + handle_call/3, + handle_cast/2, + handle_info/2, + code_change/3, + terminate/2 +]). + +-record(st, { + descriptions, + stats, + collect_timer, + reload_timer +}). + +fetch() -> + {ok, Stats} = gen_server:call(?MODULE, fetch), + Stats. + +start_link() -> + gen_server:start_link({local, ?MODULE}, ?MODULE, [], []). + +init([]) -> + {ok, Descs} = reload_metrics(), + Interval = case application:get_env(couch_stats, collection_interval) of + {ok, I} -> I * 1000 + end, + {ok, CT} = timer:send_interval(Interval, self(), collect), + {ok, RT} = timer:send_interval(600000, self(), reload), + {ok, #st{descriptions=Descs, stats=[], collect_timer=CT, reload_timer=RT}}. + +handle_call(fetch, _from, #st{stats = Stats}=State) -> + {reply, {ok, Stats}, State}; +handle_call(Msg, _From, State) -> + {stop, {unknown_call, Msg}, error, State}. + +handle_cast(Msg, State) -> + {stop, {unknown_cast, Msg}, State}. + +handle_info(collect, #st{descriptions=Descriptions}=State) -> + Stats = lists:map( + fun({Name, Props}) -> + {Name, [{value, couch_stats:sample(Name)}|Props]} + end, + Descriptions + ), + {noreply, State#st{stats=Stats}}; +handle_info(reload, State) -> + {ok, Descriptions} = reload_metrics(), + {noreply, State#st{descriptions=Descriptions}}; +handle_info(Msg, State) -> + {stop, {unknown_info, Msg}, State}. + +terminate(_Reason, _State) -> + ok. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + +reload_metrics() -> + Existing = couch_stats:list(), + Current = load_metrics_for_applications(), + ToDelete = lists:foldl( + fun({_, {Name, [{type, Type}, _]}}, Acc) -> + E = {Name, [{type, Type}]}, + case sets:is_element(E, Acc) of + true -> + sets:del_element(E, Acc); + false -> + couch_stats:new(Type, Name), + Acc + end + end, + sets:from_list(Existing), + Current + ), + lists:foreach( + fun({Name, _}) -> couch_stats:delete(Name) end, + sets:to_list(ToDelete) + ), + {ok, Current}. + +load_metrics_for_applications() -> + Apps = [element(1, A) || A <- application:which_applications()], + lists:foldl( + fun(AppName, Acc) -> + case load_metrics_for_application(AppName) of + error -> Acc; + Descriptions -> [{AppName, Descriptions}|Acc] + end + end, + [], + Apps + ). + +load_metrics_for_application(AppName) -> + case code:priv_dir(AppName) of + {error, _Error} -> + error; + Dir -> + case file:consult(Dir ++ "/stat_descriptions.cfg") of + {ok, Descriptions} -> + Descriptions; + {error, _Error} -> + error + end + end. http://git-wip-us.apache.org/repos/asf/couchdb-couch-stats/blob/d40741a6/src/couch_stats_stats_collector.erl ---------------------------------------------------------------------- diff --git a/src/couch_stats_stats_collector.erl b/src/couch_stats_stats_collector.erl deleted file mode 100644 index 3176cf5..0000000 --- a/src/couch_stats_stats_collector.erl +++ /dev/null @@ -1,117 +0,0 @@ --module(couch_stats_stats_collector). - --behaviour(gen_server). - --export([ - fetch/0 -]). - --export([ - start_link/0, - init/1, - handle_call/3, - handle_cast/2, - handle_info/2, - code_change/3, - terminate/2 -]). - --record(st, { - descriptions, - stats, - collect_timer, - reload_timer -}). - -fetch() -> - {ok, Stats} = gen_server:call(?MODULE, fetch), - Stats. - -start_link() -> - gen_server:start_link({local, ?MODULE}, ?MODULE, [], []). - -init([]) -> - {ok, Descs} = reload_metrics(), - Interval = case application:get_env(couch_stats, collection_interval) of - {ok, I} -> I * 1000 - end, - {ok, CT} = timer:send_interval(Interval, self(), collect), - {ok, RT} = timer:send_interval(600000, self(), reload), - {ok, #st{descriptions=Descs, stats=[], collect_timer=CT, reload_timer=RT}}. - -handle_call(fetch, _from, #st{stats = Stats}=State) -> - {reply, {ok, Stats}, State}; -handle_call(Msg, _From, State) -> - {stop, {unknown_call, Msg}, error, State}. - -handle_cast(Msg, State) -> - {stop, {unknown_cast, Msg}, State}. - -handle_info(collect, #st{descriptions=Descriptions}=State) -> - Stats = lists:map( - fun({Name, Props}) -> - {Name, [{value, couch_stats:sample(Name)}|Props]} - end, - Descriptions - ), - {noreply, State#st{stats=Stats}}; -handle_info(reload, State) -> - {ok, Descriptions} = reload_metrics(), - {noreply, State#st{descriptions=Descriptions}}; -handle_info(Msg, State) -> - {stop, {unknown_info, Msg}, State}. - -terminate(_Reason, _State) -> - ok. - -code_change(_OldVsn, State, _Extra) -> - {ok, State}. - -reload_metrics() -> - Existing = couch_stats:list(), - Current = load_metrics_for_applications(), - ToDelete = lists:foldl( - fun({_, {Name, [{type, Type}, _]}}, Acc) -> - E = {Name, [{type, Type}]}, - case sets:is_element(E, Acc) of - true -> - sets:del_element(E, Acc); - false -> - couch_stats:new(Type, Name), - Acc - end - end, - sets:from_list(Existing), - Current - ), - lists:foreach( - fun({Name, _}) -> couch_stats:delete(Name) end, - sets:to_list(ToDelete) - ), - {ok, Current}. - -load_metrics_for_applications() -> - Apps = [element(1, A) || A <- application:which_applications()], - lists:foldl( - fun(AppName, Acc) -> - case load_metrics_for_application(AppName) of - error -> Acc; - Descriptions -> [{AppName, Descriptions}|Acc] - end - end, - [], - Apps - ). - -load_metrics_for_application(AppName) -> - case code:priv_dir(AppName) of - {error, _Error} -> - error; - Dir -> - case file:consult(Dir ++ "/stat_descriptions.cfg") of - {ok, Descriptions} -> - Descriptions; - {error, _Error} -> - error - end - end. http://git-wip-us.apache.org/repos/asf/couchdb-couch-stats/blob/d40741a6/src/couch_stats_sup.erl ---------------------------------------------------------------------- diff --git a/src/couch_stats_sup.erl b/src/couch_stats_sup.erl index 0b296d4..4943826 100644 --- a/src/couch_stats_sup.erl +++ b/src/couch_stats_sup.erl @@ -16,7 +16,7 @@ start_link() -> init([]) -> {ok, { {one_for_one, 5, 10}, [ - ?CHILD(couch_stats_stats_collector, worker), + ?CHILD(couch_stats_aggregator, worker), ?CHILD(couch_stats_process_tracker, worker) ] }}.