You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by sr...@apache.org on 2014/09/10 22:26:56 UTC

git commit: AMBARI-7252. Decouple Slider View from ambari-server dependency (srimanth)

Repository: ambari
Updated Branches:
  refs/heads/trunk 475d45897 -> 11146fb67


AMBARI-7252. Decouple Slider View from ambari-server dependency (srimanth)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/11146fb6
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/11146fb6
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/11146fb6

Branch: refs/heads/trunk
Commit: 11146fb67456a40aeab9fc3f3e6973fd3cf9facd
Parents: 475d458
Author: Srimanth Gunturi <sg...@hortonworks.com>
Authored: Wed Sep 10 12:25:28 2014 -0700
Committer: Srimanth Gunturi <sg...@hortonworks.com>
Committed: Wed Sep 10 13:02:19 2014 -0700

----------------------------------------------------------------------
 contrib/views/slider/pom.xml                    |   8 -
 .../view/slider/SliderAppsViewController.java   |   5 +
 .../slider/SliderAppsViewControllerImpl.java    | 262 +++++------------
 .../apache/ambari/view/slider/ViewStatus.java   |  33 +--
 .../view/slider/clients/AmbariClient.java       |   3 -
 .../slider/clients/AmbariInternalClient.java    | 292 -------------------
 .../slider/rest/client/JMXMetricHolder.java     |  50 ++++
 .../slider/rest/client/SliderAppJmxHelper.java  |   1 -
 .../app/controllers/slider_apps_controller.js   |   8 +-
 .../src/main/resources/ui/app/initialize.js     |  19 +-
 .../views/slider/src/main/resources/view.xml    |  23 +-
 11 files changed, 174 insertions(+), 530 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/11146fb6/contrib/views/slider/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/slider/pom.xml b/contrib/views/slider/pom.xml
index 31a7c7e..ec4089f 100644
--- a/contrib/views/slider/pom.xml
+++ b/contrib/views/slider/pom.xml
@@ -105,12 +105,6 @@
 			<artifactId>gson</artifactId>
 			<version>2.2.2</version>
 		</dependency>
-		<dependency>
-			<groupId>org.apache.ambari</groupId>
-			<artifactId>ambari-server</artifactId>
-			<version>${ambari.version}</version>
-			<scope>provided</scope>
-		</dependency>
 
 		<!-- ==================================================================== -->
 		<!-- Slider Dependencies (to be removed when Slider has Maven repository) -->
@@ -398,8 +392,6 @@
 		<nodejs.directory>${basedir}/target/nodejs</nodejs.directory>
 		<npm.version>1.4.3</npm.version>
 		<ui.directory>${basedir}/src/main/resources/ui</ui.directory>
-		<!-- deprecated, moved to top component -->
-		<!-- <ambari.version>1.3.0-SNAPSHOT</ambari.version> -->
 		<hadoop.version>2.6.0-SNAPSHOT</hadoop.version>
 		<avro.version>1.7.4</avro.version>
 		<bigtop.version>0.7.0</bigtop.version>

