%% @doc HTTP instrumentation helpers -module(prometheus_http). -export([microseconds_duration_buckets/0, status_class/1]). -export_type([status_code/0, status_class/0]). %%==================================================================== %% Types %%==================================================================== -type status_code() :: pos_integer(). -type status_class() :: prometheus_model_helpers:label_value(). %%==================================================================== %% Public API %%==================================================================== %% @doc %% Returns default microseconds buckets for measuring http requests duration. %% %%
%% 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]
%%
%% @end
-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'.
%%
%%
%% 2> prometheus_http:status_class(202).
%% "success"
%%
%%
%% Raises `{invalid_value_error, SCode, Message}' error if `SCode'
%% isn't a positive integer.
%% @end
-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"}).