SLIDER-1040 Better formatting on the AM's web ui.

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

Branch: refs/heads/develop
Commit: 924843114b7c0d194e762c4f7a3314e99abbfe7b
Parents: c5f7ff9
Author: Josh Elser <els...@apache.org>
Authored: Tue Dec 29 20:34:34 2015 -0500
Committer: Josh Elser <els...@apache.org>
Committed: Wed Dec 30 16:20:58 2015 -0500

----------------------------------------------------------------------
 .../providers/AbstractProviderService.java      |  8 ++--
 .../apache/slider/providers/MonitorDetail.java  | 43 ++++++++++++++++++++
 .../slider/providers/ProviderService.java       |  4 +-
 .../providers/agent/AgentProviderService.java   | 12 +++---
 .../server/appmaster/web/view/IndexBlock.java   | 20 ++++++---
 .../src/main/resources/webapps/static/yarn.css  |  4 +-
 6 files changed, 73 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/92484311/slider-core/src/main/java/org/apache/slider/providers/AbstractProviderService.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/providers/AbstractProviderService.java
 
b/slider-core/src/main/java/org/apache/slider/providers/AbstractProviderService.java
index c701a55..61b2655 100644
--- 
a/slider-core/src/main/java/org/apache/slider/providers/AbstractProviderService.java
+++ 
b/slider-core/src/main/java/org/apache/slider/providers/AbstractProviderService.java
@@ -335,8 +335,8 @@ public abstract class AbstractProviderService
   in the external view
    */
   @Override
