You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by se...@apache.org on 2015/09/17 20:20:01 UTC

[29/51] [abbrv] flink git commit: [FLINK-2357] [web dashboard] Adjust view for details of a job

http://git-wip-us.apache.org/repos/asf/flink/blob/c36b3d7a/flink-runtime-web/web-dashboard/web/partials/jobs/completed-jobs.html
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/web/partials/jobs/completed-jobs.html b/flink-runtime-web/web-dashboard/web/partials/jobs/completed-jobs.html
index 07e09c2..b76278d 100644
--- a/flink-runtime-web/web-dashboard/web/partials/jobs/completed-jobs.html
+++ b/flink-runtime-web/web-dashboard/web/partials/jobs/completed-jobs.html
@@ -35,7 +35,7 @@ limitations under the License.
       </tr>
     </thead>
     <tbody>
-      <tr ng-repeat="job in jobs" ui-sref="single-job.plan({ jobid: job.jid })">
+      <tr ng-repeat="job in jobs" ui-sref="single-job.plan.overview({ jobid: job.jid })">
         <td>{{job['start-time'] | amDateFormat:'YYYY-MM-DD, H:mm:ss'}}</td>
         <td>{{job['end-time'] | amDateFormat:'YYYY-MM-DD, H:mm:ss'}}</td>
         <td>{{job.duration}} ms</td>

http://git-wip-us.apache.org/repos/asf/flink/blob/c36b3d7a/flink-runtime-web/web-dashboard/web/partials/jobs/job.exceptions.html
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/web/partials/jobs/job.exceptions.html b/flink-runtime-web/web-dashboard/web/partials/jobs/job.exceptions.html
index bcaef0d..a5f6676 100644
--- a/flink-runtime-web/web-dashboard/web/partials/jobs/job.exceptions.html
+++ b/flink-runtime-web/web-dashboard/web/partials/jobs/job.exceptions.html
@@ -17,7 +17,7 @@ See the License for the specific language governing permissions and
 limitations under the License.
 
 -->
-<div class="panel panel-default panel-multi">
+<div ng-if="exceptions['root-exception']" class="panel panel-default panel-multi">
   <div class="panel-heading clearfix">
     <div class="panel-title">Root exception</div>
   </div>

http://git-wip-us.apache.org/repos/asf/flink/blob/c36b3d7a/flink-runtime-web/web-dashboard/web/partials/jobs/job.html
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/web/partials/jobs/job.html b/flink-runtime-web/web-dashboard/web/partials/jobs/job.html
index ed10feb..9d3e171 100644
--- a/flink-runtime-web/web-dashboard/web/partials/jobs/job.html
+++ b/flink-runtime-web/web-dashboard/web/partials/jobs/job.html
@@ -35,10 +35,11 @@ limitations under the License.
 </nav>
 <nav ng-if="job" class="navbar navbar-default navbar-fixed-top navbar-main-additional">
   <ul class="nav nav-tabs">
-    <li ui-sref-active="active"><a ui-sref=".plan">Plan</a></li>
+    <li ui-sref-active="active"><a ui-sref=".plan.overview">Plan</a></li>
     <li ui-sref-active="active"><a ui-sref=".statistics">Job Accumulators / Statistics</a></li>
     <li ui-sref-active="active"><a ui-sref=".timeline">Timeline</a></li>
     <li ui-sref-active="active"><a ui-sref=".exceptions">Exceptions</a></li>
+    <li ui-sref-active="active"><a ui-sref=".properties">Properties</a></li>
     <li ui-sref-active="active"><a ui-sref=".config">Configuration</a></li>
   </ul>
 </nav>

http://git-wip-us.apache.org/repos/asf/flink/blob/c36b3d7a/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.html
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.html b/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.html
index 34ad7a9..f2c4143 100644
--- a/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.html
+++ b/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.html
@@ -18,6 +18,14 @@ limitations under the License.
 
 -->
 <div class="canvas-wrapper">
