flink-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From u..@apache.org
Subject [3/3] flink git commit: [FLINK-2729] [web-dashboard] Add TaskManager overview
Date Wed, 23 Sep 2015 09:36:28 GMT
[FLINK-2729] [web-dashboard] Add TaskManager overview

[FLINK-2729] [web-dashboard] Rename 'task-managers' => 'taskmanagers'

This closes #1164


Project: http://git-wip-us.apache.org/repos/asf/flink/repo
Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/7825461e
Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/7825461e
Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/7825461e

Branch: refs/heads/master
Commit: 7825461ed517021a144d9afdeec0e96bdd65c63c
Parents: b5a3f55
Author: Piotr Godek <piotr.godek@gmail.com>
Authored: Mon Sep 21 23:07:43 2015 +0200
Committer: Ufuk Celebi <uce@apache.org>
Committed: Wed Sep 23 11:35:51 2015 +0200

----------------------------------------------------------------------
 .../runtime/webmonitor/WebRuntimeMonitor.java   |   3 +
 .../handlers/TaskManagersHandler.java           | 103 ++++++++++
 flink-runtime-web/web-dashboard/app/index.jade  |   5 +
 .../app/partials/taskmanagers/index.jade        |  55 ++++++
 .../app/partials/taskmanagers/metrics.jade      | 163 +++++++++++++++
 .../app/scripts/common/filters.coffee           |   8 +
 .../web-dashboard/app/scripts/index.coffee      |   7 +
 .../taskmanagers/taskmanagers.ctrl.coffee       |  39 ++++
 .../taskmanagers/taskmanagers.svc.coffee        |  31 +++
 .../web-dashboard/app/styles/index.styl         |  41 ++++
 .../web-dashboard/app/styles/job.styl           |  44 -----
 .../web-dashboard/web/css/index.css             |  87 ++++----
 flink-runtime-web/web-dashboard/web/index.html  |   2 +
 flink-runtime-web/web-dashboard/web/js/index.js | 102 +++++++---
 .../web/partials/taskmanagers/index.html        |  62 ++++++
 .../web/partials/taskmanagers/metrics.html      | 197 +++++++++++++++++++
 16 files changed, 840 insertions(+), 109 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flink/blob/7825461e/flink-runtime-web/src/main/java/org/apache/flink/runtime/webmonitor/WebRuntimeMonitor.java
----------------------------------------------------------------------
diff --git a/flink-runtime-web/src/main/java/org/apache/flink/runtime/webmonitor/WebRuntimeMonitor.java
b/flink-runtime-web/src/main/java/org/apache/flink/runtime/webmonitor/WebRuntimeMonitor.java
index a34823e..1f10a73 100644
--- a/flink-runtime-web/src/main/java/org/apache/flink/runtime/webmonitor/WebRuntimeMonitor.java
+++ b/flink-runtime-web/src/main/java/org/apache/flink/runtime/webmonitor/WebRuntimeMonitor.java
@@ -55,6 +55,7 @@ import org.apache.flink.runtime.webmonitor.handlers.SubtaskExecutionAttemptAccum
 import org.apache.flink.runtime.webmonitor.handlers.SubtaskExecutionAttemptDetailsHandler;
 import org.apache.flink.runtime.webmonitor.handlers.SubtasksAllAccumulatorsHandler;
 import org.apache.flink.runtime.webmonitor.handlers.SubtasksTimesHandler;
+import org.apache.flink.runtime.webmonitor.handlers.TaskManagersHandler;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -182,6 +183,8 @@ public class WebRuntimeMonitor implements WebMonitor {
 			.GET("/jobs/:jobid/exceptions", handler(new JobExceptionsHandler(currentGraphs)))
 			.GET("/jobs/:jobid/accumulators", handler(new JobAccumulatorsHandler(currentGraphs)))
 
+			.GET("/taskmanagers", handler(new TaskManagersHandler(retriever, DEFAULT_REQUEST_TIMEOUT)))
+
 			// this handler serves all the static contents
 			.GET("/:*", new StaticFileServerHandler(webRootDir));
 	}