http://git-wip-us.apache.org/repos/asf/ambari/blob/11146fb6/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewController.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewController.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewController.java
index 823fea6..70e333f 100644
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewController.java
+++ b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewController.java
@@ -30,6 +30,11 @@ import com.google.inject.ImplementedBy;
 @ImplementedBy(SliderAppsViewControllerImpl.class)
 public interface SliderAppsViewController {
 
+  public static final String PROPERTY_HDFS_ADDRESS = "hdfs.address";
+  public static final String PROPERTY_YARN_RM_ADDRESS = "yarn.resourcemanager.address";
+  public static final String PROPERTY_YARN_RM_SCHEDULER_ADDRESS = "yarn.resourcemanager.scheduler.address";
+  public static final String PROPERTY_ZK_QUOROM = "zookeeper.quorum";
+
   public ViewStatus getViewStatus();
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/11146fb6/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewControllerImpl.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewControllerImpl.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewControllerImpl.java
index 6b3b3f5..f17b66d 100644
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewControllerImpl.java
+++ b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewControllerImpl.java
@@ -35,12 +35,6 @@ import java.util.Set;
 import java.util.zip.ZipException;
 
 import org.apache.ambari.view.ViewContext;
-import org.apache.ambari.view.slider.clients.AmbariClient;
-import org.apache.ambari.view.slider.clients.AmbariCluster;
-import org.apache.ambari.view.slider.clients.AmbariClusterInfo;
-import org.apache.ambari.view.slider.clients.AmbariHostComponent;
-import org.apache.ambari.view.slider.clients.AmbariService;
-import org.apache.ambari.view.slider.clients.AmbariServiceInfo;
 import org.apache.ambari.view.slider.rest.client.Metric;
 import org.apache.ambari.view.slider.rest.client.SliderAppMasterClient;
 import org.apache.ambari.view.slider.rest.client.SliderAppMasterClient.SliderAppMasterData;
@@ -90,15 +84,11 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
       .getLogger(SliderAppsViewControllerImpl.class);
   @Inject
   private ViewContext viewContext;
-  @Inject
-  private AmbariClient ambariClient;
   private List<SliderAppType> appTypes;
   private Integer createAppCounter = -1;
 
   private String getAppsFolderPath() {
-    return viewContext
-               .getAmbariProperty(org.apache.ambari.server.configuration.Configuration.RESOURCES_DIR_KEY)
-           + "/apps";
+    return viewContext.getAmbariProperty("resources.dir") + "/apps";
   }
 
   private String getAppsCreateFolderPath() {
@@ -108,91 +98,13 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
   @Override
   public ViewStatus getViewStatus() {
     ViewStatus status = new ViewStatus();
-    List<String> viewErrors = new ArrayList<String>();
-
-    AmbariClusterInfo clusterInfo = ambariClient.getClusterInfo();
-    if (clusterInfo != null) {
-      AmbariCluster cluster = ambariClient.getCluster(clusterInfo);
-      List<AmbariServiceInfo> services = cluster.getServices();
-      if (services != null && !services.isEmpty()) {
-        AmbariServiceInfo hdfsService = null, yarnService = null, zkService = null;
-        for (AmbariServiceInfo service : services) {
-          if ("HDFS".equals(service.getId())) {
-            hdfsService = service;
-          } else if ("YARN".equals(service.getId())) {
-            yarnService = service;
-          } else if ("ZOOKEEPER".equals(service.getId())) {
-            zkService = service;
-          }
-        }
-        if (hdfsService == null) {
-          viewErrors.add("Slider applications view requires HDFS service");
-        } else {
-          if (!hdfsService.isStarted()) {
-            viewErrors
-                .add("Slider applications view requires HDFS service to be started");
-          }
-        }
-        if (yarnService == null) {
-          viewErrors.add("Slider applications view requires YARN service");
-        } else {
-          if (!yarnService.isStarted()) {
-            viewErrors
-                .add("Slider applications view requires YARN service to be started");
-          }
-        }
-        if (zkService == null) {
-          viewErrors.add("Slider applications view requires ZooKeeper service");
-        } else {
-          if (!zkService.isStarted()) {
-            viewErrors
-                .add("Slider applications view requires ZooKeeper service to be started");
-          }
-        }
-      } else {
-        viewErrors
-            .add("Slider applications view is unable to locate any services");
-      }
-      // Check security
-      if (cluster.getDesiredConfigs() != null
-          && cluster.getDesiredConfigs().containsKey("hadoop-env")) {
-        Map<String, String> globalConfig = ambariClient.getConfiguration(
-            clusterInfo, "hadoop-env", cluster.getDesiredConfigs().get("hadoop-env"));
-        if (globalConfig != null
-            && globalConfig.containsKey("security_enabled")) {
-          String securityValue = globalConfig.get("security_enabled");
-          if (Boolean.valueOf(securityValue)) {
-            viewErrors
-                .add("Slider applications view cannot be rendered in secure mode");
-          }
-        } else {
-          viewErrors
-              .add("Slider applications view is unable to determine the security status of the cluster");
-        }
-      } else {
-        viewErrors
-            .add("Slider applications view is unable to determine the security status of the cluster");
-      }
-    } else {
-      viewErrors.add("Slider applications view requires a cluster");
-    }
     status.setVersion(SliderAppsConfiguration.INSTANCE.getVersion());
-    status.setViewEnabled(viewErrors.size() < 1);
-    status.setViewErrors(viewErrors);
     return status;
   }
 
-  private AmbariCluster getAmbariCluster() {
-    AmbariClusterInfo clusterInfo = ambariClient.getClusterInfo();
-    if (clusterInfo != null) {
-      return ambariClient.getCluster(clusterInfo);
-    }
-    return null;
-  }
-
   private String getApplicationIdString(ApplicationId appId) {
     return Long.toString(appId.getClusterTimestamp()) + "_"
-           + Integer.toString(appId.getId());
+        + Integer.toString(appId.getId());
   }
 
   private ApplicationId getApplicationId(String appIdString) {
@@ -228,7 +140,7 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
   }
 
   private SliderApp createSliderAppObject(ApplicationReport yarnApp,
-                                          Set<String> properties, SliderClient sliderClient) {
+      Set<String> properties, SliderClient sliderClient) {
     if (yarnApp == null) {
       return null;
     }
@@ -311,13 +223,17 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
                 List<SliderAppType> appTypes = getSliderAppTypes(null);
                 if (appTypes != null && appTypes.size() > 0) {
                   for (SliderAppType appType : appTypes) {
-                    logger.info("TYPE: " + appType.getTypeName() + "   " + app.getType());
-                    logger.info("VERSION: " + appType.getTypeVersion() + "   " + app.getAppVersion());
-                    if ((appType.getTypeName() != null && appType.getTypeName().equalsIgnoreCase(app.getType())) &&
-                        (appType.getTypeVersion() != null
-                         && appType.getTypeVersion().equalsIgnoreCase(app.getAppVersion()))) {
+                    logger.info("TYPE: " + appType.getTypeName() + "   "
+                        + app.getType());
+                    logger.info("VERSION: " + appType.getTypeVersion() + "   "
+                        + app.getAppVersion());
+                    if ((appType.getTypeName() != null && appType.getTypeName()
+                        .equalsIgnoreCase(app.getType()))
+                        && (appType.getTypeVersion() != null && appType
+                            .getTypeVersion().equalsIgnoreCase(
+                                app.getAppVersion()))) {
                       app.setJmx(sliderAppClient.getJmx(jmxUrl, viewContext,
-                                                        appType));
+                          appType));
                       break;
                     }
                   }
@@ -336,10 +252,8 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
                   Map<String, SliderAppComponent> componentTypeMap = new HashMap<String, SliderAppComponent>();
                   for (Entry<String, Object> e : description.status.entrySet()) {
                     @SuppressWarnings("unchecked")
-                    Map<String, Map<String, Map<String, Object>>>
-                        componentsObj =
-                        (Map<String, Map<String, Map<String, Object>>>) e
-                            .getValue();
+                    Map<String, Map<String, Map<String, Object>>> componentsObj = (Map<String, Map<String, Map<String, Object>>>) e
+                        .getValue();
                     boolean isLive = "live".equals(e.getKey());
                     for (Entry<String, Map<String, Map<String, Object>>> componentEntry : componentsObj
                         .entrySet()) {
@@ -353,7 +267,7 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
                         appComponent
                             .setCompletedContainers(new HashMap<String, Map<String, String>>());
                         componentTypeMap.put(componentEntry.getKey(),
-                                             appComponent);
+                            appComponent);
                       }
                       for (Entry<String, Map<String, Object>> containerEntry : componentEntry
                           .getValue().entrySet()) {
@@ -366,19 +280,19 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
                           Object containerPropertyValue = containerValues
                               .get(containerProperty);
                           containerDataMap.put(containerProperty,
-                                               containerPropertyValue.toString());
+                              containerPropertyValue.toString());
                         }
                         if (isLive) {
                           appComponent.getActiveContainers().put(containerId,
-                                                                 containerDataMap);
+                              containerDataMap);
                         } else {
                           appComponent.getCompletedContainers().put(
                               containerId, containerDataMap);
                         }
                       }
                       appComponent.setInstanceCount(appComponent
-                                                        .getActiveContainers().size()
-                                                    + appComponent.getCompletedContainers().size());
+                          .getActiveContainers().size()
+                          + appComponent.getCompletedContainers().size());
                     }
                   }
                   app.setComponents(componentTypeMap);
