@@ -241,25 +241,23 @@ Raises:
241241 Count :: integer ().
242242observe_n (Registry , Name , LabelValues , Value , Count ) when is_integer (Value ), is_integer (Count ) ->
243243 Key = key (Registry , Name , LabelValues ),
244- try ets :lookup_element (? TABLE , Key , ? BOUNDS_POS ) of
245- Buckets ->
244+ case ets :lookup_element (? TABLE , Key , ? BOUNDS_POS , undefined ) of
245+ undefined ->
246+ insert_metric (Registry , Name , LabelValues , Value , Count , fun observe_n /5 );
247+ Buckets when is_tuple (Buckets ) ->
246248 BucketPosition = prometheus_buckets :position (Buckets , Value ),
247249 Spec = [{? ISUM_POS , Value * Count }, {? BUCKETS_START + BucketPosition , Count }],
248250 ets :update_counter (? TABLE , Key , Spec )
249- catch
250- error :badarg ->
251- insert_metric (Registry , Name , LabelValues , Value , Count , fun observe_n /5 )
252251 end ,
253252 ok ;
254253observe_n (Registry , Name , LabelValues , Value , Count ) when is_float (Value ), is_integer (Count ) ->
255254 Key = key (Registry , Name , LabelValues ),
256- try ets :lookup_element (? TABLE , Key , ? BOUNDS_POS ) of
257- Buckets ->
255+ case ets :lookup_element (? TABLE , Key , ? BOUNDS_POS , undefined ) of
256+ undefined ->
257+ insert_metric (Registry , Name , LabelValues , Value , Count , fun observe_n /5 );
258+ Buckets when is_tuple (Buckets ) ->
258259 BucketPosition = prometheus_buckets :position (Buckets , Value ),
259260 fobserve_impl (Key , Buckets , BucketPosition , Value , Count )
260- catch
261- error :badarg ->
262- insert_metric (Registry , Name , LabelValues , Value , Count , fun observe_n /5 )
263261 end ;
264262observe_n (_Registry , _Name , _LabelValues , Value , Count ) when is_number (Value ) ->
265263 erlang :error ({invalid_count , Count , " observe_n accepts only integer counts" });
@@ -305,13 +303,15 @@ pobserve(_Registry, _Name, _LabelValues, _Buckets, _Pos, Value) ->
305303 erlang :error ({invalid_value , Value , " pobserve accepts only numbers" }).
306304
307305? DOC (#{equiv => observe_duration (default , Name , [], Fun )}).
308- -spec observe_duration (prometheus_metric :name (), fun (() -> term ())) -> term ().
306+ -spec observe_duration (prometheus_metric :name (), fun (() -> dynamic ())) -> dynamic ().
309307observe_duration (Name , Fun ) ->
310308 observe_duration (default , Name , [], Fun ).
311309
312310? DOC (#{equiv => observe_duration (default , Name , LabelValues , Fun )}).
313- -spec observe_duration (prometheus_metric :name (), prometheus_metric :label_values (), fun (() -> term ())) ->
314- term ().
311+ -spec observe_duration (Name , LabelValues , Fun ) -> dynamic () when
312+ Name :: prometheus_metric :name (),
313+ LabelValues :: prometheus_metric :label_values (),
314+ Fun :: fun (() -> dynamic ()).
315315observe_duration (Name , LabelValues , Fun ) ->
316316 observe_duration (default , Name , LabelValues , Fun ).
317317
@@ -323,11 +323,11 @@ Raises:
323323* `{invalid_metric_arity, Present, Expected}` error if labels count mismatch.
324324* `{invalid_value, Value, Message}` if `Fun` isn't a function.
325325""" ).
326- -spec observe_duration (Registry , Name , LabelValues , Fun ) -> any () when
326+ -spec observe_duration (Registry , Name , LabelValues , Fun ) -> dynamic () when
327327 Registry :: prometheus_registry :registry (),
328328 Name :: prometheus_metric :name (),
329329 LabelValues :: prometheus_metric :label_values (),
330- Fun :: fun (() -> any ()).
330+ Fun :: fun (() -> dynamic ()).
331331observe_duration (Registry , Name , LabelValues , Fun ) when is_function (Fun , 0 ) ->
332332 Start = erlang :monotonic_time (),
333333 try
0 commit comments