function planToDagre()

in samza-shell/src/main/visualizer/js/planToDagre.js [20:87]


function planToDagre(data) {
  // Create the input graph
  var g = new dagreD3.graphlib.Graph()
      .setGraph({
        rankdir: "LR"
      })
      .setDefaultEdgeLabel(function() { return {}; });

  var allStreams = [data.sourceStreams, data.sinkStreams, data.intermediateStreams];
  var streamClasses = ["source", "sink", "intermediate"];
  for (var i = 0; i < allStreams.length; i++) {
    var streams = allStreams[i];
    for (var streamId in streams) {
      var stream = streams[streamId];
      var labelVal = "<div><h3 class=\"topbar\">" + stream.streamSpec.id + "</h3><ul class=\"detailBox\" >"
      labelVal += "<li>SystemName: " + stream.streamSpec.systemName + "</li>"
      labelVal += "<li>PhysicalName: " + stream.streamSpec.physicalName + "</li>"
      labelVal += "<li>PartitionCount: " + stream.streamSpec.partitionCount + "</li>"
      labelVal += "</ul></div>"
      g.setNode(streamId + "-stream",  { label: labelVal, labelType: "html", shape: "ellipse", class: streamClasses[i] });
    }
  }

  var jobs = data.jobs;
  for (var i = 0; i < jobs.length; i++) {
    var operators = jobs[i].operatorGraph.operators;
    for (var opId in operators) {
      var operator = operators[opId];
      var labelVal = "<div><h3 class=\"topbar\">" + operator.opCode + "</h3><ul class=\"detailBox\">";
      var opId = operator.opId;
      labelVal +=  "<li>ID: " + opId + "</li>";
      labelVal +=  "<li>@" + operator.sourceLocation + "</li>";

      var keys = ["opId", "opCode", "sourceLocation", "outputStreamId", "nextOperatorIds"];
      for (var key in operator) {
        if (keys.indexOf(key) === -1) {
          labelVal += "<li>" + key + ": " + operator[key] + "</li>";
        }
      }

      labelVal += "</ul></div>";
      g.setNode(opId,  { label: labelVal, labelType: "html", rx: 5, ry: 5 });
    }
  }

  for (var i = 0; i < jobs.length; i++) {
    var inputs = jobs[i].operatorGraph.inputStreams;
    for (var k = 0; k < inputs.length; k++) {
      var input = inputs[k];
      for (var m = 0; m < input.nextOperatorIds.length; m++) {
        g.setEdge(input.streamId + "-stream", input.nextOperatorIds[m]);
      }
    }

    var operators = jobs[i].operatorGraph.operators;
    for (var opId in operators) {
      var operator = operators[opId];
      for (var j = 0; j < operator.nextOperatorIds.length; j++) {
        g.setEdge(opId, operator.nextOperatorIds[j]);
      }
      if (typeof(operator.outputStreamId) !== 'undefined') {
        g.setEdge(opId, operator.outputStreamId + "-stream");
      }
    }
  }

  return g;
}