You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by at...@apache.org on 2015/04/17 13:05:38 UTC

ambari git commit: AMBARI-10558 Create widget wizard: Integrate the wizard with backend API. (atkach)

Repository: ambari
Updated Branches:
  refs/heads/trunk 55e31bb82 -> 4f1607bb0


AMBARI-10558 Create widget wizard: Integrate the wizard with backend API. (atkach)


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

Branch: refs/heads/trunk
Commit: 4f1607bb0f9a1b35a8ab7394bcf0c47ec75a8c1d
Parents: 55e31bb
Author: Andrii Tkach <at...@hortonworks.com>
Authored: Fri Apr 17 13:33:19 2015 +0300
Committer: Andrii Tkach <at...@hortonworks.com>
Committed: Fri Apr 17 14:05:12 2015 +0300

----------------------------------------------------------------------
 .../service/widgets/create/step3_controller.js  | 51 +++++++++++++++++++-
 .../service/widgets/create/wizard_controller.js | 19 ++++----
 ambari-web/app/routes/add_widget.js             |  5 +-
 .../service/widgets/create/step2_add_metric.hbs | 10 ++--
 .../main/service/widgets/create/step3.hbs       |  2 +-
 ambari-web/app/utils/ajax/ajax.js               | 11 +++++
 .../service/widgets/create/expression_view.js   |  3 ++
 7 files changed, 80 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/4f1607bb/ambari-web/app/controllers/main/service/widgets/create/step3_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/service/widgets/create/step3_controller.js b/ambari-web/app/controllers/main/service/widgets/create/step3_controller.js