@@ -386,16 +300,16 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
               } catch (UnknownApplicationInstanceException e) {
                 logger.warn(
                     "Unable to determine app components for "
-                    + yarnApp.getName(), e);
+                        + yarnApp.getName(), e);
               } catch (YarnException e) {
                 logger.warn(
                     "Unable to determine app components for "
-                    + yarnApp.getName(), e);
+                        + yarnApp.getName(), e);
                 throw new RuntimeException(e.getMessage(), e);
               } catch (IOException e) {
                 logger.warn(
                     "Unable to determine app components for "
-                    + yarnApp.getName(), e);
+                        + yarnApp.getName(), e);
                 throw new RuntimeException(e.getMessage(), e);
               }
             }
@@ -407,9 +321,10 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
   }
 
   /**
-   * Creates a new {@link SliderClient} initialized with appropriate configuration. If configuration was not determined,
-   * <code>null</code> is returned.
-   *
+   * Creates a new {@link SliderClient} initialized with appropriate
+   * configuration. If configuration was not determined, <code>null</code> is
+   * returned.
+   * 
    * @return
    */
   protected SliderClient getSliderClient() {
@@ -426,7 +341,7 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
           super.serviceInit(conf);
           // Override the default FS client to set the super user.
           FileSystem fs = FileSystem.get(FileSystem.getDefaultUri(getConfig()),
-                                         getConfig(), "yarn");
+              getConfig(), "yarn");
           SliderFileSystem fileSystem = new SliderFileSystem(fs, getConfig());
           Field fsField = SliderClient.class
               .getDeclaredField("sliderFileSystem");
@@ -436,7 +351,7 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
       };
       try {
         sliderClientConfiguration = client.bindArgs(sliderClientConfiguration,
-                                                    new String[]{"usage"});
+            new String[] { "usage" });
       } catch (Exception e) {
         logger.warn("Unable to set SliderClient configs", e);
         throw new RuntimeException(e.getMessage(), e);
@@ -449,60 +364,28 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
   }
 
   /**
-   * Dynamically determines Slider client configuration. If unable to determine, <code>null</code> is returned.
-   *
+   * Dynamically determines Slider client configuration. If unable to determine,
+   * <code>null</code> is returned.
+   * 
    * @return
    */
   private Configuration getSliderClientConfiguration() {
-    AmbariCluster ambariCluster = getAmbariCluster();
-    if (ambariCluster != null) {
-      AmbariService zkService = ambariClient.getService(ambariCluster,
-                                                        "ZOOKEEPER");
-      if (zkService != null && ambariCluster.getDesiredConfigs() != null
-          && ambariCluster.getDesiredConfigs().containsKey("zookeeper-env")
-          && ambariCluster.getDesiredConfigs().containsKey("yarn-site")
-          && ambariCluster.getDesiredConfigs().containsKey("core-site")) {
-        Map<String, String> zkConfigs = ambariClient.getConfiguration(
-            ambariCluster, "zookeeper-env",
-            ambariCluster.getDesiredConfigs().get("zookeeper-env"));
-        Map<String, String> yarnSiteConfigs = ambariClient.getConfiguration(
-            ambariCluster, "yarn-site",
-            ambariCluster.getDesiredConfigs().get("yarn-site"));
-        Map<String, String> coreSiteConfigs = ambariClient.getConfiguration(
-            ambariCluster, "core-site",
-            ambariCluster.getDesiredConfigs().get("core-site"));
-        String zkPort = zkConfigs.get("clientPort");
-        String hdfsPath = coreSiteConfigs.get("fs.defaultFS");
-        String rmAddress = yarnSiteConfigs.get("yarn.resourcemanager.address");
-        String rmSchedulerAddress = yarnSiteConfigs
-            .get("yarn.resourcemanager.scheduler.address");
-        StringBuilder zkQuorum = new StringBuilder();
-        List<AmbariHostComponent> zkHosts = zkService
-            .getComponentsToHostComponentsMap().get("ZOOKEEPER_SERVER");
-        for (AmbariHostComponent zkHost : zkHosts) {
-          if (zkQuorum.length() > 0) {
-            zkQuorum.append(',');
-          }
-          zkQuorum.append(zkHost.getHostName() + ":" + zkPort);
-        }
-        HdfsConfiguration hdfsConfig = new HdfsConfiguration();
-        YarnConfiguration yarnConfig = new YarnConfiguration(hdfsConfig);
-
-        yarnConfig.set("slider.yarn.queue", "default");
-        yarnConfig.set("yarn.log-aggregation-enable", "true");
-        yarnConfig.set("yarn.resourcemanager.address", rmAddress);
-        yarnConfig.set("yarn.resourcemanager.scheduler.address",
-                       rmSchedulerAddress);
-        yarnConfig.set("fs.defaultFS", hdfsPath);
-        yarnConfig.set("slider.zookeeper.quorum", zkQuorum.toString());
-        yarnConfig
-            .set(
-                "yarn.application.classpath",
-                "/etc/hadoop/conf,/usr/lib/hadoop/*,/usr/lib/hadoop/lib/*,/usr/lib/hadoop-hdfs/*,/usr/lib/hadoop-hdfs/lib/*,/usr/lib/hadoop-yarn/*,/usr/lib/hadoop-yarn/lib/*,/usr/lib/hadoop-mapreduce/*,/usr/lib/hadoop-mapreduce/lib/*");
-        return yarnConfig;
-      }
-    }
-    return null;
+    String hdfsPath = viewContext.getProperties().get(PROPERTY_HDFS_ADDRESS);
+    String rmAddress = viewContext.getProperties().get(PROPERTY_YARN_RM_ADDRESS);
+    String rmSchedulerAddress = viewContext.getProperties().get(PROPERTY_YARN_RM_SCHEDULER_ADDRESS);
+    String zkQuorum = viewContext.getProperties().get(PROPERTY_ZK_QUOROM);
+    HdfsConfiguration hdfsConfig = new HdfsConfiguration();
+    YarnConfiguration yarnConfig = new YarnConfiguration(hdfsConfig);
+
+    yarnConfig.set("slider.yarn.queue", "default");
+    yarnConfig.set("yarn.log-aggregation-enable", "true");
+    yarnConfig.set("yarn.resourcemanager.address", rmAddress);
+    yarnConfig.set("yarn.resourcemanager.scheduler.address", rmSchedulerAddress);
+    yarnConfig.set("fs.defaultFS", hdfsPath);
+    yarnConfig.set("slider.zookeeper.quorum", zkQuorum.toString());
+    yarnConfig.set("yarn.application.classpath",
+            "/etc/hadoop/conf,/usr/lib/hadoop/*,/usr/lib/hadoop/lib/*,/usr/lib/hadoop-hdfs/*,/usr/lib/hadoop-hdfs/lib/*,/usr/lib/hadoop-yarn/*,/usr/lib/hadoop-yarn/lib/*,/usr/lib/hadoop-mapreduce/*,/usr/lib/hadoop-mapreduce/lib/*");
+    return yarnConfig;
   }
 
   @Override