-  <div job-plan="job-plan" plan="plan" jobid="{{jobid}}" class="main-canvas"></div>
+  <div job-plan="job-plan" plan="plan" jobid="{{jobid}}" set-node="changeNode(nodeid)" class="main-canvas"></div>
 </div>
-<div ui-view="node-tabs"></div>
\ No newline at end of file
+<div ng-if="plan" class="panel panel-default panel-multi">
+  <nav class="navbar navbar-default navbar-secondary-additional">
+    <ul class="nav nav-tabs">
+      <li ui-sref-active="active"><a ui-sref=".overview({nodeid: nodeid})">Overview</a></li>
+      <li ui-sref-active="active"><a ui-sref=".accumulators({nodeid: nodeid})">Accumulators</a></li>
+    </ul>
+  </nav>
+  <div ui-view="node-details" class="panel-body clean"></div>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/c36b3d7a/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node-list.accumulators.html
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node-list.accumulators.html b/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node-list.accumulators.html
new file mode 100644
index 0000000..e3a20e3
--- /dev/null
+++ b/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node-list.accumulators.html
@@ -0,0 +1,40 @@
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-->
+<table class="table table-body-hover table-clickable table-activable">
+  <thead>
+    <tr>
+      <th>Name</th>
+      <th>Status</th>
+    </tr>
+  </thead>
+  <tbody ng-repeat="v in job.vertices" ng-class="{ active: v.id == nodeid }" ng-click="changeNode(v.id)">
+    <tr>
+      <td>{{ v.name | humanizeText }}</td>
+      <td> 
+        <bs-label status="{{v.status}}">{{v.status}}</bs-label>
+      </td>
+    </tr>
+    <tr ng-if="nodeid &amp;&amp; v.id == nodeid">
+      <td colspan="10">
+        <div ng-include=" 'partials/jobs/job.plan.node.accumulators.html' "></div>
+      </td>
+    </tr>
+  </tbody>
+</table>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/c36b3d7a/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node-list.html
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node-list.html b/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node-list.html
deleted file mode 100644
index 27e965a..0000000
--- a/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node-list.html
+++ /dev/null
@@ -1,69 +0,0 @@
-
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
--->
-<table class="table table-body-hover table-clickable table-activable">
-  <thead>
-    <tr>
-      <th class="tab-column"></th>
-      <th>Start Time</th>
-      <th>End Time</th>
-      <th>Duration</th>
-      <th>Name</th>
-      <th>Bytes read</th>
-      <th>Records read</th>
-      <th>Bytes written</th>
-      <th>Records written</th>
-      <th>Tasks</th>
-      <th>Status</th>
-    </tr>
-  </thead>
-  <tbody ng-repeat="v in job.vertices" ng-class="{ active: job.currentNode &amp;&amp; v.id == job.currentNode.id }" ui-sref="{nodeid: v.id}">
-    <tr>
-      <td class="tab-column">
-        <ul ng-if="job.currentNode &amp;&amp; v.id == job.currentNode.id" class="nav nav-tabs tabs-vertical">
-          <li ng-class="{ active: ('single-job.plan.node.generic' | isState) }"><a ng-click="gotoGeneric(v.id)" title="Basic"><i class="fa fa-tasks"></i></a></li>
-          <li ng-class="{ active: ('single-job.plan.node.accumulators' | isState) }"><a ng-click="gotoAccumulators(v.id)" title="Accumulators"><i class="fa fa-calculator"></i></a></li>
-        </ul>
-      </td>
-      <td><span ng-if="v['start-time'] &gt; -1">{{ v['start-time'] | amDateFormat:'YYYY-MM-DD, H:mm:ss' }}</span></td>
-      <td><span ng-if="v['end-time'] &gt; -1">{{ v['end-time'] | amDateFormat:'YYYY-MM-DD, H:mm:ss' }}</span></td>
-      <td><span ng-if="v.duration &gt; -1">{{ v.duration }} ms</span></td>
-      <td>{{ v.name | humanizeTaskName }}</td>
-      <td>{{ v.metrics['read-bytes'] }}</td>
-      <td>{{ v.metrics['read-records'] }}</td>
-      <td>{{ v.metrics['write-bytes'] }}</td>
-      <td>{{ v.metrics['write-records'] }}</td>
-      <td>
-        <div class="label-group">
-          <bs-label status="{{status}}" ng-repeat="(index, status) in stateList">{{v.tasks[status]}}</bs-label>
-        </div>
-      </td>
-      <td> 
-        <bs-label status="{{v.status}}">{{v.status}}</bs-label>
-      </td>
-    </tr>
-    <tr ng-if="job.currentNode &amp;&amp; v.id == job.currentNode.id">
-      <td class="tab-column"></td>
-      <td colspan="10">
-        <div ng-if="'single-job.plan.node.generic' | isState" ng-include=" 'partials/jobs/job.plan.node.subtasks.html' "></div>
-        <div ng-if="'single-job.plan.node.accumulators' | isState" ng-include=" 'partials/jobs/job.plan.node.accumulators.html' "></div>
-      </td>
-    </tr>
-  </tbody>
-</table>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/c36b3d7a/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node-list.overview.html
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node-list.overview.html b/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node-list.overview.html
new file mode 100644
index 0000000..01440f8
--- /dev/null
+++ b/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node-list.overview.html
@@ -0,0 +1,60 @@
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-->
+<table class="table table-body-hover table-clickable table-activable">
+  <thead>
+    <tr>
+      <th>Start Time</th>
+      <th>End Time</th>
+      <th>Duration</th>
+      <th>Name</th>
+      <th>Bytes read</th>
+      <th>Records read</th>
+      <th>Bytes written</th>
+      <th>Records written</th>
+      <th>Tasks</th>
+      <th>Status</th>
+    </tr>
+  </thead>
+  <tbody ng-repeat="v in job.vertices" ng-class="{ active: v.id == nodeid }" ng-click="changeNode(v.id)">
+    <tr>
+      <td><span ng-if="v['start-time'] &gt; -1">{{ v['start-time'] | amDateFormat:'YYYY-MM-DD, H:mm:ss' }}</span></td>
+      <td><span ng-if="v['end-time'] &gt; -1">{{ v['end-time'] | amDateFormat:'YYYY-MM-DD, H:mm:ss' }}</span></td>
+      <td><span ng-if="v.duration &gt; -1">{{ v.duration }} ms</span></td>
+      <td class="td-long">{{ v.name | humanizeText }}</td>
+      <td>{{ v.metrics['read-bytes'] }}</td>
+      <td>{{ v.metrics['read-records'] }}</td>
+      <td>{{ v.metrics['write-bytes'] }}</td>
+      <td>{{ v.metrics['write-records'] }}</td>
+      <td>
+        <div class="label-group">
+          <bs-label status="{{status}}" ng-repeat="(index, status) in stateList">{{v.tasks[status]}}</bs-label>
+        </div>
+      </td>
+      <td> 
+        <bs-label status="{{v.status}}">{{v.status}}</bs-label>
+      </td>
+    </tr>
+    <tr ng-if="nodeid &amp;&amp; v.id == nodeid">
+      <td colspan="10">
+        <div ng-include=" 'partials/jobs/job.plan.node.subtasks.html' "></div>
+      </td>
+    </tr>
+  </tbody>
+</table>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/c36b3d7a/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node-tabs.html
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node-tabs.html b/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node-tabs.html
deleted file mode 100644
index 15a8638..0000000
--- a/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node-tabs.html
+++ /dev/null
@@ -1,13 +0,0 @@
-
-<div ng-if="node" class="panel panel-default panel-multi">
-  <nav ng-if="job.currentNode" class="navbar navbar-default navbar-secondary-additional">
-    <ul class="nav nav-tabs">
-      <li ui-sref-active="active"><a ui-sref=".generic({nodeid: nodeid})">Subtasks</a></li>
-      <li ui-sref-active="active"><a ui-sref=".properties({nodeid: nodeid})">Properties</a></li>
-    </ul>
-  </nav>
-  <div ng-if="'single-job.plan.node.properties' | isState" class="panel-heading clearfix">
-    <div class="panel-title">{{ node.description | humanizeTaskName }}</div>
-  </div>
-  <div ui-view="node-details" class="panel-body clean"></div>
-</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/c36b3d7a/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node.accumulators.html
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node.accumulators.html b/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node.accumulators.html
index 16ca93a..6a79a7b 100644
--- a/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node.accumulators.html
+++ b/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node.accumulators.html
@@ -17,4 +17,24 @@ See the License for the specific language governing permissions and
 limitations under the License.
 
 -->