http://git-wip-us.apache.org/repos/asf/flink/blob/7825461e/flink-runtime-web/src/main/java/org/apache/flink/runtime/webmonitor/handlers/TaskManagersHandler.java
----------------------------------------------------------------------
diff --git a/flink-runtime-web/src/main/java/org/apache/flink/runtime/webmonitor/handlers/TaskManagersHandler.java
b/flink-runtime-web/src/main/java/org/apache/flink/runtime/webmonitor/handlers/TaskManagersHandler.java
new file mode 100644
index 0000000..988531a
--- /dev/null
+++ b/flink-runtime-web/src/main/java/org/apache/flink/runtime/webmonitor/handlers/TaskManagersHandler.java
@@ -0,0 +1,103 @@
+/*
+ * 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.
+ */
+
+package org.apache.flink.runtime.webmonitor.handlers;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import org.apache.flink.runtime.instance.ActorGateway;
+import org.apache.flink.runtime.instance.Instance;
+import org.apache.flink.runtime.messages.JobManagerMessages;
+import org.apache.flink.runtime.webmonitor.JobManagerArchiveRetriever;
+import org.apache.flink.runtime.messages.JobManagerMessages.RegisteredTaskManagers;
+import scala.concurrent.Await;
+import scala.concurrent.Future;
+import scala.concurrent.duration.FiniteDuration;
+
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class TaskManagersHandler implements  RequestHandler, RequestHandler.JsonResponse
{
+
+	private final JobManagerArchiveRetriever retriever;
+
+	private final FiniteDuration timeout;
+
+
+	public TaskManagersHandler(JobManagerArchiveRetriever retriever, FiniteDuration timeout)
{
+		if (retriever == null || timeout == null) {
+			throw new NullPointerException();
+		}
+		this.retriever = retriever;
+		this.timeout = timeout;
+	}
+
+	@Override
+	public String handleRequest(Map<String, String> params) throws Exception {
+		try {
+			ActorGateway jobManager = retriever.getJobManagerGateway();
+
+			if (jobManager != null) {
+				Future<Object> future = jobManager.ask(JobManagerMessages.getRequestRegisteredTaskManagers(),
timeout);
+				RegisteredTaskManagers taskManagers = (RegisteredTaskManagers) Await.result(future, timeout);
+
+				final List<Instance> instances = new ArrayList<Instance>(taskManagers.asJavaCollection());
+
+				StringWriter writer = new StringWriter();
+				JsonGenerator gen = JsonFactory.jacksonFactory.createJsonGenerator(writer);
+
+				gen.writeStartObject();
+				gen.writeArrayFieldStart("taskmanagers");
+
+				for (Instance instance : instances) {
+					gen.writeStartObject();
+					gen.writeStringField("id", instance.getId().toString());
+					gen.writeStringField("path", instance.getActorGateway().path());
+					gen.writeNumberField("dataPort", instance.getInstanceConnectionInfo().dataPort());
+					gen.writeNumberField("timeSinceLastHeartbeat", instance.getLastHeartBeat());
+					gen.writeNumberField("slotsNumber", instance.getTotalNumberOfSlots());
+					gen.writeNumberField("freeSlots", instance.getNumberOfAvailableSlots());
+					gen.writeNumberField("cpuCores", instance.getResources().getNumberOfCPUCores());
+					gen.writeNumberField("physicalMemory", instance.getResources().getSizeOfPhysicalMemory());
+					gen.writeNumberField("freeMemory", instance.getResources().getSizeOfJvmHeap());
+					gen.writeNumberField("managedMemory", instance.getResources().getSizeOfManagedMemory());
+
+					byte[] report = instance.getLastMetricsReport();
+					if (report != null) {
+						gen.writeFieldName("metrics");
+						gen.writeRawValue(new String(report, "utf-8"));
+					}
+
+					gen.writeEndObject();
+				}
+
+				gen.writeEndArray();
+				gen.writeEndObject();
+
+				gen.close();
+				return writer.toString();
+			} else {
+				throw new Exception("No connection to the leading JobManager.");
+			}
+		}
+		catch (Exception e) {
+			throw new RuntimeException("Failed to fetch list of all task managers: " + e.getMessage(),
e);
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/flink/blob/7825461e/flink-runtime-web/web-dashboard/app/index.jade
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/app/index.jade b/flink-runtime-web/web-dashboard/app/index.jade
index 85f6d12..4c0d2fc 100644
--- a/flink-runtime-web/web-dashboard/app/index.jade
+++ b/flink-runtime-web/web-dashboard/app/index.jade
@@ -56,6 +56,11 @@ html(lang='en')
               i.fa.fa-server.fa-fw
               | 
               | Completed Jobs
+          li
+            a(ui-sref="taskmanagers" ui-sref-active='active')
+              i.fa.fa-sitemap.fa-fw
+              | 
+              | Task Managers
 
     #content(ng-class="{ 'sidebar-visible': sidebarVisible }")
       div(ui-view='main')

http://git-wip-us.apache.org/repos/asf/flink/blob/7825461e/flink-runtime-web/web-dashboard/app/partials/taskmanagers/index.jade
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/app/partials/taskmanagers/index.jade b/flink-runtime-web/web-dashboard/app/partials/taskmanagers/index.jade
new file mode 100644
index 0000000..03a6186
--- /dev/null
+++ b/flink-runtime-web/web-dashboard/app/partials/taskmanagers/index.jade
@@ -0,0 +1,55 @@
+//
+  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.
+
+nav.navbar.navbar-default.navbar-fixed-top.navbar-main
+  #fold-button.btn.btn-default.navbar-btn.pull-left(ng-click='showSidebar()')
+    i.fa.fa-navicon
+
+  .navbar-title
+    | Task Managers
+
+#content-inner
+  table.table.table-body-hover.table-clickable.table-activable
+    thead
+      tr
+        th Path, ID
+        th Data Port
+        th Last Heartbeat
+        th All Slots
+        th Free Slots
+        th CPU Cores
+        th Physical Memory
+        th Free Memory
+        th Flink Managed Memory
+
+    tbody(ng-repeat="manager in managers" ng-class="{ active: manager.id == managerId }"
ng-click="changeManager(manager.id)")
+      tr
+        td
+          | {{ manager.path }}
+          | 
+          .small-label {{ manager.id }}
+        td {{ manager.dataPort }}
+        td {{ manager.timeSinceLastHeartbeat | amDateFormat:'YYYY-MM-DD, H:mm:ss' }}
+        td {{ manager.slotsNumber }}
+        td {{ manager.freeSlots }}
+        td {{ manager.cpuCores }}
+        td {{ manager.physicalMemory | bytes:MB }}
+        td {{ manager.freeMemory | bytes:MB }}
+        td {{ manager.managedMemory | bytes:MB }}
+      tr(ng-if="managerId && manager.id == managerId")
+        td(colspan="9")
+          div(ng-include=" 'partials/taskmanagers/metrics.html' ")

http://git-wip-us.apache.org/repos/asf/flink/blob/7825461e/flink-runtime-web/web-dashboard/app/partials/taskmanagers/metrics.jade
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/app/partials/taskmanagers/metrics.jade b/flink-runtime-web/web-dashboard/app/partials/taskmanagers/metrics.jade
new file mode 100644
index 0000000..228d782
--- /dev/null
+++ b/flink-runtime-web/web-dashboard/app/partials/taskmanagers/metrics.jade
@@ -0,0 +1,163 @@
+//
+  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="!manager.metrics")
+  p
+    i No metrics
+
+.row(ng-if="manager.metrics && manager.metrics.gauges")
+ .col-sm-4
+   table.table.table-properties
+     thead
+       tr
+         th(colspan="2")
+           | CPU Load
+
+     tbody
+       tr
+         td Current (%)
+         td(table-property value="manager.metrics.gauges.cpuLoad.value * 100 | number:2")
+
+   table.table.table-properties
+     thead
+       tr
+         th(colspan="2")
+           | Load
+
+     tbody
+       tr
+         td Current
+         td(table-property value="manager.metrics.gauges.load.value | number:2")
+
+   table.table.table-properties
+     thead
+       tr
+         th(colspan="2")
+           | Memory - Total
+
+     tbody
+       tr
+         td Committed
+         td(table-property value="manager.metrics.gauges['memory.total.committed'].value
| bytes:MB")
+       tr
+         td Initial
+         td(table-property value="manager.metrics.gauges['memory.total.init'].value | bytes:MB")
+       tr
+         td Max
+         td(table-property value="manager.metrics.gauges['memory.total.max'].value | bytes:MB")
+       tr
+         td Used
+         td(table-property value="manager.metrics.gauges['memory.total.used'].value | bytes:MB")
+
+ .col-sm-4
+   table.table.table-properties
+     thead
+       tr
+         th(colspan="2")
+           | Memory - Heap
+
+     tbody
+       tr
+         td Committed
+         td(table-property value="manager.metrics.gauges['memory.heap.committed'].value |
bytes:MB")
+       tr
+         td Initial
+         td(table-property value="manager.metrics.gauges['memory.heap.init'].value | bytes:MB")
+       tr
+         td Max
+         td(table-property value="manager.metrics.gauges['memory.heap.max'].value | bytes:MB")
+       tr
+         td Usage (%)
+         td(table-property value="manager.metrics.gauges['memory.heap.usage'].value | number:2")
+       tr
+         td Used
+         td(table-property value="manager.metrics.gauges['memory.heap.used'].value | bytes:MB")
+
+
+   table.table.table-properties
+     thead
+       tr
+         th(colspan="2")
+           | Memory - Non Heap
+
+     tbody
+       tr
+         td Committed
+         td(table-property value="manager.metrics.gauges['memory.non-heap.committed'].value
| bytes:MB")
+       tr
+         td Init
+         td(table-property value="manager.metrics.gauges['memory.non-heap.init'].value |
bytes:MB")
+       tr
+         td Max
+         td(table-property value="manager.metrics.gauges['memory.non-heap.max'].value | bytes:MB")
+       tr
+         td Usage
+         td(table-property value="manager.metrics.gauges['memory.non-heap.usage'].value |
bytes:MB")
+       tr
+         td Used
+         td(table-property value="manager.metrics.gauges['memory.non-heap.used'].value |
bytes:MB")
+
+
+ .col-sm-4
+   table.table.table-properties
+     thead
+       tr
+         th(colspan="2")
+           | Garbage Collection
+
+     tbody
+       tr
+         td PS-MarkSweep Count
+         td(table-property value="manager.metrics.gauges['gc.PS-MarkSweep.count'].value")
+
+       tr
+         td PS-MarkSweep Time (ms)
+         td(table-property value="manager.metrics.gauges['gc.PS-MarkSweep.time'].value")
+
+       tr
+         td PS-Scavenge Count
+         td(table-property value="manager.metrics.gauges['gc.PS-Scavenge.count'].value")
+
+       tr
+         td PS-Scavenge Time (ms)
+         td(table-property value="manager.metrics.gauges['gc.PS-Scavenge.time'].value")
+
+   table.table.table-properties
+     thead
+       tr
+         th(colspan="2")
+           | Memory - Pools
+
+     tbody
+       tr
+         td Code Cache
+         td(table-property value="manager.metrics.gauges['memory.pools.Code-Cache.usage'].value
| number:2")
+       tr
+         td Compressed Class Space
+         td(table-property value="manager.metrics.gauges['memory.pools.Compressed-Class-Space.usage'].value
| number:2")
+       tr
+         td Metaspace
+         td(table-property value="manager.metrics.gauges['memory.pools.Metaspace.usage'].value
| number:2")
+       tr
+         td PS Eden Space
+         td(table-property value="manager.metrics.gauges['memory.pools.PS-Eden-Space.usage'].value
| number:2")
+       tr
+         td PS Old Gen
+         td(table-property value="manager.metrics.gauges['memory.pools.PS-Old-Gen.usage'].value
| number:2")
+       tr
+         td PS Survivor Space
+         td(table-property value="manager.metrics.gauges['memory.pools.PS-Survivor-Space.usage'].value
| number:2")

http://git-wip-us.apache.org/repos/asf/flink/blob/7825461e/flink-runtime-web/web-dashboard/app/scripts/common/filters.coffee
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/app/scripts/common/filters.coffee b/flink-runtime-web/web-dashboard/app/scripts/common/filters.coffee
index c0db7d0..e8e655a 100644
--- a/flink-runtime-web/web-dashboard/app/scripts/common/filters.coffee
+++ b/flink-runtime-web/web-dashboard/app/scripts/common/filters.coffee
@@ -32,3 +32,11 @@ angular.module('flinkApp')
   (text) ->
     # TODO: extend... a lot
     if text then text.replace(/&gt;/g, ">").replace(/<br\/>/g,"") else ''
+
+.filter "bytes", ->
+  (bytes, precision) ->
+    return "-"  if isNaN(parseFloat(bytes)) or not isFinite(bytes)
+    precision = 1  if typeof precision is "undefined"
+    units = [ "bytes", "kB", "MB", "GB", "TB", "PB" ]
+    number = Math.floor(Math.log(bytes) / Math.log(1024))
+    (bytes / Math.pow(1024, Math.floor(number))).toFixed(precision) + " " + units[number]

http://git-wip-us.apache.org/repos/asf/flink/blob/7825461e/flink-runtime-web/web-dashboard/app/scripts/index.coffee
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/app/scripts/index.coffee b/flink-runtime-web/web-dashboard/app/scripts/index.coffee
index b636c77..2bf9075 100644
--- a/flink-runtime-web/web-dashboard/app/scripts/index.coffee
+++ b/flink-runtime-web/web-dashboard/app/scripts/index.coffee
@@ -145,4 +145,11 @@ angular.module('flinkApp', ['ui.router', 'angularMoment'])
       details:
         templateUrl: "partials/jobs/job.config.html"
 
+  .state "taskmanagers",
+    url: "/taskmanagers"
+    views:
+      main:
+        templateUrl: "partials/taskmanagers/index.html"
+        controller: 'TaskManagersController'
+
   $urlRouterProvider.otherwise "/overview"

http://git-wip-us.apache.org/repos/asf/flink/blob/7825461e/flink-runtime-web/web-dashboard/app/scripts/modules/taskmanagers/taskmanagers.ctrl.coffee
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/app/scripts/modules/taskmanagers/taskmanagers.ctrl.coffee
b/flink-runtime-web/web-dashboard/app/scripts/modules/taskmanagers/taskmanagers.ctrl.coffee
new file mode 100644
index 0000000..6e98feb
--- /dev/null
+++ b/flink-runtime-web/web-dashboard/app/scripts/modules/taskmanagers/taskmanagers.ctrl.coffee
@@ -0,0 +1,39 @@
+#
+# 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.
+#
+
+angular.module('flinkApp')
+
+.controller 'TaskManagersController', ($scope, TaskManagersService, $interval, flinkConfig)
->
+  TaskManagersService.loadManagers().then (data) ->
+    $scope.managers = data
+
+  refresh = $interval ->
+    TaskManagersService.loadManagers().then (data) ->
+      $scope.managers = data
+  , flinkConfig["refresh-interval"]
+
+  $scope.$on '$destroy', ->
+    $interval.cancel(refresh)
+
+  $scope.managerId = null
+
+  $scope.changeManager = (managerId) ->
+    if managerId != $scope.managerId
+      $scope.managerId = managerId
+    else
+      $scope.managerId = null

http://git-wip-us.apache.org/repos/asf/flink/blob/7825461e/flink-runtime-web/web-dashboard/app/scripts/modules/taskmanagers/taskmanagers.svc.coffee
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/app/scripts/modules/taskmanagers/taskmanagers.svc.coffee
b/flink-runtime-web/web-dashboard/app/scripts/modules/taskmanagers/taskmanagers.svc.coffee
new file mode 100644
index 0000000..b75ae79
--- /dev/null
+++ b/flink-runtime-web/web-dashboard/app/scripts/modules/taskmanagers/taskmanagers.svc.coffee
@@ -0,0 +1,31 @@
+#
+# 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.
+#
+
+angular.module('flinkApp')
+
+.service 'TaskManagersService', ($http, flinkConfig, $q) ->
+  @loadManagers = ->
+    deferred = $q.defer()
+
+    $http.get(flinkConfig.jobServer + "/taskmanagers")
+    .success (data, status, headers, config) ->
+      deferred.resolve(data['taskmanagers'])
+
+    deferred.promise
+
+  @

http://git-wip-us.apache.org/repos/asf/flink/blob/7825461e/flink-runtime-web/web-dashboard/app/styles/index.styl
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/app/styles/index.styl b/flink-runtime-web/web-dashboard/app/styles/index.styl
index e033264..597022e 100644
--- a/flink-runtime-web/web-dashboard/app/styles/index.styl
+++ b/flink-runtime-web/web-dashboard/app/styles/index.styl
@@ -124,6 +124,9 @@ sidebar-width-small = 160px
     margin-bottom: 20px
 
 .table
+  .table
+    background-color: transparent
+
   th
     font-weight: normal
     color: #999999
@@ -143,6 +146,44 @@ sidebar-width-small = 160px
   &.table-inner
     background-color: transparent
 
+  &.table-properties
+    table-layout: fixed
+    white-space: nowrap
+    td
+      width: 50%
+      white-space: nowrap
+      overflow: hidden
+      text-overflow: ellipsis
+
+  &.table-body-hover
+    > tbody
+      border-top: none
+      border-left: 2px solid transparent
+      &.active
+        border-left: 2px solid #000000
+      &:hover, &.active
+        td:not(.tab-column)
+          background-color: #f0f0f0
+        td.tab-column li.active
+          background-color: #f0f0f0
+      
+  &.table-activable
+    th.tab-column, td.tab-column
+      border-top: none
+      width: 47px
+
+    td.tab-column
+      border-right: 1px solid #dddddd
+      
+    td
+      position: relative
+      
+  .small-label
+    text-transform: uppercase
+    font-size: 13px
+    color: #999999
+
+
 .panel
   &.panel-dashboard
     .huge

http://git-wip-us.apache.org/repos/asf/flink/blob/7825461e/flink-runtime-web/web-dashboard/app/styles/job.styl
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/app/styles/job.styl b/flink-runtime-web/web-dashboard/app/styles/job.styl
index 0432071..e2cbede 100644
--- a/flink-runtime-web/web-dashboard/app/styles/job.styl
+++ b/flink-runtime-web/web-dashboard/app/styles/job.styl
@@ -30,44 +30,6 @@
       top: 10px
       right: 10px
 
-.table
-  &.table-properties
-    table-layout: fixed
-    white-space: nowrap
-    td
-      width: 50%
-      white-space: nowrap
-      overflow: hidden
-      text-overflow: ellipsis
-
-  &.table-body-hover
-    > tbody
-      border-top: none
-      border-left: 2px solid transparent
-      &.active
-        border-left: 2px solid #000000
-      &:hover, &.active
-        td:not(.tab-column)
-          background-color: #f0f0f0
-        td.tab-column li.active
-          background-color: #f0f0f0
-      
-  &.table-activable
-    th.tab-column, td.tab-column
-      border-top: none
-      width: 47px
-
-    td.tab-column
-      border-right: 1px solid #dddddd
-      
-    td
-      position: relative
-      
-  .small-label
-    text-transform: uppercase
-    font-size: 13px
-    color: #999999
-
 
 .label-group
   .label
@@ -81,9 +43,3 @@
     
     &.label-black
       background-color: #000000
-
-    // &:first-child
-    //   border-radius(4px 0 0 4px)
-
-    // &:last-child
-    //   border-radius(0 4px 4px 0)

http://git-wip-us.apache.org/repos/asf/flink/blob/7825461e/flink-runtime-web/web-dashboard/web/css/index.css
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/web/css/index.css b/flink-runtime-web/web-dashboard/web/css/index.css
index 0ffea9e..5a89193 100644
--- a/flink-runtime-web/web-dashboard/web/css/index.css
+++ b/flink-runtime-web/web-dashboard/web/css/index.css
@@ -138,6 +138,9 @@
 .nav.nav-tabs {
   margin-bottom: 20px;
 }
+.table .table {
+  background-color: transparent;
+}
 .table th {
   font-weight: normal;
   color: #999;
@@ -156,6 +159,48 @@
 .table.table-inner {
   background-color: transparent;
 }
+.table.table-properties {
+  table-layout: fixed;
+  white-space: nowrap;
+}
+.table.table-properties td {
+  width: 50%;
+  white-space: nowrap;
+  overflow: hidden;
+  -o-text-overflow: ellipsis;
+  text-overflow: ellipsis;
+}
+.table.table-body-hover > tbody {
+  border-top: none;
+  border-left: 2px solid transparent;
+}
+.table.table-body-hover > tbody.active {
+  border-left: 2px solid #000;
+}
+.table.table-body-hover > tbody:hover td:not(.tab-column),
+.table.table-body-hover > tbody.active td:not(.tab-column) {
+  background-color: #f0f0f0;
+}
+.table.table-body-hover > tbody:hover td.tab-column li.active,
+.table.table-body-hover > tbody.active td.tab-column li.active {
+  background-color: #f0f0f0;
+}
+.table.table-activable th.tab-column,
+.table.table-activable td.tab-column {
+  border-top: none;
+  width: 47px;
+}
+.table.table-activable td.tab-column {
+  border-right: 1px solid #ddd;
+}
+.table.table-activable td {
+  position: relative;
+}
+.table .small-label {
+  text-transform: uppercase;
+  font-size: 13px;
+  color: #999;
+}
 .panel.panel-dashboard .huge {
   font-size: 28px;
 }
@@ -393,48 +438,6 @@ pre.exception {
   top: 10px;
   right: 10px;
 }
-.table.table-properties {
-  table-layout: fixed;
-  white-space: nowrap;
-}
-.table.table-properties td {
-  width: 50%;
-  white-space: nowrap;
-  overflow: hidden;
-  -o-text-overflow: ellipsis;
-  text-overflow: ellipsis;
-}
-.table.table-body-hover > tbody {
-  border-top: none;
-  border-left: 2px solid transparent;
-}
-.table.table-body-hover > tbody.active {
-  border-left: 2px solid #000;
-}
-.table.table-body-hover > tbody:hover td:not(.tab-column),
-.table.table-body-hover > tbody.active td:not(.tab-column) {
-  background-color: #f0f0f0;
-}
-.table.table-body-hover > tbody:hover td.tab-column li.active,
-.table.table-body-hover > tbody.active td.tab-column li.active {
-  background-color: #f0f0f0;
-}
-.table.table-activable th.tab-column,
-.table.table-activable td.tab-column {
-  border-top: none;
-  width: 47px;
-}
-.table.table-activable td.tab-column {
-  border-right: 1px solid #ddd;
-}
-.table.table-activable td {
-  position: relative;
-}
-.table .small-label {
-  text-transform: uppercase;
-  font-size: 13px;
-  color: #999;
-}
 .label-group .label {
   display: inline-block;
   width: 2em;

http://git-wip-us.apache.org/repos/asf/flink/blob/7825461e/flink-runtime-web/web-dashboard/web/index.html
----------------------------------------------------------------------
diff --git a/flink-runtime-web/web-dashboard/web/index.html b/flink-runtime-web/web-dashboard/web/index.html
index a51b28d..850aa2b 100644
--- a/flink-runtime-web/web-dashboard/web/index.html
+++ b/flink-runtime-web/web-dashboard/web/index.html
@@ -41,6 +41,8 @@ limitations under the License.
               Running Jobs</a></li>
           <li><a ui-sref="completed-jobs" ui-sref-active="active"><i class="fa
fa-server fa-fw"></i> 
               Completed Jobs</a></li>
+          <li><a ui-sref="taskmanagers" ui-sref-active="active"><i class="fa
fa-sitemap fa-fw"></i> 
+              Task Managers</a></li>
         </ul>
       </div>
     </div>


Mime
View raw message