Browse Source

AMBARI-4520. Mirroring: provide ability to edit dataset. (akovalenko)

Aleksandr Kovalenko 11 years ago
parent
commit
a1c5645d91

+ 1 - 1
ambari-web/app/assets/data/mirroring/dataset1_definition.xml

@@ -6,7 +6,7 @@
             <retention action="delete" limit="days(7)"/>
         </cluster>
 
-        <cluster name="target-cluster1" type="target">
+        <cluster name="tdk" type="target">
             <validity end="2014-12-31T00:00Z" start="2013-10-24T00:00Z"/>
             <retention action="delete" limit="months(1)"/>-
             <locations>

+ 1 - 1
ambari-web/app/assets/data/mirroring/dataset2_definition.xml

@@ -6,7 +6,7 @@
             <retention action="delete" limit="days(7)"/>
         </cluster>
 
-        <cluster name="target-cluster1" type="target">
+        <cluster name="tdk" type="target">
             <validity end="2014-12-31T00:00Z" start="2013-10-24T00:00Z"/>
             <retention action="delete" limit="months(1)"/>-
             <locations>

+ 1 - 1
ambari-web/app/assets/data/mirroring/dataset3_definition.xml

@@ -6,7 +6,7 @@
             <retention action="delete" limit="days(7)"/>
         </cluster>
 
-        <cluster name="target-cluster2" type="target">
+        <cluster name="tdk" type="target">
             <validity end="2014-12-31T00:00Z" start="2013-10-24T00:00Z"/>
             <retention action="delete" limit="months(1)"/>-
             <locations>

+ 16 - 1
ambari-web/app/controllers/main/mirroring/edit_dataset_controller.js