-  public Map<String, String> buildMonitorDetails(ClusterDescription 
clusterDesc) {
-    Map<String, String> details = new LinkedHashMap<String, String>();
+  public Map<String, MonitorDetail> buildMonitorDetails(ClusterDescription 
clusterDesc) {
+    Map<String, MonitorDetail> details = new LinkedHashMap<String, 
MonitorDetail>();
 
     // add in all the endpoints
     buildEndpointDetails(details);
@@ -345,7 +345,7 @@ public abstract class AbstractProviderService
   }
 
   @Override
-  public void buildEndpointDetails(Map<String, String> details) {
+  public void buildEndpointDetails(Map<String, MonitorDetail> details) {
     ServiceRecord self = yarnRegistry.getSelfRegistration();
 
     List<Endpoint> externals = self.external;
@@ -355,7 +355,7 @@ public abstract class AbstractProviderService
         try {
           List<URL> urls = RegistryTypeUtils.retrieveAddressURLs(endpoint);
           if (!urls.isEmpty()) {
-            details.put(endpoint.api, urls.get(0).toString());
+            details.put(endpoint.api, new 
MonitorDetail(urls.get(0).toString(), true));
           }
         } catch (InvalidRecordException  | MalformedURLException ignored) {
           // Ignored

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/92484311/slider-core/src/main/java/org/apache/slider/providers/MonitorDetail.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/providers/MonitorDetail.java 
b/slider-core/src/main/java/org/apache/slider/providers/MonitorDetail.java
new file mode 100644
index 0000000..27d3415
--- /dev/null
+++ b/slider-core/src/main/java/org/apache/slider/providers/MonitorDetail.java
@@ -0,0 +1,43 @@
+/*
+ * 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.slider.providers;
+
+/**
+ * Details about some exported information from a provider to the AM web UI.
+ */
+public class MonitorDetail {
+
+  private final String value;
+  private final boolean isUrl;
+
+  public MonitorDetail(String value, boolean isUrl) {
+    this.value = value;
+    this.isUrl = isUrl;
+  }
+
+  public String getValue() {
+    return value;
+  }
+
+  public boolean isUrl() {
+    return isUrl;
+  }
+
+  public String toString() {
+    return "MonitorDetail[" + value + " isUrl=" + isUrl + "]";
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/92484311/slider-core/src/main/java/org/apache/slider/providers/ProviderService.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/providers/ProviderService.java 
b/slider-core/src/main/java/org/apache/slider/providers/ProviderService.java
index 1a18db6..4689ae8 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/ProviderService.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/ProviderService.java
@@ -154,7 +154,7 @@ public interface ProviderService extends ProviderCore,
    * If no anchor is needed/desired, insert the key with a null value.
    * @return the details
    */
-  Map<String, String> buildMonitorDetails(ClusterDescription clusterSpec);
+  Map<String, MonitorDetail> buildMonitorDetails(ClusterDescription 
clusterSpec);
 
   /**
    * Get a human friendly name for web UIs and messages
@@ -182,7 +182,7 @@ public interface ProviderService extends ProviderCore,
    * Build up the endpoint details for this service
    * @param details
    */
-  void buildEndpointDetails(Map<String, String> details);
+  void buildEndpointDetails(Map<String, MonitorDetail> details);
 
   /**
    * Prior to going live -register the initial service registry data

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/92484311/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
 
b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
index cc089d0..0a1a98f 100644
--- 
a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
+++ 
b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
@@ -62,6 +62,7 @@ import 
org.apache.slider.core.registry.docstore.PublishedConfiguration;
 import org.apache.slider.core.registry.docstore.PublishedExports;
 import org.apache.slider.core.registry.info.CustomRegistryConstants;
 import org.apache.slider.providers.AbstractProviderService;
+import org.apache.slider.providers.MonitorDetail;
 import org.apache.slider.providers.ProviderCore;
 import org.apache.slider.providers.ProviderRole;
 import org.apache.slider.providers.ProviderUtils;
@@ -1135,8 +1136,8 @@ public class AgentProviderService extends 
AbstractProviderService implements
   }
 
   @Override
-  public Map<String, String> buildMonitorDetails(ClusterDescription 
clusterDesc) {
-    Map<String, String> details = super.buildMonitorDetails(clusterDesc);
+  public Map<String, MonitorDetail> buildMonitorDetails(ClusterDescription 
clusterDesc) {
+    Map<String, MonitorDetail> details = 
super.buildMonitorDetails(clusterDesc);
     buildRoleHostDetails(details);
     return details;
   }
@@ -2848,12 +2849,11 @@ public class AgentProviderService extends 
AbstractProviderService implements
     }
   }
 
-  private void buildRoleHostDetails(Map<String, String> details) {
+  private void buildRoleHostDetails(Map<String, MonitorDetail> details) {
     for (Map.Entry<String, Map<String, ClusterNode>> entry :
         getRoleClusterNodeMapping().entrySet()) {
-      details.put(entry.getKey() + " Host(s)/Container(s): " +
-                  getHostsList(entry.getValue().values(), false),
-                  "");
+      details.put(entry.getKey() + " Host(s)/Container(s)",
+                  new MonitorDetail(getHostsList(entry.getValue().values(), 
false).toString(), false));
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/92484311/slider-core/src/main/java/org/apache/slider/server/appmaster/web/view/IndexBlock.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/view/IndexBlock.java
 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/view/IndexBlock.java
index b3be3bf..e118896 100644
--- 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/view/IndexBlock.java
+++ 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/view/IndexBlock.java
@@ -20,12 +20,14 @@ import com.google.common.annotations.VisibleForTesting;
 import com.google.inject.Inject;
 import org.apache.hadoop.yarn.webapp.hamlet.Hamlet;
 import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.DIV;
+import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.LI;
 import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.UL;
 import org.apache.slider.api.ClusterDescription;
 import org.apache.slider.api.StatusKeys;
 import org.apache.slider.api.types.ApplicationLivenessInformation;
 import org.apache.slider.api.types.RoleStatistics;
 import org.apache.slider.common.tools.SliderUtils;
+import org.apache.slider.providers.MonitorDetail;
 import org.apache.slider.providers.ProviderService;
 import org.apache.slider.server.appmaster.state.RoleStatus;
 import org.apache.slider.server.appmaster.web.WebAppApi;
@@ -249,16 +251,24 @@ public class IndexBlock extends SliderHamletBlock {
 
   protected void addProviderServiceOptions(ProviderService provider,
       UL ul, ClusterDescription clusterStatus) {
-    Map<String, String> details = provider.buildMonitorDetails(
+    Map<String, MonitorDetail> details = provider.buildMonitorDetails(
         clusterStatus);
     if (null == details) {
       return;
     }
     // Loop over each entry, placing the text in the UL, adding an anchor when 
the URL is non-null/empty
-    for (Entry<String, String> entry : details.entrySet()) {
-      String url = entry.getValue();
-      if (SliderUtils.isSet(url) ) {
-        ul.li()._(entry.getKey()).a(url, url)._();
+    for (Entry<String, MonitorDetail> entry : details.entrySet()) {
+      MonitorDetail detail = entry.getValue();
+      if (SliderUtils.isSet(detail.getValue()) ) {
+        LI item = ul.li();
+        item.span().$class("bold")._(entry.getKey())._();
+        item._(" - ");
+        if (detail.isUrl()) {
+          // Render an anchor if the value is a URL
+          item.a(detail.getValue(), detail.getValue())._();
+        } else {
+          item._(detail.getValue())._();
+        }
       } else {
         ul.li(entry.getKey());
       }

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/92484311/slider-core/src/main/resources/webapps/static/yarn.css
----------------------------------------------------------------------
diff --git a/slider-core/src/main/resources/webapps/static/yarn.css 
b/slider-core/src/main/resources/webapps/static/yarn.css
index ba12acb..1e9ca94 100644
--- a/slider-core/src/main/resources/webapps/static/yarn.css
+++ b/slider-core/src/main/resources/webapps/static/yarn.css
@@ -58,6 +58,8 @@ div.role-options-wrap table { margin-left: 0.5em; }
 
 h1.index_header { margin-bottom: 15px; }
 div.general_info { margin-bottom: 15px; }
-div.provder_info { margin-bottom: 15px; }
+div.container_instances { margin-bottom: 15px; }
+div.diagnostics { margin-bottom: 15px; }
+div.provider_info { margin-bottom: 15px; }
 
 div.cluster_json pre { white-space: pre-wrap; }

Reply via email to