Introduction
Imandra Rule Synth is an API for synthesizing rules from log files.
Installation
To use the Imandra Rule Synth API, first install the Imandra CLI tool, imandra
.
On MacOS/Unix:
Ready!
sh <(curl -s "https://storage.googleapis.com/imandra-do/install.sh")
On Windows (Powershell):
Ready!
(Invoke-WebRequest "https://storage.googleapis.com/imandra-do/install.ps1").Content | powershell -
Then add %LOCALAPPDATA%\Imandra
to your PATH
as prompted by the installer, and make sure your ExecutionPolicy allows %LOCALAPPDATA%\Imandra\imandra.ps1
to run.
Authentication
We will need to authenticate you for the use of the rule synth cloud API. Create an account by typing:
Ready!
imandra auth login
Submitting logs for rule synthesis
Submit your log file using the imandra rule-synth synth
command. The log file should be newline delimited JSON objects representing your log entries.
Ready!
imandra rule-synth synth --file path/to/log.json
Log format
The JSON format Imandra Rule Synth expects is as follows:
- There should be one JSON object per line in the
.json
file. - Each JSON object should represent a pair of FIX messages - the incoming message (key
in_msg
) and the associated outgoing message (keyout_msg
): - The value for each of these message keys should be an array of tag objects that make up the message.
{ "in_msg": [ ... <tag objects> ... ], "out_msg": [ ... <tag objects> ... ]}
{ "in_msg": [ ... <tag objects> ... ], "out_msg": [ ... <tag objects> ... ]}
- Each tag object should have the following structure:
{
"tag": int, // the FIX tag number
"type": string, // the type of the value in the tag represented as a string, e.g. "string", "int" or "float"
"option": boolean, // true if the tag is optional, false otherwise
"value": * // the actual tag value for the message
}
- A full (with most tags removed for brevity) example of a single line in the file would look like this:
{"in_msg": [{"tag": 8, "type": "string", "option": false, "value": "FIX.4.2"}, {"tag": 9, "type": "int", "option": false, "value": 233}, {"tag": 35, "type": "string", "option": false, "value": "D"}, ... <other tags> ...], "out_msg": [{"tag": 8, "type": "string", "option": false, "value": "FIX.4.4"}, {"tag": 9, "type": "int", "option": false, "value": 251}, {"tag": 35, "type": "string", "option": false, "value": "D"}, ... <other tags> ...]}