%%%
%%% Copyright 2011, Boundary
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
%%% You may obtain a copy of the License at
%%%
%%%     http://www.apache.org/licenses/LICENSE-2.0
%%%
%%% Unless required by applicable law or agreed to in writing, software
%%% distributed under the License is distributed on an "AS IS" BASIS,
%%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%%% See the License for the specific language governing permissions and
%%% limitations under the License.
%%%


%%%-------------------------------------------------------------------
%%% File:      folsom_metrics.erl
%%% @author    joe williams <j@boundary.com>
%%% @doc
%%% @end
%%%------------------------------------------------------------------

-module(folsom_metrics).

-export([
         new_counter/1,
         new_gauge/1,
         new_histogram/1,
         new_histogram/2,
         new_histogram/3,
         new_histogram/4,
         new_history/1,
         new_history/2,
         new_meter/1,
         new_meter_reader/1,
         new_duration/1,
         new_duration/2,
         new_duration/3,
         new_duration/4,
         new_spiral/1,
         delete_metric/1,
         tag_metric/2,
         untag_metric/2,
         notify/1,
         notify/2,
         notify/3,
         safely_notify/1,
         safely_notify/2,
         safely_notify/3,
         notify_existing_metric/3,
         get_metrics/0,
         metric_exists/1,
         get_metrics_info/0,
         get_metrics_value/1,
         get_metrics_value/2,
         get_metric_info/1,
         get_metric_value/1,
         get_histogram_statistics/1,
         get_histogram_statistics/2,
         get_history_values/2,
         histogram_timed_update/2,
         histogram_timed_update/3,
         histogram_timed_update/4,
         histogram_timed_begin/1,
         histogram_timed_notify/1
        ]).

-include("folsom.hrl").

%% Metrics API

new_counter(Name) ->
    folsom_ets:add_handler(counter, Name).

new_gauge(Name) ->
    folsom_ets:add_handler(gauge, Name).

new_histogram(Name) ->
    folsom_metrics:new_histogram(Name, ?DEFAULT_SAMPLE_TYPE, ?DEFAULT_SIZE, ?DEFAULT_ALPHA).

new_histogram(Name, SampleType) ->
    folsom_metrics:new_histogram(Name, SampleType, ?DEFAULT_SIZE, ?DEFAULT_ALPHA).

new_histogram(Name, SampleType, SampleSize) ->
    folsom_metrics:new_histogram(Name, SampleType, SampleSize, ?DEFAULT_ALPHA).

new_histogram(Name, SampleType, SampleSize, Alpha) ->
    folsom_ets:add_handler(histogram, Name, SampleType, SampleSize, Alpha).

new_history(Name) ->
    folsom_metrics:new_history(Name, ?DEFAULT_SIZE).

new_history(Name, SampleSize) ->
    folsom_ets:add_handler(history, Name, SampleSize).

new_meter(Name) ->
    folsom_ets:add_handler(meter, Name).

new_meter_reader(Name) ->
    folsom_ets:add_handler(meter_reader, Name).

new_duration(Name) ->
    folsom_metrics:new_duration(Name, ?DEFAULT_SAMPLE_TYPE, ?DEFAULT_SIZE, ?DEFAULT_ALPHA).

new_duration(Name, SampleType) ->
    folsom_metrics:new_duration(Name, SampleType, ?DEFAULT_SIZE, ?DEFAULT_ALPHA).

new_duration(Name, SampleType, SampleSize) ->
    folsom_metrics:new_duration(Name, SampleType, SampleSize, ?DEFAULT_ALPHA).

new_duration(Name, SampleType, SampleSize, Alpha) ->
    folsom_ets:add_handler(duration, Name, SampleType, SampleSize, Alpha).

new_spiral(Name) ->
    folsom_ets:add_handler(spiral, Name).

tag_metric(Name, Tag) ->
    folsom_ets:tag_handler(Name, Tag).

untag_metric(Name, Tag) ->
    folsom_ets:untag_handler(Name, Tag).

delete_metric(Name) ->
    folsom_ets:delete_handler(Name).

notify(Event) ->
    folsom_ets:notify(Event).

notify(Name, Event) ->
    folsom_ets:notify(Name, Event).

notify(Name, Event, Type) ->
    folsom_ets:notify(Name, Event, Type).

safely_notify(Event) ->
  catch notify(Event).

safely_notify(Name, Event) ->
  catch notify(Name, Event).

safely_notify(Name, Event, Type) ->
  catch notify(Name, Event, Type).

notify_existing_metric(Name, Event, Type) ->
    folsom_ets:notify_existing_metric(Name, Event, Type).

get_metrics() ->
    folsom_ets:get_handlers().

metric_exists(Name) ->
    folsom_ets:handler_exists(Name).

get_metrics_info() ->
    folsom_ets:get_handlers_info().

get_metrics_value(Tag) ->
    folsom_ets:get_group_values(Tag).

get_metrics_value(Tag, Type) ->
    folsom_ets:get_group_values(Tag, Type).

get_metric_info(Name) ->
    [folsom_ets:get_info(Name)].

get_metric_value(Name) ->
    folsom_ets:get_values(Name).

get_histogram_statistics(Name) ->
    Values = folsom_ets:get_values(Name),
    bear:get_statistics(Values).

get_histogram_statistics(Name1, Name2) ->
    Values1 = get_metric_value(Name1),
    Values2 = get_metric_value(Name2),
    bear:get_statistics(Values1, Values2).

get_history_values(Name, Count) ->
    folsom_ets:get_history_values(Name, Count).

histogram_timed_update(Name, Fun) ->
    {Time, Value} = timer:tc(Fun),
    ok = notify({Name, Time}),
    Value.

histogram_timed_update(Name, Fun, Args) ->
    {Time, Value} = timer:tc(Fun, Args),
    ok = notify({Name, Time}),
    Value.

histogram_timed_update(Name, Mod, Fun, Args) ->
    {Time, Value} = timer:tc(Mod, Fun, Args),
    ok = notify({Name, Time}),
    Value.

histogram_timed_begin(Name) ->
    {Name, os:timestamp()}.

histogram_timed_notify({Name, Begin}) ->
    Now = os:timestamp(),
    Time = timer:now_diff(Now, Begin),
    ok = notify({Name, Time}).