-<h3>Accumulators</h3>
\ No newline at end of file
+<div ng-if="vertex">
+  <div ng-if="vertex.accumulators.length == 0">
+    <p><i>No accumulators</i></p>
+  </div>
+  <table ng-if="vertex.accumulators.length &gt; 0" class="table table-hover table-clickable table-activable table-inner">
+    <thead>
+      <tr>
+        <th>Name</th>
+        <th>Type</th>
+        <th>Value</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr ng-repeat="accumulator in vertex.accumulators">
+        <td>{{ accumulator.name }}</td>
+        <td>{{ accumulator.type }}</td>
+        <td>{{ accumulator.value }}</td>
+      </tr>
+    </tbody>
+  </table>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/c36b3d7a/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node.html
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node.html b/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node.html
deleted file mode 100644
index f97b077..0000000
--- a/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node.html
+++ /dev/null
@@ -1,44 +0,0 @@
-
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
--->
-<div ng-if="node" class="panel panel-default panel-multi">
-  <div class="panel-heading clearfix">
-    <div class="panel-title">{{ node.operator }}</div>
-    <div class="panel-info first">ID: {{ node.id }}</div>
-    <div ng-if="node.description" class="panel-info">
-      <div class="label-group">
-        <bs-label status="{{status}}" ng-repeat="(index, status) in stateList">{{node.vertex.tasks[status]}}</bs-label>
-      </div>
-    </div>
-  </div>
-  <div class="panel-heading clearfix">
-    <div ng-if="node.description" class="panel-info thin last"><span>{{ vertex.name | humanizeTaskName }}</span>
-    </div>
-  </div>
-  <nav class="navbar navbar-default navbar-secondary-additional">
-    <ul class="nav nav-tabs">
-      <li ui-sref-active="active"><a ui-sref=".subtasks">Subtasks</a></li>
-      <li ui-sref-active="active"><a ui-sref=".properties">Properties</a></li>
-      <li ui-sref-active="active"><a ui-sref=".accumulators">Accumulators</a></li>
-    </ul>
-  </nav>
-  <div class="panel-body clean">
-    <div ui-view="nodeTab"></div>
-  </div>
-</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/c36b3d7a/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node.properties.html
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node.properties.html b/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node.properties.html
deleted file mode 100644
index dce9fe5..0000000
--- a/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node.properties.html
+++ /dev/null
@@ -1,130 +0,0 @@
-
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
--->
-<div class="row">
-  <div class="col-sm-6 col-md-4">
-    <table ng-if="node.optimizer_properties.global_properties" class="table table-properties">
-      <thead>
-        <tr>
-          <th colspan="2">Global Data Properties</th>
-        </tr>
-      </thead>
-      <tbody>
-        <tr ng-repeat="property in node.optimizer_properties.global_properties">
-          <td>{{property.name}}</td>
-          <td table-property="table-property" value="property.value"></td>
-        </tr>
-      </tbody>
-    </table>
-    <table ng-if="node.optimizer_properties.local_properties" class="table table-properties">
-      <thead>
-        <tr>
-          <th colspan="2">Local Data Properties</th>
-        </tr>
-      </thead>
-      <tbody>
-        <tr ng-repeat="property in node.optimizer_properties.local_properties">
-          <td>{{property.name}}</td>
-          <td table-property="table-property" value="property.value"></td>
-        </tr>
-      </tbody>
-    </table>
-    <div class="visible-xs visible-sm">
-      <table class="table table-properties">
-        <thead>
-          <tr>
-            <th colspan="2">Properties</th>
-          </tr>
-        </thead>
-        <tbody>
-          <tr>
-            <td>Operator</td>
-            <td table-property="table-property" value="node.operator_strategy"></td>
-          </tr>
-          <tr>
-            <td>Parallelism</td>
-            <td table-property="table-property" value="node.parallelism"></td>
-          </tr>
-        </tbody>
-      </table>
-    </div>
-  </div>
-  <div class="hidden-sm col-md-4">
-    <table class="table table-properties">
-      <thead>
-        <tr>
-          <th colspan="2">Properties</th>
-        </tr>
-      </thead>
-      <tbody>
-        <tr>
-          <td>Operator</td>
-          <td table-property="table-property" value="node.operator_strategy"></td>
-        </tr>
-        <tr>
-          <td>Parallelism</td>
-          <td table-property="table-property" value="node.parallelism"></td>
-        </tr>
-      </tbody>
-    </table>
-    <table ng-if="node.optimizer_properties.estimates" class="table table-properties">
-      <thead>
-        <tr>
-          <th colspan="2">Size Estimates</th>
-        </tr>
-      </thead>
-      <tbody>
-        <tr ng-repeat="property in node.optimizer_properties.estimates">
-          <td>{{property.name}}</td>
-          <td table-property="table-property" value="property.value"></td>
-        </tr>
-      </tbody>
-    </table>
-  </div>
-  <div class="col-sm-6 col-md-4">
-    <div class="visible-xs visible-sm">
-      <table ng-if="node.optimizer_properties.estimates" class="table table-properties">
-        <thead>
-          <tr>
-            <th colspan="2">Size Estimates</th>
-          </tr>
-        </thead>
-        <tbody>
-          <tr ng-repeat="property in node.optimizer_properties.estimates">
-            <td>{{property.name}}</td>
-            <td table-property="table-property" value="property.value"></td>
-          </tr>
-        </tbody>
-      </table>
-    </div>
-    <table ng-if="node.optimizer_properties.costs" class="table table-properties">
-      <thead>
-        <tr>
-          <th colspan="2">Cost Estimates</th>
-        </tr>
-      </thead>
-      <tbody>
-        <tr ng-repeat="property in node.optimizer_properties.costs">
-          <td>{{property.name}}</td>
-          <td table-property="table-property" value="property.value"></td>
-        </tr>
-      </tbody>
-    </table>
-  </div>
-</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/c36b3d7a/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node.subtasks.html
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node.subtasks.html b/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node.subtasks.html
index 594e080..451c3a5 100644
--- a/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node.subtasks.html
+++ b/flink-runtime-web/web-dashboard/web/partials/jobs/job.plan.node.subtasks.html
@@ -18,7 +18,7 @@ limitations under the License.
 
 
 -->
