Packages
hackney
1.4.3
4.7.2
4.7.1
4.7.0
4.6.1
4.6.0
4.5.2
4.5.1
4.5.0
4.4.5
4.4.3
4.4.2
4.4.1
4.4.0
4.3.0
4.2.3
4.2.2
4.2.1
4.2.0
4.1.0
4.0.3
4.0.2
4.0.1
4.0.0
3.2.1
3.2.0
3.1.2
3.1.1
3.1.0
3.0.3
3.0.2
3.0.1
3.0.0
retired
2.0.1
2.0.0
2.0.0-beta.1
1.25.0
1.24.1
1.24.0
1.23.0
1.22.0
1.21.0
1.20.1
1.20.0
1.19.1
1.19.0
1.18.2
1.18.1
1.18.0
1.17.4
1.17.3
1.17.2
1.17.1
1.17.0
1.16.0
1.15.2
1.15.1
1.15.0
1.14.3
1.14.2
1.14.0
1.13.0
1.12.1
1.12.0
1.11.0
1.10.1
1.10.0
1.9.0
1.8.6
1.8.5
1.8.4
1.8.3
1.8.2
1.8.0
1.7.1
1.7.0
1.6.6
retired
1.6.5
1.6.4
retired
1.6.3
1.6.2
1.6.1
1.6.0
1.5.7
1.5.6
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.10
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.0
1.1.0
1.0.6
1.0.5
1.0.2
1.0.1
0.15.2
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.1
Simple HTTP client with HTTP/1.1, HTTP/2, and HTTP/3 support
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
src/metrics/hackney_exometer_metrics.erl
%%% -*- erlang -*-
%%%
%%% This file is part of hackney released under the Apache 2 license.
%%% See the NOTICE for more information.
%%%
-module(hackney_exometer_metrics).
-export([
new/2,
delete/1,
increment_counter/1,
increment_counter/2,
decrement_counter/1,
decrement_counter/2,
update_histogram/2,
update_gauge/2,
update_meter/2]).
-spec new(atom(), any()) -> ok | {error, metric_exists | unsupported_type}.
new(counter, Name) ->
exometer:ensure(Name, counter, []);
new(histogram, Name) ->
exometer:ensure(Name, histogram, []);
new(gauge, Name) ->
exometer:ensure(Name, gauge, []);
new(meter, Name) ->
exometer:ensure(Name, meter, []);
new(_, _) ->
{error, unsupported_type}.
delete(Name) ->
exometer:delete(Name).
-spec increment_counter(any()) -> ok | {error, term()}.
increment_counter(Name) ->
notify(Name, 1, counter).
-spec increment_counter(any(), pos_integer()) -> ok | {error, term()}.
increment_counter(Name, Value) ->
notify(Name, Value, counter).
-spec decrement_counter(any()) -> ok | {error, term()}.
decrement_counter(Name) ->
notify(Name, -1, counter).
-spec decrement_counter(any(), pos_integer()) -> ok | {error, term()}.
decrement_counter(Name, Value) ->
notify(Name, -Value, counter).
-spec update_histogram(any(), number()) -> ok | {error, term()};
(any(), function()) -> ok | {error, term()}.
update_histogram(Name, Fun) when is_function(Fun, 0) ->
Begin = os:timestamp(),
Result = Fun(),
Duration = timer:now_diff(os:timestamp(), Begin) div 1000,
case notify(Name, Duration, histogram) of
ok -> Result;
Error -> throw(Error)
end;
update_histogram(Name, Value) when is_number(Value) ->
notify(Name, Value, histogram).
-spec update_gauge(any(), number()) -> ok | {error, term()}.
update_gauge(Name, Value) ->
notify(Name, Value, gauge).
-spec update_meter(any(), number()) -> ok | {error, term()}.
update_meter(Name, Value) ->
notify(Name, Value, meter).
-spec notify(any(), any(), atom()) -> ok | {error, term()}.
notify(Name, Op, Type) ->
exometer:update_or_create(Name, Op, Type, []).