Merge pull request #60 from puzza007/safe-histogram

Add safe histogram notify functions
diff --git a/src/folsom_metrics.erl b/src/folsom_metrics.erl
index a6245c0..40f66f2 100644
--- a/src/folsom_metrics.erl
+++ b/src/folsom_metrics.erl
@@ -64,7 +64,11 @@
          histogram_timed_update/3,
          histogram_timed_update/4,
          histogram_timed_begin/1,
-         histogram_timed_notify/1
+         histogram_timed_notify/1,
+         safely_histogram_timed_update/2,
+         safely_histogram_timed_update/3,
+         safely_histogram_timed_update/4,
+         safely_histogram_timed_notify/1
         ]).
 
 -include("folsom.hrl").
@@ -201,3 +205,24 @@
     Now = os:timestamp(),
     Time = timer:now_diff(Now, Begin),
     ok = notify({Name, Time}).
+
+safely_histogram_timed_update(Name, Fun) ->
+    {Time, Value} = timer:tc(Fun),
+    _ = safely_notify({Name, Time}),
+    Value.
+
+safely_histogram_timed_update(Name, Fun, Args) ->
+    {Time, Value} = timer:tc(Fun, Args),
+    _ = safely_notify({Name, Time}),
+    Value.
+
+safely_histogram_timed_update(Name, Mod, Fun, Args) ->
+    {Time, Value} = timer:tc(Mod, Fun, Args),
+    _ = safely_notify({Name, Time}),
+    Value.
+
+safely_histogram_timed_notify({Name, Begin}) ->
+    Now = os:timestamp(),
+    Time = timer:now_diff(Now, Begin),
+    _ = safely_notify({Name, Time}),
+    ok.
diff --git a/test/folsom_erlang_checks.erl b/test/folsom_erlang_checks.erl
index 6b92bb6..6ea9a5a 100644
--- a/test/folsom_erlang_checks.erl
+++ b/test/folsom_erlang_checks.erl
@@ -109,6 +109,11 @@
     meck:new(folsom_ets),
     meck:expect(folsom_ets, notify, fun(_Event) -> meck:exception(error, something_wrong_with_ets) end),
     {'EXIT', {something_wrong_with_ets, _}} = folsom_metrics:safely_notify({unknown_counter, {inc, 1}}),
+    ok = folsom_metrics:safely_histogram_timed_update(unknown_histogram, fun() -> ok end),
+    ok = folsom_metrics:safely_histogram_timed_update(unknown_histogram, fun(ok) -> ok end, [ok]),
+    3.141592653589793 = folsom_metrics:safely_histogram_timed_update(unknown_histogram, math, pi, []),
+    UnknownHistogramBegin = folsom_metrics:histogram_timed_begin(unknown_histogram),
+    ok = folsom_metrics:safely_histogram_timed_notify(UnknownHistogramBegin),
     meck:unload(folsom_ets),
 
     ok = folsom_metrics:notify({<<"gauge">>, 2}),