Repository: incubator-edgent
Updated Branches:
  refs/heads/master f05ca87d4 -> a62eb24a0


[EDGENT-178] Console: Update oplet/stream hover popups with detailed stream info


Project: http://git-wip-us.apache.org/repos/asf/incubator-edgent/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-edgent/commit/a62eb24a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-edgent/tree/a62eb24a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-edgent/diff/a62eb24a

Branch: refs/heads/master
Commit: a62eb24a0777a354daba71c4dc67981b8148bfaa
Parents: f05ca87
Author: Queenie Ma <queeniema.apa...@gmail.com>
Authored: Thu Sep 29 08:49:05 2016 -0700
Committer: Queenie Ma <queeniema.apa...@gmail.com>
Committed: Thu Sep 29 16:12:33 2016 -0700

----------------------------------------------------------------------
 console/servlets/webapp_content/js/index.js     | 267 +++++++++++++------
 .../webapp_content/resources/css/main.css       |  34 +--
 2 files changed, 195 insertions(+), 106 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/a62eb24a/console/servlets/webapp_content/js/index.js
----------------------------------------------------------------------
diff --git a/console/servlets/webapp_content/js/index.js 
b/console/servlets/webapp_content/js/index.js
index 5cc3565..0978bd7 100644
--- a/console/servlets/webapp_content/js/index.js
+++ b/console/servlets/webapp_content/js/index.js
@@ -502,14 +502,10 @@ var displayRowsTooltip = function(newRequest) {
                                }
                        }
 
-                       if (newKey === "Name"){
+                       if (newKey === "Name" || newKey === "Tuple count" || 
newKey === "Oplet kind"){
                                content += "<td class='center100' tabindex=0>" 
+ row[newKey] + "</td>";
-                       } else if (newKey === "Tuple count"){
-                               content += "<td class='right' tabindex=0>" + 
row[newKey] + "</td>";
-                       } else if (newKey === "Oplet kind"){
-                               content += "<td class='left' tabindex=0>" + 
row[newKey] + "</td>";
                        } else {
-                               content += "<td class='center' tabindex=0 
style='white-space:nowrap;'>" + row[newKey] + "</td>";
+                               content += "<td class='left' tabindex=0 
style='white-space:nowrap;'>" + row[newKey] + "</td>";
                        }
                }
                firstTime = false;