index b417afd..7d43b14 100644
--- a/ambari-web/app/controllers/main/service/widgets/create/step3_controller.js
+++ b/ambari-web/app/controllers/main/service/widgets/create/step3_controller.js
@@ -88,5 +88,54 @@ App.WidgetWizardStep3Controller = Em.Controller.extend({
   //TODO: Following computed propert needs to be implemented. Next button should be enabled when there is no validation error and all required fields are filled
   isSubmitDisabled: function () {
     return !this.get('widgetName');
-  }.property('widgetName')
+  }.property('widgetName'),
+
+  /**
+   * collect all needed data to create new widget
+   * @returns {{WidgetInfo: {cluster_name: *, widget_name: *, display_name: *, widget_type: *, description: *, scope: string, metrics: *, values: *, properties: *}}}
+   */
+  collectWidgetData: function () {
+    return {
+      WidgetInfo: {
+        widget_name: this.get('widgetName'),
+        display_name: this.get('widgetName'),
+        widget_type: this.get('content.widgetType'),
+        description: this.get('widgetDescription'),
+        scope: this.get('widgetScope.name').toUpperCase(),
+        "metrics": this.get('widgetMetrics').map(function (metric) {
+          return {
+            "name": metric.name,
+            "service_name": metric.serviceName,
+            "component_name": metric.componentName
+          }
+        }),
+        values: this.get('widgetValues'),
+        properties: this.get('widgetProperties')
+      }
+    };
+  },
+
+  /**
+   * post widget definition to server
+   * @returns {$.ajax}
+   */
+  postWidgetDefinition: function () {
+    return App.ajax.send({
+      name: 'widgets.wizard.add',
+      sender: this,
+      data: {
+        data: this.collectWidgetData()
+      },
+      success: 'postWidgetDefinitionSuccessCallback'
+    });
+  },
+
+  postWidgetDefinitionSuccessCallback: function() {
+
+  },
+
+  complete: function () {
+    this.postWidgetDefinition();
+    App.router.send('complete');
+  }
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/4f1607bb/ambari-web/app/controllers/main/service/widgets/create/wizard_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/service/widgets/create/wizard_controller.js b/ambari-web/app/controllers/main/service/widgets/create/wizard_controller.js
index cf37599..fac5300 100644
--- a/ambari-web/app/controllers/main/service/widgets/create/wizard_controller.js
+++ b/ambari-web/app/controllers/main/service/widgets/create/wizard_controller.js
@@ -212,7 +212,7 @@ App.WidgetWizardController = App.WizardController.extend({
       },
       callback: callback,
       success: 'loadAllMetricsFromServerCallback'
-    })
+    });
   },
 
   /**
@@ -224,12 +224,11 @@ App.WidgetWizardController = App.WizardController.extend({
     var metrics = {};
 
     if (json) {
-      var data = json.items[0].artifacts[0].artifact_data;
-
-      for (var serviceName in data) {
-        for (var componentName in data[serviceName]) {
-          for (var level in data[serviceName][componentName]) {
-            metrics = data[serviceName][componentName][level][0]['metrics']['default'];
+      json.items.forEach(function (service) {
+        var data = service.artifacts[0].artifact_data[service.StackServices.service_name];
+        for (var componentName in data) {
+          for (var level in data[componentName]) {
+            metrics = data[componentName][level][0]['metrics']['default'];
             for (var widgetId in metrics) {
               result.push({
                 widget_id: widgetId,
@@ -237,14 +236,14 @@ App.WidgetWizardController = App.WizardController.extend({
                 temporal: metrics[widgetId].temporal,
                 name: metrics[widgetId].name,
                 level: level.toUpperCase(),
-                type: data[serviceName][componentName][level][0]["type"].toUpperCase(),
+                type: data[componentName][level][0]["type"].toUpperCase(),
                 component_name: componentName,
-                service_name: serviceName
+                service_name: service.StackServices.service_name
               });
             }
           }
         }
-      }
+      }, this);
     }
     this.save('allMetrics', result);
   },

http://git-wip-us.apache.org/repos/asf/ambari/blob/4f1607bb/ambari-web/app/routes/add_widget.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/routes/add_widget.js b/ambari-web/app/routes/add_widget.js
index 7702a36..c12c22a 100644
--- a/ambari-web/app/routes/add_widget.js
+++ b/ambari-web/app/routes/add_widget.js
@@ -157,10 +157,7 @@ module.exports = App.WizardRoute.extend({
     },
     back: Em.Router.transitionTo('step2'),
     complete: function (router, context) {
-      var controller = router.get('widgetWizardStep3Controller');
-      if (!controller.get('isSubmitDisabled')) {
-        router.get('widgetWizardController.popup').onClose();
-      }
+      router.get('widgetWizardController.popup').onClose();
     }
   })
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/4f1607bb/ambari-web/app/templates/main/service/widgets/create/step2_add_metric.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/service/widgets/create/step2_add_metric.hbs b/ambari-web/app/templates/main/service/widgets/create/step2_add_metric.hbs
index 4ac360d..be62e8b 100644
--- a/ambari-web/app/templates/main/service/widgets/create/step2_add_metric.hbs
+++ b/ambari-web/app/templates/main/service/widgets/create/step2_add_metric.hbs
@@ -27,15 +27,15 @@
       {{#each service in view.componentMap}}
         <li class="accordion-group keep-open">
           <div class="accordion-heading">
-            <a class="accordion-toggle" data-toggle="collapse" href="#collapseOne">
-              <i class="icon-caret-down"></i><i class="icon-caret-right"></i>{{service.displayName}}
+            <a class="accordion-toggle collapsed" data-toggle="collapse" {{bindAttr href="service.href"}}>
+              <i class="icon-caret-down"></i><i class="icon-caret-right"></i>{{service.displayName}}&nbsp;({{service.count}})
             </a>
           </div>
-          <div id="collapseOne" class="accordion-body collapse in">
+          <div {{bindAttr id="service.serviceName"}} class="accordion-body collapse">
             <ul class="accordion-inner">
               {{#each component in service.components}}
                 <li>
-                  <a href="#" {{action selectComponents component target="view"}}> {{component.displayName}}</a>
+                  <a href="#" {{action selectComponents component target="view"}}> {{component.displayName}}&nbsp;({{component.count}})</a>
                 </li>
               {{/each}}
             </ul>
@@ -45,7 +45,7 @@
       <li><a class="link" href="#" {{action showMore target="view"}}>{{t hostPopup.serviceInfo.showMore}}</a></li>
       <li class="row-fluid">
         <button class="btn span4 offset1">{{t common.cancel}}</button>
-        <button class="btn btn-primary span4">{{t common.apply}}</button>
+        <button class="btn btn-primary span4 apply-button">{{t common.apply}}</button>
       </li>
     </ul>
   </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/4f1607bb/ambari-web/app/templates/main/service/widgets/create/step3.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/service/widgets/create/step3.hbs b/ambari-web/app/templates/main/service/widgets/create/step3.hbs
index 7c25919..126db15 100644
--- a/ambari-web/app/templates/main/service/widgets/create/step3.hbs
+++ b/ambari-web/app/templates/main/service/widgets/create/step3.hbs
@@ -50,6 +50,6 @@
 
   <div class="btn-area">
     <button id="add-widget-step3-back" class="btn" {{action back}}>&larr; {{t common.back}}</button>
-    <button id="add-widget-step3-complete" class="btn btn-success pull-right" {{bindAttr disabled="isSubmitDisabled"}} {{action "complete"}}>{{t common.complete}}</button>
+    <button id="add-widget-step3-complete" class="btn btn-success pull-right" {{bindAttr disabled="isSubmitDisabled"}} {{action "complete" target="controller"}}>{{t common.complete}}</button>
   </div>
 </div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/4f1607bb/ambari-web/app/utils/ajax/ajax.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index 0c63a99..d6c735b 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -2481,6 +2481,17 @@ var urls = {
   'widgets.wizard.metrics.get': {
     real: '{stackVersionURL}/services?artifacts/Artifacts/artifact_name=metrics_descriptor&StackServices/service_name.in({serviceNames})&fields=artifacts/*',
     mock: '/data/metrics/HBASE/definition.json'
+  },
+
+  'widgets.wizard.add': {
+    real: '/clusters/c1/widgets/',
+    mock: '',
+    'format': function (data) {
+      return {
+        type: 'POST',
+        data: JSON.stringify(data.data)
+      };
+    }
   }
 };
 /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/4f1607bb/ambari-web/app/views/main/service/widgets/create/expression_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/service/widgets/create/expression_view.js b/ambari-web/app/views/main/service/widgets/create/expression_view.js
index be72f06..0662d43 100644
--- a/ambari-web/app/views/main/service/widgets/create/expression_view.js
+++ b/ambari-web/app/views/main/service/widgets/create/expression_view.js
@@ -250,6 +250,7 @@ App.WidgetWizardExpressionView = Em.View.extend({
           }, this);
 
           for (var serviceName in servicesMap) {
+            components = [];
             for (var componentId in servicesMap[serviceName].components) {
               components.push(Em.Object.create({
                 componentName: servicesMap[serviceName].components[componentId].component_name,
@@ -274,6 +275,8 @@ App.WidgetWizardExpressionView = Em.View.extend({
             }
             result.push(Em.Object.create({
               serviceName: serviceName,
+              //in order to support accordion lists
+              href: '#' + serviceName,
               displayName: App.StackService.find(serviceName).get('displayName'),
               count: servicesMap[serviceName].count,
               components: components