@@ -518,7 +401,7 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
       List<ApplicationReport> yarnApps = sliderClient.listSliderInstances(null);
       for (ApplicationReport yarnApp : yarnApps) {
         SliderApp sliderAppObject = createSliderAppObject(yarnApp, properties,
-                                                          sliderClient);
+            sliderClient);
         if (sliderAppObject != null) {
           if (sliderAppsMap.containsKey(sliderAppObject.getName())) {
             if (sliderAppsMap.get(sliderAppObject.getName()).getId()
@@ -594,7 +477,7 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
           try {
             ZipFile zipFile = new ZipFile(appZip);
             Metainfo metainfo = new MetainfoParser().parse(zipFile
-                                                               .getInputStream(zipFile.getEntry("metainfo.xml")));
+                .getInputStream(zipFile.getEntry("metainfo.xml")));
             // Create app type object
             if (metainfo.getApplication() != null) {
               Application application = metainfo.getApplication();
@@ -637,11 +520,11 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
                 // appTypeComponent.setPriority(component.);
                 if (component.getMinInstanceCount() != null) {
                   appTypeComponent.setInstanceCount(Integer.parseInt(component
-                                                                         .getMinInstanceCount()));
+                      .getMinInstanceCount()));
                 }
                 if (component.getMaxInstanceCount() != null) {
                   appTypeComponent.setMaxInstanceCount(Integer
-                                                           .parseInt(component.getMaxInstanceCount()));
+                      .parseInt(component.getMaxInstanceCount()));
                 }
                 if (resourcesJson != null) {
                   JsonElement componentJson = resourcesJson.getAsJsonObject()
@@ -649,10 +532,10 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
                       .get(component.getName());
                   if (componentJson != null
                       && componentJson.getAsJsonObject().has(
-                      "yarn.role.priority")) {
+                          "yarn.role.priority")) {
                     appTypeComponent.setPriority(Integer.parseInt(componentJson
-                                                                      .getAsJsonObject().get("yarn.role.priority")
-                                                                      .getAsString()));
+                        .getAsJsonObject().get("yarn.role.priority")
+                        .getAsString()));
                   }
                 }
                 appTypeComponent.setCategory(component.getCategory());
@@ -661,7 +544,7 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
 
               appType.setJmxMetrics(readMetrics(zipFile, "jmx_metrics.json"));
               appType.setGangliaMetrics(readMetrics(zipFile,
-                                                    "ganglia_metrics.json"));
+                  "ganglia_metrics.json"));
 
               appType.setTypeComponents(appTypeComponentList);
               appTypes.add(appType);
@@ -678,16 +561,16 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
   }
 
   Map<String, Map<String, Map<String, Metric>>> readMetrics(ZipFile zipFile,
-                                                            String fileName) {
+      String fileName) {
     Map<String, Map<String, Map<String, Metric>>> metrics = null;
     try {
       InputStream inputStream = zipFile.getInputStream(zipFile
-                                                           .getEntry("jmx_metrics.json"));
+          .getEntry("jmx_metrics.json"));
       ObjectMapper mapper = new ObjectMapper();
 
       metrics = mapper.readValue(inputStream,
-                                 new TypeReference<Map<String, Map<String, Map<String, Metric>>>>() {
-                                 });
+          new TypeReference<Map<String, Map<String, Map<String, Metric>>>>() {
+          });
     } catch (IOException e) {
       logger.info("Error reading metrics. " + e.getMessage());
     }
@@ -727,31 +610,26 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
         appCount = ++createAppCounter;
       }
       File appCreateFolder = new File(appsCreateFolder,
-                                      Integer.toString(appCount));
+          Integer.toString(appCount));
       appCreateFolder.mkdirs();
       File appConfigJsonFile = new File(appCreateFolder, "appConfig.json");
       File resourcesJsonFile = new File(appCreateFolder, "resources.json");
       saveAppConfigs(configs, componentsArray, appConfigJsonFile);
       saveAppResources(componentsArray, resourcesJsonFile);
 