@@ -701,26 +697,59 @@ var hideStateTooltip = function() {
 var makeRows = function() {
        var nodes = refreshedRowValues !== null ? refreshedRowValues : 
sankey.nodes();
        var theRows = [];
-        nodes.forEach(function(n) {
-                var sources = [];
-                var sourceStreamsMap = new Map();
-                n.targetLinks.forEach(function(trg){
+       nodes.forEach(function(n) {
+               var sourceStreamTupleCountsMap = new Map();
+               var sourceStreamAliasesMap = new Map();
+               var sourceStreamTagsMap = new Map();
+               n.targetLinks.forEach(function(trg) {
                        var source = trg.sourceIdx.idx.toString();
-                       sources.push(source);
-                       if (trg.tags && trg.tags.length > 0) {
-                               sourceStreamsMap.set(source, trg.tags);
-                       }
-                });
-                var targets = [];
-                var targetStreamsMap = new Map();
-                n.sourceLinks.forEach(function(src){
+                       var sourceLinks = trg.sourceIdx.sourceLinks;
+                       for (var i = 0; i < sourceLinks.length; i++) {
+                               if (trg.sourceId == sourceLinks[i].sourceId && 
trg.targetId == sourceLinks[i].targetId) {
+                                       sourceStreamTupleCountsMap.set(source, 
formatNumber(sourceLinks[i].value));
+                                       if 
(sourceLinks[i].hasOwnProperty("alias")) {
+                                               
sourceStreamAliasesMap.set(source, sourceLinks[i].alias);
+                                       } else {
+                                               
sourceStreamAliasesMap.set(source, "");
+                                       }
+                               }
+                       }
+
+                       if (trg.tags && trg.tags.length > 0) {
+                               sourceStreamTagsMap.set(source, trg.tags);
+                       } else {
+                               sourceStreamTagsMap.set(source, []);
+                       }
+               });
+
+               var targetStreamTupleCountsMap = new Map();
+               var targetStreamAliasesMap = new Map();
+               var targetStreamTagsMap = new Map();
+               n.sourceLinks.forEach(function(src) {
                        var target = src.targetIdx.idx.toString();
-                       targets.push(target);
-                       if (src.tags && src.tags.length > 0) {
-                               targetStreamsMap.set(target, src.tags);
-                       }
-                });
+                       var targetLinks = src.targetIdx.targetLinks;
+                       for (var i = 0; i < targetLinks.length; i++) {
+                               if (src.sourceId == targetLinks[i].sourceId && 
src.targetId == targetLinks[i].targetId) {
+                                       targetStreamTupleCountsMap.set(target, 
formatNumber(targetLinks[i].value));
+                                       if 
(targetLinks[i].hasOwnProperty("alias")) {
+                                               
targetStreamAliasesMap.set(target, targetLinks[i].alias);
+                                       } else {
+                                               
targetStreamAliasesMap.set(target, "");
+                                       }
+                               }
+                       }
+
+                       if (src.tags && src.tags.length > 0) {
+                               targetStreamTagsMap.set(target, src.tags);
+                       } else {
+                               targetStreamTagsMap.set(target, []);
+                       }
+               });
+
                var kind = parseOpletKind(n.invocation.kind);
+               var index = kind.indexOf("(");
+               var kindName = kind.substring(0, index-1);
+               var kindPkg = kind.substring(index);
 
                var value = "";
                if (n.derived === true) {
@@ -732,35 +761,51 @@ var makeRows = function() {
                }
                
                var sStreamString = "";
-               if (sourceStreamsMap.size == 0) {
+               if (sourceStreamAliasesMap.size == 0 && 
sourceStreamTagsMap.size == 0) {
                        sStreamString = "None";
-               } else if (sourceStreamsMap.size == 1) {
-                       for (var value of sourceStreamsMap.values()) {
-                               sStreamString = value.join(", ");
-                       }
                } else {
-                       for (var [key, value] of sourceStreamsMap) {
-                               sStreamString += "[" + key + "] " + 
value.join(", ") + "<br/>";
+                       for (var [id, alias] of sourceStreamAliasesMap) {
+                               var tupleCount = 
sourceStreamTupleCountsMap.get(id);
+                               var tags = sourceStreamTagsMap.get(id);
+                               sStreamString += "[" + id + "] ";
+
+                               sStreamString += "<strong>tuples</strong>: " + 
formatNumber(tupleCount);
+
+                               if (alias != "") {
+                                       sStreamString += ", 
<strong>alias</strong>: " + alias;
+                               }
+                               if (tags.length != 0) {
+                                       sStreamString += ", 
<strong>tags</strong>: " + tags.join(", ");
+                               }
+
+                               sStreamString += "<br/>";
                        }
                }
 
                var tStreamString = "";
-               if (targetStreamsMap.size == 0) {
+               if (targetStreamAliasesMap.size == 0 && 
targetStreamTagsMap.size == 0) {
                        tStreamString = "None";
-               } else if (targetStreamsMap.size == 1) {
-                       for (var value of targetStreamsMap.values()) {
-                               tStreamString = value.join(", ");
-                       }
                } else {
-                       for (var [key, value] of targetStreamsMap) {
-                               tStreamString += "[" + key + "] " + 
value.join(", ") + "<br/>";
+                       for (var [id, alias] of targetStreamAliasesMap) {
+                               var tupleCount = 
targetStreamTupleCountsMap.get(id);
+                               var tags = targetStreamTagsMap.get(id);
+                               tStreamString += "[" + id + "] ";
+
+                               tStreamString += "<strong>tuples</strong>: " + 
formatNumber(tupleCount);
+
+                               if (alias != "") {
+                                       tStreamString += ", 
<strong>alias</strong>: " + alias;
+                               }
+                               if (tags.length != 0) {
+                                       tStreamString += ", 
<strong>tags</strong>: " + tags.join(", ");
+                               }
+
+                               tStreamString += "<br/>";
                        }
                }
 
-               var rowObj = {"Name": n.idx, "Oplet kind": kind, "Tuple count": 
formatNumber(n.value), 
-                               "Sources": sources.toString(), "Targets": 
targets.toString(), 
-                               "Source stream tags": sStreamString,
-                               "Target stream tags": tStreamString};
+               var rowObj = {"Name": n.idx, "Oplet kind": kindName + "<br/>" + 
kindPkg, "Tuple count": formatNumber(n.value),
+                               "Source streams": sStreamString, "Target 
streams": tStreamString};
                theRows.push(rowObj);
         });
        return theRows;
@@ -1111,6 +1156,9 @@ var renderGraph = function(jobId, counterMetrics, 
bIsNewJob) {
          if (layerVal === "flow") {
                  retString += "\n" + value; 
          }
+         if (d.alias) {
+                 retString += "\nStream alias: " + d.alias;
+         }
          if (d.tags && d.tags.length > 0) {
                  retString += "\nStream tags: " + d.tags.toString();
          }
@@ -1234,64 +1282,112 @@ var renderGraph = function(jobId, counterMetrics, 
bIsNewJob) {
        svg.selectAll("circle")
        .on("mouseover", function(d, i) {
                var kind = parseOpletKind(d.invocation.kind);
-               var headStr =  "<div><table 
style='table-layout:fixed;word-wrap: break-word;'><tr><th 
class='smaller'>Name</th>" +
-                       "<th class='smaller'>Oplet kind</th><th 
class='smaller'>Tuple count</th><th class='smaller'>Sources</th>" +
-                       "<th class='smaller'>Targets</th><th 
class='smaller'>Source stream tags</th><th class='smaller'>Target stream 
tags</th></tr>";
-               var valueStr = "<tr><td class='smallCenter'>" + 
d.idx.toString() + "</td><td class='smallLeft'>" + kind + "</td><td 
class='smallRight'>" 
-                       + formatNumber(d.value) + "</td>";
-
-               var sources = [];
-               var sourceStreamsMap = new Map();
-               d.targetLinks.forEach(function(trg){
-            var source = trg.sourceIdx.idx.toString();
-            sources.push(source);
-            if (trg.tags && trg.tags.length > 0) {
-                sourceStreamsMap.set(source, trg.tags);
-            }
+               var index = kind.indexOf("(");
+               var kindName = kind.substring(0, index-1);
+               var kindPkg = kind.substring(index);
+               var headStr1 =  "<div style='width:100%;'><table 
style='width:100%;'><tr><th class='smaller'>Name</th>" +
+                       "<th class='smaller'>Oplet kind</th><th 
class='smaller'>Tuple count</th></tr>";
+               var valueStr1 = "<tr><td class='smallCenter'>" + 
d.idx.toString() + "</td><td class='smallCenter'>" + kindName + "<br/>" + 
kindPkg +
+                       "</td><td class='smallCenter'>" + formatNumber(d.value) 
+ "</td></tr></table>";
+
+               var headStr2 =  "<table style='width:100%;'><tr><th 
class='smaller'>Source streams</th>" + "<th class='smaller'>Target 
streams</th></tr>";
+
+               var sourceStreamTupleCountsMap = new Map();
+               var sourceStreamAliasesMap = new Map();
+               var sourceStreamTagsMap = new Map();
+               d.targetLinks.forEach(function(trg) {
+                       var source = trg.sourceIdx.idx.toString();
+                       var sourceLinks = trg.sourceIdx.sourceLinks;
+                       for (var i = 0; i < sourceLinks.length; i++) {
+                               if (trg.sourceId == sourceLinks[i].sourceId && 
trg.targetId == sourceLinks[i].targetId) {
+                                       sourceStreamTupleCountsMap.set(source, 
formatNumber(sourceLinks[i].value));
+                                       if 
(sourceLinks[i].hasOwnProperty("alias")) {
+                                               
sourceStreamAliasesMap.set(source, sourceLinks[i].alias);
+                                       } else {
+                                               
sourceStreamAliasesMap.set(source, "");
+                                       }
+                               }
+                       }
+
+                       if (trg.tags && trg.tags.length > 0) {
+                               sourceStreamTagsMap.set(source, trg.tags);
+                       } else {
+                               sourceStreamTagsMap.set(source, []);
+                       }
                });
-               var targets = [];
-        var targetStreamsMap = new Map();
-               d.sourceLinks.forEach(function(src){
+
+               var targetStreamTupleCountsMap = new Map();
+               var targetStreamAliasesMap = new Map();
+               var targetStreamTagsMap = new Map();
+               d.sourceLinks.forEach(function(src) {
                        var target = src.targetIdx.idx.toString();
-                       targets.push(target);
-                       if (src.tags && src.tags.length > 0) {
-                               targetStreamsMap.set(target, src.tags);
-                       }
-               });
+                       var targetLinks = src.targetIdx.targetLinks;
+                       for (var i = 0; i < targetLinks.length; i++) {
+                               if (src.sourceId == targetLinks[i].sourceId && 
src.targetId == targetLinks[i].targetId) {
+                                       targetStreamTupleCountsMap.set(target, 
formatNumber(targetLinks[i].value));
+                                       if 
(targetLinks[i].hasOwnProperty("alias")) {
+                                               
targetStreamAliasesMap.set(target, targetLinks[i].alias);
+                                       } else {
+                                               
targetStreamAliasesMap.set(target, "");
+                                       }
+                               }
+                       }
 
-               valueStr += "<td class='smallCenter'>" + sources.toString() + 
"</td>";
-               valueStr += "<td class='smallCenter'>" + targets.toString() + 
"</td>";
+                       if (src.tags && src.tags.length > 0) {
+                               targetStreamTagsMap.set(target, src.tags);
+                       } else {
+                               targetStreamTagsMap.set(target, []);
+                       }
+               });
                
                var sStreamString = "";
-               if (sourceStreamsMap.size == 0) {
+               if (sourceStreamAliasesMap.size == 0 && 
sourceStreamTagsMap.size == 0) {
                        sStreamString = "None";
-               } else if (sourceStreamsMap.size == 1) {
-                       for (var value of sourceStreamsMap.values()) {
-                               sStreamString = value.join(", ");
-                       }
                } else {
-                       for (var [key, value] of sourceStreamsMap) {
-                               sStreamString += "[" + key + "] " + 
value.join(", ") + "<br/>";
+                       for (var [id, alias] of sourceStreamAliasesMap) {
+                               var tupleCount = 
sourceStreamTupleCountsMap.get(id);
+                               var tags = sourceStreamTagsMap.get(id);
+                               sStreamString += "[" + id + "] ";
+
+                               sStreamString += "<strong>tuples</strong>: " + 
formatNumber(tupleCount);
+
+                               if (alias != "") {
+                                       sStreamString += ", 
<strong>alias</strong>: " + alias;
+                               }
+                               if (tags.length != 0) {
+                                       sStreamString += ", 
<strong>tags</strong>: " + tags.join(", ");
+                               }
+
+                               sStreamString += "<br/>";
                        }
                }
-               valueStr += "<td class='smallCenter' 
style='white-space:nowrap;'>" + sStreamString + "</td>";
+               var valueStr2 = "<tr><td class='smallLeft'>" + sStreamString + 
"</td>";
 
                var tStreamString = "";
-               if (targetStreamsMap.size == 0) {
+               if (targetStreamAliasesMap.size == 0 && 
targetStreamTagsMap.size == 0) {
                        tStreamString = "None";
-               } else if (targetStreamsMap.size == 1) {
-                       for (var value of targetStreamsMap.values()) {
-                               tStreamString = value.join(", ");
-                       }
                } else {
-                       for (var [key, value] of targetStreamsMap) {
-                               tStreamString += "[" + key + "] " + 
value.join(", ") + "<br/>";
+                       for (var [id, alias] of targetStreamAliasesMap) {
+                               var tupleCount = 
targetStreamTupleCountsMap.get(id);
+                               var tags = targetStreamTagsMap.get(id);
+                               tStreamString += "[" + id + "] ";
+
+                               tStreamString += "<strong>tuples</strong>: " + 
formatNumber(tupleCount);
+
+                               if (alias != "") {
+                                       tStreamString += ", 
<strong>alias</strong>: " + alias;
+                               }
+                               if (tags.length != 0) {
+                                       tStreamString += ", 
<strong>tags</strong>: " + tags.join(", ");
+                               }
+
+                               tStreamString += "<br/>";
                        }
                }
-               valueStr += "<td class='smallCenter' 
style='white-space:nowrap;'>" + tStreamString + "</td>";
+               valueStr2 += "<td class='smallLeft'>" + tStreamString + "</td>";
 
-               valueStr += "</tr></table></div>";
-               var str = headStr + valueStr;
+               valueStr2 += "</tr></table></div>";
+               var str = headStr1 + valueStr1 + headStr2 + valueStr2;
                showTooltip(str, d, i, d3.event);
        })
        .on("mouseout", function(d, i){
@@ -1301,9 +1397,12 @@ var renderGraph = function(jobId, counterMetrics, 
bIsNewJob) {
        svg.selectAll("rect")
        .on("mouseover", function(d, i){
                var kind = parseOpletKind(d.invocation.kind);
+               var index = kind.indexOf("(");
+               var kindName = kind.substring(0, index-1);
+               var kindPkg = kind.substring(index);
                var headStr = "<div><table style='table-layout:fixed;word-wrap: 
break-word;'><tr><th class='smaller'>Name</th>" +
                "<th class='smaller'>Oplet kind</th></tr>";
-               var valueStr = "<tr><td class='smallCenter'>" + 
d.idx.toString() + "</td><td class='smallLeft'>" + kind + 
"</td></tr><table></div>";
+               var valueStr = "<tr><td class='smallCenter'>" + 
d.idx.toString() + "</td><td class='smallCenter'>" + kindName + "<br/>" + 
kindPkg + "</td></tr><table></div>";
                var str = headStr + valueStr;
                showTooltip(str, d, i, d3.event);
        })

http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/a62eb24a/console/servlets/webapp_content/resources/css/main.css
----------------------------------------------------------------------
diff --git a/console/servlets/webapp_content/resources/css/main.css 
b/console/servlets/webapp_content/resources/css/main.css
index 4f7d34d..dc122e6 100644
--- a/console/servlets/webapp_content/resources/css/main.css
+++ b/console/servlets/webapp_content/resources/css/main.css
@@ -175,7 +175,9 @@ label.metricsTitle {
 }
 
 th.smaller {
-       padding: 5px;
+       padding: 3px;
+       font-weight: normal;
+       font-size: 0.95em;
 }
 
 th {
@@ -188,39 +190,29 @@ th {
 td.left {
        padding: 8px;
        text-align: left;
-       width: 150px;
-       word-wrap:break-word;
 }
 
 td.right {
        padding: 8px;
        text-align: right;
-       width: 150px;
-       word-wrap:break-word;
 }
 
-td.smallRight {
-       padding: 5px;
-       text-align: right;
-       word-wrap:break-word;
-       width: 80px;
+td.smallLeft, td.smallCenter, td.smallRight {
+       padding: 3px;
        font-size: 0.85em;
+       white-space: nowrap;
+}
+
+td.smallLeft {
+    text-align: left;
 }
 
 td.smallCenter {
-       padding: 5px;
        text-align: center;
-       word-wrap:break-word;
-       width: 80px;
-       font-size: 0.85em;
 }
 
-td.smallLeft {
-       padding: 5px;
-       text-align: left;
-       word-wrap:break-word;
-       width: 80px;
-       font-size: 0.85em;
+td.smallRight {
+       text-align: right;
 }
 
 td.center {
@@ -233,8 +225,6 @@ td.center {
 td.center100 {
        padding: 8px;
        text-align: center;
-       width: 100px;
-       word-wrap:break-word;
 }
 
 caption {

Reply via email to