Current section

Files

Jump to
sprocket src docs@log_requests.erl
Raw

src/docs@log_requests.erl

-module(docs@log_requests).
-compile([no_auto_import, nowarn_unused_vars]).
-export([middleware/1]).
-export_type([time_unit/0]).
-type time_unit() :: native | microsecond.
-spec format_log_line(
gleam@http@request:request(any()),
gleam@http@response:response(any()),
integer()
) -> binary().
format_log_line(Request, Response, Elapsed) ->
Elapsed@1 = case Elapsed > 1000 of
true ->
gleam@string:append(
gleam@int:to_string(Elapsed div 1000),
<<"ms"/utf8>>
);
false ->
gleam@string:append(gleam@int:to_string(Elapsed), <<"µs"/utf8>>)
end,
gleam@string:concat(
[begin
_pipe = erlang:element(2, Request),
_pipe@1 = gleam@http:method_to_string(_pipe),
gleam@string:uppercase(_pipe@1)
end,
<<" "/utf8>>,
erlang:element(8, Request),
<<" "/utf8>>,
gleam@int:to_string(erlang:element(2, Response)),
<<" sent in "/utf8>>,
Elapsed@1]
).
-spec middleware(
fun((gleam@http@request:request(LOK)) -> gleam@http@response:response(LOL))
) -> fun((gleam@http@request:request(LOK)) -> gleam@http@response:response(LOL)).
middleware(Service) ->
fun(Request) ->
Before = erlang:monotonic_time(),
Response = Service(Request),
Elapsed = erlang:convert_time_unit(
erlang:monotonic_time() - Before,
native,
microsecond
),
docs@utils@logger:info(format_log_line(Request, Response, Elapsed)),
Response
end.