Using GridAPPS-D


RC1 Demonstration

In order to run the RC1 demonstration you will need to have access to a Linux machine configured according to the instructions in the Installing GridAPPS-D section. In order to run the demonstration you will need both ssh and web access to the machine.

In this procedure, we connect to a Linux virtual machine (VM) in the PNNL Energy Infrastructure Operations Center (EIOC) using a virtual private network (VPN) connection. The ssh host for GridAPPS-D in the EIOC is at, and you would need user credentials for both that VM and the VPN connection.

The procedure could vary if logging into a local build of GridAPPS-D, i.e. not hosted in PNNL’s EIOC. If logging into your own build, you will need to replace the IP in the following steps with that of your system. You can use the ssh command from a Terminal or any SSH client such as ssh -X -Y and then supply your local password when prompted. If you don’t have direct web access, you may also need to take extra steps in setting up a secure SSH tunnel for your browser to work in step 3 below; please ask your local IT administrator for those details.

Once connected to the VM hosting GridAPPS-D, there are three basic steps involved in starting the RC1 demo:

  1. Start GridAPPS-D; this prepares the platform to configure a power system model and generate results.
    1. Open the first terminal to
    2. Switch to the gridappsd user by typing sudo su - gridappsd
    3. Type cd $HOME/gridappds_project/sources/GOSS-GridAPPS-D
    4. Type ./ You may not see any output and it doesn’t exit until you press Ctrl-C.
  2. Start the node server for the viz application, which allows you to start the simulation and see its results.
    1. Open a second terminal to
    2. Switch to the gridappsd user by typing sudo su - gridappsd
    3. Type cd $HOME/gridappsd_project/sources/viz
    4. Start the node server by typing node server.js You may not see any output and it doesn’t exit until you press Ctrl-C.
  3. Start the viz demo. In some cases this may require a browser using an SSH tunnel.
    1. In a browser go to
    2. Click on the IEEE 8500 link in the top left of the webpage (see Figure 1).
    3. Click the play button in the top right of the webpage. It will take 5-10 seconds before you see the graphs being generated.

The demonstration runs a continuous loop of load variations with a Volt-Var Optimization (VVO) application [CIT5] controlling capacitor banks on the IEEE 8500-node test system [CIT2]. Most of Figure 1 is devoted to a map layout view of the test circuit, with updated labels for capacitor banks and voltage regulators. On the right-hand side, strip chart plots of the phase ABC voltages at capacitors and regulators, phase ABC substation power levels, and phase ABC regulator taps are continually updated. Capacitor bank labels on the circuit map view change between OPEN and CLOSED to show the bank status as load varies and the VVO application issues control commands. While GridAPPS-D runs the demo, GridLAB-D [CIT8] simulates power system operation and exchanges information with the VVO application using GOSS [CIT6] and FNCS [CIT7].

For an orderly shutdown of the demonstration:

  1. Close the web browser (i.e. step 3 above).
  2. Enter Ctrl-C and then Exit in the node server’s terminal window / tab (i.e. step 2 above).
  3. Enter Ctrl-C and then Exit in the GOSS terminal window (i.e. step 1 above).
  4. Log off the VM and the VPN.


Figure 1: GridAPPS-D Release Cycle 1 Demo of the Volt-Var Optimization Running on the IEEE 8500-node test system.

Run Configuration

A publish and subscribe mechanism is utilized for clients and applications to communicate with the GridAPPS-D platform. The next sections describe the topics and expected message formats for starting a simulation, receiving data from a simulation, and interacting with an ongoing simulation.

In order to start a simulation, you must send a simulation request to the process manager. The Process manager listens to topic goss/gridappsd/process/request/simulation and returns a simluationId. The simulation request should look like the example below. It should incluse a power system config section, which specifies which model to run. A simulation config, which includes parameters for the simulation, such as the simulator or power flow solver method. Within the power system config is the power system output, this specifies which objects and properties should be returned by the simulation, these should match the objects in the chosen model.

Once started, the ongoing process status messages will be sent on goss/gridappsd/simulation/status/<Simulation_ID>


power_system_config: the CIM model to be used in the simulation