@@ -19,6 +19,8 @@
 App.MainMirroringEditDataSetController = Ember.Controller.extend({
   name: 'mainMirroringEditDataSetController',
 
+  isEdit: false,
+
   // Fields values from Edit DataSet form
   formFields: Ember.Object.create({
     datasetName: null,
@@ -78,6 +80,12 @@ App.MainMirroringEditDataSetController = Ember.Controller.extend({
 
   showAddPopup: function () {
     this.showPopup(Em.I18n.t('mirroring.dataset.newDataset'));
+    this.set('isEdit', false);
+  },
+
+  showEditPopup: function () {
+    this.showPopup(Em.I18n.t('mirroring.dataset.editDataset'));
+    this.set('isEdit', true);
   },
 
   showPopup: function (header) {
@@ -113,7 +121,7 @@ App.MainMirroringEditDataSetController = Ember.Controller.extend({
       primaryWasClicked: false,
       onSecondary: function () {
         this.hide();
-        App.router.transitionTo('main.mirroring.index');
+        App.router.send('gotoShowJobs');
       },
       bodyClass: App.MainMirroringEditDataSetView.extend({
         controller: self
@@ -191,6 +199,13 @@ App.MainMirroringEditDataSetController = Ember.Controller.extend({
     return date.getFullYear() + '-' + this.addZero(date.getMonth() + 1) + '-' + this.addZero(date.getDate()) + 'T' + this.addZero(date.getHours()) + ':' + this.addZero(date.getMinutes()) + 'Z';
   },
 
+  // Converts hours value from 24-hours format to AM/PM format
+  toAMPMHours: function (hours) {
+    var result = hours % 12;
+    result = result ? result : 12;
+    return this.addZero(result);
+  },
+
   save: function () {
     var datasetName = this.get('formFields.datasetName');
     var sourceCluster = App.get('clusterName');

+ 14 - 4
ambari-web/app/controllers/main/mirroring_controller.js

@@ -85,6 +85,10 @@ App.MainMirroringController = Em.ArrayController.extend({
           targetClusterName: targetCluster['@attributes'].name,
           sourceDir: parsedData.feed.locations.location['@attributes'].path,
           targetDir: targetCluster.locations.location['@attributes'].path,
+          frequency: parsedData.feed.frequency['#text'].match(/\d/)[0],
+          frequencyUnit: parsedData.feed.frequency['#text'].match(/\w+(?=\()/)[0],
+          scheduleEndDate: sourceCluster.validity['@attributes'].end,
+          scheduleStartDate: sourceCluster.validity['@attributes'].start,
           instances: []
         })
     );
@@ -126,9 +130,15 @@ App.MainMirroringController = Em.ArrayController.extend({
       });
       this.set('datasets', sortedDatasets);
       this.set('isLoaded', true);
+      var selectedDataset = this.get('selectedDataset');
+      if (!selectedDataset) {
+        this.set('selectedDataset', sortedDatasets[0]);
+      }
+      var routerState = App.router.get('currentState.name');
+      if (routerState === 'index') {
+        App.router.send('gotoShowJobs');
+      }
     }
-    var selectedDataset = this.get('selectedDataset');
-    App.router.transitionTo('showDatasetJobs', selectedDataset || sortedDatasets[0]);
   },
 
   onLoadDatasetsInstancesError: function () {
@@ -149,11 +159,11 @@ App.MainMirroringController = Em.ArrayController.extend({
       secondary: null,
       onPrimary: function () {
         this.hide();
-        App.router.transitionTo('main.mirroring.index');
+        App.router.send('gotoShowJobs');
       },
       onClose: function () {
         this.hide();
-        App.router.transitionTo('main.mirroring.index');
+        App.router.send('gotoShowJobs');
       },
       didInsertElement: function () {
         this._super();

+ 4 - 0
ambari-web/app/mappers/dataset_mapper.js

@@ -29,6 +29,10 @@ App.dataSetMapper = App.QuickDataMapper.create({
     target_cluster_name: 'targetClusterName',
     source_dir: 'sourceDir',
     target_dir: 'targetDir',
+    frequency: 'frequency',
+    frequency_unit: 'frequencyUnit',
+    schedule_start_date: 'scheduleStartDate',
+    schedule_end_date: 'scheduleEndDate',
     dataset_jobs_key: 'instances',
     dataset_jobs_type: 'array',
     dataset_jobs: {

+ 1 - 0
ambari-web/app/messages.js

@@ -1753,6 +1753,7 @@ Em.I18n.translations = {
 
   'mirroring.dataset.dataSets':'Datasets',
   'mirroring.dataset.createDataset':'Create Dataset',
+  'mirroring.dataset.editDataset':'Edit Dataset',
   'mirroring.dataset.manageClusters':'Manage Clusters',
   'mirroring.dataset.newDataset':'New Dataset',
   'mirroring.dataset.selectTargetClusters':'Select Target Cluster...',

+ 4 - 0
ambari-web/app/models/dataset.js

@@ -25,6 +25,10 @@ App.Dataset = DS.Model.extend({
   targetClusterName: DS.attr('string'),
   sourceDir: DS.attr('string'),
   targetDir: DS.attr('string'),
+  frequency: DS.attr('string'),
+  frequencyUnit: DS.attr('string'),
+  scheduleStartDate: DS.attr('string'),
+  scheduleEndDate: DS.attr('string'),
   datasetJobs: DS.hasMany('App.DataSetJob'),
 
   status: function () {

+ 16 - 2
ambari-web/app/routes/main.js

@@ -136,7 +136,7 @@ module.exports = Em.Route.extend({
             router.get('mainController').connectOutlet('mainHiveJobDetails', job);
           }
         }
-      },
+      }
     }),
     showJobDetails : function(router, event) {
       router.transitionTo('jobDetails', event.context);
@@ -154,7 +154,10 @@ module.exports = Em.Route.extend({
     },
 
     gotoShowJobs: function (router, event) {
-      router.transitionTo('showDatasetJobs', event.context);
+      var dataset = (event && event.context) || router.get('mainMirroringController.selectedDataset');
+      if (dataset) {
+        router.transitionTo('showDatasetJobs', dataset);
+      }
     },
 
     showDatasetJobs: Em.Route.extend({
@@ -165,6 +168,17 @@ module.exports = Em.Route.extend({
       }
     }),
 
+    editDatasetRoute: Em.Route.extend({
+      route: '/edit/:dataset_id',
+      connectOutlets: function (router, dataset) {
+        router.get('mainMirroringEditDataSetController').showEditPopup(dataset);
+      }
+    }),
+
+    editDataset: function (router, event) {
+      router.transitionTo('editDatasetRoute', event.view.get('dataset'));
+    },
+
     addNewDataset: function (router) {
       router.transitionTo('addNewDatasetRoute');
     },

+ 1 - 1
ambari-web/app/templates/main/mirroring/jobs.hbs

@@ -67,7 +67,7 @@
               </li>
             {{/if}}
             <li>
-              <a href="javascript:void(null);">
+              <a {{action editDataset}} href="javascript:void(null);">
                 {{t common.edit}}
               </a>
             </li>

+ 0 - 3
ambari-web/app/utils/helper.js

@@ -193,9 +193,6 @@ App.format = {
     'SUPERVISOR': 'Supervisor',
     'TASKTRACKER': 'TaskTracker',
     'TEZ_CLIENT': 'Tez Client',
-    'FALCON_SERVICE_CHECK': 'Falcon Service Check',
-    'FALCON_SERVER': 'Falcon Server',
-    'FALCON': 'Falcon',
     'WEBHCAT_SERVER': 'WebHCat Server',
     'WEBHCAT_SERVICE_CHECK': 'WebHCat Service Check',
     'YARN_CLIENT': 'YARN Client',

+ 29 - 0
ambari-web/app/views/main/mirroring/edit_dataset_view.js

@@ -51,10 +51,39 @@ App.MainMirroringEditDataSetView = Em.View.extend({
 
   minuteOptions: ['00', '05', '10', '15', '20', '25', '30', '35', '40', '45', '50', '55'],
 
+  fillForm: function () {
+    var isEdit = this.get('controller.isEdit');
+    var isLoaded = App.router.get('mainMirroringController.isLoaded');
+    var selectedDataset = App.router.get('mainMirroringController.selectedDataset');
+    if (isLoaded && selectedDataset && isEdit) {
+      var dataset = App.Dataset.find().findProperty('name', selectedDataset.get('id'));
+      var scheduleStartDate = dataset.get('scheduleStartDate');
+      var scheduleEndDate = dataset.get('scheduleEndDate');
+      var formFields = this.get('controller.formFields');
+      formFields.set('datasetName', dataset.get('name'));
+      formFields.set('datasetSourceDir', dataset.get('sourceDir'));
+      formFields.set('datasetTargetDir', dataset.get('targetDir'));
+      formFields.set('datasetTargetClusterName', dataset.get('targetClusterName'));
+      formFields.set('datasetFrequency', dataset.get('frequency'));
+      formFields.set('repeatOptionSelected', dataset.get('frequencyUnit'));
+      formFields.set('datasetStartDate', scheduleStartDate.slice(5, 7) + '/' + scheduleStartDate.slice(8, 10) + '/' + scheduleStartDate.slice(0, 4));
+      formFields.set('datasetEndDate', scheduleEndDate.slice(5, 7) + '/' + scheduleEndDate.slice(8, 10) + '/' + scheduleEndDate.slice(0, 4));
+      var startHours = scheduleStartDate.slice(11, 13);
+      var endHours = scheduleEndDate.slice(11, 13);
+      formFields.set('hoursForStart', this.get('controller').toAMPMHours(startHours));
+      formFields.set('hoursForEnd', this.get('controller').toAMPMHours(endHours));
+      formFields.set('minutesForStart', scheduleStartDate.slice(14, 16));
+      formFields.set('minutesForEnd', scheduleEndDate.slice(14, 16));
+      formFields.set('middayPeriodForStart', startHours > 12 || startHours === '00' ? 'PM' : 'AM');
+      formFields.set('middayPeriodForEnd', endHours > 12 || endHours === '00' ? 'PM' : 'AM');
+    }
+  }.observes('App.router.mainMirroringController.isLoaded', 'App.router.mainMirroringController.selectedDataset', 'controller.isEdit'),
+
   didInsertElement: function () {
     $('.datepicker').datepicker({
       format: 'mm/dd/yyyy'
     });
+    this.fillForm();
   },
 
   willDestroyElement: function () {