-<table class="table table-hover table-clickable table-activable table-inner">
+<table ng-if="vertex" class="table table-hover table-clickable table-activable table-inner">
   <thead>
     <tr>
       <th>Start Time</th>

http://git-wip-us.apache.org/repos/asf/flink/blob/c36b3d7a/flink-runtime-web/web-dashboard/web/partials/jobs/job.properties.html
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/web/partials/jobs/job.properties.html b/flink-runtime-web/web-dashboard/web/partials/jobs/job.properties.html
new file mode 100644
index 0000000..907afd3
--- /dev/null
+++ b/flink-runtime-web/web-dashboard/web/partials/jobs/job.properties.html
@@ -0,0 +1,140 @@
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-->
+<div class="canvas-wrapper">
+  <div job-plan="job-plan" plan="plan" jobid="{{jobid}}" set-node="changeNode(nodeid)" class="main-canvas"></div>
+</div>
+<div ng-if="node" class="panel panel-default">
+  <div class="panel-heading clearfix">
+    <div class="panel-title">{{ node.description | humanizeText }}</div>
+  </div>
+  <div class="panel-body clean">
+    <div class="row">
+      <div class="col-sm-6 col-md-4">
+        <table ng-if="node.optimizer_properties.global_properties" class="table table-properties">
+          <thead>
+            <tr>
+              <th colspan="2">Global Data Properties</th>
+            </tr>
+          </thead>
+          <tbody>
+            <tr ng-repeat="property in node.optimizer_properties.global_properties">
+              <td>{{property.name}}</td>
+              <td table-property="table-property" value="property.value"></td>
+            </tr>
+          </tbody>
+        </table>
+        <table ng-if="node.optimizer_properties.local_properties" class="table table-properties">
+          <thead>
+            <tr>
+              <th colspan="2">Local Data Properties</th>
+            </tr>
+          </thead>
+          <tbody>
+            <tr ng-repeat="property in node.optimizer_properties.local_properties">
+              <td>{{property.name}}</td>
+              <td table-property="table-property" value="property.value"></td>
+            </tr>
+          </tbody>
+        </table>
+        <div class="visible-xs visible-sm">
+          <table class="table table-properties">
+            <thead>
+              <tr>
+                <th colspan="2">Properties</th>
+              </tr>
+            </thead>
+            <tbody>
+              <tr>
+                <td>Operator</td>
+                <td table-property="table-property" value="node.operator_strategy"></td>
+              </tr>
+              <tr>
+                <td>Parallelism</td>
+                <td table-property="table-property" value="node.parallelism"></td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+      </div>
+      <div class="hidden-sm col-md-4">
+        <table class="table table-properties">
+          <thead>
+            <tr>
+              <th colspan="2">Properties</th>
+            </tr>
+          </thead>
+          <tbody>
+            <tr>
+              <td>Operator</td>
+              <td table-property="table-property" value="node.operator_strategy"></td>
+            </tr>
+            <tr>
+              <td>Parallelism</td>
+              <td table-property="table-property" value="node.parallelism"></td>
+            </tr>
+          </tbody>
+        </table>
+        <table ng-if="node.optimizer_properties.estimates" class="table table-properties">
+          <thead>
+            <tr>
+              <th colspan="2">Size Estimates</th>
+            </tr>
+          </thead>
+          <tbody>
+            <tr ng-repeat="property in node.optimizer_properties.estimates">
+              <td>{{property.name}}</td>
+              <td table-property="table-property" value="property.value"></td>
+            </tr>
+          </tbody>
+        </table>
+      </div>
+      <div class="col-sm-6 col-md-4">
+        <div class="visible-xs visible-sm">
+          <table ng-if="node.optimizer_properties.estimates" class="table table-properties">
+            <thead>
+              <tr>
+                <th colspan="2">Size Estimates</th>
+              </tr>
+            </thead>
+            <tbody>
+              <tr ng-repeat="property in node.optimizer_properties.estimates">
+                <td>{{property.name}}</td>
+                <td table-property="table-property" value="property.value"></td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+        <table ng-if="node.optimizer_properties.costs" class="table table-properties">
+          <thead>
+            <tr>
+              <th colspan="2">Cost Estimates</th>
+            </tr>
+          </thead>
+          <tbody>
+            <tr ng-repeat="property in node.optimizer_properties.costs">
+              <td>{{property.name}}</td>
+              <td table-property="table-property" value="property.value"></td>
+            </tr>
+          </tbody>
+        </table>
+      </div>
+    </div>
+  </div>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/c36b3d7a/flink-runtime-web/web-dashboard/web/partials/jobs/job.timeline.vertex.html
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/web/partials/jobs/job.timeline.vertex.html b/flink-runtime-web/web-dashboard/web/partials/jobs/job.timeline.vertex.html
index 36f38ab..1a4bd06 100644
--- a/flink-runtime-web/web-dashboard/web/partials/jobs/job.timeline.vertex.html
+++ b/flink-runtime-web/web-dashboard/web/partials/jobs/job.timeline.vertex.html
@@ -19,7 +19,7 @@ limitations under the License.
 -->
 <div ng-if="vertex" class="panel panel-default panel-multi">
   <div class="panel-heading clearfix">
