AMBARI-7280. Slider View: View should use existing parameters if set. 
(onechiporenko)


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

Branch: refs/heads/branch-alerts-dev
Commit: 2fbbfb370155ef9adb69fc43362dd0ad1c1448a9
Parents: 941b56a
Author: Oleg Nechiporenko <onechipore...@apache.org>
Authored: Fri Sep 12 17:22:31 2014 +0300
Committer: Oleg Nechiporenko <onechipore...@apache.org>
Committed: Fri Sep 12 17:22:31 2014 +0300

----------------------------------------------------------------------
 .../assets/data/resource/slider-properties.json |  64 ++++
 .../app/controllers/slider_apps_controller.js   | 187 ------------
 .../ui/app/controllers/slider_controller.js     | 294 +++++++++++++++++++
 .../src/main/resources/ui/app/helpers/ajax.js   |  44 +--
 .../src/main/resources/ui/app/initialize.js     |  16 +-
 .../ui/app/mappers/application_status.js        |  52 +++-
 6 files changed, 434 insertions(+), 223 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/2fbbfb37/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/slider-properties.json
----------------------------------------------------------------------
diff --git 
a/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/slider-properties.json
 
b/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/slider-properties.json
new file mode 100644
index 0000000..53a3331
--- /dev/null
+++ 
b/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/slider-properties.json
@@ -0,0 +1,64 @@
+{
+  "href" : 
"http://host:8080/api/v1/views/SLIDER/versions/1.0.0/instances/MySliderName";,
+  "ViewInstanceInfo" : {
+    "context_path" : "/views/SLIDER/1.0.0/MySliderName",
+    "description" : "MySliderDescription",
+    "icon64_path" : null,
+    "icon_path" : null,
+    "instance_name" : "MySliderName",
+    "label" : "MySliderDisplay",
+    "static" : false,
+    "version" : "1.0.0",
+    "view_name" : "SLIDER",
+    "visible" : true,
+    "instance_data" : { },
+    "properties" : {
+      "hdfs.address" : "hdfs://slider-1.c.pramod-thangali.internal:8020",
+      "yarn.resourcemanager.address" : 
"slider-2.c.pramod-thangali.internal:8050",
+      "yarn.resourcemanager.scheduler.address" : 
"slider-2.c.pramod-thangali.internal:8030",
+      "zookeeper.quorum" : 
"slider-1.c.pramod-thangali.internal:2181,slider-2.c.pramod-thangali.internal:2181,slider-3.c.pramod-thangali.internal:2181"
+    }
+  },
+  "resources" : [
+    {
+      "href" : 
"http://host:8080/api/v1/views/SLIDER/versions/1.0.0/instances/MySliderName/resources/status";,
+      "instance_name" : "MySliderName",
+      "name" : "status",
+      "version" : "1.0.0",
+      "view_name" : "SLIDER"
+    }
+  ],
+  "apps" : [
+    {
+      "href" : 
"http://host:8080/api/v1/views/SLIDER/versions/1.0.0/instances/MySliderName/apps/1410332504508_1";,
+      "id" : "1410332504508_1",
+      "instance_name" : "MySliderName",
+      "version" : "1.0.0",
+      "view_name" : "SLIDER"
+    },
+    {
+      "href" : 
"http://host:8080/api/v1/views/SLIDER/versions/1.0.0/instances/MySliderName/apps/1410332504508_2";,
+      "id" : "1410332504508_2",
+      "instance_name" : "MySliderName",
+      "version" : "1.0.0",
+      "view_name" : "SLIDER"
+    }
+  ],
+  "privileges" : [ ],
+  "apptypes" : [
+    {
+      "href" : 
"http://host:8080/api/v1/views/SLIDER/versions/1.0.0/instances/MySliderName/apptypes/HBASE";,
+      "id" : "HBASE",
+      "instance_name" : "MySliderName",
+      "version" : "1.0.0",
+      "view_name" : "SLIDER"
+    },
+    {
+      "href" : 
"http://host:8080/api/v1/views/SLIDER/versions/1.0.0/instances/MySliderName/apptypes/STORM";,
+      "id" : "STORM",
+      "instance_name" : "MySliderName",
+      "version" : "1.0.0",
+      "view_name" : "SLIDER"
+    }
+  ]
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/2fbbfb37/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 2f422f1..1bca7e4 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
@@ -18,191 +18,4 @@
 
 App.SliderAppsController = Ember.ArrayController.extend({
 
-  /**
-   *  Load resources on controller initialization
-   * @method initResources
-   */
-  initResources:function () {
-    this.getClusterName();
-  },
-
-  initialValuesToLoad: Em.Object.create({
-    ambariAddress: null,
-    clusterName: null,
-    hdfsAddress: null,
-    yarnRMAddress: null,
-    yarnRMSchedulerAddress: null,
-    zookeeperQuorum: null
-  }),
-
-  zookeeperHosts: [],
-
-  /**
-   * Get cluster name from server
-   * @returns {$.ajax}
-   * @method getClusterName
-   */
-  getClusterName: function() {
-    return App.ajax.send({
-      name: 'cluster_name',
-      sender: this,
-      data: {
-        urlPrefix: '/api/v1/'
-      },
-      success: 'getClusterNameSuccessCallback'
-    });
-  },
-
-  /**
-   * Success callback for clusterName-request
-   * @param {object} data
-   * @method getClusterNameSuccessCallback
-   */
-  getClusterNameSuccessCallback: function(data) {
-    var clusterName = Em.get(data.items[0], 'Clusters.cluster_name');
-    App.set('clusterName', clusterName);
-    App.ApplicationStatusMapper.loop('load');
-    this.loadConfigsTags();
-    
this.loadComponentHost({componentName:"GANGLIA_SERVER",callback:"loadGangliaHostSuccessCallback"});
-    
this.loadComponentHost({componentName:"NAGIOS_SERVER",callback:"loadNagiosHostSuccessCallback"});
-    
this.loadComponentHost({componentName:"ZOOKEEPER_SERVER",callback:"setZookeeperQuorum"});
-  },
-
-  loadConfigsTags: function () {
-    App.ajax.send({
-      name: 'config.tags',
-      sender: this,
-      data: {
-        urlPrefix: '/api/v1/'
-      },
-      success: 'onLoadConfigsTags'
-    });
-  },
-
-  onLoadConfigsTags: function (data) {
-    var urlParams = [];
-    if(data.Clusters.desired_configs['yarn-site'] && 
data.Clusters.desired_configs['zookeeper-env']){
-      var coreSiteTag = data.Clusters.desired_configs['core-site'].tag;
-      var yarnSiteTag = data.Clusters.desired_configs['yarn-site'].tag;
-      var zookeeperTag = data.Clusters.desired_configs['zookeeper-env'].tag;
-      urlParams.push('(type=core-site&tag=' + coreSiteTag + ')');
-      urlParams.push('(type=yarn-site&tag=' + yarnSiteTag + ')');
-      urlParams.push('(type=zookeeper-env&tag=' + zookeeperTag + ')');
-
-      App.ajax.send({
-        name: 'get_all_configurations',
-        sender: this,
-        data: {
-          urlParams: urlParams.join('|'),
-          urlPrefix: '/api/v1/'
-        },
-        success: 'onLoadConfigs'
-      });
-    }
-  },
-
-  onLoadConfigs: function (data) {
-    var hdfs = data.items.findProperty('type', 'core-site'),
-    yarn = data.items.findProperty('type', 'yarn-site'),
-    zookeeper = data.items.findProperty('type', 'zookeeper-env'),
-    initialValuesToLoad = this.get('initialValuesToLoad');
-    initialValuesToLoad.set('ambariAddress', 
location.protocol+"//"+document.location.host);
-    initialValuesToLoad.set('clusterName', App.get('clusterName'));
-    initialValuesToLoad.set('hdfsAddress', hdfs.properties['fs.defaultFS']);
-    initialValuesToLoad.set('yarnRMAddress', 
yarn.properties['yarn.resourcemanager.address']);
-    initialValuesToLoad.set('yarnRMSchedulerAddress', 
yarn.properties['yarn.resourcemanager.scheduler.address']);
-    initialValuesToLoad.set('zookeeperQuorum', 
zookeeper.properties.clientPort);
-    this.setZookeeperQuorum();
-  },
-
-  setZookeeperQuorum: function (data){
-    var zookeeperHosts = this.get('zookeeperHosts'),
-    hosts = [],
-    initialValuesToLoad = this.get('initialValuesToLoad');
-
-    //done
-    if(initialValuesToLoad.zookeeperQuorum !== null){
-      if(data){
-        hosts = data.items.map(function(item) {
-          return item.Hosts.host_name + ":" + 
initialValuesToLoad.zookeeperQuorum;
-        });
-        initialValuesToLoad.set('zookeeperQuorum', hosts.join(','));
-        this.sendInitialValues();
-      }else if(zookeeperHosts.length > 0){
-        hosts = zookeeperHosts.map(function(host) {
-          return host + ":" + initialValuesToLoad.zookeeperQuorum;
-        });
-        initialValuesToLoad.set('zookeeperQuorum', hosts.join(','));
-        this.sendInitialValues();
-      }
-    }else{
-      this.set('zookeeperHosts', data.items.mapProperty('Hosts.host_name'));
-    }
-  },
-
-  /**
-   * Send request to server to save initialValues
-   * @return {$.ajax}
-   * @method sendInitialValues
-   */
-  sendInitialValues: function () {
-    var initialValues = this.get('initialValuesToLoad');
-    return App.ajax.send({
-      name: 'saveInitialValues',
-      sender: this,
-      data: {
-        data:  {
-          ViewInstanceInfo: {
-            properties: {
-              'hdfs.address': initialValues.get('hdfsAddress'),
-              'yarn.resourcemanager.address': 
initialValues.get('yarnRMAddress'),
-              'yarn.resourcemanager.scheduler.address': 
initialValues.get('yarnRMSchedulerAddress'),
-              'zookeeper.quorum': initialValues.get('zookeeperQuorum')
-            }
-          }
-        }
-      }
-    });
-  },
-
-  /**
-   * Load ganglia server host
-   * @method loadGangliaHost
-   */
-  loadComponentHost: function (params) {
-    return App.ajax.send({
-      name: 'components_hosts',
-      sender: this,
-      data: {
-        componentName: params.componentName,
-        urlPrefix: '/api/v1/'
-      },
-      success: params.callback
-    });
-
-  },
-
-  /**
-   * Success callback for hosts-request
-   * Save host name to gangliaHost
-   * @param {Object} data
-   * @method loadGangliaHostSuccessCallback
-   */
-  loadGangliaHostSuccessCallback: function (data) {
-    if(data.items[0]){
-      App.set('gangliaHost', Em.get(data.items[0], 'Hosts.host_name'));
-    }
-  },
-
-  /**
-   * Success callback for hosts-request
-   * Save host name to nagiosHost
-   * @param {Object} data
-   * @method loadGangliaHostSuccessCallback
-   */
-  loadNagiosHostSuccessCallback: function (data) {
-    if(data.items[0]){
-      App.set('nagiosHost', Em.get(data.items[0], 'Hosts.host_name'));
-    }
-  }
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/2fbbfb37/contrib/views/slider/src/main/resources/ui/app/controllers/slider_controller.js
----------------------------------------------------------------------
diff --git 
a/contrib/views/slider/src/main/resources/ui/app/controllers/slider_controller.js
 
b/contrib/views/slider/src/main/resources/ui/app/controllers/slider_controller.js
new file mode 100644
index 0000000..8283de1
--- /dev/null
+++ 
b/contrib/views/slider/src/main/resources/ui/app/controllers/slider_controller.js
@@ -0,0 +1,294 @@
+/**
+ * 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.
+ */
+
+/**
+ * Checks Slider-properties.
+ * If they are not available, uses Ambari-configs to populate them:
+ *  - Load cluster name
+ *  - Load hostName for GANGLIA_SERVER
+ *  - Load hostName for NAGIOS_SERVER
+ *  - Load hostNames for ZOOKEEPER_SERVER
+ *  - Load config tags
+ *  - Load configs
+ *  - Save Slider-properties
+ * If Slider-properties exists:
+ *  - Load cluster name
+ *  - Load hostNames
+ * @type {Ember.Controller}
+ */
+App.SliderController = Ember.Controller.extend({
+
+  /**
+   *  Load resources on controller initialization
+   * @method initResources
+   */
+  initResources: function () {
+    this.getParametersFromViewProperties();
+  },
+
+  /**
+   * List of Slider-properties mapped from Ambari-configs
+   * @type {Em.Object}
+   */
+  initialValuesToLoad: Em.Object.create({
+    ambariAddress: null,
+    clusterName: null,
+    hdfsAddress: null,
+    yarnRMAddress: null,
+    yarnRMSchedulerAddress: null,
+    zookeeperQuorum: null
+  }),
+
+  /**
+   * List of host names with ZOOKEEPER_SERVER installed
+   * @type {string[]}
+   */
+  zookeeperHosts: [],
+
+  /**
+   * Get Slider properties from View-parameters (set in the Ambari Admin View)
+   * If parameters can't be found, use Ambari-configs to populate Slider 
properties
+   * @returns {$.ajax}
+   * @method getParametersFromViewProperties
+   */
+  getParametersFromViewProperties: function() {
+    return App.ajax.send({
+      name: 'slider.getViewParams',
+      sender: this,
+      success: 'getParametersFromViewPropertiesSuccessCallback',
+      error: 'getClusterName'
+    });
+  },
+
+  /**
+   * Check if Slider-properties exist
+   * If not - get Ambari configs to populate Slider properties
+   * @param {object} data
+   * @method getParametersFromViewPropertiesSuccessCallback
+   */
+  getParametersFromViewPropertiesSuccessCallback: function(data) {
+    var properties = Em.get(data, 'ViewInstanceInfo.properties'),
+      loadConfigs = Em.isNone(properties);
+      this.getClusterName(loadConfigs);
+  },
+
+  /**
+   * Get cluster name from server
+   * @returns {$.ajax}
+   * @method getClusterName
+   */
+  getClusterName: function (loadConfigs) {
+    if (Em.isNone(loadConfigs)) loadConfigs = true;
+    return App.ajax.send({
+      name: 'cluster_name',
+      sender: this,
+      data: {
+        urlPrefix: '/api/v1/',
+        loadConfigs: loadConfigs
+      },
+      success: 'getClusterNameSuccessCallback'
+    });
+  },
+
+  /**
+   * Success callback for clusterName-request
+   * @param {object} data
+   * @param {object} opt
+   * @param {object} params
+   * @method getClusterNameSuccessCallback
+   */
+  getClusterNameSuccessCallback: function (data, opt, params) {
+    var clusterName = Em.get(data.items[0], 'Clusters.cluster_name');
+    App.set('clusterName', clusterName);
+    App.ApplicationStatusMapper.loop('load');
+    this.loadComponentHost({componentName: "GANGLIA_SERVER", callback: 
"loadGangliaHostSuccessCallback"});
+    this.loadComponentHost({componentName: "NAGIOS_SERVER", callback: 
"loadNagiosHostSuccessCallback"});
+    this.loadComponentHost({componentName: "ZOOKEEPER_SERVER", callback: 
"setZookeeperQuorum"});
+    if(params.loadConfigs) {
+      this.loadConfigsTags();
+    }
+  },
+
+  /**
+   * Load config tags from server
+   * @returns {$.ajax}
+   * @method loadConfigsTags
+   */
+  loadConfigsTags: function () {
+    return App.ajax.send({
+      name: 'config.tags',
+      sender: this,
+      data: {
+        urlPrefix: '/api/v1/'
+      },
+      success: 'onLoadConfigsTags'
+    });
+  },
+
+  /**
+   * Success callback for <code>loadConfigsTags</code>
+   * Get configs for selected tags
+   * @param {object} data
+   * @method onLoadConfigsTags
+   */
+  onLoadConfigsTags: function (data) {
+    var urlParams = [];
+    if (data.Clusters.desired_configs['yarn-site'] && 
data.Clusters.desired_configs['zookeeper-env']) {
+      var coreSiteTag = data.Clusters.desired_configs['core-site'].tag;
+      var yarnSiteTag = data.Clusters.desired_configs['yarn-site'].tag;
+      var zookeeperTag = data.Clusters.desired_configs['zookeeper-env'].tag;
+      urlParams.push('(type=core-site&tag=' + coreSiteTag + ')');
+      urlParams.push('(type=yarn-site&tag=' + yarnSiteTag + ')');
+      urlParams.push('(type=zookeeper-env&tag=' + zookeeperTag + ')');
+
+      App.ajax.send({
+        name: 'get_all_configurations',
+        sender: this,
+        data: {
+          urlParams: urlParams.join('|'),
+          urlPrefix: '/api/v1/'
+        },
+        success: 'onLoadConfigs'
+      });
+    }
+  },
+
+  /**
+   * Success callback for <code>onLoadConfigs</code>
+   * Set properties for <code>initialValuesToLoad</code> using loaded configs
+   * @param {object} data
+   * @method onLoadConfigs
+   */
+  onLoadConfigs: function (data) {
+    var hdfs = data.items.findProperty('type', 'core-site'),
+      yarn = data.items.findProperty('type', 'yarn-site'),
+      zookeeper = data.items.findProperty('type', 'zookeeper-env'),
+      initialValuesToLoad = this.get('initialValuesToLoad');
+    initialValuesToLoad.set('ambariAddress', location.protocol + "//" + 
document.location.host);
+    initialValuesToLoad.set('clusterName', App.get('clusterName'));
+    initialValuesToLoad.set('hdfsAddress', hdfs.properties['fs.defaultFS']);
+    initialValuesToLoad.set('yarnRMAddress', 
yarn.properties['yarn.resourcemanager.address']);
+    initialValuesToLoad.set('yarnRMSchedulerAddress', 
yarn.properties['yarn.resourcemanager.scheduler.address']);
+    initialValuesToLoad.set('zookeeperQuorum', 
zookeeper.properties.clientPort);
+    this.setZookeeperQuorum();
+  },
+
+  /**
+   * Set value for <code>initialValuesToLoad.zookeeperQuorum</code>
+   * Also do request to save Slider-properties
+   * @param {object} data
+   * @method setZookeeperQuorum
+   */
+  setZookeeperQuorum: function (data) {
+    var zookeeperHosts = this.get('zookeeperHosts'),
+      hosts = [],
+      initialValuesToLoad = this.get('initialValuesToLoad');
+
+    //done
+    if (!Em.isNone(initialValuesToLoad.zookeeperQuorum)) {
+      if (data) {
+        hosts = data.items.map(function (item) {
+          return item.Hosts.host_name + ":" + 
initialValuesToLoad.zookeeperQuorum;
+        });
+        initialValuesToLoad.set('zookeeperQuorum', hosts.join(','));
+        this.sendInitialValues();
+      }
+      else {
+        if (zookeeperHosts.length > 0) {
+          hosts = zookeeperHosts.map(function (host) {
+            return host + ":" + initialValuesToLoad.zookeeperQuorum;
+          });
+          initialValuesToLoad.set('zookeeperQuorum', hosts.join(','));
+          this.sendInitialValues();
+        }
+      }
+    }
+    else {
+      this.set('zookeeperHosts', data.items.mapProperty('Hosts.host_name'));
+    }
+  },
+
+  /**
+   * Send request to server to save initialValues
+   * @return {$.ajax}
+   * @method sendInitialValues
+   */
+  sendInitialValues: function () {
+    var initialValues = this.get('initialValuesToLoad');
+    return App.ajax.send({
+      name: 'saveInitialValues',
+      sender: this,
+      data: {
+        data: {
+          ViewInstanceInfo: {
+            properties: {
+              'hdfs.address': initialValues.get('hdfsAddress'),
+              'yarn.resourcemanager.address': 
initialValues.get('yarnRMAddress'),
+              'yarn.resourcemanager.scheduler.address': 
initialValues.get('yarnRMSchedulerAddress'),
+              'zookeeper.quorum': initialValues.get('zookeeperQuorum')
+            }
+          }
+        }
+      }
+    });
+  },
+
+  /**
+   * Load host for component
+   * @param {{componentName: string, callback: string}} params
+   * @return {$.ajax}
+   * @method loadGangliaHost
+   */
+  loadComponentHost: function (params) {
+    return App.ajax.send({
+      name: 'components_hosts',
+      sender: this,
+      data: {
+        componentName: params.componentName,
+        urlPrefix: '/api/v1/'
+      },
+      success: params.callback
+    });
+
+  },
+
+  /**
+   * Success callback for hosts-request
+   * Save host name to GANGLIA_SERVER (set in <code>App.gangliaHost</code>)
+   * @param {Object} data
+   * @method loadGangliaHostSuccessCallback
+   */
+  loadGangliaHostSuccessCallback: function (data) {
+    if (data.items[0]) {
+      App.set('gangliaHost', Em.get(data.items[0], 'Hosts.host_name'));
+    }
+  },
+
+  /**
+   * Success callback for hosts-request
+   * Save host name to NAGIOS_SERVER (set in <code>App.nagiosHost</code>)
+   * @param {Object} data
+   * @method loadGangliaHostSuccessCallback
+   */
+  loadNagiosHostSuccessCallback: function (data) {
+    if (data.items[0]) {
+      App.set('nagiosHost', Em.get(data.items[0], 'Hosts.host_name'));
+    }
+  }
+
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/2fbbfb37/contrib/views/slider/src/main/resources/ui/app/helpers/ajax.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/helpers/ajax.js 
b/contrib/views/slider/src/main/resources/ui/app/helpers/ajax.js
index 6d7e4a1..3da0624 100644
--- a/contrib/views/slider/src/main/resources/ui/app/helpers/ajax.js
+++ b/contrib/views/slider/src/main/resources/ui/app/helpers/ajax.js
@@ -30,11 +30,16 @@
  */
 var urls = {
 
+  'slider.getViewParams': {
+    real: '',
+    mock: '/data/resource/slider-properties.json'
+  },
+
   'mapper.applicationTypes': {
     real: 'apptypes?fields=*',
     mock: '/data/apptypes/all_fields.json',
     headers: {
-      Accept : "text/plain; charset=utf-8",
+      Accept: "text/plain; charset=utf-8",
       "Content-Type": "text/plain; charset=utf-8"
     }
   },
@@ -43,7 +48,7 @@ var urls = {
     real: 'apps/?fields=*',
     mock: '/data/apps/apps.json',
     headers: {
-      Accept : "text/plain; charset=utf-8",
+      Accept: "text/plain; charset=utf-8",
       "Content-Type": "text/plain; charset=utf-8"
     }
   },
@@ -58,7 +63,7 @@ var urls = {
     headers: {
       "Content-Type": "text/plain; charset=utf-8"
     },
-    format: function(data) {
+    format: function (data) {
       return {
         type: 'PUT',
         data: JSON.stringify(data.data)
@@ -72,7 +77,7 @@ var urls = {
     headers: {
       "Content-Type": "text/plain; charset=utf-8"
     },
-    format: function(data) {
+    format: function (data) {
       return {
         type: 'POST',
         data: JSON.stringify(data.data)
@@ -83,7 +88,7 @@ var urls = {
   'destroyApp': {
     real: 'apps/{id}',
     mock: '',
-    format: function() {
+    format: function () {
       return {
         method: 'DELETE'
       }
@@ -96,7 +101,7 @@ var urls = {
     headers: {
       "Content-Type": "text/plain; charset=utf-8"
     },
-    format: function(data) {
+    format: function (data) {
       return {
         method: 'PUT',
         data: JSON.stringify(data.data)
@@ -109,7 +114,7 @@ var urls = {
     headers: {
       "Content-Type": "text/plain; charset=utf-8"
     },
-    format: function(data) {
+    format: function (data) {
       return {
         method: 'PUT',
         data: JSON.stringify(data.data)
@@ -119,18 +124,18 @@ var urls = {
 
   'service_status': {
     real: 
'clusters/{clusterName}/services?fields=ServiceInfo/state&minimal_response=true',
-    mock:'/data/resource/service_status.json',
+    mock: '/data/resource/service_status.json',
     headers: {
-      Accept : "text/plain; charset=utf-8",
+      Accept: "text/plain; charset=utf-8",
       "Content-Type": "text/plain; charset=utf-8"
     }
   },
 
   'components_hosts': {
     real: 
'clusters/{clusterName}/hosts?host_components/HostRoles/component_name={componentName}&minimal_response=true',
-    mock:'/data/resource/components_hosts.json',
+    mock: '/data/resource/components_hosts.json',
     headers: {
-      Accept : "text/plain; charset=utf-8",
+      Accept: "text/plain; charset=utf-8",
       "Content-Type": "text/plain; charset=utf-8"
     }
   },
@@ -139,7 +144,7 @@ var urls = {
     real: 
'clusters/{clusterName}/configurations/service_config_versions?service_name={serviceName}&is_current=true',
     mock: '/data/resource/service_configs.json',
     headers: {
-      Accept : "text/plain; charset=utf-8",
+      Accept: "text/plain; charset=utf-8",
       "Content-Type": "text/plain; charset=utf-8"
     }
   },
@@ -147,7 +152,7 @@ var urls = {
   'config.tags': {
     'real': 'clusters/{clusterName}?fields=Clusters/desired_configs',
     headers: {
-      Accept : "text/plain; charset=utf-8",
+      Accept: "text/plain; charset=utf-8",
       "Content-Type": "text/plain; charset=utf-8"
     }
   },
@@ -155,16 +160,16 @@ var urls = {
   'get_all_configurations': {
     'real': 'clusters/{clusterName}/configurations?{urlParams}',
     headers: {
-      Accept : "text/plain; charset=utf-8",
+      Accept: "text/plain; charset=utf-8",
       "Content-Type": "text/plain; charset=utf-8"
     }
   },
 
   'cluster_name': {
     real: 'clusters',
-    mock:'/data/resource/cluster_name.json',
+    mock: '/data/resource/cluster_name.json',
     headers: {
-      Accept : "text/plain; charset=utf-8",
+      Accept: "text/plain; charset=utf-8",
       "Content-Type": "text/plain; charset=utf-8"
     }
   },
@@ -234,10 +239,11 @@ var formatRequest = function (data) {
   }
   else {
     var prefix = App.get('urlPrefix');
-    if(Em.get(data, 'urlPrefix')){
-      var prefix = Em.get(data, 'urlPrefix');
+    if (Em.get(data, 'urlPrefix')) {
+      prefix = Em.get(data, 'urlPrefix');
     }
-    opt.url = prefix + (formatUrl(this.real, data) ? formatUrl(this.real, 
data) : "");
+    var url = formatUrl(this.real, data);
+    opt.url = prefix + (url ? url : '');
   }
 
   if (this.format) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/2fbbfb37/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 4fc797a..c9b53d7 100755
--- a/contrib/views/slider/src/main/resources/ui/app/initialize.js
+++ b/contrib/views/slider/src/main/resources/ui/app/initialize.js
@@ -90,10 +90,22 @@ App.initializer({
        * List of errors
        * @type {string[]}
        */
-      viewErrors: []
+      viewErrors: [],
+
+      /**
+       * Host with Nagios Server
+       * @type {string|null}
+       */
+      nagiosHost: null,
+
+      /**
+       * Host with Ganglia Server
+       * @type {string|null}
+       */
+      gangliaHost: null
 
     });
-    application.SliderAppsController.proto().initResources();
+    application.SliderController.proto().initResources();
     application.ApplicationTypeMapper.loop('load');
     application.SliderAppsMapper.loop('load');
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2fbbfb37/contrib/views/slider/src/main/resources/ui/app/mappers/application_status.js
----------------------------------------------------------------------
diff --git 
a/contrib/views/slider/src/main/resources/ui/app/mappers/application_status.js 
b/contrib/views/slider/src/main/resources/ui/app/mappers/application_status.js
index f3d3968..21e4c55 100644
--- 
a/contrib/views/slider/src/main/resources/ui/app/mappers/application_status.js
+++ 
b/contrib/views/slider/src/main/resources/ui/app/mappers/application_status.js
@@ -38,7 +38,7 @@ App.ApplicationStatusMapper = 
App.Mapper.createWithMixins(App.RunPeriodically, {
    * @method load
    * @return {$.ajax}
    */
-  load: function() {
+  load: function () {
     return App.ajax.send({
       name: 'mapper.applicationStatus',
       sender: this,
@@ -51,13 +51,18 @@ App.ApplicationStatusMapper = 
App.Mapper.createWithMixins(App.RunPeriodically, {
    * @param {object} data received from server data
    * @method setResourcesVersion
    */
-  setResourcesVersion: function(data) {
-    App.set('resourcesVersion', Em.get(data, "version") ? Em.get(data, 
"version") : "version" );
-    if(App.get('clusterName')){
+  setResourcesVersion: function (data) {
+    App.set('resourcesVersion', Em.getWithDefault(data, "version", 'version'));
+    if (App.get('clusterName')) {
       this.loadServicesStatus();
     }
   },
 
+  /**
+   * Get Services status from Ambari-server
+   * @returns {$.ajax}
+   * @method loadServicesStatus
+   */
   loadServicesStatus: function () {
     return App.ajax.send({
       name: 'service_status',
@@ -69,25 +74,42 @@ App.ApplicationStatusMapper = 
App.Mapper.createWithMixins(App.RunPeriodically, {
     });
   },
 
+  /**
+   * Success-callback for load services status
+   * Set Slider state basing on <code>ServiceInfo.state</code>
+   * @param {object} data
+   * @method setErrors
+   */
   setErrors: function (data) {
     var self = this,
-    errors = [];
-    this.get('servicesWeNeed').forEach( function (serviceName) {
-      self.findError(data.items.findProperty("ServiceInfo.service_name", 
serviceName), errors);
+      errors = [];
+    this.get('servicesWeNeed').forEach(function (serviceName) {
+      var e = 
self.findError(data.items.findProperty("ServiceInfo.service_name", 
serviceName));
+      if (!Em.isNone(e)) {
+        errors.push(e);
+      }
     });
 
-    App.set('viewEnabled', (errors.length > 0 ? false : true));
+    App.set('viewEnabled', errors.length === 0);
     App.set('viewErrors', errors);
   },
 
-  findError: function (data, errors){
-    var name = Em.get(data, "ServiceInfo.service_name")
-    if(data){
-      if(Em.get(data, "ServiceInfo.state") != "STARTED")
-        errors.push(Em.I18n.t('error.start'+name));
-    }else{
-      errors.push(Em.I18n.t('error.no'+name));
+  /**
+   * Get error for service (missed or not started)
+   * @param {object} data
+   * @returns {string|null}
+   */
+  findError: function (data) {
+    var name = Em.get(data, "ServiceInfo.service_name"),
+      error = null;
+    if (data) {
+      if (Em.get(data, "ServiceInfo.state") != "STARTED")
+        error = Em.I18n.t('error.start' + name);
+    }
+    else {
+      error = Em.I18n.t('error.no' + name);
     }
+    return error;
   }
 
 });
\ No newline at end of file

Reply via email to