JSON-RPC remote control support¶
MVME uses the jsonrpc specification to implement basic remote control functionality. To enable/disable the RPC-Server use the “Workspace Settings” button in the DAQ Controls Window and follow the instructions there.
If the RPC-Server is enabled mvme will open a TCP listening socket and accept incoming connections. By default mvme binds to all interfaces and listens on port 13800.
Requests are currently not length-prefixed, instead data is read until a full JSON object has been received. The received JSON is then interpreted according to the JSON-RPC spec.
Note: The JSON-RPC batch feature is not supported by the server implementation.
A command line client written in Python3 can be found in the mvme distribution
under extras/mvme_jsonrpc_client.py
. It allows to (repeatedly) call a single
RPC method:
$ python3 extras/mvme_jsonrpc_client.py localhost 13800 getDAQState
---> {"id": "0", "jsonrpc": "2.0", "method": "getDAQState", "params": []}
<--- {"id": "0", "jsonrpc": "2.0", "result": "Running"}
Since mvme-1.8.0 there is a second script extras/mvme_jsonrpc_replay.py
which can replay data from multiple listfile archives.
Methods¶
getVersion¶
Returns the version of MVME running the JSON RPC services.
Returns
String containing version information.
getLogMessages¶
Returns the messages buffered up in the MVME log.
Returns
StringList - List containing the log messages from oldest to newest.
getDAQStats¶
Returns information about the current DAQ run including counter values, the current run ID, listfile output filename and start time.
Returns
Object
getVMEControllerStats¶
Returns detailed VME controller statistics if available for the current controller type.
Returns:
Object
getVMEControllerState¶
Returns the connection state of the VME controller.
Returns:
String - “Connected”, “Disconnected” or “Connecting”
reconnectVMEController¶
Starts a reconnection attempt of the VME controller. The operation is
asynchronous, thus the result will not be directly available. Instead the
controller state needs to be polled via getVMEControllerState
to see the
result of the reconnection attempt.
Note: this might in the future be changed to a synchronous version, which immediately returns the result or any errors that occured.
Returns:
String - “Reconnection attempt initiated”
getSystemState¶
Combined system state for both the readout/replay side and the analysis/data consumer side.
Returns
String - “Idle”, “Starting”, “Running”, “Stopping” or “Paused”
getDAQState¶
Returns the current state of the DAQ/replay side.
Returns
String - “Idle”, “Starting”, “Running”, “Stopping” or “Paused”
getAnalysisState¶
Returns the current state of the analysis/data consumer side.
Returns
String - “Idle”, “Starting”, “Running”, “Stopping” or “Paused”
startDAQ¶
Starts a new DAQ run. The system must be idle, meaning any previous DAQ runs must have been stopped.
Returns
true on success, error status and additional information otherwise.
stopDAQ¶
Stops the current DAQ run or replay.
Returns
true on success, error status and additional information otherwise.
getGlobalMode¶
Returns the global mode mvme is in. Either “daq” or “replay”.
Returns
string - “daq” or “replay”
loadAnalysis¶
loadAnalysis(string: filepath)
Attempts to load a mvme analysis from the given file (*.analysis).
loadListfile¶
loadListfile(string: filepath, bool: loadAnalysis = false, bool replayAllParts = true)
Attempts to open the specified file as a mvme listfile (*.zip).
Parameters
string: filepath - Path to the ZIP listfile. Absolute or relative to the current workspace directory.
bool: loadAnalysis = false - If true load the analysis contained in the listfile archive.
bool: replayAllParts = true - If a split listfile is detected (filename ending in ‘partNNN’) all parts starting from the given filename will be replayed.
Returns
true on success, error info object otherwise.
closeListfile¶
Closes the currently open listfile. The system goes into ‘DAQ” state. Has no effect if no listfile is open.
startReplay¶
startReplay(bool: keepHistoContents = false)
Attempts to replay from the currently open listfile.
Parameters:
bool: keepHistoContents = false
If keepHistoContents is true the analysis histograms will not be cleared before starting the replay.
stopReplay¶
Stops the active listfile replay.
Examples¶
Raw JSON data¶
Requesting DAQ State:
---> {"id": "0", "jsonrpc": "2.0", "method": "getDAQState", "params": []} <--- {"id": "0", "jsonrpc": "2.0", "result": "Running"}
Starting data acquisition:
---> {"id": "0", "jsonrpc": "2.0", "method": "startDAQ", "params": []} <--- {"id": "0", "jsonrpc": "2.0", "result": true}
An error response:
---> {"id": "0", "jsonrpc": "2.0", "method": "startDAQ", "params": []} <--- {"error": {"code": 102, "message": "DAQ readout worker busy"}, "id": "0", "jsonrpc": "2.0"}
Requesting DAQ stats:
---> {"id": "0", "jsonrpc": "2.0", "method": "getDAQStats", "params": []} <--- {"id": "0", "jsonrpc": "2.0", "result": {"analysisEfficiency": 1, "analyzedBuffers": 4644, "buffersWithErrors": 0, "currentTime": "2018-06-14T11:45:21", "droppedBuffers": 0, "endTime": null, "listFileBytesWritten": 0, "listFileFilename": "", "runId": "180614_114412", "startTime": "2018-06-14T11:44:13", "state": "Running", "totalBuffersRead": 4644, "totalBytesRead": 6366924, "totalNetBytesRead": 5851300}}
mvme_jsonrpc_replay.py¶
Load analysis from
listfiles/mvmelstrun004_part001.zip
and replay data from the same archive only:mvme_jsonrpc_replay.py listfiles/mvmelstrun004_part001.zip --loadAnalysis
Keep the currently opened analysis and accumulate data from
listfiles/mvmelstrun004_part001.zip
without clearing the histograms first.mvme_jsonrpc_replay.py listfiles/mvmelstrun004_part001.zip --keepHistoContents
Replay all parts of a split run starting from
part001
:mvme_jsonrpc_replay.py listfiles/mvmelstrun004_part001.zip --replayAllParts