-    <div class="panel-title">{{ vertex.groupvertex.groupvertexname | humanizeTaskName }}</div>
+    <div class="panel-title">{{ vertex.groupvertex.groupvertexname | humanizeText }}</div>
   </div>
   <div class="panel-body">
     <div class="canvas-wrapper">

http://git-wip-us.apache.org/repos/asf/flink/blob/c36b3d7a/flink-runtime-web/web-dashboard/web/partials/jobs/running-jobs.html
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/web/partials/jobs/running-jobs.html b/flink-runtime-web/web-dashboard/web/partials/jobs/running-jobs.html
index edd524f..e175d07 100644
--- a/flink-runtime-web/web-dashboard/web/partials/jobs/running-jobs.html
+++ b/flink-runtime-web/web-dashboard/web/partials/jobs/running-jobs.html
@@ -35,7 +35,7 @@ limitations under the License.
       </tr>
     </thead>
     <tbody>
-      <tr ng-repeat="job in jobs" ui-sref="single-job.plan({ jobid: job.jid })">
+      <tr ng-repeat="job in jobs" ui-sref="single-job.plan.overview({ jobid: job.jid })">
         <td>{{job['start-time'] | amDateFormat:'YYYY-MM-DD, H:mm:ss'}}</td>
         <td>{{job['end-time'] | amDateFormat:'YYYY-MM-DD, H:mm:ss'}}</td>
         <td>{{job.duration}} ms</td>

