Querying a Bedrock configuration
Once one or multiple Bedrock daemons have been deployed, it is possible to query their complete configuration, either via command line, or using a C++ program.
bedrock-query
bedrock-query
is a program installed with Bedrock
that can query the configuration of one or multiple daemons
and print it on its standard output. It is called as follows.
bedrock-query <protocol> -a <address>
<protocol> is the protocol used by the Bedrock daemon
(and consequently by the query program), e.g. na+sm
.
<address> is the Mercury address of the Bedrock daemon process.
The configuration is printed to the standard output in the form of a JSON object associating the address with its configuration.
Multiple addresses can be passed, e.g.:
bedrock-query <protocol> -a <address1> -a <address2> -a <address3>
In this case, the resulting JSON object will have three entries, one for each address. If all the daemons are gathered in an SSG group represented by a group file of a given <filename>, the following command will query all the members of the group.
bedrock-query <protocol> -s <filename>
The -i/--provider-id
flag may be used to specify a provider
id other than 0. For instance:
bedrock-query <protocol> -a <address> -i 42
Using Jx9 queries
Sometimes it may be useful to have Bedrock daemons execute some code
to return only some specific information from their configuration.
This can be done using the jx9 language.
From within a Jx9 script, the $__config__
variable contains
the configuration of the Bedrock daemon. The client will be sent back
the value returned by the script via its return
statement.
For example, the following Jx9 script makes the daemon return only the names of the providers it manages.
$providers = $__config__.providers;
$names = [];
foreach($providers as $p) {
array_push($names, $p.name);
}
return $names;
Calling bedrock-query
with the -j <script>
argument
will read the Jx9 code from the provided script and send it to the
server for execution. For exemple:
bedrock-query <protocol> -a <address> -j query.jx9
Using a C++ program
The easiest way to learn how to do all of the above in C++
is to look at how bedrock-query
is implemented, as well
as the Client.hpp and ServiceHandle.hpp files in include/bedrock.