The orchestrator takes its input from an AAL file. This file contains formatted information about the groups used, agents used, events to be sent and trigger to wait/switch on.
streamstarts: [ phase1 ]
eventstreams: {
phase1: [ E, E, T, E, T, ST ]
phase2: [ E, E, T, E, T, ST ]
}
agents: {
name: { agent values }
name: { agent values }
}
groups: {
name: [ group nodes ]
name: [ group nodes ]
}
There are 4 main keys in the AAL body:
Groups provides a mapping from group name to a list of nodes that should be part of that group. These lists are turned into a series of GroupBuild operations.
Agents provide a mapping from agent name to a mapping of agent values.
These agent maps are turned into a series of LoadAgent operations.
Streamstarts is a list of key values that map into the eventstreams map. Each value in the streamstarts list will be started in parallel by the orchestrator.
The eventstreams are the lists of events and triggers. Each stream is parsed in linear order and may end in a SwitchTrigger which allows the contiuation of another eventstream based on some state comparison.
Events are converted to Method calls and therefore require the destination agent, the method name and the method arguments.
Triggers are holding points that stop the progression of the event stream until a matching trigger is received from the experiment. They can include a timeout to continue progression without the trigger.
SwitchTriggers contain a list of triggers. Each sub trigger is like a regular trigger but it also contains a target value. The first trigger to fire will determing the next course of action.
trigger: {
timeout,
event,
otherargs
}
switchTrigger: [
{
timeout,
event,
otherargs,
target
},
{
timeout,
event,
otherargs,
target
},
...
]