http://git-wip-us.apache.org/repos/asf/flink/blob/c36b3d7a/flink-runtime-web/web-dashboard/web/partials/overview.html
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/web/partials/overview.html b/flink-runtime-web/web-dashboard/web/partials/overview.html
index c88b779..ec3c580 100644
--- a/flink-runtime-web/web-dashboard/web/partials/overview.html
+++ b/flink-runtime-web/web-dashboard/web/partials/overview.html
@@ -92,7 +92,7 @@ limitations under the License.
           </tr>
         </thead>
         <tbody>
-          <tr ng-repeat="job in runningJobs" ui-sref="single-job.plan({ jobid: job.jid })">
+          <tr ng-repeat="job in runningJobs" ui-sref="single-job.plan.overview({ jobid: job.jid })">
             <td>{{job['start-time'] | amDateFormat:'YYYY-MM-DD, H:mm:ss'}}</td>
             <td>{{job['end-time'] | amDateFormat:'YYYY-MM-DD, H:mm:ss'}}</td>
             <td>{{job.duration}} ms</td>
@@ -127,7 +127,7 @@ limitations under the License.
           </tr>
         </thead>
         <tbody>
-          <tr ng-repeat="job in finishedJobs" ui-sref="single-job.plan({ jobid: job.jid })">
+          <tr ng-repeat="job in finishedJobs" ui-sref="single-job.plan.overview({ jobid: job.jid })">
             <td>{{job['start-time'] | amDateFormat:'YYYY-MM-DD, H:mm:ss'}}</td>
             <td>{{job['end-time'] | amDateFormat:'YYYY-MM-DD, H:mm:ss'}}</td>
             <td>{{job.duration}} ms</td>