The Recorder application is one of the HELICS apps available with the library Its purpose is to provide a easy way to capture data from a federation It acts as a federate that can "capture" values or messages from specific publications or direct endpoints or cloned endpoints which exist elsewhere
allowed options:
command line only:
-? [ --help ] produce help message
-v [ --version ] display a version string
--config-file arg specify a configuration file to use
configuration:
--local specify otherwise unspecified endpoints and
publications as local( i.e.the keys will be prepended
with the player name
--stop arg the time to stop the player
--quiet turn off most display output
allowed options:
configuration:
-b [ --broker ] arg address of the broker to connect
-n [ --name ] arg name of the player federate
--corename arg the name of the core to create or find
-c [ --core ] arg type of the core to connect to
--offset arg the offset of the time steps
--period arg the period of the federate
--timedelta arg the time delta of the federate
--rttolerance arg the time tolerance of the real time mode
-i [ --coreinit ] arg the core initialization string
--separator arg separator character for local federates
--inputdelay arg the input delay on incoming communication of the
federate
--outputdelay arg the output delay for outgoing communication of the
federate
-f [ --flags ] arg named flag for the federate
allowed options:
configuration:
--tags arg tags to record, this argument may be specified any
number of times
--endpoints arg endpoints to capture, this argument may be specified
multiple time
--sourceclone arg existing endpoints to capture generated packets from,
this argument may be specified multiple time
--destclone arg existing endpoints to capture all packets with the
specified endpoint as a destination, this argument may
be specified multiple time
--clone arg existing endpoints to clone all packets to and from
--capture arg capture all the publications of a particular federate
capture="fed1;fed2" supports multiple arguments or a
semicolon/comma separated list
-o [ --output ] arg the output file for recording the data
--allow_iteration allow iteration on values
--verbose print all value results to the screen
--marker arg print a statement indicating time advancement every <arg> seconds of the simulation
is the period of the marker
--mapfile arg write progress to a map file for concurrent progress
monitoring
also permissible are all arguments allowed for federates and any specific broker specified:
the player executable also takes an untagged argument of a file name for example
helics_recorder record_file.txt --stop 5
Recorders support both delimited text files and json files some examples can be found in
a simple example of a recorder file specifying some subscriptions
#FederateName topic1
sub pub1
subscription pub2
#
signifies a comment
if only a single column is specified it is assumed to be a subscription
for two column rows the second is the identifier arguments with spaces should be enclosed in quotes
+------------------------------+------------------------------------------------------------+
| interface | description |
+==============================+============================================================+
| s, sub, subscription | subscribe to a particular publication |
+------------------------------+------------------------------------------------------------+
| endpoint, ept, e | generate an endpoint to capture all targeted packets |
+------------------------------+------------------------------------------------------------+
| source, sourceclone,src | capture all messages coming from a particular endpoint |
+------------------------------+------------------------------------------------------------+
| dest, destination, destclone | capture all message going to a particular endpoint |
+------------------------------+------------------------------------------------------------+
| capture | capture all data coming from a particular federate |
+------------------------------+------------------------------------------------------------+
| clone | capture all message going from or to a particular endpoint |
+------------------------------+------------------------------------------------------------+
for 3 column rows the first must be either clone or capture for clone the second can be either source or destination and the third the endpoint name [for capture it can be either "endpoints" or "subscriptions"] NOTE:not fully working yet for capture
recorders can also be specified via JSON files
here are two examples of the text format and equivalent JSON
#list publications and endpoints for a recorder
pub1
pub2
e src1
JSON example
{
"subscriptions": [
{
"key": "pub1",
"type": "double"
},
{
"key": "pub2",
"type": "double"
}
],
"endpoints": [
{
"name": "src1",
"global": true
}
]
}
some configuration can also be done through JSON through elements of "stop","local","separator","timeunits" and file elements can be used to load up additional files
Recorders capture files in a format the Player can read see Player
the --verbose
option will also print the values to the screen.
the recorder can generate a live file that can be used in process to see the progress of the Federation This is occasionally useful, though for many uses the Tracer will be more useful when it is completed