-      AmbariClusterInfo clusterInfo = ambariClient.getClusterInfo();
-      AmbariCluster cluster = ambariClient.getCluster(clusterInfo);
-      Map<String, String> coreSiteConfigs = ambariClient.getConfiguration(
-          clusterInfo, "core-site", cluster.getDesiredConfigs()
-          .get("core-site"));
-      String hdfsLocation = coreSiteConfigs.get("fs.defaultFS");
+      String hdfsLocation = viewContext.getProperties().get(PROPERTY_HDFS_ADDRESS);
       final ActionCreateArgs createArgs = new ActionCreateArgs();
       createArgs.template = appConfigJsonFile;
       createArgs.resources = resourcesJsonFile;
       createArgs.image = new Path(hdfsLocation
-                                  + "/user/yarn/agent/slider-agent.tar.gz");
+          + "/user/yarn/agent/slider-agent.tar.gz");
 
       ClassLoader currentClassLoader = Thread.currentThread()
           .getContextClassLoader();
       Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
       try {
         ApplicationId applicationId = UserGroupInformation.getBestUGI(null,
-                                                                      "yarn").doAs(new PrivilegedExceptionAction<ApplicationId>() {
+            "yarn").doAs(new PrivilegedExceptionAction<ApplicationId>() {
           public ApplicationId run() throws IOException, YarnException {
             SliderClient sliderClient = getSliderClient();
             sliderClient.actionCreate(appName, createArgs);
@@ -769,10 +647,10 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
   }
 
   private void saveAppResources(JsonArray componentsArray,
-                                File resourcesJsonFile) throws IOException {
+      File resourcesJsonFile) throws IOException {
     JsonObject resourcesObj = new JsonObject();
     resourcesObj.addProperty("schema",
-                             "http://example.org/specification/v2.0.0");
+        "http://example.org/specification/v2.0.0");
     resourcesObj.add("metadata", new JsonObject());
     resourcesObj.add("global", new JsonObject());
     JsonObject componentsObj = new JsonObject();
@@ -782,11 +660,11 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
         if (inputComponent.has("id")) {
           JsonObject componentValue = new JsonObject();
           componentValue.addProperty("yarn.role.priority",
-                                     inputComponent.get("priority").getAsString());
+              inputComponent.get("priority").getAsString());
           componentValue.addProperty("yarn.component.instances", inputComponent
               .get("instanceCount").getAsString());
           componentsObj.add(inputComponent.get("id").getAsString(),
-                            componentValue);
+              componentValue);
         }
       }
     }
@@ -804,7 +682,7 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
   }
 
   private void saveAppConfigs(JsonObject configs, JsonArray componentsArray,
-                              File appConfigJsonFile) throws IOException {
+      File appConfigJsonFile) throws IOException {
     JsonObject appConfigs = new JsonObject();
     appConfigs.addProperty("schema", "http://example.org/specification/v2.0.0");
     appConfigs.add("metadata", new JsonObject());
@@ -815,7 +693,7 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
         JsonObject inputComponent = componentsArray.get(i).getAsJsonObject();
         if (inputComponent.has("id")) {
           componentsObj.add(inputComponent.get("id").getAsString(),
-                            new JsonObject());
+              new JsonObject());
         }
       }
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/11146fb6/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/ViewStatus.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/ViewStatus.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/ViewStatus.java
index 134f400..b9dbbbd 100644
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/ViewStatus.java
+++ b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/ViewStatus.java
@@ -18,34 +18,15 @@
 
 package org.apache.ambari.view.slider;
 