"power_system_config": {
        "GeographicalRegion_name": "ieee8500nodecktassets_Region",
        "SubGeographicalRegion_name": "ieee8500nodecktassets_SubRegion",
        "Line_name": "ieee8500"

simulation_config: the paramaters used by the simulation

"simulation_config": {
        "start_time": "2009-07-21 00:00:00",
        "duration": "120",
        "simulator": "GridLAB-D",
        "timestep_frequency": "1000",
        "timestep_increment": "1000",
        "simulation_name": "ieee8500",
        "power_flow_solver_method": "NR",

simulation_output: the objects and fields to be returned by the simulation

"simulation_output": {
        "output_objects": [{
                "name": "rcon_FEEDER_REG",
                "properties": ["connect_type",

model creation config: the paramaters used to generate the input file for the simulation

        "model_creation_config": {
                "load_scaling_factor": "1",
                "schedule_name": "ieeezipload",
                "z_fraction": "0",
                "i_fraction": "1",
                "p_fraction": "0"

application config: inputs to any other applications that should run as part of the simluation, in this case the voltvar application

"application_config": {
        "applications": [{
                "name": "vvo",
                "config_string": "{\"static_inputs\": {\"ieee8500\" : {\"control_method\": \"ACTIVE\", \"capacitor_delay\": 60, \"regulator_delay\": 60, \"desired_pf\": 0.99, \"d_max\": 0.9, \"d_min\": 0.1,\"substation_link\": \"xf_hvmv_sub\",\"regulator_list\": [\"reg_FEEDER_REG\", \"reg_VREG2\", \"reg_VREG3\", \"reg_VREG4\"],\"regulator_configuration_list\": [\"rcon_FEEDER_REG\", \"rcon_VREG2\", \"rcon_VREG3\", \"rcon_VREG4\"],\"capacitor_list\": [\"cap_capbank0a\",\"cap_capbank0b\", \"cap_capbank0c\", \"cap_capbank1a\", \"cap_capbank1b\", \"cap_capbank1c\", \"cap_capbank2a\", \"cap_capbank2b\", \"cap_capbank2c\", \"cap_capbank3\"], \"voltage_measurements\": [\"nd_l2955047,1\", \"nd_l3160107,1\", \"nd_l2673313,2\", \"nd_l2876814,2\", \"nd_m1047574,3\", \"nd_l3254238,4\"],       \"maximum_voltages\": 7500, \"minimum_voltages\": 6500,\"max_vdrop\": 5200,\"high_load_deadband\": 100,\"desired_voltages\": 7000,   \"low_load_deadband\": 100,\"pf_phase\": \"ABC\"}}}"


Input/Output Topics

The FNCS Bridge input and output topics are the main driver behind controlling the simulation and subscribing to the latest data from the simulation. FNCS Bridge listens for input on topic goss/gridappsd/fncs/input and publishes responses on topic goss/gridappsd/fncs/output

Applications that wish to interact with the simulation can do so by subscribing to to the output topic and publishing commands to the input topic.

Each message should contain a command field, this specifies the operation that is either sent to teh input topic or responded to on the output topic. The available values for the command field are isInitialized, nextTimeStep, update, and stop. These are each described in more depth below.

  • isInitialized

    goss/gridappsd/fncs/input - Checks to see if the simulator is initialized, meaning that it has established a connection to both GOSS and the simulator. This command takes no other parameters.

    {"command": "isInitialized"}

    goss/gridappsd/fncs/output - Returns simulator initializtion status (true/false) and any initialization messages.

    {"command": "isInitialized", "response":<true/false>, "output":"Any messages from simulator regarding initialization"}
  • nextTimeStep

    goss/gridappsd/fncs/input - Increments the simulator to the specified timestep, in a typical real-time simulation it will be incremented once per second. The only parameter is the current time in seconds (after the start of the simulation), this command will initiate the next time step in the simulator.

    {"command": "nextTimeStep", "currentTime":<seconds from start of simulation>}

    goss/gridappsd/fncs/output - Returns the current state of the objects and properties in the simulator, which objects and properties are specified by the simluation output. The is the output that applications will wish to subscribe to. The visualization application subscribes to this output to display the latest capacitor and regulator state. The volt-var optimization application subscribes to this output when managing voltage levels within the simulation

    {"command": "nextTimeStep", "output": "{\"ieee8500\":{\"cap_capbank0a\":{\"capacitor_A\":400000.0,\"control\":\"MANUAL\",\"control_level\":\"BANK\",\"dwell_time\":100.0,\"phases\":\"AN\",\"phases_connected\":\"NA\",\"pt_phase\":\"A\",\"switchA\":\"CLOSED\"},\"cap_capbank0b\":{\"capacitor_B\":400000.0,\"control\":\"MANUAL\",\"control_level\":\"BANK\",\"dwell_time\":101.0,\"phases\":\"BN\",\"phases_connected\":\"NB\",\"pt_phase\":\"B\",\"switchB\":\"CLOSED\"},\"cap_capbank0c\":{\"capacitor_C\":400000.0,\"control\":\"MANUAL\",\"control_level\":\"BANK\",\"dwell_time\":102.0,\"phases\":\"CN\",\"phases_connected\":\"NC\",\"pt_phase\":\"C\",\"switchC\":\"CLOSED\"},\"cap_capbank1a\":{\"capacitor_A\":300000.0,\"control\":\"MANUAL\",\"control_level\":\"BANK\",\"dwell_time\":100.0,\"phases\":\"AN\",\"phases_connected\":\"NA\",\"pt_phase\":\"A\",\"switchA\":\"CLOSED\"},\"cap_capbank1b\":{\"capacitor_B\":300000.0,\"control\":\"MANUAL\",\"control_level\":\"BANK\",\"dwell_time\":101.0,\"phases\":\"BN\",\"phases_connected\":\"NB\",\"pt_phase\":\"B\",\"switchB\":\"CLOSED\"},\"cap_capbank1c\":{\"capacitor_C\":300000.0,\"control\":\"MANUAL\",\"control_level\":\"BANK\",\"dwell_time\":102.0,\"phases\":\"CN\",\"phases_connected\":\"NC\",\"pt_phase\":\"C\",\"switchC\":\"CLOSED\"},\"cap_capbank2a\":{\"capacitor_A\":300000.0,\"control\":\"MANUAL\",\"control_level\":\"BANK\",\"dwell_time\":100.0,\"phases\":\"AN\",\"phases_connected\":\"NA\",\"pt_phase\":\"A\",\"switchA\":\"CLOSED\"},\"cap_capbank2b\":{\"capacitor_B\":300000.0,\"control\":\"MANUAL\",\"control_level\":\"BANK\",\"dwell_time\":101.0,\"phases\":\"BN\",\"phases_connected\":\"NB\",\"pt_phase\":\"B\",\"switchB\":\"CLOSED\"},\"cap_capbank2c\":{\"capacitor_C\":300000.0,\"control\":\"MANUAL\",\"control_level\":\"BANK\",\"dwell_time\":102.0,\"phases\":\"CN\",\"phases_connected\":\"NC\",\"pt_phase\":\"C\",\"switchC\":\"CLOSED\"},\"cap_capbank3\":{\"capacitor_A\":300000.0,\"capacitor_B\":300000.0,\"capacitor_C\":300000.0,\"control\":\"MANUAL\",\"control_level\":\"INDIVIDUAL\",\"dwell_time\":0.0,\"phases\":\"ABCN\",\"phases_connected\":\"NCBA\",\"pt_phase\":\"\",\"switchA\":\"CLOSED\",\"switchB\":\"CLOSED\",\"switchC\":\"CLOSED\"},\"nd_190-7361\":{\"voltage_A\":\"6410.387411-4584.456974j V\",\"voltage_B\":\"-7198.592139-3270.308372j V\",\"voltage_C\":\"642.547265+7539.531175j V\"},\"nd_190-8581\":{\"voltage_A\":\"6485.244722-4692.686497j V\",\"voltage_B\":\"-7183.641237-3170.693324j V\",\"voltage_C\":\"544.875720+7443.341013j V\"},\"nd_190-8593\":{\"voltage_A\":\"6723.279162-5056.725836j V\",\"voltage_B\":\"-7494.205738-3101.034602j V\",\"voltage_C\":\"630.475857+7534.534977j V\"},\"nd__hvmv_sub_lsb\":{\"voltage_A\":\"6261.474438-3926.148203j V\",\"voltage_B\":\"-6529.409296-3466.545236j V\",\"voltage_C\":\"247.131622+7348.295282j V\"},\"nd_l2673313\":{\"voltage_A\":\"6569.522312-5003.052614j V\",\"voltage_B\":\"-7431.486583-3004.840139j V\",\"voltage_C\":\"644.553331+7464.115915j V\"},\"nd_l2876814\":{\"voltage_A\":\"6593.064915-5014.031801j V\",\"voltage_B\":\"-7430.572726-3003.995538j V\",\"voltage_C\":\"643.473396+7483.558765j V\"},\"nd_l2955047\":{\"voltage_A\":\"5850.305846-4217.166594j V\",\"voltage_B\":\"-6729.652722-2987.617376j V\",\"voltage_C\":\"535.302083+7395.127354j V\"},\"nd_l3160107\":{\"voltage_A\":\"5954.507575-4227.423005j V\",\"voltage_B\":\"-6662.357613-3055.346879j V\",\"voltage_C\":\"600.213657+7317.832960j V\"},\"nd_l3254238\":{\"voltage_A\":\"6271.490549-4631.254028j V\",\"voltage_B\":\"-7169.987847-3099.952683j V\",\"voltage_C\":\"751.609655+7519.062260j V\"},\"nd_m1047574\":{\"voltage_A\":\"6306.632406-4741.568924j V\",\"voltage_B\":\"-7214.626338-2987.055914j V\",\"voltage_C\":\"622.058711+7442.125124j V\"},\"rcon_FEEDER_REG\":{\"Control\":\"MANUAL\",\"PT_phase\":\"CBA\",\"band_center\":126.5,\"band_width\":2.0,\"connect_type\":\"WYE_WYE\",\"control_level\":\"INDIVIDUAL\",\"dwell_time\":15.0,\"lower_taps\":16,\"raise_taps\":16,\"regulation\":0.10000000000000001},\"rcon_VREG2\":{\"Control\":\"MANUAL\",\"PT_phase\":\"CBA\",\"band_center\":125.0,\"band_width\":2.0,\"connect_type\":\"WYE_WYE\",\"control_level\":\"INDIVIDUAL\",\"dwell_time\":15.0,\"lower_taps\":16,\"raise_taps\":16,\"regulation\":0.10000000000000001},\"rcon_VREG3\":{\"Control\":\"MANUAL\",\"PT_phase\":\"CBA\",\"band_center\":125.0,\"band_width\":2.0,\"connect_type\":\"WYE_WYE\",\"control_level\":\"INDIVIDUAL\",\"dwell_time\":15.0,\"lower_taps\":16,\"raise_taps\":16,\"regulation\":0.10000000000000001},\"rcon_VREG4\":{\"Control\":\"MANUAL\",\"PT_phase\":\"CBA\",\"band_center\":125.0,\"band_width\":2.0,\"connect_type\":\"WYE_WYE\",\"control_level\":\"INDIVIDUAL\",\"dwell_time\":15.0,\"lower_taps\":16,\"raise_taps\":16,\"regulation\":0.10000000000000001},\"reg_FEEDER_REG\":{\"configuration\":\"rcon_FEEDER_REG\",\"phases\":\"ABC\",\"tap_A\":2,\"tap_B\":2,\"tap_C\":1,\"to\":\"nd__hvmv_sub_lsb\"},\"reg_VREG2\":{\"configuration\":\"rcon_VREG2\",\"phases\":\"ABC\",\"tap_A\":10,\"tap_B\":6,\"tap_C\":2,\"to\":\"nd_190-8593\"},\"reg_VREG3\":{\"configuration\":\"rcon_VREG3\",\"phases\":\"ABC\",\"tap_A\":16,\"tap_B\":10,\"tap_C\":1,\"to\":\"nd_190-8581\"},\"reg_VREG4\":{\"configuration\":\"rcon_VREG4\",\"phases\":\"ABC\",\"tap_A\":12,\"tap_B\":12,\"tap_C\":5,\"to\":\"nd_190-7361\"},\"xf_hvmv_sub\":{\"power_in_A\":\"1739729.121744-774784.928874j VA\",\"power_in_B\":\"1659762.622236-785218.729252j VA\",\"power_in_C\":\"1709521.679116-849734.584017j VA\"}}}\n"}
  • update

    goss/gridappsd/fncs/input - Sends an update command which can change the capacitor and regulator status within the simulator, this is used by the volt-var optimization application. Parameters include a message field, which contains the simulation name and the desired values for the objects to be updated.

    {"command": "update", "message": {"ieee8500": {"reg_FEEDER_REG": {"tap_C": -3, "tap_B": -2, "tap_A": -1}, "reg_VREG4": {"tap_C": 1, "tap_B": 8, "tap_A": 8}, "reg_VREG2": {"tap_C": -1, "tap_B": 2, "tap_A": 6}, "reg_VREG3": {"tap_C": -3, "tap_B": 6, "tap_A": 12}}}}
  • stop

    goss/gridappsd/fncs/input - Stops the simulator and shuts down the bridge. No additional parameters are required

    {"command": "stop"}

Starting Simulation Using API

GridAPPS-D communicates over a publish subscribe architecture implemented in ActiveMQ. A number of communication protocols are supported, including Openwire, STOMP, and websockets. Many programming languages support communication over these protocols, below are three examples.


The request simulation can be called using the GOSS Client API. The Client API is used to send a run configuration to the GOSS simulation request topic, once the simulation has started it listens to the FNCS output topic for the simulation data.

import org.apache.http.auth.Credentials;
import org.apache.http.auth.UsernamePasswordCredentials;
import pnnl.goss.core.Client;
import pnnl.goss.core.Client.PROTOCOL;
import pnnl.goss.core.ClientFactory;
import pnnl.goss.core.GossResponseEvent;
import pnnl.goss.core.Request.RESPONSE_FORMAT;
import pnnl.goss.core.client.ClientServiceFactory;
import pnnl.goss.gridappsd.dto.PowerSystemConfig;
import pnnl.goss.gridappsd.dto.RequestSimulation;
import pnnl.goss.gridappsd.dto.SimulationConfig;
import pnnl.goss.gridappsd.utils.GridAppsDConstants;

ClientFactory clientFactory = new ClientServiceFactory();

Client client;

//Step1: Create GOSS Client
Credentials credentials = new UsernamePasswordCredentials(
                                username, pw);
client = clientFactory.create(PROTOCOL.STOMP, credentials);

//Create Request Simulation object, you could also just pass in a json string with the configuration
PowerSystemConfig powerSystemConfig = new PowerSystemConfig();
powerSystemConfig.GeographicalRegion_name = "ieee8500_Region";
powerSystemConfig.SubGeographicalRegion_name = "ieee8500_SubRegion";
powerSystemConfig.Line_name = "ieee8500";

SimulationConfig simulationConfig = new SimulationConfig();
simulationConfig.duration = 60;
simulationConfig.power_flow_solver_method = "";
simulationConfig.simulation_id = ""; //.setSimulation_name("");
simulationConfig.simulator = ""; //.setSimulator("");

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
simulationConfig.start_time = sdf.format(new Date()); //.setStart_time("");

RequestSimulation requestSimulation = new RequestSimulation(powerSystemConfig, simulationConfig);

Gson  gson = new Gson();
String request = gson.toJson(requestSimulation);
//Step3: Send configuration to the request simulation topic
String simulationId = client.getResponse(request, GridAppsDConstants.topic_requestSimulation, RESPONSE_FORMAT.JSON)

//Subscribe to bridge output
client.subscribe("goss/gridappsd/fncs/output", new GossResponseEvent() {
    public void onMessage(Serializable response) {
      System.out.println("simulation output is: "+response);


In order to call the simulation API from javascript you will need to install stomp.js In order to start the simulation through the websocket API you will need to send the configuration to the gridappsd simulation topic in the format descibed on the Simulation Request page #simulation-request_

<script src='js/jquery-2.1.4.min.js'></script>
<script src="js/stomp.js" type="text/javascript"></script>
configString = "...........  See developer resources"
simulationTopic = "/queue/goss/gridappsd/process/request/simulation";
gossHost = "gridappsdhost";
//Create client
var client = Stomp.client( "ws://"+gossHost+":61614");

var connect_error_callback = function(error) {
   $("#debug").append("Error "+error + "\n");
var outputCallback = function(message){
   $("#debug").append("Output "+message.body + "\n");
//Make connection with server
client.connect( "username", "pw", connect_callback, connect_error_callback);

var request = JSON.stringify(JSON.parse(configField));
client.send(simulationTopic, {"reply-to" :"/temp-queue/response-queue"}, request);
      client.subscribe("/temp-queue/response-queue", function(message) {
          var simulationId = JSON.parse(message.body);
          $("#debug").append("Received Simulation ID: " +simulationId + "\n");
          client.subscribe("/topic/goss/gridappsd/simulation/status/"+simulationId, statusCallback);
client.subscribe("/topic/goss/gridappsd/fncs/output", outputCallback);

Python The python API requires that you install the package, you can do this using pip with the command pip install For additional documentation see You will need to create a stomp connection, listen to the output topic, and then send a message to start the simulation.

import json
import sys
import stomp
import time

goss_output_topic = '/queue/goss/gridappsd/fncs/output'
goss_simulation_status_topic = '/topic/goss/gridappsd/simulation/status/'
gossConnection= None
isInitialized = None
simulationId = None

class GOSSStatusListener(object):
  def on_message(self, headers, msg):
    message = ''
    print('status ',msg)
  def on_error(self, headers, msg):
    print('simulation status error      ',msg)
class GOSSSimulationStartListener(object):
  def on_message(self, headers, msg):
    message = ''
    print('simulation start ', msg)
    _registerWithGOSS('system','manager', msg,gossServer='localhost',stompPort='61613')
  def on_error(self, headers, msg):
    print('simulation start error     ',msg)

def _registerWithGOSS(username,password,simulationId,gossServer='localhost',
    '''Register with the GOSS server broker and return.

    Function arguments:
        gossServer -- Type: string. Description: The ip location
        for the GOSS server. It must not be an empty string.
            Default: 'localhost'.
        stompPort -- Type: string. Description: The port for Stomp
        protocol for the GOSS server. It must not be an empty string.
            Default: '61613'.
        username -- Type: string. Description: User name for GOSS connection.
        password -- Type: string. Description: Password for GOSS connection.

    Function returns:
    Function exceptions:
    if (gossServer == None or gossServer == ''
            or type(gossServer) != str):
        raise ValueError(
            'gossServer must be a nonempty string.\n'
            + 'gossServer = {0}'.format(gossServer))
    if (stompPort == None or stompPort == ''
            or type(stompPort) != str):
        raise ValueError(
            'stompPort must be a nonempty string.\n'
            + 'stompPort = {0}'.format(stompPort))
    gossConnection = stomp.Connection12([(gossServer, stompPort)])
    gossConnection.set_listener('GOSSStatusListener', GOSSStatusListener())

def _startSimulation(username,password,gossServer='localhost',stompPort='61613'):
    simulationCfg = '{"power_system_config":{"GeographicalRegion_name":"ieee8500nodecktassets_Region","SubGeographicalRegion_name":"ieee8500nodecktassets_SubRegion","Line_name":"ieee8500"}, "simulation_config":{"start_time":"03/07/2017 00:00:00","duration":"60","simulator":"GridLAB-D","simulation_name":"my test simulation","power_flow_solver_method":"FBS"}}'
    if (gossServer == None or gossServer == ''
            or type(gossServer) != str):
        raise ValueError(
            'gossServer must be a nonempty string.\n'
            + 'gossServer = {0}'.format(gossServer))
    if (stompPort == None or stompPort == ''
            or type(stompPort) != str):
        raise ValueError(
            'stompPort must be a nonempty string.\n'
            + 'stompPort = {0}'.format(stompPort))
    gossConnection = stomp.Connection12([(gossServer, stompPort)])
    gossConnection.connect(username,password, wait=True)
    gossConnection.send(body=simulationCfg, destination=goss_simulation_topic, headers={'reply-to': '/queue/reply'})
    print('sent simulation request')

if __name__ == "__main__":
    #TODO: send simulationId, fncsBrokerLocation, gossLocation,
    #stompPort, username and password as command line arguments


Starting Simulation Using Viz Application

In the web-based visualization, click the Play button at the top right to start the simulation using the default run configuration. Behind the scenes this uses the websockets/javascript API described in a previous section.


Logging messages and process status

All processes should publish their log messages with process status to Process Manager. These processes include applications, simulations, services, and test runs.


Log message with process status should be published on the following topic. Process id should be attached to the topic name at the end.


Message structure:

        "process_id": ""
        "timestamp": "",
        "process_status": "[started|stopped|running|error|passed|failed]",
        "log_message": "",
        "log_level": "[info|debug|error]",
        "store_to_db": [true|false]

Receving multiple logs:

User can either receive individual process’s log by subcribing to topics mentioned above or recevie all logs of a type by subcribing to following topics.


Similarly, to receive to all logs subscribe to following topic: