mirror of
https://github.com/ocaml-tracing/ocaml-trace.git
synced 2026-03-07 18:37:56 -05:00
add thread/process name setting
This commit is contained in:
parent
da3388dbf9
commit
b6db37fab0
4 changed files with 52 additions and 0 deletions
|
|
@ -28,6 +28,12 @@ module type S = sig
|
|||
string ->
|
||||
unit
|
||||
|
||||
val name_thread : string -> unit
|
||||
(** Give a name to the current thread *)
|
||||
|
||||
val name_process : string -> unit
|
||||
(** Give a name to the current process *)
|
||||
|
||||
val shutdown : unit -> unit
|
||||
(** Shutdown collector, possibly waiting for it to finish sending data. *)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -60,6 +60,11 @@ type event =
|
|||
id: span;
|
||||
time_us: float;
|
||||
}
|
||||
| E_name_process of { name: string }
|
||||
| E_name_thread of {
|
||||
tid: int;
|
||||
name: string;
|
||||
}
|
||||
|
||||
module Span_tbl = Hashtbl.Make (struct
|
||||
include Int64
|
||||
|
|
@ -172,6 +177,23 @@ module Writer = struct
|
|||
(emit_args_o_ pp_user_data_)
|
||||
args;
|
||||
()
|
||||
|
||||
let emit_name_thread ~tid ~name (self : t) : unit =
|
||||
emit_sep_ self;
|
||||
Printf.fprintf self.oc
|
||||
{json|{"pid": %d,"tid": %d,"name":"thread_name","ph":"M"%a}|json} self.pid
|
||||
tid
|
||||
(emit_args_o_ pp_user_data_)
|
||||
[ "name", `String name ];
|
||||
()
|
||||
|
||||
let emit_name_process ~name (self : t) : unit =
|
||||
emit_sep_ self;
|
||||
Printf.fprintf self.oc
|
||||
{json|{"pid": %d,"name":"process_name","ph":"M"%a}|json} self.pid
|
||||
(emit_args_o_ pp_user_data_)
|
||||
[ "name", `String name ];
|
||||
()
|
||||
end
|
||||
|
||||
let bg_thread ~out (events : event B_queue.t) : unit =
|
||||
|
|
@ -205,6 +227,8 @@ let bg_thread ~out (events : event B_queue.t) : unit =
|
|||
Span_tbl.remove spans id;
|
||||
Writer.emit_duration_event ~tid ~name ~start:start_us ~end_:stop_us
|
||||
~args:data writer)
|
||||
| E_name_process { name } -> Writer.emit_name_process ~name writer
|
||||
| E_name_thread { tid; name } -> Writer.emit_name_thread ~tid ~name writer
|
||||
in
|
||||
|
||||
try
|
||||
|
|
@ -275,6 +299,12 @@ let collector ~out () : collector =
|
|||
B_queue.push events
|
||||
(E_message
|
||||
{ (* __FUNCTION__; __FILE__; __LINE__; *) tid; time_us; msg; data })
|
||||
|
||||
let name_process name : unit = B_queue.push events (E_name_process { name })
|
||||
|
||||
let name_thread name : unit =
|
||||
let tid = get_tid_ () in
|
||||
B_queue.push events (E_name_thread { tid; name })
|
||||
end in
|
||||
(module M)
|
||||
|
||||
|
|
|
|||
10
src/trace.ml
10
src/trace.ml
|
|
@ -76,6 +76,16 @@ let messagef ?__FUNCTION__ ~__FILE__ ~__LINE__ ?data k =
|
|||
C.message ?__FUNCTION__ ~__FILE__ ~__LINE__ ~data str)
|
||||
fmt)
|
||||
|
||||
let set_thread_name name : unit =
|
||||
match A.get collector with
|
||||
| None -> ()
|
||||
| Some (module C) -> C.name_thread name
|
||||
|
||||
let set_process_name name : unit =
|
||||
match A.get collector with
|
||||
| None -> ()
|
||||
| Some (module C) -> C.name_process name
|
||||
|
||||
let setup_collector c : unit =
|
||||
while
|
||||
let cur = A.get collector in
|
||||
|
|
|
|||
|
|
@ -48,6 +48,12 @@ val messagef :
|
|||
((('a, Format.formatter, unit, unit) format4 -> 'a) -> unit) ->
|
||||
unit
|
||||
|
||||
val set_thread_name : string -> unit
|
||||
(** Give a name to the current thread. *)
|
||||
|
||||
val set_process_name : string -> unit
|
||||
(** Give a name to the current process. *)
|
||||
|
||||
(** {2 Collector} *)
|
||||
|
||||
type collector = (module Collector.S)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue