%%% %%% 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 %%% @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}).