This commit is contained in:
Matt Bray 2022-03-25 09:32:34 +00:00
parent e17fb1dfb7
commit 78f2e7bde4

View file

@ -24,7 +24,7 @@ module Server : sig
(Otel.Trace.scope -> 'conn -> Request.t -> 'body -> (Response.t * 'body) Lwt.t) -> (Otel.Trace.scope -> 'conn -> Request.t -> 'body -> (Response.t * 'body) Lwt.t) ->
'conn -> Request.t -> 'body -> (Response.t * 'body) Lwt.t 'conn -> Request.t -> 'body -> (Response.t * 'body) Lwt.t
end = struct end = struct
let span_attrs (req : Request.t) = let attrs_of_request (req : Request.t) =
let meth = req |> Request.meth |> Code.string_of_method in let meth = req |> Request.meth |> Code.string_of_method in
let referer = Header.get (Request.headers req) "referer" in let referer = Header.get (Request.headers req) "referer" in
let host = Header.get (Request.headers req) "host" in let host = Header.get (Request.headers req) "host" in
@ -46,6 +46,11 @@ end = struct
[ ("http.request.header.referer", `String r) ] ) [ ("http.request.header.referer", `String r) ] )
] ]
let attrs_of_response (res : Response.t) =
let code = Response.status res in
let code = Code.code_of_status code in
[ ("http.status_code", `Int code) ]
let trace_context_of_req req = let trace_context_of_req req =
let module Traceparent = Otel.Trace_context.Traceparent in let module Traceparent = Otel.Trace_context.Traceparent in
match Header.get (Request.headers req) Traceparent.name with match Header.get (Request.headers req) Traceparent.name with
@ -63,14 +68,11 @@ end = struct
~service_name ~service_name
"request" "request"
~kind:Span_kind_server ~kind:Span_kind_server
~attrs:(attrs @ span_attrs req) ~attrs:(attrs @ attrs_of_request req)
?parent:parent_id ?parent:parent_id
?trace_id ?trace_id
(fun scope -> (fun scope ->
let* (res, body) = callback scope conn req body in let* (res, body) = callback scope conn req body in
Otel.Trace.add_attrs scope (fun () -> Otel.Trace.add_attrs scope (fun () -> attrs_of_response res) ;
let code = Response.status res in
let code = Code.code_of_status code in
[ ("http.status_code", `Int code) ]) ;
Lwt.return (res, body) ) Lwt.return (res, body) )
end end