package trail

  1. Overview
  2. Docs

Source file req_logger.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
open Riot
open Connection

type level = Logger.level
type args = { level : Logger.level; id : int Atomic.t }
type state = args

let args ~level () = { level; id = Atomic.make 0 }
let init args = args

let call conn args =
  let id = Atomic.fetch_and_add args.id 1 in
  Logger.info (fun f -> f "#%d %a %s" id Http.Method.pp conn.meth conn.path);
  let start_time = Ptime_clock.now () in
  conn
  |> register_before_send (fun conn ->
         let end_time = Ptime_clock.now () in
         let elapsed_time = Ptime.diff end_time start_time in
         Logger.info (fun f ->
             f "Sent %a in %a" Http.Status.pp conn.status Ptime.Span.pp
               elapsed_time))
  |> register_after_send (fun conn ->
         let end_time = Ptime_clock.now () in
         let elapsed_time = Ptime.diff end_time start_time in
         Logger.info (fun f ->
             f "Delivered %d bytes in %a"
               (Bytestring.length conn.resp_body)
               Ptime.Span.pp elapsed_time))
  |> register_after_send (fun conn ->
         let end_time = Ptime_clock.now () in
         let start_time = Atacama.Connection.accepted_at conn.conn in
         let elapsed_time = Ptime.diff end_time start_time in
         Logger.info (fun f ->
             f "Handled connection in %a" Ptime.Span.pp elapsed_time))
OCaml

Innovation. Community. Security.