Refactor: Rename Node_rpc_services.Network
into P2p_services
This commit is contained in:
parent
1f3c68cbd8
commit
e0a2570988
@ -13,7 +13,7 @@ open Client_rpcs
|
||||
module Services = Node_rpc_services
|
||||
|
||||
let errors (rpc : #Client_rpcs.ctxt) =
|
||||
call_service0 rpc Services.Error.service ()
|
||||
call_service0 rpc RPC_error.service ()
|
||||
|
||||
let forge_block_header rpc header =
|
||||
call_service0 rpc Services.forge_block_header header
|
||||
@ -147,15 +147,15 @@ end
|
||||
module Network = struct
|
||||
|
||||
let stat cctxt =
|
||||
call_service0 cctxt Services.Network.stat ()
|
||||
call_service0 cctxt P2p_services.stat ()
|
||||
|
||||
let connections cctxt =
|
||||
call_service0 cctxt Services.Network.Connection.list ()
|
||||
call_service0 cctxt P2p_services.Connection.list ()
|
||||
|
||||
let peers cctxt =
|
||||
call_service0 cctxt Services.Network.Peer_id.list []
|
||||
call_service0 cctxt P2p_services.Peer_id.list []
|
||||
|
||||
let points cctxt =
|
||||
call_service0 cctxt Services.Network.Point.list []
|
||||
call_service0 cctxt P2p_services.Point.list []
|
||||
|
||||
end
|
||||
|
167
src/lib_node_p2p_base/p2p_services.ml
Normal file
167
src/lib_node_p2p_base/p2p_services.ml
Normal file
@ -0,0 +1,167 @@
|
||||
(**************************************************************************)
|
||||
(* *)
|
||||
(* Copyright (c) 2014 - 2017. *)
|
||||
(* Dynamic Ledger Solutions, Inc. <contact@tezos.com> *)
|
||||
(* *)
|
||||
(* All rights reserved. No warranty, explicit or implicit, provided. *)
|
||||
(* *)
|
||||
(**************************************************************************)
|
||||
|
||||
open P2p_types
|
||||
|
||||
let (peer_id_arg : P2p_types.Peer_id.t RPC_arg.arg) =
|
||||
Crypto_box.Public_key_hash.rpc_arg
|
||||
|
||||
let point_arg =
|
||||
RPC_arg.make
|
||||
~name:"point"
|
||||
~descr:"A network point (ipv4:port or [ipv6]:port)."
|
||||
~destruct:Point.of_string
|
||||
~construct:Point.to_string
|
||||
()
|
||||
|
||||
let versions =
|
||||
RPC_service.post_service
|
||||
~description:"Supported network layer versions."
|
||||
~query: RPC_query.empty
|
||||
~input: Data_encoding.empty
|
||||
~output: (Data_encoding.list P2p_types.Version.encoding)
|
||||
~error: Data_encoding.empty
|
||||
RPC_path.(root / "network" / "versions")
|
||||
|
||||
let stat =
|
||||
RPC_service.post_service
|
||||
~description:"Global network bandwidth statistics in B/s."
|
||||
~query: RPC_query.empty
|
||||
~input: Data_encoding.empty
|
||||
~output: P2p_types.Stat.encoding
|
||||
~error: Data_encoding.empty
|
||||
RPC_path.(root / "network" / "stat")
|
||||
|
||||
let events =
|
||||
RPC_service.post_service
|
||||
~description:"Stream of all network events"
|
||||
~query: RPC_query.empty
|
||||
~input: Data_encoding.empty
|
||||
~output: P2p_types.Connection_pool_log_event.encoding
|
||||
~error: Data_encoding.empty
|
||||
RPC_path.(root / "network" / "log")
|
||||
|
||||
let connect =
|
||||
RPC_service.post_service
|
||||
~description:"Connect to a peer"
|
||||
~query: RPC_query.empty
|
||||
~input: Data_encoding.(obj1 (dft "timeout" float 5.))
|
||||
~output: (RPC_error.wrap Data_encoding.empty)
|
||||
~error: Data_encoding.empty
|
||||
RPC_path.(root / "network" / "connect" /: point_arg)
|
||||
|
||||
let monitor_encoding = Data_encoding.(obj1 (dft "monitor" bool false))
|
||||
|
||||
module Connection = struct
|
||||
|
||||
let list =
|
||||
RPC_service.post_service
|
||||
~description:"List the running P2P connection."
|
||||
~query: RPC_query.empty
|
||||
~input: Data_encoding.empty
|
||||
~output: (Data_encoding.list P2p_types.Connection_info.encoding)
|
||||
~error: Data_encoding.empty
|
||||
RPC_path.(root / "network" / "connection")
|
||||
|
||||
let info =
|
||||
RPC_service.post_service
|
||||
~query: RPC_query.empty
|
||||
~input: Data_encoding.empty
|
||||
~output: (Data_encoding.option P2p_types.Connection_info.encoding)
|
||||
~error: Data_encoding.empty
|
||||
~description:"Details about the current P2P connection to the given peer."
|
||||
RPC_path.(root / "network" / "connection" /: peer_id_arg)
|
||||
|
||||
let kick =
|
||||
RPC_service.post_service
|
||||
~query: RPC_query.empty
|
||||
~input: Data_encoding.(obj1 (req "wait" bool))
|
||||
~output: Data_encoding.empty
|
||||
~error: Data_encoding.empty
|
||||
~description:"Forced close of the current P2P connection to the given peer."
|
||||
RPC_path.(root / "network" / "connection" /: peer_id_arg / "kick")
|
||||
|
||||
end
|
||||
|
||||
module Point = struct
|
||||
|
||||
let info =
|
||||
RPC_service.post_service
|
||||
~query: RPC_query.empty
|
||||
~input: Data_encoding.empty
|
||||
~output: (Data_encoding.option P2p_types.Point_info.encoding)
|
||||
~error: Data_encoding.empty
|
||||
~description: "Details about a given `IP:addr`."
|
||||
RPC_path.(root / "network" / "point" /: point_arg)
|
||||
|
||||
let events =
|
||||
RPC_service.post_service
|
||||
~query: RPC_query.empty
|
||||
~input: monitor_encoding
|
||||
~output: (Data_encoding.list
|
||||
P2p_connection_pool_types.Point_info.Event.encoding)
|
||||
~error: Data_encoding.empty
|
||||
~description: "Monitor network events related to an `IP:addr`."
|
||||
RPC_path.(root / "network" / "point" /: point_arg / "log")
|
||||
|
||||
let list =
|
||||
let filter =
|
||||
let open Data_encoding in
|
||||
obj1 (dft "filter" (list P2p_types.Point_state.encoding) []) in
|
||||
RPC_service.post_service
|
||||
~query: RPC_query.empty
|
||||
~input: filter
|
||||
~output:
|
||||
Data_encoding.(list (tup2
|
||||
P2p_types.Point.encoding
|
||||
P2p_types.Point_info.encoding))
|
||||
~error: Data_encoding.empty
|
||||
~description:"List the pool of known `IP:port` \
|
||||
used for establishing P2P connections ."
|
||||
RPC_path.(root / "network" / "point")
|
||||
|
||||
end
|
||||
|
||||
module Peer_id = struct
|
||||
|
||||
let info =
|
||||
RPC_service.post_service
|
||||
~query: RPC_query.empty
|
||||
~input: Data_encoding.empty
|
||||
~output: (Data_encoding.option P2p_types.Peer_info.encoding)
|
||||
~error: Data_encoding.empty
|
||||
~description:"Details about a given peer."
|
||||
RPC_path.(root / "network" / "peer_id" /: peer_id_arg)
|
||||
|
||||
let events =
|
||||
RPC_service.post_service
|
||||
~query: RPC_query.empty
|
||||
~input: monitor_encoding
|
||||
~output: (Data_encoding.list
|
||||
P2p_connection_pool_types.Peer_info.Event.encoding)
|
||||
~error: Data_encoding.empty
|
||||
~description:"Monitor network events related to a given peer."
|
||||
RPC_path.(root / "network" / "peer_id" /: peer_id_arg / "log")
|
||||
|
||||
let list =
|
||||
let filter =
|
||||
let open Data_encoding in
|
||||
obj1 (dft "filter" (list P2p_types.Peer_state.encoding) []) in
|
||||
RPC_service.post_service
|
||||
~query: RPC_query.empty
|
||||
~input: filter
|
||||
~output:
|
||||
Data_encoding.(list (tup2
|
||||
P2p_types.Peer_id.encoding
|
||||
P2p_types.Peer_info.encoding))
|
||||
~error: Data_encoding.empty
|
||||
~description:"List the peers the node ever met."
|
||||
RPC_path.(root / "network" / "peer_id")
|
||||
|
||||
end
|
83
src/lib_node_p2p_base/p2p_services.mli
Normal file
83
src/lib_node_p2p_base/p2p_services.mli
Normal file
@ -0,0 +1,83 @@
|
||||
(**************************************************************************)
|
||||
(* *)
|
||||
(* Copyright (c) 2014 - 2017. *)
|
||||
(* Dynamic Ledger Solutions, Inc. <contact@tezos.com> *)
|
||||
(* *)
|
||||
(* All rights reserved. No warranty, explicit or implicit, provided. *)
|
||||
(* *)
|
||||
(**************************************************************************)
|
||||
|
||||
open P2p_types
|
||||
|
||||
val stat :
|
||||
([ `POST ], unit,
|
||||
unit, unit, unit,
|
||||
Stat.t, unit) RPC_service.t
|
||||
|
||||
val versions :
|
||||
([ `POST ], unit,
|
||||
unit, unit, unit,
|
||||
Version.t list, unit) RPC_service.t
|
||||
|
||||
val events :
|
||||
([ `POST ], unit,
|
||||
unit, unit, unit,
|
||||
Connection_pool_log_event.t, unit) RPC_service.t
|
||||
|
||||
val connect :
|
||||
([ `POST ], unit,
|
||||
unit * Point.t, unit, float,
|
||||
unit tzresult, unit) RPC_service.t
|
||||
|
||||
module Connection : sig
|
||||
|
||||
val list :
|
||||
([ `POST ], unit,
|
||||
unit, unit, unit,
|
||||
Connection_info.t list, unit) RPC_service.t
|
||||
|
||||
val info :
|
||||
([ `POST ], unit,
|
||||
unit * Peer_id.t, unit, unit,
|
||||
Connection_info.t option, unit) RPC_service.t
|
||||
|
||||
val kick :
|
||||
([ `POST ], unit,
|
||||
unit * Peer_id.t, unit, bool,
|
||||
unit, unit) RPC_service.t
|
||||
|
||||
end
|
||||
|
||||
module Point : sig
|
||||
val list :
|
||||
([ `POST ], unit,
|
||||
unit, unit, Point_state.t list,
|
||||
(Point.t * Point_info.t) list, unit) RPC_service.t
|
||||
val info :
|
||||
([ `POST ], unit,
|
||||
unit * Point.t, unit, unit,
|
||||
Point_info.t option, unit) RPC_service.t
|
||||
val events :
|
||||
([ `POST ], unit,
|
||||
unit * Point.t, unit, bool,
|
||||
P2p_connection_pool_types.Point_info.Event.t list, unit) RPC_service.t
|
||||
end
|
||||
|
||||
module Peer_id : sig
|
||||
|
||||
val list :
|
||||
([ `POST ], unit,
|
||||
unit, unit, Peer_state.t list,
|
||||
(Peer_id.t * Peer_info.t) list, unit) RPC_service.t
|
||||
|
||||
val info :
|
||||
([ `POST ], unit,
|
||||
unit * Peer_id.t, unit, unit,
|
||||
Peer_info.t option, unit) RPC_service.t
|
||||
|
||||
val events :
|
||||
([ `POST ], unit,
|
||||
unit * Peer_id.t, unit, bool,
|
||||
P2p_connection_pool_types.Peer_info.Event.t list, unit) RPC_service.t
|
||||
|
||||
end
|
@ -9,46 +9,6 @@
|
||||
|
||||
open Data_encoding
|
||||
|
||||
module Error = struct
|
||||
|
||||
let service =
|
||||
RPC_service.post_service
|
||||
~description: "Schema for all the RPC errors from the shell"
|
||||
~query: RPC_query.empty
|
||||
~input: Data_encoding.empty
|
||||
~output: Data_encoding.json_schema
|
||||
~error: Data_encoding.empty
|
||||
RPC_path.(root / "errors")
|
||||
|
||||
let encoding =
|
||||
let { RPC_service.meth ; uri ; _ } =
|
||||
RPC_service.forge_request service () () in
|
||||
describe
|
||||
~description:
|
||||
(Printf.sprintf
|
||||
"The full list of error is available with \
|
||||
the global RPC `%s %s`"
|
||||
(RPC_service.string_of_meth meth) (Uri.path_and_query uri))
|
||||
(conv
|
||||
~schema:Json_schema.any
|
||||
(fun exn -> `A (List.map json_of_error exn))
|
||||
(function `A exns -> List.map error_of_json exns | _ -> [])
|
||||
json)
|
||||
|
||||
let wrap param_encoding =
|
||||
union [
|
||||
case (Tag 0)
|
||||
(obj1 (req "ok" param_encoding))
|
||||
(function Ok x -> Some x | _ -> None)
|
||||
(fun x -> Ok x) ;
|
||||
case (Tag 1)
|
||||
(obj1 (req "error" encoding))
|
||||
(function Error x -> Some x | _ -> None)
|
||||
(fun x -> Error x) ;
|
||||
]
|
||||
|
||||
end
|
||||
|
||||
module Blocks = struct
|
||||
|
||||
type block = [
|
||||
@ -306,7 +266,7 @@ module Blocks = struct
|
||||
unprocessed Operation_hash.Map.empty))
|
||||
(merge_objs
|
||||
(dynamic_size
|
||||
(Preapply_result.encoding Error.encoding))
|
||||
(Preapply_result.encoding RPC_error.encoding))
|
||||
(obj1 (req "unprocessed" (list (dynamic_size operation_encoding))))))
|
||||
~error: Data_encoding.empty
|
||||
RPC_path.(block_path / "pending_operations")
|
||||
@ -347,7 +307,7 @@ module Blocks = struct
|
||||
(obj2
|
||||
(req "shell_header" Block_header.shell_header_encoding)
|
||||
(req "operations"
|
||||
(list (Preapply_result.encoding Error.encoding)))))
|
||||
(list (Preapply_result.encoding RPC_error.encoding)))))
|
||||
|
||||
let preapply =
|
||||
RPC_service.post_service
|
||||
@ -356,7 +316,7 @@ module Blocks = struct
|
||||
the given operations and return the resulting fitness."
|
||||
~query: RPC_query.empty
|
||||
~input: preapply_param_encoding
|
||||
~output: (Error.wrap preapply_result_encoding)
|
||||
~output: (RPC_error.wrap preapply_result_encoding)
|
||||
~error: Data_encoding.empty
|
||||
RPC_path.(block_path / "preapply")
|
||||
|
||||
@ -463,7 +423,7 @@ module Blocks = struct
|
||||
(obj3
|
||||
(req "block" Block_hash.encoding)
|
||||
(req "level" int32)
|
||||
(req "errors" Error.encoding)))
|
||||
(req "errors" RPC_error.encoding)))
|
||||
~error: Data_encoding.empty
|
||||
RPC_path.(root / "invalid_blocks")
|
||||
|
||||
@ -549,7 +509,7 @@ module Workers = struct
|
||||
(list
|
||||
(obj2
|
||||
(req "net_id" Net_id.encoding)
|
||||
(req "status" (Worker_types.worker_status_encoding Error.encoding))))
|
||||
(req "status" (Worker_types.worker_status_encoding RPC_error.encoding))))
|
||||
RPC_path.(root / "workers" / "prevalidators")
|
||||
|
||||
let state =
|
||||
@ -562,8 +522,8 @@ module Workers = struct
|
||||
~output:
|
||||
(Worker_types.full_status_encoding
|
||||
Prevalidator_worker_state.Request.encoding
|
||||
(Prevalidator_worker_state.Event.encoding Error.encoding)
|
||||
Error.encoding)
|
||||
(Prevalidator_worker_state.Event.encoding RPC_error.encoding)
|
||||
RPC_error.encoding)
|
||||
RPC_path.(root / "workers" / "prevalidators" /: net_id_arg )
|
||||
|
||||
end
|
||||
@ -580,8 +540,8 @@ module Workers = struct
|
||||
~output:
|
||||
(Worker_types.full_status_encoding
|
||||
Block_validator_worker_state.Request.encoding
|
||||
(Block_validator_worker_state.Event.encoding Error.encoding)
|
||||
Error.encoding)
|
||||
(Block_validator_worker_state.Event.encoding RPC_error.encoding)
|
||||
RPC_error.encoding)
|
||||
RPC_path.(root / "workers" / "block_validator")
|
||||
|
||||
end
|
||||
@ -618,7 +578,7 @@ module Workers = struct
|
||||
(list
|
||||
(obj2
|
||||
(req "peer_id" P2p_types.Peer_id.encoding)
|
||||
(req "status" (Worker_types.worker_status_encoding Error.encoding))))
|
||||
(req "status" (Worker_types.worker_status_encoding RPC_error.encoding))))
|
||||
RPC_path.(root / "workers" / "peer_validators" /: net_id_arg)
|
||||
|
||||
let state =
|
||||
@ -631,8 +591,8 @@ module Workers = struct
|
||||
~output:
|
||||
(Worker_types.full_status_encoding
|
||||
Peer_validator_worker_state.Request.encoding
|
||||
(Peer_validator_worker_state.Event.encoding Error.encoding)
|
||||
Error.encoding)
|
||||
(Peer_validator_worker_state.Event.encoding RPC_error.encoding)
|
||||
RPC_error.encoding)
|
||||
RPC_path.(root / "workers" / "peer_validators" /: net_id_arg /: peer_id_arg)
|
||||
|
||||
end
|
||||
@ -659,7 +619,7 @@ module Workers = struct
|
||||
(list
|
||||
(obj2
|
||||
(req "net_id" Net_id.encoding)
|
||||
(req "status" (Worker_types.worker_status_encoding Error.encoding))))
|
||||
(req "status" (Worker_types.worker_status_encoding RPC_error.encoding))))
|
||||
RPC_path.(root / "workers" / "net_validators")
|
||||
|
||||
let state =
|
||||
@ -672,8 +632,8 @@ module Workers = struct
|
||||
~output:
|
||||
(Worker_types.full_status_encoding
|
||||
Net_validator_worker_state.Request.encoding
|
||||
(Net_validator_worker_state.Event.encoding Error.encoding)
|
||||
Error.encoding)
|
||||
(Net_validator_worker_state.Event.encoding RPC_error.encoding)
|
||||
RPC_error.encoding)
|
||||
RPC_path.(root / "workers" / "net_validators" /: net_id_arg )
|
||||
|
||||
end
|
||||
@ -681,165 +641,6 @@ module Workers = struct
|
||||
end
|
||||
|
||||
|
||||
module Network = struct
|
||||
|
||||
open P2p_types
|
||||
|
||||
let (peer_id_arg : P2p_types.Peer_id.t RPC_arg.arg) =
|
||||
Crypto_box.Public_key_hash.rpc_arg
|
||||
|
||||
let point_arg =
|
||||
RPC_arg.make
|
||||
~name:"point"
|
||||
~descr:"A network point (ipv4:port or [ipv6]:port)."
|
||||
~destruct:Point.of_string
|
||||
~construct:Point.to_string
|
||||
()
|
||||
|
||||
let versions =
|
||||
RPC_service.post_service
|
||||
~description:"Supported network layer versions."
|
||||
~query: RPC_query.empty
|
||||
~input: empty
|
||||
~output: (list P2p_types.Version.encoding)
|
||||
~error: Data_encoding.empty
|
||||
RPC_path.(root / "network" / "versions")
|
||||
|
||||
let stat =
|
||||
RPC_service.post_service
|
||||
~description:"Global network bandwidth statistics in B/s."
|
||||
~query: RPC_query.empty
|
||||
~input: empty
|
||||
~output: P2p_types.Stat.encoding
|
||||
~error: Data_encoding.empty
|
||||
RPC_path.(root / "network" / "stat")
|
||||
|
||||
let events =
|
||||
RPC_service.post_service
|
||||
~description:"Stream of all network events"
|
||||
~query: RPC_query.empty
|
||||
~input: empty
|
||||
~output: P2p_types.Connection_pool_log_event.encoding
|
||||
~error: Data_encoding.empty
|
||||
RPC_path.(root / "network" / "log")
|
||||
|
||||
let connect =
|
||||
RPC_service.post_service
|
||||
~description:"Connect to a peer"
|
||||
~query: RPC_query.empty
|
||||
~input: (obj1 (dft "timeout" float 5.))
|
||||
~output: (Error.wrap @@ empty)
|
||||
~error: Data_encoding.empty
|
||||
RPC_path.(root / "network" / "connect" /: point_arg)
|
||||
|
||||
let monitor_encoding = obj1 (dft "monitor" bool false)
|
||||
|
||||
module Connection = struct
|
||||
|
||||
let list =
|
||||
RPC_service.post_service
|
||||
~description:"List the running P2P connection."
|
||||
~query: RPC_query.empty
|
||||
~input: empty
|
||||
~output: (list P2p_types.Connection_info.encoding)
|
||||
~error: Data_encoding.empty
|
||||
RPC_path.(root / "network" / "connection")
|
||||
|
||||
let info =
|
||||
RPC_service.post_service
|
||||
~query: RPC_query.empty
|
||||
~input: empty
|
||||
~output: (option P2p_types.Connection_info.encoding)
|
||||
~error: Data_encoding.empty
|
||||
~description:"Details about the current P2P connection to the given peer."
|
||||
RPC_path.(root / "network" / "connection" /: peer_id_arg)
|
||||
|
||||
let kick =
|
||||
RPC_service.post_service
|
||||
~query: RPC_query.empty
|
||||
~input: (obj1 (req "wait" bool))
|
||||
~output: empty
|
||||
~error: Data_encoding.empty
|
||||
~description:"Forced close of the current P2P connection to the given peer."
|
||||
RPC_path.(root / "network" / "connection" /: peer_id_arg / "kick")
|
||||
|
||||
end
|
||||
|
||||
module Point = struct
|
||||
|
||||
let info =
|
||||
RPC_service.post_service
|
||||
~query: RPC_query.empty
|
||||
~input: empty
|
||||
~output: (option P2p_types.Point_info.encoding)
|
||||
~error: Data_encoding.empty
|
||||
~description: "Details about a given `IP:addr`."
|
||||
RPC_path.(root / "network" / "point" /: point_arg)
|
||||
|
||||
let events =
|
||||
RPC_service.post_service
|
||||
~query: RPC_query.empty
|
||||
~input: monitor_encoding
|
||||
~output: (list P2p_connection_pool_types.Point_info.Event.encoding)
|
||||
~error: Data_encoding.empty
|
||||
~description: "Monitor network events related to an `IP:addr`."
|
||||
RPC_path.(root / "network" / "point" /: point_arg / "log")
|
||||
|
||||
let list =
|
||||
let filter =
|
||||
obj1 (dft "filter" (list P2p_types.Point_state.encoding) []) in
|
||||
RPC_service.post_service
|
||||
~query: RPC_query.empty
|
||||
~input: filter
|
||||
~output:
|
||||
(list (tup2
|
||||
P2p_types.Point.encoding
|
||||
P2p_types.Point_info.encoding))
|
||||
~error: Data_encoding.empty
|
||||
~description:"List the pool of known `IP:port` \
|
||||
used for establishing P2P connections ."
|
||||
RPC_path.(root / "network" / "point")
|
||||
|
||||
end
|
||||
|
||||
module Peer_id = struct
|
||||
|
||||
let info =
|
||||
RPC_service.post_service
|
||||
~query: RPC_query.empty
|
||||
~input: empty
|
||||
~output: (option P2p_types.Peer_info.encoding)
|
||||
~error: Data_encoding.empty
|
||||
~description:"Details about a given peer."
|
||||
RPC_path.(root / "network" / "peer_id" /: peer_id_arg)
|
||||
|
||||
let events =
|
||||
RPC_service.post_service
|
||||
~query: RPC_query.empty
|
||||
~input: monitor_encoding
|
||||
~output: (list P2p_connection_pool_types.Peer_info.Event.encoding)
|
||||
~error: Data_encoding.empty
|
||||
~description:"Monitor network events related to a given peer."
|
||||
RPC_path.(root / "network" / "peer_id" /: peer_id_arg / "log")
|
||||
|
||||
let list =
|
||||
let filter =
|
||||
obj1 (dft "filter" (list P2p_types.Peer_state.encoding) []) in
|
||||
RPC_service.post_service
|
||||
~query: RPC_query.empty
|
||||
~input: filter
|
||||
~output:
|
||||
(list (tup2
|
||||
P2p_types.Peer_id.encoding
|
||||
P2p_types.Peer_info.encoding))
|
||||
~error: Data_encoding.empty
|
||||
~description:"List the peers the node ever met."
|
||||
RPC_path.(root / "network" / "peer_id")
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
let forge_block_header =
|
||||
RPC_service.post_service
|
||||
~description: "Forge a block header"
|
||||
@ -897,7 +698,7 @@ let inject_block =
|
||||
~query: RPC_query.empty
|
||||
~input: inject_block_param
|
||||
~output:
|
||||
(Error.wrap @@
|
||||
(RPC_error.wrap @@
|
||||
(obj1 (req "block_hash" Block_hash.encoding)))
|
||||
~error: Data_encoding.empty
|
||||
RPC_path.(root / "inject_block")
|
||||
@ -927,7 +728,7 @@ let inject_operation =
|
||||
true)
|
||||
(opt "net_id" Net_id.encoding))
|
||||
~output:
|
||||
(Error.wrap @@
|
||||
(RPC_error.wrap @@
|
||||
describe
|
||||
~title: "Hash of the injected operation" @@
|
||||
(obj1 (req "injectedOperation" Operation_hash.encoding)))
|
||||
@ -956,7 +757,7 @@ let inject_protocol =
|
||||
"Should we inject protocol that is invalid. (default: false)"
|
||||
bool)))
|
||||
~output:
|
||||
(Error.wrap @@
|
||||
(RPC_error.wrap @@
|
||||
describe
|
||||
~title: "Hash of the injected protocol" @@
|
||||
(obj1 (req "injectedProtocol" Protocol_hash.encoding)))
|
||||
|
@ -7,13 +7,6 @@
|
||||
(* *)
|
||||
(**************************************************************************)
|
||||
|
||||
module Error : sig
|
||||
val service:
|
||||
([ `POST ], unit, unit, unit, unit, Json_schema.schema, unit) RPC_service.t
|
||||
val encoding: error list Data_encoding.t
|
||||
val wrap: 'a Data_encoding.t -> 'a tzresult Data_encoding.encoding
|
||||
end
|
||||
|
||||
module Blocks : sig
|
||||
|
||||
type block = [
|
||||
@ -237,83 +230,6 @@ module Workers : sig
|
||||
|
||||
end
|
||||
|
||||
module Network : sig
|
||||
|
||||
val stat :
|
||||
([ `POST ], unit,
|
||||
unit, unit, unit,
|
||||
P2p_types.Stat.t, unit) RPC_service.t
|
||||
|
||||
val versions :
|
||||
([ `POST ], unit,
|
||||
unit, unit, unit,
|
||||
P2p_types.Version.t list, unit) RPC_service.t
|
||||
|
||||
val events :
|
||||
([ `POST ], unit,
|
||||
unit, unit, unit,
|
||||
P2p_types.Connection_pool_log_event.t, unit) RPC_service.t
|
||||
|
||||
val connect :
|
||||
([ `POST ], unit,
|
||||
unit * P2p_types.Point.t, unit, float,
|
||||
unit tzresult, unit) RPC_service.t
|
||||
|
||||
module Connection : sig
|
||||
|
||||
val list :
|
||||
([ `POST ], unit,
|
||||
unit, unit, unit,
|
||||
P2p_types.Connection_info.t list, unit) RPC_service.t
|
||||
|
||||
val info :
|
||||
([ `POST ], unit,
|
||||
unit * P2p_types.Peer_id.t, unit, unit,
|
||||
P2p_types.Connection_info.t option, unit) RPC_service.t
|
||||
|
||||
val kick :
|
||||
([ `POST ], unit,
|
||||
unit * P2p_types.Peer_id.t, unit, bool,
|
||||
unit, unit) RPC_service.t
|
||||
|
||||
end
|
||||
|
||||
module Point : sig
|
||||
val list :
|
||||
([ `POST ], unit,
|
||||
unit, unit, P2p_types.Point_state.t list,
|
||||
(P2p_types.Point.t * P2p_types.Point_info.t) list, unit) RPC_service.t
|
||||
val info :
|
||||
([ `POST ], unit,
|
||||
unit * P2p_types.Point.t, unit, unit,
|
||||
P2p_types.Point_info.t option, unit) RPC_service.t
|
||||
val events :
|
||||
([ `POST ], unit,
|
||||
unit * P2p_types.Point.t, unit, bool,
|
||||
P2p_connection_pool_types.Point_info.Event.t list, unit) RPC_service.t
|
||||
end
|
||||
|
||||
module Peer_id : sig
|
||||
|
||||
val list :
|
||||
([ `POST ], unit,
|
||||
unit, unit, P2p_types.Peer_state.t list,
|
||||
(P2p_types.Peer_id.t * P2p_types.Peer_info.t) list, unit) RPC_service.t
|
||||
|
||||
val info :
|
||||
([ `POST ], unit,
|
||||
unit * P2p_types.Peer_id.t, unit, unit,
|
||||
P2p_types.Peer_info.t option, unit) RPC_service.t
|
||||
|
||||
val events :
|
||||
([ `POST ], unit,
|
||||
unit * P2p_types.Peer_id.t, unit, bool,
|
||||
P2p_connection_pool_types.Peer_info.Event.t list, unit) RPC_service.t
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
val forge_block_header:
|
||||
([ `POST ], unit,
|
||||
unit, unit, Block_header.t,
|
||||
|
@ -442,7 +442,7 @@ let build_rpc_directory node =
|
||||
let implementation () () =
|
||||
RPC_answer.return
|
||||
Data_encoding.Json.(schema Error_monad.error_encoding) in
|
||||
RPC_directory.register0 dir Services.Error.service implementation in
|
||||
RPC_directory.register0 dir RPC_error.service implementation in
|
||||
let dir =
|
||||
RPC_directory.register1 dir Services.complete
|
||||
(fun s () () ->
|
||||
@ -527,50 +527,49 @@ let build_rpc_directory node =
|
||||
(* Network : Global *)
|
||||
|
||||
let dir =
|
||||
let implementation () () =
|
||||
Node.RPC.Network.stat node |> RPC_answer.return in
|
||||
RPC_directory.register0 dir Services.Network.stat implementation in
|
||||
let implementation () () = Node.RPC.Network.stat node |> RPC_answer.return in
|
||||
RPC_directory.register0 dir P2p_services.stat implementation in
|
||||
let dir =
|
||||
let implementation () () =
|
||||
RPC_answer.return Distributed_db.Raw.supported_versions in
|
||||
RPC_directory.register0 dir Services.Network.versions implementation in
|
||||
RPC_directory.register0 dir P2p_services.versions implementation in
|
||||
let dir =
|
||||
let implementation () () =
|
||||
let stream, stopper = Node.RPC.Network.watch node in
|
||||
let shutdown () = Lwt_watcher.shutdown stopper in
|
||||
let next () = Lwt_stream.get stream in
|
||||
RPC_answer.return_stream { next ; shutdown } in
|
||||
RPC_directory.register0 dir Services.Network.events implementation in
|
||||
RPC_directory.register0 dir P2p_services.events implementation in
|
||||
let dir =
|
||||
let implementation point () timeout =
|
||||
Node.RPC.Network.connect node point timeout >>= RPC_answer.return in
|
||||
RPC_directory.register1 dir Services.Network.connect implementation in
|
||||
RPC_directory.register1 dir P2p_services.connect implementation in
|
||||
|
||||
(* Network : Connection *)
|
||||
|
||||
let dir =
|
||||
let implementation peer_id () () =
|
||||
Node.RPC.Network.Connection.info node peer_id |> RPC_answer.return in
|
||||
RPC_directory.register1 dir Services.Network.Connection.info implementation in
|
||||
RPC_directory.register1 dir P2p_services.Connection.info implementation in
|
||||
let dir =
|
||||
let implementation peer_id () wait =
|
||||
Node.RPC.Network.Connection.kick node peer_id wait >>= RPC_answer.return in
|
||||
RPC_directory.register1 dir Services.Network.Connection.kick implementation in
|
||||
RPC_directory.register1 dir P2p_services.Connection.kick implementation in
|
||||
let dir =
|
||||
let implementation () () =
|
||||
Node.RPC.Network.Connection.list node |> RPC_answer.return in
|
||||
RPC_directory.register0 dir Services.Network.Connection.list implementation in
|
||||
RPC_directory.register0 dir P2p_services.Connection.list implementation in
|
||||
|
||||
(* Network : Peer_id *)
|
||||
|
||||
let dir =
|
||||
let implementation () state =
|
||||
Node.RPC.Network.Peer_id.list node ~restrict:state |> RPC_answer.return in
|
||||
RPC_directory.register0 dir Services.Network.Peer_id.list implementation in
|
||||
RPC_directory.register0 dir P2p_services.Peer_id.list implementation in
|
||||
let dir =
|
||||
let implementation peer_id () () =
|
||||
Node.RPC.Network.Peer_id.info node peer_id |> RPC_answer.return in
|
||||
RPC_directory.register1 dir Services.Network.Peer_id.info implementation in
|
||||
RPC_directory.register1 dir P2p_services.Peer_id.info implementation in
|
||||
let dir =
|
||||
let implementation peer_id () monitor =
|
||||
if monitor then
|
||||
@ -587,18 +586,18 @@ let build_rpc_directory node =
|
||||
RPC_answer.return_stream { next ; shutdown }
|
||||
else
|
||||
Node.RPC.Network.Peer_id.events node peer_id |> RPC_answer.return in
|
||||
RPC_directory.register1 dir Services.Network.Peer_id.events implementation in
|
||||
RPC_directory.register1 dir P2p_services.Peer_id.events implementation in
|
||||
|
||||
(* Network : Point *)
|
||||
|
||||
let dir =
|
||||
let implementation () state =
|
||||
Node.RPC.Network.Point.list node ~restrict:state |> RPC_answer.return in
|
||||
RPC_directory.register0 dir Services.Network.Point.list implementation in
|
||||
RPC_directory.register0 dir P2p_services.Point.list implementation in
|
||||
let dir =
|
||||
let implementation point () () =
|
||||
Node.RPC.Network.Point.info node point |> RPC_answer.return in
|
||||
RPC_directory.register1 dir Services.Network.Point.info implementation in
|
||||
RPC_directory.register1 dir P2p_services.Point.info implementation in
|
||||
let dir =
|
||||
let implementation point () monitor =
|
||||
if monitor then
|
||||
@ -615,7 +614,7 @@ let build_rpc_directory node =
|
||||
RPC_answer.return_stream { next ; shutdown }
|
||||
else
|
||||
Node.RPC.Network.Point.events node point |> RPC_answer.return in
|
||||
RPC_directory.register1 dir Services.Network.Point.events implementation in
|
||||
RPC_directory.register1 dir P2p_services.Point.events implementation in
|
||||
let dir =
|
||||
RPC_directory.register_describe_directory_service dir Services.describe in
|
||||
dir
|
||||
|
46
src/lib_rpc/RPC_error.ml
Normal file
46
src/lib_rpc/RPC_error.ml
Normal file
@ -0,0 +1,46 @@
|
||||
(**************************************************************************)
|
||||
(* *)
|
||||
(* Copyright (c) 2014 - 2017. *)
|
||||
(* Dynamic Ledger Solutions, Inc. <contact@tezos.com> *)
|
||||
(* *)
|
||||
(* All rights reserved. No warranty, explicit or implicit, provided. *)
|
||||
(* *)
|
||||
(**************************************************************************)
|
||||
|
||||
let service =
|
||||
RPC_service.post_service
|
||||
~description: "Schema for all the RPC errors from the shell"
|
||||
~query: RPC_query.empty
|
||||
~input: Data_encoding.empty
|
||||
~output: Data_encoding.json_schema
|
||||
~error: Data_encoding.empty
|
||||
RPC_path.(root / "errors")
|
||||
|
||||
let encoding =
|
||||
let { RPC_service.meth ; uri ; _ } =
|
||||
RPC_service.forge_request service () () in
|
||||
let open Data_encoding in
|
||||
describe
|
||||
~description:
|
||||
(Printf.sprintf
|
||||
"The full list of error is available with \
|
||||
the global RPC `%s %s`"
|
||||
(RPC_service.string_of_meth meth) (Uri.path_and_query uri))
|
||||
(conv
|
||||
~schema:Json_schema.any
|
||||
(fun exn -> `A (List.map Error_monad.json_of_error exn))
|
||||
(function `A exns -> List.map Error_monad.error_of_json exns | _ -> [])
|
||||
json)
|
||||
|
||||
let wrap param_encoding =
|
||||
let open Data_encoding in
|
||||
union [
|
||||
case (Tag 0)
|
||||
(obj1 (req "ok" param_encoding))
|
||||
(function Ok x -> Some x | _ -> None)
|
||||
(fun x -> Ok x) ;
|
||||
case (Tag 1)
|
||||
(obj1 (req "error" encoding))
|
||||
(function Error x -> Some x | _ -> None)
|
||||
(fun x -> Error x) ;
|
||||
]
|
15
src/lib_rpc/RPC_error.mli
Normal file
15
src/lib_rpc/RPC_error.mli
Normal file
@ -0,0 +1,15 @@
|
||||
(**************************************************************************)
|
||||
(* *)
|
||||
(* Copyright (c) 2014 - 2017. *)
|
||||
(* Dynamic Ledger Solutions, Inc. <contact@tezos.com> *)
|
||||
(* *)
|
||||
(* All rights reserved. No warranty, explicit or implicit, provided. *)
|
||||
(* *)
|
||||
(**************************************************************************)
|
||||
|
||||
open Error_monad
|
||||
|
||||
val service:
|
||||
([ `POST ], unit, unit, unit, unit, Json_schema.schema, unit) RPC_service.t
|
||||
val encoding: error list Data_encoding.t
|
||||
val wrap: 'a Data_encoding.t -> 'a tzresult Data_encoding.encoding
|
@ -4,10 +4,12 @@
|
||||
((name tezos_rpc)
|
||||
(public_name tezos-rpc)
|
||||
(libraries (tezos-data-encoding
|
||||
tezos-error-monad
|
||||
ocplib-resto))
|
||||
(flags (:standard -w -9+27-30-32-40@8
|
||||
-safe-string
|
||||
-open Tezos_data_encoding))))
|
||||
-open Tezos_data_encoding
|
||||
-open Tezos_error_monad))))
|
||||
|
||||
(alias
|
||||
((name runtest_indent)
|
||||
|
@ -86,7 +86,7 @@ let () =
|
||||
Data_encoding.
|
||||
(obj2
|
||||
(req "operation" (dynamic_size Tezos_base.Operation.encoding))
|
||||
(req "error" Node_rpc_services.Error.encoding))
|
||||
(req "error" RPC_error.encoding))
|
||||
(function
|
||||
| Failed_to_preapply (hash, err) -> Some (hash, err)
|
||||
| _ -> None)
|
||||
|
Loading…
Reference in New Issue
Block a user