(* $Id: netplex_config.mli 1496 2010-11-27 21:49:12Z gerd $ *) (** Read the configuration file *) open Netplex_types exception Config_error of string val read_config_file : string -> config_file (** Reads a filename and returns the representation object *) val repr_config_file : string -> config_tree -> config_file (** [repr_config_file name tree]: converts the [tree] to a full [config_file] object. [name] is the filename reported by the object. *) val read_netplex_config : parallelization_type -> logger_factory list -> workload_manager_factory list -> processor_factory list -> config_file -> netplex_config (** Reads a configuration file like: * * {[ netplex { * controller { * ... * logging { * ... * }; * }; * service { * name = "name_of_service"; * protocol { * name = "name_of_protocol"; * lstn_backlog = <n>; * lstn_reuseaddr = <bool>; * so_keepalive = <bool>; * address { * type = "local"; * path = "socketname"; * }; * address { * type = "internet"; * bind = "bind_address:port"; * }; * ... * }; * processor { * type = "type_of_processor"; * ... * }; * workload_manager { * type = "type_of_manager"; * ... * }; * } * } * ]} * * The [controller] section is explained in {!Netplex_controller}. * * The [logging] section is explained in {!Netplex_log}. * * The [service] section may also contain two parameters [user] and * [group]. They instruct the service container to drop root privileges * and to become the configured user and group. Note that this is only * possible in multi-processing mode. * * Address types: * - [local]: This is a OS-dependent default IPC mechanism for local * connections. On Unix, [local] means Unix Domain sockets. On Win32, * [local] means the [w32_pipe_file] mechanism. In [path], the name * of the Unix Domain socket or the file with the pipe name must be * specified. * - [internet]: Internet socket. In [bind] the bind address and the * bind port are given. * - [unixdomain]: Unix domain sockets. In [path] give the path. * - [socket_file]: An emulation of Unix Domain sockets: A server socket * bound to [127.0.0.1] and an anonymous port is used instead. The * port number is written to a file. The file must be given as [path]. * - [w32_pipe]: Win32 named pipes. The name of the pipe is given * as [path]. * - [w32_pipe_file]: An emulation of Unix Domain sockets: A named * pipe with an unpredictable random name is created instead. The * name of this pipe is written to the file given by [path] * - [container]: this special address causes that a separate [local] * socket is created for each started container. The name of the * socket file is automatically chosen. The names of the socket * files can be queried with {!Netplex_cenv.lookup_container_sockets}. * This type of socket is useful to control the load sent to each * container directly, e.g. to drive a farm of worker processes. * * {b More documentation}: See {!Netplex_intro.webserver} for a * complete example of a config file. See {!Netplex_intro.crsock} * for explanations how to specify sockets in the config file. *)