sig
  module type Monitor =
    sig
      module Point :
        sig
          type t
          val create : string -> Monitor_sig.Monitor.Point.t
          val kill : Monitor_sig.Monitor.Point.t -> unit
          val observe : Monitor_sig.Monitor.Point.t -> unit
          val observe_calls : string -> ('-> '-> 'c) -> '-> '-> 'c
          val observe_calls2 : string -> ('-> '-> 'c) -> '-> '-> 'c
          val observe_calls_rec :
            string -> (('-> 'b) -> '-> 'b) -> '-> 'b
          val observe_calls_rec2 :
            string -> (('-> '-> 'c) -> '-> '-> 'c) -> '-> '-> 'c
        end
      module Tag :
        sig
          module WeakHash :
            sig
              type t
              type data
              val create : int -> Monitor_sig.Monitor.Tag.WeakHash.t
              val clear : Monitor_sig.Monitor.Tag.WeakHash.t -> unit
              val merge :
                Monitor_sig.Monitor.Tag.WeakHash.t ->
                Monitor_sig.Monitor.Tag.WeakHash.data ->
                Monitor_sig.Monitor.Tag.WeakHash.data
              val add :
                Monitor_sig.Monitor.Tag.WeakHash.t ->
                Monitor_sig.Monitor.Tag.WeakHash.data -> unit
              val remove :
                Monitor_sig.Monitor.Tag.WeakHash.t ->
                Monitor_sig.Monitor.Tag.WeakHash.data -> unit
              val find :
                Monitor_sig.Monitor.Tag.WeakHash.t ->
                Monitor_sig.Monitor.Tag.WeakHash.data ->
                Monitor_sig.Monitor.Tag.WeakHash.data
              val find_all :
                Monitor_sig.Monitor.Tag.WeakHash.t ->
                Monitor_sig.Monitor.Tag.WeakHash.data ->
                Monitor_sig.Monitor.Tag.WeakHash.data list
              val mem :
                Monitor_sig.Monitor.Tag.WeakHash.t ->
                Monitor_sig.Monitor.Tag.WeakHash.data -> bool
              val iter :
                (Monitor_sig.Monitor.Tag.WeakHash.data -> unit) ->
                Monitor_sig.Monitor.Tag.WeakHash.t -> unit
              val fold :
                (Monitor_sig.Monitor.Tag.WeakHash.data -> '-> 'a) ->
                Monitor_sig.Monitor.Tag.WeakHash.t -> '-> 'a
              val count : Monitor_sig.Monitor.Tag.WeakHash.t -> int
              val stats :
                Monitor_sig.Monitor.Tag.WeakHash.t ->
                int * int * int * int * int * int
            end
          type t
          val create :
            ?size:bool ->
            ?count:bool ->
            ?fct_size:(Monitor_sig.Monitor.Tag.WeakHash.t -> Int64.t) ->
            ?period:int -> string -> Monitor_sig.Monitor.Tag.t
          val kill : Monitor_sig.Monitor.Tag.t -> unit
          val set_period : Monitor_sig.Monitor.Tag.t -> int -> unit
          val mark : Monitor_sig.Monitor.Tag.t -> '-> 'a
        end
      module Time :
        sig
          type t
          val elapsed_time : unit -> float
          val create : string -> Monitor_sig.Monitor.Time.t
          val kill : Monitor_sig.Monitor.Time.t -> unit
          val start : Monitor_sig.Monitor.Time.t -> unit
          val stop : Monitor_sig.Monitor.Time.t -> unit
          val time : string -> ('-> 'b) -> '-> 'b
        end
      module Value :
        sig
          val observe_int_fct :
            ?weak:bool -> ?period:int -> string -> (unit -> int) -> unit
          val observe_int :
            ?weak:bool -> ?period:int -> string -> int -> unit
          val observe_float_fct :
            ?weak:bool -> ?period:int -> string -> (unit -> float) -> unit
          val observe_float :
            ?weak:bool -> ?period:int -> string -> float -> unit
          val observe_bool_fct :
            ?weak:bool -> ?period:int -> string -> (unit -> bool) -> unit
          val observe_bool :
            ?weak:bool -> ?period:int -> string -> bool -> unit
          val observe_string_fct :
            ?weak:bool -> ?period:int -> string -> (unit -> string) -> unit
          val observe_string :
            ?weak:bool -> ?period:int -> string -> string -> unit
          val observe_int_ref :
            ?period:int -> string -> int Pervasives.ref -> int Pervasives.ref
          val observe_float_ref :
            ?period:int ->
            string -> float Pervasives.ref -> float Pervasives.ref
          val observe_bool_ref :
            ?period:int ->
            string -> bool Pervasives.ref -> bool Pervasives.ref
          val observe_string_ref :
            ?period:int ->
            string -> string Pervasives.ref -> string Pervasives.ref
        end
      module Tree :
        sig
          val observe :
            ?period:int -> string -> (unit -> Protocol.variant) -> unit
        end
      module Hashtable :
        sig type 'a t val observe : ?period:int -> string -> '-> 'end
      val to_send : unit -> string
      val declare_tags : unit -> string
      val log : ('a, Format.formatter, unit, unit) Pervasives.format4 -> 'a
      val wait_for_connected_clients : int -> unit
      val wait_for_killed_clients : unit -> unit
      val set_nb_clients : int -> unit
    end
end