Current section

Files

Jump to
prometheus src contrib prometheus_http.erl
Raw

src/contrib/prometheus_http.erl

-module(prometheus_http).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC("HTTP instrumentation helpers").
-export([microseconds_duration_buckets/0, status_class/1]).
-export_type([status_code/0, status_class/0]).
-type status_code() :: pos_integer().
-type status_class() :: prometheus:label_value().
?DOC("""
Returns default microseconds buckets for measuring http requests duration.
```erlang
1> prometheus_http:microseconds_duration_buckets().
[10, 25, 50, 100, 250, 500,
1000, 2500, 5000, 10000, 25000, 50000, 100000, 250000, 500000,
1000000, 2500000, 5000000, 10000000]
```
""").
-spec microseconds_duration_buckets() -> prometheus_buckets:buckets().
microseconds_duration_buckets() ->
[
10,
25,
50,
100,
250,
500,
1000,
2500,
5000,
10000,
25000,
50000,
100000,
250000,
500000,
1000000,
2500000,
5000000,
10000000
].
?DOC("""
Returns status class for the http status code `SCode`.
```erlang
2> prometheus_http:status_class(202).
\"success\"
```
Raises `{invalid_value_error, SCode, Message}` error if `SCode` isn't a positive integer.
""").
-spec status_class(SCode) -> StatusClass when
SCode :: status_code(),
StatusClass :: status_class().
status_class(SCode) when
is_integer(SCode) andalso
SCode > 0 andalso
SCode < 100
->
"unknown";
status_class(SCode) when
is_integer(SCode) andalso
SCode > 0 andalso
SCode < 200
->
"informational";
status_class(SCode) when
is_integer(SCode) andalso
SCode > 0 andalso
SCode < 300
->
"success";
status_class(SCode) when
is_integer(SCode) andalso
SCode > 0 andalso
SCode < 400
->
"redirection";
status_class(SCode) when
is_integer(SCode) andalso
SCode > 0 andalso
SCode < 500
->
"client-error";
status_class(SCode) when
is_integer(SCode) andalso
SCode > 0 andalso
SCode < 600
->
"server-error";
status_class(SCode) when
is_integer(SCode) andalso
SCode > 0 andalso
SCode >= 600
->
"unknown";
status_class(C) ->
erlang:error({invalid_value, C, "status code must be a positive integer"}).