-import java.util.List;
 
 public class ViewStatus {
-	private String version;
-	private boolean viewEnabled;
-	private List<String> viewErrors;
+  private String version;
 
-	public String getVersion() {
-		return version;
-	}
+  public String getVersion() {
+    return version;
+  }
 
-	public void setVersion(String version) {
-		this.version = version;
-	}
-
-	public boolean isViewEnabled() {
-		return viewEnabled;
-	}
-
-	public void setViewEnabled(boolean viewEnabled) {
-		this.viewEnabled = viewEnabled;
-	}
-
-	public List<String> getViewErrors() {
-		return viewErrors;
-	}
-
-	public void setViewErrors(List<String> viewErrors) {
-		this.viewErrors = viewErrors;
-	}
+  public void setVersion(String version) {
+    this.version = version;
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/11146fb6/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariClient.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariClient.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariClient.java
index a53afe4..b77e340 100644
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariClient.java
+++ b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariClient.java
@@ -20,9 +20,6 @@ package org.apache.ambari.view.slider.clients;
 
 import java.util.Map;
 
-import com.google.inject.ImplementedBy;
-
-@ImplementedBy(AmbariInternalClient.class)
 public interface AmbariClient {
 	/**
 	 * Provides the first cluster defined on this Ambari server.

http://git-wip-us.apache.org/repos/asf/ambari/blob/11146fb6/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariInternalClient.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariInternalClient.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariInternalClient.java
deleted file mode 100644
index 529af9d..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariInternalClient.java
+++ /dev/null
@@ -1,292 +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.
- */
-
-package org.apache.ambari.view.slider.clients;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.ambari.server.controller.predicate.AndPredicate;
-import org.apache.ambari.server.controller.predicate.EqualsPredicate;
-import org.apache.ambari.server.controller.spi.ClusterController;
-import org.apache.ambari.server.controller.spi.NoSuchParentResourceException;
-import org.apache.ambari.server.controller.spi.NoSuchResourceException;
-import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.spi.SystemException;
-import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
-import org.apache.ambari.server.controller.utilities.ClusterControllerHelper;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
-import org.apache.ambari.server.state.DesiredConfig;
-import org.apache.ambari.server.state.State;
-import org.apache.log4j.Logger;
-
-import com.google.inject.Singleton;
-
-@Singleton
-public class AmbariInternalClient implements AmbariClient {
-
-	private static final Logger logger = Logger
-	    .getLogger(AmbariInternalClient.class);
-
-	@Override
-	public AmbariCluster getCluster(AmbariClusterInfo clusterInfo) {
-		ClusterController clusterController = ClusterControllerHelper
-		    .getClusterController();
-		try {
-			EqualsPredicate<String> clusterPredicate = new EqualsPredicate<String>(
-			    "Clusters/cluster_name", clusterInfo.getName());
-			Set<Resource> clusterResources = clusterController.getResources(
-			    Resource.Type.Cluster, PropertyHelper.getReadRequest(),
-			    clusterPredicate);
-			if (!clusterResources.isEmpty()) {
-				Resource clusterResource = clusterResources.iterator().next();
-				AmbariCluster cluster = new AmbariCluster();
-				cluster.setName(clusterResource.getPropertyValue(
-				    "Clusters/cluster_name").toString());
-				cluster.setVersion(clusterResource.getPropertyValue("Clusters/version")
-				    .toString());
-				Map<String, String> desiredConfigsMap = new HashMap<String, String>();
-				Map<String, Object> desiredConfigsMapResource = clusterResource
-				    .getPropertiesMap().get("Clusters/desired_configs");
-				for (Map.Entry<String, Object> siteEntry : desiredConfigsMapResource
-				    .entrySet()) {
-					desiredConfigsMap.put(siteEntry.getKey(),
-					    ((DesiredConfig) siteEntry.getValue()).getTag());
-				}
-				cluster.setDesiredConfigs(desiredConfigsMap);
-
-				EqualsPredicate<String> serviceClusterPredicate = new EqualsPredicate<String>(
-				    "ServiceInfo/cluster_name", cluster.getName());
-				EqualsPredicate<String> hostClusterPredicate = new EqualsPredicate<String>(
-				    "Hosts/cluster_name", cluster.getName());
-				Set<Resource> serviceResources = clusterController.getResources(
-				    Resource.Type.Service, PropertyHelper.getReadRequest(),
-				    serviceClusterPredicate);
-				Set<Resource> hostResources = clusterController.getResources(
-				    Resource.Type.Host, PropertyHelper.getReadRequest(),
-				    hostClusterPredicate);
-				List<AmbariServiceInfo> servicesList = new ArrayList<AmbariServiceInfo>();
-				List<AmbariHostInfo> hostsList = new ArrayList<AmbariHostInfo>();
-				for (Resource serviceResource : serviceResources) {
-					AmbariServiceInfo service = new AmbariServiceInfo();
-					service.setId(serviceResource.getPropertyValue(
-					    "ServiceInfo/service_name").toString());
-					service.setStarted(State.STARTED.toString().equals(
-					    serviceResource.getPropertyValue("ServiceInfo/state")));
-					service.setMaintenanceMode("ON".equals(serviceResource
-					    .getPropertyValue("ServiceInfo/maintenance_state")));
-					servicesList.add(service);
-				}
-				for (Resource hostResource : hostResources) {
-					AmbariHostInfo host = new AmbariHostInfo();
-					host.setHostName(hostResource.getPropertyValue("Hosts/host_name")
-					    .toString());
-					hostsList.add(host);
-				}
-				cluster.setServices(servicesList);
-				cluster.setHosts(hostsList);
-				return cluster;
-			}
-		} catch (UnsupportedPropertyException e) {
-			logger.warn(
-			    "Unable to determine Ambari cluster details - "
-			        + clusterInfo.getName(), e);
-			throw new RuntimeException(e.getMessage(), e);
-		} catch (NoSuchResourceException e) {
-			logger.warn(
-			    "Unable to determine Ambari cluster details - "
-			        + clusterInfo.getName(), e);
-			throw new RuntimeException(e.getMessage(), e);
-		} catch (NoSuchParentResourceException e) {
-			logger.warn(
-			    "Unable to determine Ambari cluster details - "
-			        + clusterInfo.getName(), e);
-			throw new RuntimeException(e.getMessage(), e);
-		} catch (SystemException e) {
-			logger.warn(
-			    "Unable to determine Ambari cluster details - "
-			        + clusterInfo.getName(), e);
-			throw new RuntimeException(e.getMessage(), e);
-		}
-		return null;
-	}
-
-	@Override
-	public AmbariClusterInfo getClusterInfo() {
-		ClusterController clusterController = ClusterControllerHelper
-		    .getClusterController();
-		try {
-			Set<Resource> resources = clusterController.getResources(
-			    Resource.Type.Cluster, PropertyHelper.getReadRequest(), null);
-			if (resources.size() > 0) {
-				Resource clusterResource = resources.iterator().next();
-				AmbariClusterInfo clusterInfo = new AmbariClusterInfo();
-				clusterInfo.setName(clusterResource.getPropertyValue(
-				    "Clusters/cluster_name").toString());
-				clusterInfo.setVersion(clusterResource.getPropertyValue(
-				    "Clusters/version").toString());
-				return clusterInfo;
-			}
-		} catch (UnsupportedPropertyException e) {
-			logger.warn("Unable to determine Ambari cluster", e);
-			throw new RuntimeException(e.getMessage(), e);
-		} catch (NoSuchResourceException e) {
-			logger.warn("Unable to determine Ambari cluster", e);
-			throw new RuntimeException(e.getMessage(), e);
-		} catch (NoSuchParentResourceException e) {
-			logger.warn("Unable to determine Ambari cluster", e);
-			throw new RuntimeException(e.getMessage(), e);
-		} catch (SystemException e) {
-			logger.warn("Unable to determine Ambari cluster", e);
-			throw new RuntimeException(e.getMessage(), e);
-		}
-		return null;
-	}
-
-	@Override
-	public Map<String, String> getConfiguration(AmbariClusterInfo cluster,
-	    String configType, String configTag) {
-		ClusterController clusterController = ClusterControllerHelper
-		    .getClusterController();
-		try {
-			EqualsPredicate<String> clusterPredicate = new EqualsPredicate<String>(
-			    "Config/cluster_name", cluster.getName());
-			EqualsPredicate<String> typePredicate = new EqualsPredicate<String>(
-			    "type", configType);
-			EqualsPredicate<String> tagPredicate = new EqualsPredicate<String>("tag",
-			    configTag);
-			AndPredicate typeTagPredicate = new AndPredicate(typePredicate,
-			    tagPredicate);
-			AndPredicate configsPredicate = new AndPredicate(clusterPredicate,
-			    typeTagPredicate);
-
-			Set<Resource> configResources = clusterController.getResources(
-			    Resource.Type.Configuration, PropertyHelper.getReadRequest(),
-			    configsPredicate);
-			if (!configResources.isEmpty()) {
-				Resource configResource = configResources.iterator().next();
-				Map<String, String> configs = new HashMap<String, String>();
-				Object props = configResource.getPropertiesMap().get("properties");
-				if (props instanceof Map) {
-					@SuppressWarnings("unchecked")
-					Map<String, String> propsMap = (Map<String, String>) props;
-					configs.putAll(propsMap);
-				}
-				return configs;
-			}
-		} catch (UnsupportedPropertyException e) {
-			logger.warn("Unable to determine Ambari cluster configuration", e);
-			throw new RuntimeException(e.getMessage(), e);
-		} catch (NoSuchResourceException e) {
-			logger.warn("Unable to determine Ambari cluster configuration", e);
-			throw new RuntimeException(e.getMessage(), e);
-		} catch (NoSuchParentResourceException e) {
-			logger.warn("Unable to determine Ambari cluster configuration", e);
-			throw new RuntimeException(e.getMessage(), e);
-		} catch (SystemException e) {
-			logger.warn("Unable to determine Ambari cluster configuration", e);
-			throw new RuntimeException(e.getMessage(), e);
-		}
-		return null;
-	}
-
-	@Override
-	public AmbariService getService(AmbariClusterInfo clusterInfo,
-	    String serviceId) {
-		ClusterController clusterController = ClusterControllerHelper
-		    .getClusterController();
-		try {
-			EqualsPredicate<String> clusterPredicate = new EqualsPredicate<String>(
-			    "ServiceInfo/cluster_name", clusterInfo.getName());
-			EqualsPredicate<String> servicePredicate = new EqualsPredicate<String>(
-			    "ServiceInfo/service_name", serviceId);
-			AndPredicate andPredicate = new AndPredicate(clusterPredicate,
-			    servicePredicate);
-			Set<Resource> serviceResources = clusterController.getResources(
-			    Resource.Type.Service, PropertyHelper.getReadRequest(), andPredicate);
-			if (!serviceResources.isEmpty()) {
-				Resource serviceResource = serviceResources.iterator().next();
-				AmbariService service = new AmbariService();
-				service.setId(serviceResource.getPropertyValue(
-				    "ServiceInfo/service_name").toString());
-				service.setStarted(State.STARTED.toString().equals(
-				    serviceResource.getPropertyValue("ServiceInfo/state")));
-				service.setMaintenanceMode("ON".equals(serviceResource
-				    .getPropertyValue("ServiceInfo/maintenance_state")));
-				// Components
-				Map<String, List<AmbariHostComponent>> componentsMap = new HashMap<String, List<AmbariHostComponent>>();
-				service.setComponentsToHostComponentsMap(componentsMap);
-				clusterPredicate = new EqualsPredicate<String>(
-				    "ServiceComponentInfo/cluster_name", clusterInfo.getName());
-				servicePredicate = new EqualsPredicate<String>(
-				    "ServiceComponentInfo/service_name", serviceId);
-				andPredicate = new AndPredicate(clusterPredicate, servicePredicate);
-				Set<Resource> componentResources = clusterController.getResources(
-				    Resource.Type.Component, PropertyHelper.getReadRequest(),
-				    andPredicate);
-				if (!componentResources.isEmpty()) {
-					for (Resource componentResouce : componentResources) {
-						List<AmbariHostComponent> hostComponents = new ArrayList<AmbariHostComponent>();
-						String componentName = componentResouce.getPropertyValue(
-						    "ServiceComponentInfo/component_name").toString();
-						componentsMap.put(componentName, hostComponents);
-						clusterPredicate = new EqualsPredicate<String>(
-						    "HostRoles/cluster_name", clusterInfo.getName());
-						EqualsPredicate<String> componentPredicate = new EqualsPredicate<String>(
-						    "HostRoles/component_name", componentName);
-						andPredicate = new AndPredicate(clusterPredicate,
-						    componentPredicate);
-						Set<Resource> hostComponentResources = clusterController
-						    .getResources(Resource.Type.HostComponent,
-						        PropertyHelper.getReadRequest(), andPredicate);
-						if (!hostComponentResources.isEmpty()) {
-							for (Resource hostComponentResource : hostComponentResources) {
-								AmbariHostComponent hc = new AmbariHostComponent();
-								hc.setHostName(hostComponentResource.getPropertyValue(
-								    "HostRoles/host_name").toString());
-								hc.setName(hostComponentResource.getPropertyValue(
-								    "HostRoles/component_name").toString());
-								hc.setStarted(State.STARTED.toString().equals(
-								    hostComponentResource.getPropertyValue("HostRoles/state")
-								        .toString()));
-								hostComponents.add(hc);
-							}
-						}
-					}
-				}
-				return service;
-			}
-		} catch (UnsupportedPropertyException e) {
-			logger.warn("Unable to determine service details - " + serviceId, e);
-			throw new RuntimeException(e.getMessage(), e);
-		} catch (NoSuchResourceException e) {
-			logger.warn("Unable to determine service details - " + serviceId, e);
-			throw new RuntimeException(e.getMessage(), e);
-		} catch (NoSuchParentResourceException e) {
-			logger.warn("Unable to determine service details - " + serviceId, e);
-			throw new RuntimeException(e.getMessage(), e);
-		} catch (SystemException e) {
-			logger.warn("Unable to determine service details - " + serviceId, e);
-			throw new RuntimeException(e.getMessage(), e);
-		}
-		return null;
-	}
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/11146fb6/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/JMXMetricHolder.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/JMXMetricHolder.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/JMXMetricHolder.java
new file mode 100644
index 0000000..04b824a
--- /dev/null
+++ b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/JMXMetricHolder.java
@@ -0,0 +1,50 @@
+/**
+ * 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.ambari.view.slider.rest.client;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ */
+public final class JMXMetricHolder {
+
+  private List<Map<String, Object>> beans;
+
+  public List<Map<String, Object>> getBeans() {
+    return beans;
+  }
+
+  public void setBeans(List<Map<String, Object>> beans) {
+    this.beans = beans;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder stringBuilder = new StringBuilder();
+
+    for (Map<String, Object> map : beans) {
+      for (Map.Entry<String, Object> entry : map.entrySet()) {
+        stringBuilder.append("    ").append(entry.toString()).append("\n");
+      }
+    }
+    return stringBuilder.toString();
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/11146fb6/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppJmxHelper.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppJmxHelper.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppJmxHelper.java
index e0a8072..d3ca1e4 100644
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppJmxHelper.java
+++ b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppJmxHelper.java
@@ -18,7 +18,6 @@
 
 package org.apache.ambari.view.slider.rest.client;
 
-import org.apache.ambari.server.controller.jmx.JMXMetricHolder;
 import org.apache.commons.io.IOUtils;
 import org.apache.log4j.Logger;
 import org.codehaus.jackson.map.DeserializationConfig;

http://git-wip-us.apache.org/repos/asf/ambari/blob/11146fb6/contrib/views/slider/src/main/resources/ui/app/controllers/slider_apps_controller.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/controllers/slider_apps_controller.js b/contrib/views/slider/src/main/resources/ui/app/controllers/slider_apps_controller.js
index 7199777..2f422f1 100644
--- a/contrib/views/slider/src/main/resources/ui/app/controllers/slider_apps_controller.js
+++ b/contrib/views/slider/src/main/resources/ui/app/controllers/slider_apps_controller.js
@@ -146,13 +146,19 @@ App.SliderAppsController = Ember.ArrayController.extend({
    * @method sendInitialValues
    */
   sendInitialValues: function () {
+    var initialValues = this.get('initialValuesToLoad');
     return App.ajax.send({
       name: 'saveInitialValues',
       sender: this,
       data: {
         data:  {
           ViewInstanceInfo: {
-            properties: this.get('initialValuesToLoad')
+            properties: {
+              'hdfs.address': initialValues.get('hdfsAddress'),
+              'yarn.resourcemanager.address': initialValues.get('yarnRMAddress'),
+              'yarn.resourcemanager.scheduler.address': initialValues.get('yarnRMSchedulerAddress'),
+              'zookeeper.quorum': initialValues.get('zookeeperQuorum')
+            }
           }
         }
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/11146fb6/contrib/views/slider/src/main/resources/ui/app/initialize.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/initialize.js b/contrib/views/slider/src/main/resources/ui/app/initialize.js
index a9df6ad..4fc797a 100755
--- a/contrib/views/slider/src/main/resources/ui/app/initialize.js
+++ b/contrib/views/slider/src/main/resources/ui/app/initialize.js
@@ -29,7 +29,18 @@ App.initializer({
   name: "preload",
 
   initialize: function(container, application) {
-
+    var viewId = 'SLIDER';
+    var viewVersion = '1.0.0';
+    var instanceName = 'SLIDER_1';
+    if (location.pathname != null) {
+      var splits = location.pathname.split('/');
+      if (splits != null && splits.length > 4) {
+        viewId = splits[2];
+        viewVersion = splits[3];
+        instanceName = splits[4];
+      }
+    }
+    
     application.reopen({
       /**
        * Test mode is automatically enabled if running on brunch server
@@ -40,13 +51,13 @@ App.initializer({
       /**
        * @type {string}
        */
-      name: 'SLIDER',
+      name: viewId,
 
       /**
        * Slider version
        * @type {string}
        */
-      version: '1.0.0',
+      version: viewVersion,
 
       /**
        * Version of SLIDER_1 resource
@@ -57,7 +68,7 @@ App.initializer({
       /**
        * @type {string}
        */
-      instance: 'SLIDER_1',
+      instance: instanceName,
 
       /**
        * API url for Slider

http://git-wip-us.apache.org/repos/asf/ambari/blob/11146fb6/contrib/views/slider/src/main/resources/view.xml
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/view.xml b/contrib/views/slider/src/main/resources/view.xml
index 57499ce..87dfbe7 100644
--- a/contrib/views/slider/src/main/resources/view.xml
+++ b/contrib/views/slider/src/main/resources/view.xml
@@ -18,9 +18,26 @@ limitations under the License. Kerberos, LDAP, Custom. Binary/Htt
   <name>SLIDER</name>
   <label>Slider Apps View</label>
   <version>1.0.0</version>
-  <instance>
-    <name>SLIDER_1</name>
-  </instance>
+  <parameter>
+    <name>hdfs.address</name>
+    <description>The URL to access HDFS service via its protocol. Typically this is the fs.defaultFS property in the core-site.xml configuration. For example: hdfs://hdfs.namenode.host:8020.</description>
+    <required>false</required>
+  </parameter>
+  <parameter>
+    <name>yarn.resourcemanager.address</name>
+    <description>The URL to the YARN ResourceManager, used to provide YARN Application data. For example: http://yarn.resourcemanager.host:8050</description>
+    <required>false</required>
+  </parameter>
+  <parameter>
+    <name>yarn.resourcemanager.scheduler.address</name>
+    <description>The URL to the YARN ResourceManager Scheduler, which schedules YARN Applications. For example: http://yarn.resourcemanager.host:8030</description>
+    <required>false</required>
+  </parameter>
+  <parameter>
+    <name>zookeeper.quorum</name>
+    <description>ZooKeeper quorum location. Typically this is a comma separated list of ZooKeeper hostnames and port numbers. The port number can be got from the clientPort property in the zookeeper-env configuration. For example: zookeeper.host1:2181,zookeeper.host2:2181.</description>
+    <required>false</required>
+  </parameter>
   <resource>
     <name>status</name>
     <service-class>org.apache.ambari.view.slider.rest.ViewStatusResource</service-class>