You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by yu...@apache.org on 2013/10/06 01:26:02 UTC

[1/2] git commit: AMBARI-3466. Revert 1.4.1 changes to job history. (yusaku)

Updated Branches:
  refs/heads/branch-1.4.1 e5d31fe70 -> 9afc48b0e


AMBARI-3466. Revert 1.4.1 changes to job history. (yusaku)

Revert Jobs-related changes from "AMBARI-2702. UI cleanup after merge branch-1.4.0 into trunk. (Andrii Tkach via srimanth)"
Revert Jobs-related changes from "AMBARI-2677. Merge from branch-1.4.0 (ncole)"


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

Branch: refs/heads/branch-1.4.1
Commit: 41ea642bd9020a0d4e8244b1f384eb775d2eaed1
Parents: e5d31fe
Author: Yusaku Sako <yu...@hortonworks.com>
Authored: Sat Oct 5 12:28:56 2013 -0700
Committer: Yusaku Sako <yu...@hortonworks.com>
Committed: Sat Oct 5 16:23:09 2013 -0700

----------------------------------------------------------------------
 ambari-web/app/classes/app_class.js             |  38 --
 ambari-web/app/classes/run_class.js             |   8 +-
 .../controllers/main/apps/item_controller.js    |  31 +-
 .../app/controllers/main/apps_controller.js     | 100 +++--
 ambari-web/app/initialize.js                    |   1 -
 ambari-web/app/mappers/apps_mapper.js           |  63 ---
 ambari-web/app/mappers/runs_mapper.js           |   3 +-
 ambari-web/app/models.js                        |   1 -
 ambari-web/app/models/apps.js                   |  42 --
 ambari-web/app/models/job.js                    |  18 +-
 ambari-web/app/models/run.js                    |  22 +-
 ambari-web/app/routes/main.js                   |  78 ----
 ambari-web/app/styles/apps.less                 | 217 +++------
 ambari-web/app/templates/main/apps.hbs          |   9 +-
 ambari-web/app/templates/main/apps/item/app.hbs |  64 ---
 ambari-web/app/templates/main/apps/item/dag.hbs |  13 +
 ambari-web/app/templates/main/apps/list_row.hbs |   3 +-
 ambari-web/app/utils/app_graph.js               | 441 -------------------
 ambari-web/app/views.js                         |   1 -
 ambari-web/app/views/main/apps/item/app_view.js | 136 ------
 ambari-web/app/views/main/apps/item_view.js     |  42 +-
 ambari-web/app/views/main/apps_view.js          |  30 +-
 ambari-web/vendor/styles/cubism.css             |   2 +-
 23 files changed, 237 insertions(+), 1126 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/41ea642b/ambari-web/app/classes/app_class.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/classes/app_class.js b/ambari-web/app/classes/app_class.js
deleted file mode 100644
index a3d51eb..0000000
--- a/ambari-web/app/classes/app_class.js
+++ /dev/null
@@ -1,38 +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.
- */
-
-
-var App = require('app');
-var date = require('utils/date');
-var misc = require('utils/misc');
-
-App.App2 = Ember.Object.extend({
-
-  app_id: "", //string
-  app_name: "", //string
-  app_type: "", //string
-  workflow_entity_name: "", //string
-  user_name: "", //string
-  queue: "", //string
-  submit_time: 0, //number
-  launch_time: 0, //number
-  finish_time: 0, //number
-  num_stages: 0, //number
-  stages: [], //number
-  status: "", //string
-});

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/41ea642b/ambari-web/app/classes/run_class.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/classes/run_class.js b/ambari-web/app/classes/run_class.js
index d7e0d43..801c550 100644
--- a/ambari-web/app/classes/run_class.js
+++ b/ambari-web/app/classes/run_class.js
@@ -32,7 +32,6 @@ App.Run2 = Ember.Object.extend({
   workflowContext: null, //string
   input: 0, //number
   output: 0, //number
-  tags: null, //string
 
   /**
    * Will set to true when we load all jobs related to this run
@@ -96,12 +95,9 @@ App.Run2 = Ember.Object.extend({
     if (this.get('id').indexOf('hive_') === 0) {
       return 'Hive';
     }
-    if (this.get('id').indexOf('mr_') === 0 || this.get('id').indexOf('mapreduce_') === 0) {
+    if (this.get('id').indexOf('mr_') === 0) {
       return 'MapReduce';
     }
-    if (this.get('id').indexOf('yarn_') === 0) {
-      return 'Yarn';
-    }
     return 'Undefined';
   }.property('id')
-});
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/41ea642b/ambari-web/app/controllers/main/apps/item_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/apps/item_controller.js b/ambari-web/app/controllers/main/apps/item_controller.js
index 5fe43a7..4534279 100644
--- a/ambari-web/app/controllers/main/apps/item_controller.js
+++ b/ambari-web/app/controllers/main/apps/item_controller.js
@@ -34,29 +34,16 @@ App.MainAppsItemController = Em.Controller.extend({
     }
     var self = this;
 
-    if (!App.testMode && !App.get('isHadoop2Stack')) {
-      var url = App.testMode ? '/data/apps/jobs/'+ currentId +'.json' :
-        App.apiPrefix + "/jobhistory/job?workflowId=" + currentId;
+    var url = App.testMode ? '/data/apps/jobs/'+ currentId +'.json' :
+      App.apiPrefix + "/jobhistory/job?workflowId=" + currentId;
 
-      var mapper = App.jobsMapper;
-      mapper.set('controller', this);
-      App.HttpClient.get(url, mapper,{
-        complete:function(jqXHR, textStatus) {
-          self.set('content.loadAllJobs', true);
-        }
-      });
-    } else {
-      var url = App.testMode ? '/data/apps/apps/'+ currentId +'.json' :
-        App.apiPrefix + "/jobhistory/app?workflowId=" + currentId;
-
-      var mapper = App.appsMapper;
-      mapper.set('controller', this);
-      App.HttpClient.get(url, mapper,{
-        complete:function(jqXHR, textStatus) {
-          self.set('content.loadAllJobs', true);
-        }
-      });
-    }
+    var mapper = App.jobsMapper;
+    mapper.set('controller', this);
+    App.HttpClient.get(url, mapper,{
+      complete:function(jqXHR, textStatus) {
+        self.set('content.loadAllJobs', true);
+      }
+    });
   }.observes('content')
 
 })

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/41ea642b/ambari-web/app/controllers/main/apps_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/apps_controller.js b/ambari-web/app/controllers/main/apps_controller.js
index c563200..3ef01c6 100644
--- a/ambari-web/app/controllers/main/apps_controller.js
+++ b/ambari-web/app/controllers/main/apps_controller.js
@@ -48,12 +48,7 @@ App.MainAppsController = Em.ArrayController.extend({
     var self = this;
 
     //var runsUrl = App.testMode ? "/data/apps/runs.json" : App.apiPrefix + "/jobhistory/workflow?orderBy=startTime&sortDir=DESC&limit=" + App.maxRunsForAppBrowser;
-    var runsUrl;
-    if (App.testMode) {
-      runsUrl = App.get('isHadoop2Stack') ? "/data/apps/runs2.json" : "/data/apps/runs.json";
-    } else {
-      runsUrl = App.apiPrefix + this.get("runUrl");
-    }
+    var runsUrl = App.testMode ? "/data/apps/runs.json" : App.apiPrefix + this.get("runUrl");
 
     App.HttpClient.get(runsUrl, App.runsMapper, {
       complete:function (jqXHR, textStatus) {
@@ -93,6 +88,10 @@ App.MainAppsController = Em.ArrayController.extend({
     sSearch_3:"",
     minJobs:"",
     maxJobs:"",
+    minInputBytes:"",
+    maxInputBytes:"",
+    minOutputBytes:"",
+    maxOutputBytes:"",
     minDuration:"",
     maxDuration:"",
     minStartTime:"",
@@ -102,7 +101,6 @@ App.MainAppsController = Em.ArrayController.extend({
     iDisplayStart:"",
     iSortCol_0:"",
     sSortDir_0:"",
-    tagSearch:"",
 
     allFilterActivated:false,
     filteredDisplayRecords:null,
@@ -114,21 +112,15 @@ App.MainAppsController = Em.ArrayController.extend({
      * Direct binding to job filter field
      */
     runType:"",
-    onRunTypeChange: function () {
-      if (this.runType == "MapReduce") {
-        if (!App.testMode && !App.get('isHadoop2Stack')) {
-          this.set("sSearch_2", "mr");
-        } else {
-          this.set("sSearch_2", "mapreduce");
-        }
-      } else if (this.runType == "Hive") {
-        this.set("sSearch_2", "hive");
-      } else if (this.runType == "Pig") {
-        this.set("sSearch_2", "pig");
-      } else if (this.runType == "Yarn") {
-        this.set("sSearch_2", "yarn");
-      } else {
-        this.set("sSearch_2", "");
+    onRunTypeChange:function(){
+      if(this.runType == "MapReduce"){
+        this.set("sSearch_2","mr");
+      }else if(this.runType == "Hive"){
+        this.set("sSearch_2","hive");
+      }else if(this.runType == "Pig"){
+        this.set("sSearch_2","pig");
+      }else{
+        this.set("sSearch_2","");
       }
     }.observes("runType"),
 
@@ -143,6 +135,26 @@ App.MainAppsController = Em.ArrayController.extend({
     }.observes("jobs"),
 
     /**
+     * Direct binding to Input filter field
+     */
+    input:"",
+    onInputChange:function(){
+      var minMaxTmp = this.parseBandWidth(this.input);
+      this.set("minInputBytes", minMaxTmp.min);
+      this.set("maxInputBytes", minMaxTmp.max);
+    }.observes("input"),
+
+    /**
+     * Direct binding to Output filter field
+     */
+    output:"",
+    onOutputChange:function(){
+      var minMaxTmp = this.parseBandWidth(this.output);
+      this.set("minOutputBytes", minMaxTmp.min);
+      this.set("maxOutputBytes", minMaxTmp.max);
+    }.observes("output"),
+
+    /**
      * Direct binding to Duration filter field
      */
     duration:"",
@@ -308,9 +320,10 @@ App.MainAppsController = Em.ArrayController.extend({
 
       var arr = [
         "sSearch_0", "sSearch_1", "sSearch_2", "sSearch_3", "minJobs",
-        "maxJobs", "minDuration", "maxDuration", "minStartTime",
+        "maxJobs", "minInputBytes", "maxInputBytes", "minOutputBytes",
+        "maxOutputBytes", "minDuration", "maxDuration", "minStartTime",
         "maxStartTime", "sSearch", "iDisplayLength", "iDisplayStart",
-        "iSortCol_0", "sSortDir_0", "tagSearch"
+        "iSortCol_0", "sSortDir_0"
       ];
 
       var notFilterFields = ["iDisplayLength", "iDisplayStart", "iSortCol_0", "sSortDir_0"];
@@ -349,9 +362,10 @@ App.MainAppsController = Em.ArrayController.extend({
     obj.set("sSearch_3","");
     obj.set("runType","Any");
     obj.set("jobs","");
+    obj.set("input","");
+    obj.set("output","");
     obj.set("duration","");
     obj.set("runDate","Any");
-    obj.set("tagSearch","");
   },
 
 
@@ -389,6 +403,10 @@ App.MainAppsController = Em.ArrayController.extend({
       'filterObject.sSearch_3',
       'filterObject.minJobs',
       'filterObject.maxJobs',
+      'filterObject.minInputBytes',
+      'filterObject.maxInputBytes',
+      'filterObject.minOutputBytes',
+      'filterObject.maxOutputBytes',
       'filterObject.minDuration',
       'filterObject.maxDuration',
       'filterObject.minStartTime',
@@ -398,8 +416,7 @@ App.MainAppsController = Em.ArrayController.extend({
       'filterObject.iDisplayStart',
       'filterObject.iSortCol_0',
       'filterObject.sSortDir_0',
-      'filterObject.viewType',
-      'filterObject.tagSearch'
+      'filterObject.viewType'
   ),
 
   serverData: "",
@@ -418,6 +435,16 @@ App.MainAppsController = Em.ArrayController.extend({
           'min': '-',
           'max': '-'
         },
+        'input': {
+          'avg': '-',
+          'min': '-',
+          'max': '-'
+        },
+        'output': {
+          'avg': '-',
+          'min': '-',
+          'max': '-'
+        },
         'duration': {
           'avg': '-',
           'min': '-',
@@ -435,6 +462,16 @@ App.MainAppsController = Em.ArrayController.extend({
           'min': summary.jobs.min,
           'max': summary.jobs.max
         },
+        'input': {
+          'avg': misc.formatBandwidth(summary.input.avg),
+          'min': misc.formatBandwidth(summary.input.min),
+          'max': misc.formatBandwidth(summary.input.max)
+        },
+        'output': {
+          'avg': misc.formatBandwidth(summary.output.avg),
+          'min': misc.formatBandwidth(summary.output.min),
+          'max': misc.formatBandwidth(summary.output.max)
+        },
         'duration': {
           'avg': date.timingFormat(Math.round(summary.duration.avg)),
           'min': date.timingFormat(summary.duration.min),
@@ -456,10 +493,11 @@ App.MainAppsController = Em.ArrayController.extend({
       { name: Em.I18n.t('common.name'), index: 1 },
       { name: Em.I18n.t('common.type'), index: 2 },
       { name: Em.I18n.t('common.user'), index: 3 },
-      { name: Em.I18n.t('common.tags'), index: 4 },
-      { name: Em.I18n.t('apps.avgTable.jobs'), index: 5 },
-      { name: Em.I18n.t('apps.avgTable.duration'), index: 6 },
-      { name: Em.I18n.t('apps.table.column.runDate'), index: 7 }
+      { name: Em.I18n.t('apps.avgTable.jobs'), index: 4 },
+      { name: Em.I18n.t('apps.avgTable.input'), index: 5 },
+      { name: Em.I18n.t('apps.avgTable.output'), index: 6 },
+      { name: Em.I18n.t('apps.avgTable.duration'), index: 7 },
+      { name: Em.I18n.t('apps.table.column.runDate'), index: 8 }
     ]
   })
 

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/41ea642b/ambari-web/app/initialize.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/initialize.js b/ambari-web/app/initialize.js
index 70e1964..17d7c9b 100644
--- a/ambari-web/app/initialize.js
+++ b/ambari-web/app/initialize.js
@@ -40,7 +40,6 @@ require('mappers/status_mapper');
 require('mappers/hosts_mapper');
 require('mappers/cluster_mapper');
 require('mappers/jobs_mapper');
-require('mappers/apps_mapper');
 require('mappers/runs_mapper');
 require('mappers/racks_mapper');
 require('mappers/alerts_mapper');

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/41ea642b/ambari-web/app/mappers/apps_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/apps_mapper.js b/ambari-web/app/mappers/apps_mapper.js
deleted file mode 100644
index f388555..0000000
--- a/ambari-web/app/mappers/apps_mapper.js
+++ /dev/null
@@ -1,63 +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.
- */
-
-var App = require('app');
-
-App.appsMapper = App.QuickDataMapper.create({
-  model:App.App,
-  map:function (json) {
-    if (!this.get('model')) {
-      return;
-    }
-    if (json.apps) {
-      var result = [];
-      json.apps.forEach(function (item) {
-        var a = this.parseIt(item, this.config);
-        // assume a nonzero elapsed time (otherwise axis labels are blank)
-        if (a.finish_time < a.submit_time)
-          a.finish_time = a.submit_time + 1000;
-        a.elapsed_time = a.finish_time - a.submit_time;
-        a.num_stages = a.stages.length;
-        result.push(a);
-      }, this);
-
-      var r = Ember.ArrayProxy.create({"content":[]});
-      result.forEach(function(item){
-        r.content.push(App.App2.create(item));
-      });
-
-      this.set('controller.content.jobs', r.content);
-    }
-  },
-  config:{
-    id:'appId',
-    run_id:'workflowId',
-    app_name:'appName',
-    app_type:'appType',
-    workflow_entity_name:'workflowEntityName',
-    user_name:'userName',
-    queue:'queue',
-    submit_time:'submitTime',
-    launch_time:'launchTime',
-    finish_time:'finishTime',
-    num_stages:'numStages',
-    stages:'stages',
-    status:'status',
-    elapsed_time:'elapsedTime'
-  }
-});

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/41ea642b/ambari-web/app/mappers/runs_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/runs_mapper.js b/ambari-web/app/mappers/runs_mapper.js
index fd6faf7..198ddd2 100644
--- a/ambari-web/app/mappers/runs_mapper.js
+++ b/ambari-web/app/mappers/runs_mapper.js
@@ -87,7 +87,6 @@ App.runsMapper = App.QuickDataMapper.create({
     startTime: 'startTime',
     elapsedTime: 'elapsedTime',
     input: 'inputBytes',
-    output: 'outputBytes',
-    tags: 'workflowTags'
+    output: 'outputBytes'
   }
 });

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/41ea642b/ambari-web/app/models.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models.js b/ambari-web/app/models.js
index c6ed392..7aa0964 100644
--- a/ambari-web/app/models.js
+++ b/ambari-web/app/models.js
@@ -48,4 +48,3 @@ require('models/dataset');
 require('models/dataset_job');
 require('classes/run_class');
 require('classes/job_class');
-require('classes/app_class');

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/41ea642b/ambari-web/app/models/apps.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/apps.js b/ambari-web/app/models/apps.js
deleted file mode 100644
index 7c85c1b..0000000
--- a/ambari-web/app/models/apps.js
+++ /dev/null
@@ -1,42 +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.
- */
-
-
-var App = require('app');
-var date = require('utils/date');
-var misc = require('utils/misc');
-
-App.App = DS.Model.extend({
-
-  run: DS.belongsTo('App.Run'),
-
-  appId: DS.attr('string'),
-  appName: DS.attr('string'),
-  appType: DS.attr('string'),
-  workflowEntityName: DS.attr('string'),
-  userName: DS.attr('string'),
-  queue: DS.attr('string'),
-  submitTime: DS.attr('number'),
-  launchTime: DS.attr('number'),
-  finishTime: DS.attr('number'),
-  numStages: DS.attr('number'),
-  stages: DS.attr('object'),
-  status: DS.attr('string'),
-});
-
-App.App.FIXTURES = [];

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/41ea642b/ambari-web/app/models/job.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/job.js b/ambari-web/app/models/job.js
index 8dd2662..e26ca84 100644
--- a/ambari-web/app/models/job.js
+++ b/ambari-web/app/models/job.js
@@ -33,12 +33,28 @@ App.Job = DS.Model.extend({
   maps: DS.attr('number'),
   reduces: DS.attr('number'),
   status: DS.attr('string'),
+  input: DS.attr('number'),
+  output: DS.attr('number'),
   elapsedTime: DS.attr('number'),
   duration: function () {
     return date.timingFormat(parseInt(this.get('elapsedTime')));
   }.property('elapsedTime'),
   jobTimeLine: DS.attr('string'),
-  jobTaskView: DS.attr('string')
+  jobTaskView: DS.attr('string'),
+  /**
+   *  Sum of input bandwidth for all jobs with appropriate measure
+   */
+  inputFormatted: function () {
+    var input = this.get('input');
+    return misc.formatBandwidth(input);
+  }.property('input'),
+  /**
+   *  Sum of output bandwidth for all jobs with appropriate measure
+   */
+  outputFormatted: function () {
+    var output = this.get('output');
+    return misc.formatBandwidth(output);
+  }.property('output')
 
 });
 

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/41ea642b/ambari-web/app/models/run.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/run.js b/ambari-web/app/models/run.js
index 672bd0c..23cdda1 100644
--- a/ambari-web/app/models/run.js
+++ b/ambari-web/app/models/run.js
@@ -29,7 +29,8 @@ App.Run = DS.Model.extend({
   startTime:DS.attr('string'),
   elapsedTime:DS.attr('string'),
   workflowContext:DS.attr('string'),
-  tags: DS.attr('string'),
+  input: DS.attr('number'),
+  output: DS.attr('number'),
 
   loadAllJobs : false,
 
@@ -62,6 +63,23 @@ App.Run = DS.Model.extend({
   isRunning: function () {
     return !this.get('numJobsTotal') == this.get('numJobsCompleted');
   }.property('numJobsTotal', 'numJobsCompleted'),
+  /**
+   * Sum of input bandwidth for all jobs with appropriate measure
+   */
+  inputFormatted: function () {
+    var input = this.get('input');
+    input = misc.formatBandwidth(input);
+    return input;
+  }.property('input'),
+
+  /**
+   *  Sum of output bandwidth for all jobs with appropriate measure
+   */
+  outputFormatted: function () {
+    var output = this.get('output');
+    output = misc.formatBandwidth(output);
+    return output;
+  }.property('output'),
 
   /**
    *
@@ -88,7 +106,7 @@ App.Run = DS.Model.extend({
     if (this.get('id').indexOf('hive_') === 0) {
       return 'Hive';
     }
-    if (this.get('id').indexOf('mr_') === 0 || this.get('id').indexOf('mapreduce_') === 0) {
+    if (this.get('id').indexOf('mr_') === 0) {
       return 'MapReduce';
     }
   }.property('id')

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/41ea642b/ambari-web/app/routes/main.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/routes/main.js b/ambari-web/app/routes/main.js
index 6e5802b..c911b30 100644
--- a/ambari-web/app/routes/main.js
+++ b/ambari-web/app/routes/main.js
@@ -474,8 +474,6 @@ module.exports = Em.Route.extend({
     index: Ember.Route.extend({
       route: '/',
       connectOutlets: function (router, context) {
-        router.set('mainHostController.clearFilters', !router.get('mainHostController.comeWithFilter'));
-        router.set('mainHostController.comeWithFilter', false);
         router.get('mainController').connectOutlet('mainHost');
       }
     }),
@@ -528,7 +526,6 @@ module.exports = Em.Route.extend({
     }),
 
     back: function (router, event) {
-      router.get('mainHostController').set('comeWithFilter', true);
       window.history.back();
     },
 
@@ -650,78 +647,6 @@ module.exports = Em.Route.extend({
       }
     }),
 
-    adminHighAvailability: Em.Route.extend({
-      route: '/highAvailability',
-      enter: function (router) {
-        Em.run.next(function () {
-          router.transitionTo('adminHighAvailability.index');
-        });
-      },
-      index: Ember.Route.extend({
-        route: '/',
-        connectOutlets: function (router, context) {
-          router.set('mainAdminController.category', "highAvailability");
-          router.get('mainAdminController').connectOutlet('mainAdminHighAvailability');
-        }
-      })
-    }),
-
-    highAvailabilityRollback: Ember.Route.extend({
-      route: '/highAvailability/rollback',
-      enter: function (router) {
-        //after refresh check if the wizard is open then restore it
-        Ember.run.next(function () {
-          App.router.get('updateController').set('isWorking', false);
-
-          var highAvailabilityWizardController = router.get('highAvailabilityWizardController');
-          if(highAvailabilityWizardController.get('popup')){
-            highAvailabilityWizardController.finish();
-            highAvailabilityWizardController.get('popup').hide();
-          }
-          highAvailabilityWizardController.loadTasksStatuses();
-          highAvailabilityWizardController.loadRequestIds();
-          highAvailabilityWizardController.loadLogs();
-          var popup = App.ModalPopup.show({
-            classNames: ['full-width-modal'],
-            header: Em.I18n.t('admin.highAvailability.rollback.header'),
-            bodyClass: App.HighAvailabilityRollbackView.extend({
-              controllerBinding: 'App.router.highAvailabilityRollbackController'
-            }),
-            showCloseButton: false,
-            primary: Em.I18n.t('form.cancel'),
-            secondary: null,
-            showFooter: false,
-
-            proceedOnClose: function () {
-              var controller = router.get('highAvailabilityWizardController');
-              controller.clearTasksData();
-              controller.clearStorageData();
-              App.router.get('updateController').set('isWorking', true);
-              App.clusterStatus.setClusterStatus({
-              clusterName: router.get('content.cluster.name'),
-              clusterState: 'HIGH_AVAILABILITY_DISABLED',
-              wizardControllerName: router.get('highAvailabilityRollbackController.name'),
-              localdb: App.db.data
-              });
-              this.hide();
-              router.transitionTo('main.admin.index');
-              location.reload();
-            },
-            didInsertElement: function () {
-              this.fitHeight();
-            }
-          });
-          router.set('highAvailabilityRollbackController.popup', popup);
-        });
-
-      },
-
-      unroutePath: function () {
-        return false;
-      }
-    }),
-
-    enableHighAvailability: require('routes/high_availability_routes'),
 
     adminSecurity: Em.Route.extend({
       route: '/security',
@@ -737,9 +662,7 @@ module.exports = Em.Route.extend({
             controller.setAddSecurityWizardStatus(currentClusterStatus.localdb.status);
             App.db.setSecureConfigProperties(currentClusterStatus.localdb.secureConfigProperties);
             App.db.setWizardCurrentStep('AddSecurity', currentClusterStatus.localdb.currentStep);
-            App.db.setIsNameNodeHa(currentClusterStatus.localdb.haStatus);
             App.db.setDisableSecurityStatus(currentClusterStatus.localdb.disableSecurityStatus);
-            App.db.setSecureUserInfo(currentClusterStatus.localdb.secureUserInfo);
           }
         }
         if (!(controller.getAddSecurityWizardStatus() === 'RUNNING') && !(controller.getDisableSecurityStatus() === 'RUNNING')) {
@@ -991,7 +914,6 @@ module.exports = Em.Route.extend({
     router.transitionTo('hosts.hostDetails.index', event.context);
   },
   filterHosts: function (router, component) {
-    router.get('mainHostController').set('comeWithFilter', true);
     router.get('mainHostController').filterByComponent(component.context);
     router.transitionTo('hosts.index');
   }

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/41ea642b/ambari-web/app/styles/apps.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/apps.less b/ambari-web/app/styles/apps.less
index 10398bd..3cdd6f9 100644
--- a/ambari-web/app/styles/apps.less
+++ b/ambari-web/app/styles/apps.less
@@ -60,7 +60,7 @@
     }
 
     input, select{
-      width: 75%;
+      width: 76%;
     }
 
     .no-data{
@@ -68,7 +68,7 @@
     }
 
     input.input-super-mini{
-      width: 46px;
+      width: 47px;
       max-width: 57%;
     }
 
@@ -78,22 +78,22 @@
     .col0,
     td:first-child,
     th:first-child {
-      width: 14%;
+      width: 16%;
     }
     .col1,
     td:first-child + td + td,
     th:first-child + th + th{
-      width: 14%;
+      width: 15%;
     }
     .col2,
     td:first-child + td + td + td,
     th:first-child + th + th + th{
-      width: 9%;
+      width: 11%;
     }
     .col3,
     td:first-child + td + td + td + td,
     th:first-child + th + th + th + th{
-      width: 8%;
+      width: 11%;
     }
     .col4,.col5,.col6,.col7,
     td:first-child + td + td + td + td + td,
@@ -105,17 +105,12 @@
     td:first-child + td + td + td + td + td + td + td + td,
     th:first-child + th + th + th + th + th + th + th + th
     {
-      width: 8%;
+      width: 9%;
     }
     .col8,
     td:first-child + td + td + td + td + td + td + td + td + td,
     th:first-child + th + th + th + th + th + th + th + th + th{
-      width: 8%;
-    }
-    .col9,
-    td:first-child + td + td + td + td + td + td + td + td + td + td,
-    th:first-child + th + th + th + th + th + th + th + th + th + th{
-      width: 9%;
+      width: 13%;
     }
   }
 
@@ -471,6 +466,58 @@
       visibility: hidden;
     }
   }
+  #dag_viewer_legend {
+    border: 1px solid #DDDDDD;
+    padding: 10px;
+    padding-left: 20px;
+    float: left;
+    ul {
+      list-style: none;
+      padding: 0;
+      margin: 0;
+    }
+    li {
+      display: block;
+      width: 25%;
+      float: left;
+    }
+    span {
+      width: 15px;
+      height: 15px;
+      display: block;
+      float: left;
+      margin-right: 5px;
+    }
+    #job {
+      border: 1px solid #333;
+      background: #ccc;
+    }
+    #jobdone {
+      border: 1px solid #333;
+      background: rgba(0,128,0,0.8);
+    }
+    #allmap {
+      border: 2px solid #007000;
+    }
+    #map {
+      border: 2px solid #007000;
+      background: rgba(0,128,0,0.8);
+    }
+    #allshuffle {
+      border: 2px solid #97BDC9;
+    }
+    #shuffle {
+      border: 2px solid #97BDC9;
+      background: rgba(173,216,230,0.8);
+    }
+    #allreduce {
+      border: 2px solid #3D729E;
+    }
+    #reduce {
+      border: 2px solid #3D729E;
+      background: rgba(70,130,180,0.8);
+    }
+  }
 }
 
 
@@ -487,147 +534,3 @@
 }
 
 /*Big modal window end*/
-
-/*
- * D3  visualization components 
- * Styles for App Graph
- */
-.wfdag {
-  width: 100%;
-}
-
-#app_graph .axis path,
-#app_graph .axis line {
-  fill: none;
-  stroke: #000;
-  shape-rendering: crispEdges;
-}
-
-#app_graph line.link,
-#app_graph path.link {
-  fill: none;
-  stroke: #666;
-  stroke-width: 2.5px;
-}
-
-#app_graph line.link.finished,
-#app_graph path.link.finished {
-  stroke: #444;
-}
-
-#app_graph path.link.stage {
-  stroke: #fff;
-}
-
-#app_graph marker#finished {
-  fill: #444;
-}
-
-#app_graph marker#circle {
-  fill: #666;
-  stroke: none;
-}
-
-#app_graph marker#stage {
-  fill: #fff;
-}
-
-#app_graph line.source.mark,
-#app_graph line.target.mark {
-  stroke: #666;
-  stroke-width: 2.5px;
-}
-
-#app_graph rect {
-  fill: #ccc;
-  stroke: #333;
-  stroke-width: 1px;
-}
-
-#app_graph rect.finished {
-  fill: green;
-  fill-opacity: 0.8;
-}
-
-#app_graph text.joblabel {
-  pointer-events: none;
-  text-anchor: middle;
-}
-
-#app_graph text.axislabel {
-  pointer-events: none;
-  text-anchor: end;
-  font-size: 11px;
-  font-weight: bold;
-}
-
-#app_graph text.shadow {
-  stroke: #fff;
-  stroke-width: 3px;
-  stroke-opacity: .8;
-}
-#app_graph .y.axis {
-  font-size: 10px;
-}
-
-#app_graph circle.stage,
-#app_graph rect.stage,
-#app_graph_legend circle.stage {
-  fill: lightblue;
-  stroke: black;
-}
-
-#app_graph text.stagelabel {
-  stroke: black;
-  pointer-events: none;
-  text-anchor: middle;
-  dominant-baseline: central;
-  font-weight: bold;
-}
-
-#app_graph_legend {
-  border: 1px solid #DDDDDD;
-  padding: 10px;
-  padding-left: 20px;
-  margin: 0 auto;
-  width: 50%;
-  height: 40px;
-  ul {
-    list-style: none;
-    padding: 0;
-    margin: 0;
-  }
-  li {
-    display: block;
-    width: 50%;
-    float: left;
-  }
-  span {
-    width: 15px;
-    height: 15px;
-    display: block;
-    float: left;
-    margin-right: 5px;
-  }
-  span.stage {
-    margin-right: 8px;
-  }
-  .job {
-    border: 1px solid #333;
-    background: #ccc;
-  }
-  .jobdone {
-    border: 1px solid #333;
-    background: rgba(0,128,0,0.8);
-  }
-  .map {
-    border: 1px solid black;
-    background: lightblue;
-  }
-  .reduce {
-    stroke: white;
-    fill: white;
-  }
-}
-
-/* App Graph end */

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/41ea642b/ambari-web/app/templates/main/apps.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/apps.hbs b/ambari-web/app/templates/main/apps.hbs
index 62c2d9b..25aa2cb 100644
--- a/ambari-web/app/templates/main/apps.hbs
+++ b/ambari-web/app/templates/main/apps.hbs
@@ -22,6 +22,8 @@
     <tr>
       <td></td>
       <td>{{t apps.avgTable.jobs}}</td>
+      <td>{{t apps.avgTable.input}}</td>
+      <td>{{t apps.avgTable.output}}</td>
       <td>{{t apps.avgTable.duration}}</td>
       <td>{{t apps.avgTable.oldest}}</td>
       <td>{{t apps.avgTable.mostRecent}}</td>
@@ -29,6 +31,8 @@
     <tr class="avg-info">
       <td>{{t apps.avgTable.avg}}</td>
       <td>{{summary.jobs.avg}}</td>
+      <td>{{summary.input.avg}}</td>
+      <td>{{summary.output.avg}}</td>
       <td>{{summary.duration.avg}}</td>
       <td>{{summary.times.oldest}}</td>
       <td>{{summary.times.youngest}}</td>
@@ -37,6 +41,8 @@
     <tr class="compare-info">
       <td>{{t apps.avgTable.min}} / {{t apps.avgTable.max}}</td>
       <td>{{summary.jobs.min}} / {{summary.jobs.max}}</td>
+      <td>{{summary.input.min}} / {{summary.input.max}}</td>
+      <td>{{summary.output.min}} / {{summary.output.max}}</td>
       <td>{{summary.duration.min}} / {{summary.duration.max}}</td>
       <td></td>
       <td></td>
@@ -74,8 +80,9 @@
       <th>{{view view.nameFilterView}}</th>
       <th>{{view view.typeFilterView}}</th>
       <th>{{view view.userFilterView}}</th>
-      <th>{{view view.tagFilterView}}</th>
       <th>{{view view.jobsFilterView}}</th>
+      <th>{{view view.inputFilterView}}</th>
+      <th>{{view view.outputFilterView}}</th>
       <th>{{view view.durationFilterView}}</th>
       <th>{{view view.runDateFilterView}}</th>
     </tr>

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/41ea642b/ambari-web/app/templates/main/apps/item/app.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/apps/item/app.hbs b/ambari-web/app/templates/main/apps/item/app.hbs
deleted file mode 100644
index d451bbd..0000000
--- a/ambari-web/app/templates/main/apps/item/app.hbs
+++ /dev/null
@@ -1,64 +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.
-}}
-    <div id="app_graph"></div>
-
-    <div id="app_graph_legend">
-      <ul>
-        <li><span class="job"></span>Unfinished Job</li>
-        <li><span class="map"></span>Map Stage with Task Count</li>
-        <li><span class="jobdone"></span>Finished Job</li>
-        <li><span>
-          <svg width="18" height="18">
-            <rect class="reduce" x="0" y="0" width="18" height="18"/>
-            <circle class="stage" r="8" cx="9" cy="9"/>
-          </svg></span>Reduce Stage with Task Count</li>
-      </ul>
-    </div>
-
-    <table class="table table-bordered table-striped" id="innerTable">
-      <thead>
-      <tr>
-        {{#view view.sortView contentBinding="controller.content.jobs"}}
-          {{#if view.parentView.hasManyJobs}}{{view view.parentView.nameSort}}{{/if}}
-          {{view view.parentView.idSort}}
-          {{view view.parentView.typeSort}}
-          {{view view.parentView.statusSort}}
-          {{view view.parentView.numStagesSort}}
-          {{view view.parentView.stagesSort}}
-          {{view view.parentView.durationSort}}
-        {{/view}}
-      </tr>
-      </thead>
-      <tbody>
-      {{#if view.loaded}}
-        {{#each job in view.jobs}}
-        <tr>
-          {{#if view.hasManyJobs}}<td>{{job.entityName}}</td>{{/if}}
-          <td>{{job.name}}</td>
-          <td>{{job.type}}</td>
-          <td>{{job.status}}</td>
-          <td>{{job.numStages}}</td>
-          <td>{{job.stages}}</td>
-          <td>{{job.elapsedTime}}</td>
-        </tr>
-        {{/each}}
-      {{/if}}
-      </tbody>
-    </table>
-
-

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/41ea642b/ambari-web/app/templates/main/apps/item/dag.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/apps/item/dag.hbs b/ambari-web/app/templates/main/apps/item/dag.hbs
index f9806cb..457d566 100644
--- a/ambari-web/app/templates/main/apps/item/dag.hbs
+++ b/ambari-web/app/templates/main/apps/item/dag.hbs
@@ -17,6 +17,19 @@
 }}
     <div id="dag_viewer"></div>
 
+    <div id="dag_viewer_legend">
+      <ul>
+        <li><span id="job"></span>Unfinished Job</li>
+        <li><span id="allmap"></span>All Maps on Cluster</li>
+        <li><span id="allshuffle"></span>All Shuffles on Cluster</li>
+        <li><span id="allreduce"></span>All Reduces on Cluster</li>
+        <li><span id="jobdone"></span>Finished Job</li>
+        <li><span id="map"></span>Maps for this App</li>
+        <li><span id="shuffle"></span>Shuffles for this App</li>
+        <li><span id="reduce"></span>Reduces for this App</li>
+      </ul>
+    </div>
+
     <table class="table table-bordered table-striped" id="innerTable">
       <thead>
       <tr>

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/41ea642b/ambari-web/app/templates/main/apps/list_row.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/apps/list_row.hbs b/ambari-web/app/templates/main/apps/list_row.hbs
index 8c88c50..a926248 100644
--- a/ambari-web/app/templates/main/apps/list_row.hbs
+++ b/ambari-web/app/templates/main/apps/list_row.hbs
@@ -20,8 +20,9 @@
 <td>{{unbound run.appName}}</td>
 <td>{{unbound run.type}}</td>
 <td>{{unbound run.userName}}</td>
-<td>{{unbound run.tags}}</td>
 <td>{{unbound run.numJobsTotal}}</td>
+<td>{{unbound run.inputFormatted}}</td>
+<td>{{unbound run.outputFormatted}}</td>
 <td>{{unbound run.duration}}</td>
 {{#if run.isRunning}}
 <td rel="popover" {{translateAttr title="apps.isRunning.popup.title" data-content="apps.isRunning.popup.content"}}>

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/41ea642b/ambari-web/app/utils/app_graph.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/app_graph.js b/ambari-web/app/utils/app_graph.js
deleted file mode 100644
index 0cb6f53..0000000
--- a/ambari-web/app/utils/app_graph.js
+++ /dev/null
@@ -1,441 +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.
- */
-
-
-module.exports = {
-  create:function(domId, wfData, jobData, svgw, svgh, nodeHeight, labelFontSize, maxLabelWidth, axisPadding, stageFontSize) {
-    // initialize variables
-    var nodes = new Array();
-    var links = new Array();
-    var numNodes = 0;
-    var id = domId;
-    var formatDuration = this.formatDuration;
-
-    // create map from entity names to nodes
-    var existingNodes = new Array();
-    var jobData = (jobData) ? jobData : new Array();
-    var minStartTime = 0;
-    if (jobData.length > 0)
-      minStartTime = jobData[0].submitTime;
-    var maxFinishTime = 0;
-    // iterate through job data
-    for (var i = 0; i < jobData.length; i++) {
-      jobData[i].info = "jobId:"+jobData[i].name+"  \n"+
-        "nodeName:"+jobData[i].entityName+"  \n"+
-        "status:"+jobData[i].status+"  \n"+
-        "startTime:"+(new Date(jobData[i].submitTime).toUTCString())+"  \n"+
-        "duration:"+formatDuration(jobData[i].finishTime - jobData[i].submitTime);
-      jobData[i].state = jobData[i].status==="FINISHED";
-      minStartTime = Math.min(minStartTime, jobData[i].submitTime);
-      maxFinishTime = Math.max(maxFinishTime, jobData[i].finishTime);
-      // add a node to the nodes array and to a provided map of entity names to nodes
-      existingNodes[jobData[i].entityName] = jobData[i];
-      nodes.push(jobData[i]);
-      numNodes++;
-    }
-    var dag = eval('(' + wfData + ')').dag;
-    var sourceMarker = new Array();
-    var targetMarker = new Array();
-    var sourceMap = new Array();
-    // for each source node in the context, create links between it and its target nodes
-    for (var source in dag) {
-      var sourceNode = null;
-      if (source in existingNodes)
-        sourceNode = existingNodes[source];
-      for (var i = 0; i < dag[source].length; i++) {
-        var targetNode = null;
-        if (dag[source][i] in existingNodes)
-          targetNode = existingNodes[dag[source][i]];
-        // add a link between sourceNode and targetNode
-        // if source or target is null, add marker indicating unsubmitted job and return
-        if (sourceNode==null) {
-          if (targetNode==null)
-            continue;
-          sourceMarker.push(targetNode);
-          continue;
-        }
-        if (targetNode==null) {
-          targetMarker.push(sourceNode);
-          continue;
-        }
-        // add link between nodes
-        var state = false;
-        if (sourceNode.state && targetNode.state)
-          state = true;
-        links.push({"source":sourceNode, "target":targetNode, "state":state, "value":sourceNode.output});
-        // add source to map of targets to sources
-        if (!(targetNode.name in sourceMap))
-          sourceMap[targetNode.name] = new Array();
-        sourceMap[targetNode.name].push(sourceNode);
-      }
-    }
-  
-    // display the graph
-    // rules of thumb: nodeHeight = 20, labelFontSize = 14, maxLabelWidth = 180
-    //                 nodeHeight = 15, labelFontSize = 10, maxLabelWidth = 120
-    //                 nodeHeight = 40, labelFontSize = 20, maxLabelWidth = 260
-    //                 nodeHeight = 30, labelFontSize = 16
-    var nodeHeight = nodeHeight || 26;
-    var labelFontSize = labelFontSize || 12;
-    var maxLabelWidth = maxLabelWidth || 180;
-    var axisPadding = axisPadding || 30;
-    var stageFontSize = stageFontSize || 16;
-
-    // draw timeline graph
-    var margin = {"vertical":10, "horizontal":50};
-    var w = svgw - 2*margin.horizontal;
-
-    var startTime = minStartTime;
-    var elapsedTime = maxFinishTime - minStartTime;
-    var x = d3.time.scale.utc()
-      .domain([startTime, startTime+elapsedTime])
-      .range([0, w]);
-    var xrel = d3.time.scale()
-      .domain([0, elapsedTime])
-      .range([0, w]);
-
-    // process nodes and determine their x and y positions, width and height
-    var minNodeSpacing = nodeHeight/2;
-    var ends = new Array();
-    var maxIndex = 0;
-    nodes.sort(function(a,b){return a.name.localeCompare(b.name);});
-    for (var i = 0; i < numNodes; i++) {
-      var d = nodes[i];
-      d.x = x(d.submitTime);
-      d.w = x(d.finishTime) - x(d.submitTime);
-      if (d.w < d.stages.length*(nodeHeight-4)) {
-        d.w = d.stages.length*(nodeHeight-4);
-        if (d.x + d.w > w)
-          d.x = w - d.w;
-      }
-      var effectiveX = d.x
-      var effectiveWidth = d.w;
-      if (d.w < maxLabelWidth) {
-        effectiveWidth = maxLabelWidth;
-        if (d.x + effectiveWidth > w)
-          effectiveX = w - effectiveWidth;
-        else if (d.x > 0)
-          effectiveX = d.x+(d.w-maxLabelWidth)/2;
-      }
-      // select "lane" (slot for y-position) for this node
-      // starting at the slot above the node's closest source node (or 0, if none exists)
-      // and moving down until a slot is found that has no nodes within minNodeSpacing of this node
-      // excluding slots that contain more than one source of this node
-      var index = 0;
-      var rejectIndices = new Array();
-      if (d.name in sourceMap) {
-        var sources = sourceMap[d.name];
-        var closestSource = sources[0];
-        var indices = new Array();
-        for (var j = 0; j < sources.length; j++) {
-          if (sources[j].index in indices)
-            rejectIndices[sources[j].index] = true;
-          indices[sources[j].index] = true;
-          if (sources[j].submitTime + sources[j].elapsedTime > closestSource.submitTime + closestSource.elapsedTime)
-            closestSource = sources[j];
-        }
-        index = Math.max(0, closestSource.index-1);
-      }
-      while ((index in ends) && ((index in rejectIndices) || (ends[index]+minNodeSpacing >= effectiveX))) {
-        index++
-      }
-      ends[index] = Math.max(effectiveX + effectiveWidth);
-      maxIndex = Math.max(maxIndex, index);
-      d.y = index*2*nodeHeight + axisPadding;
-      d.h = nodeHeight;
-      d.index = index;
-    }
-
-    var h = 2*axisPadding + 2*nodeHeight*(maxIndex+1);
-    var realh = svgh - 2*margin.vertical;
-    var scale = 1;
-    if (h > realh)
-      scale = realh / h;
-    svgh = Math.min(svgh, h + 2*margin.vertical);
-    var svg = d3.select("div#" + id).append("svg:svg")
-      .attr("width", svgw+"px")
-      .attr("height", svgh+"px");
-    
-    var svgg = svg.append("g")
-      .attr("transform", "translate("+margin.horizontal+","+margin.vertical+") scale("+scale+")");
-
-    // add an untranslated white rectangle below everything
-    // so mouse doesn't have to be over nodes for panning/zooming
-    svgg.append("svg:rect")
-      .attr("x", 0)
-      .attr("y", 0)
-      .attr("width", svgw)
-      .attr("height", svgh/scale)
-      .attr("style", "fill:white;stroke:none");
- 
-    // create axes
-    var topAxis = d3.svg.axis()
-      .scale(x)
-      .orient("bottom");
-    var bottomAxis = d3.svg.axis()
-      .scale(xrel)
-      .orient("top")
-      .tickFormat(function(x) { return formatDuration(x.getTime()); });
-    var topg = svgg.append("g")
-      .attr("class", "x axis top")
-      .call(topAxis);
-    topg.append("svg:text")
-      .attr("class", "axislabel")
-      .attr("x", -9)
-      .attr("y", 13)
-      .text("Time");
-    var botg = svgg.append("g")
-      .attr("class", "x axis bottom")
-      .call(bottomAxis)
-      .attr("transform", "translate(0,"+h+")")
-    botg.append("svg:text")
-      .attr("class", "axislabel")
-      .attr("x", -9)
-      .attr("y", -19)
-      .text("Elapsed");
-    botg.append("svg:text")
-      .attr("class", "axislabel")
-      .attr("x", -9)
-      .attr("y", -4)
-      .text("Time");
-
-  
-    // create a rectangle for each node
-    var boxes = svgg.append("svg:g").selectAll("rect")
-      .data(nodes)
-      .enter().append("svg:rect")
-      .attr("x", function(d) { return d.x; } )
-      .attr("y", function(d) { return d.y; } )
-      .attr("width", function(d) { return d.w; } )
-      .attr("height", function(d) { return d.h; } )
-      .attr("class", function (d) {
-        return "node " + (d.state ? " finished" : "");
-      })
-      .attr("id", function (d) {
-        return d.name;
-      })
-      .append("title")
-      .text(function(d) { return d.info; });
-  
-    // defs for arrowheads marked as to whether they link finished jobs or not
-    svgg.append("svg:defs").selectAll("arrowmarker")
-      .data(["finished", "unfinished", "stage"])
-      .enter().append("svg:marker")
-      .attr("id", String)
-      .attr("viewBox", "0 -5 10 10")
-      .attr("markerWidth", 6)
-      .attr("markerHeight", 6)
-      .attr("refX", function(d) { return (d==="stage") ? 5 : 3 })
-      .attr("orient", "auto")
-      .append("svg:path")
-      .attr("d", function(d) { return (d==="stage") ? "M0,-2L6,0L0,2" : "M0,-3L8,0L0,3" });
-    // defs for unsubmitted node marker
-    svgg.append("svg:defs").selectAll("circlemarker")
-      .data(["circle"])
-      .enter().append("svg:marker")
-      .attr("id", String)
-      .attr("viewBox", "-2 -2 18 18")
-      .attr("markerWidth", 10)
-      .attr("markerHeight", 10)
-      .attr("refX", 10)
-      .attr("refY", 5)
-      .attr("orient", "auto")
-      .append("svg:circle")
-      .attr("cx", 5)
-      .attr("cy", 5)
-      .attr("r", 5);
-
-    // create dangling links representing unsubmitted jobs
-    var markerWidth = nodeHeight/2;
-    var sourceMarker = svgg.append("svg:g").selectAll("line")
-      .data(sourceMarker)
-      .enter().append("svg:line")
-      .attr("x1", function(d) { return d.x - markerWidth; } )
-      .attr("x2", function(d) { return d.x; } )
-      .attr("y1", function(d) { return d.y; } )
-      .attr("y2", function(d) { return d.y + 3; } )
-      .attr("class", "source mark")
-      .attr("marker-start", "url(#circle)");
-    var targetMarker = svgg.append("svg:g").selectAll("line")
-      .data(targetMarker)
-      .enter().append("svg:line")
-      .attr("x1", function(d) { return d.x + d.w + markerWidth; } )
-      .attr("x2", function(d) { return d.x + d.w; } )
-      .attr("y1", function(d) { return d.y + d.h; } )
-      .attr("y2", function(d) { return d.y + d.h - 3; } )
-      .attr("class", "target mark")
-      .attr("marker-start", "url(#circle)");
-
-    // create links between the nodes
-    var lines = svgg.append("svg:g").selectAll("path")
-      .data(links)
-      .enter().append("svg:path")
-      .attr("d", function(d) {
-        var s = d.source;
-        var t = d.target;
-        var x1 = s.x + s.w;
-        var x2 = t.x;
-        var y1 = s.y;
-        var y2 = t.y;
-        if (y1==y2) {
-          y1 += s.h/2;
-          y2 += t.h/2;
-        } else if (y1 < y2) {
-          y1 += s.h;
-        } else {
-          y2 += t.h;
-        }
-        return "M "+x1+" "+y1+" L "+((x2+x1)/2)+" "+((y2+y1)/2)+" L "+x2+" "+y2;
-      } )
-      .attr("class", function (d) {
-        return "link" + (d.state ? " finished" : "");
-      })
-      .attr("marker-mid", function (d) {
-        return "url(#" + (d.state ? "finished" : "unfinished") + ")";
-      });
-  
-    // create text group for each node label
-    var text = svgg.append("svg:g").selectAll("g")
-      .data(nodes)
-      .enter().append("svg:g");
-  
-    // add a shadow copy of the node label (will have a lighter color and thicker
-    // stroke for legibility)
-    text.append("svg:text")
-      .attr("x", function(d) {
-        var goal = d.x + d.w/2;
-        var halfLabel = maxLabelWidth/2;
-        if (goal < halfLabel) return halfLabel;
-        else if (goal > w-halfLabel) return w-halfLabel;
-        return goal;
-      } )
-      .attr("y", function(d) { return d.y + d.h + labelFontSize; } )
-      .attr("class", "joblabel shadow")
-      .attr("style", "font: "+labelFontSize+"px sans-serif")
-      .text(function (d) {
-        return d.name;
-      });
-  
-    // add the main node label
-    text.append("svg:text")
-      .attr("x", function(d) {
-        var goal = d.x + d.w/2;
-        var halfLabel = maxLabelWidth/2;
-        if (goal < halfLabel) return halfLabel;
-        else if (goal > w-halfLabel) return w-halfLabel;
-        return goal;
-      } )
-      .attr("y", function(d) { return d.y + d.h + labelFontSize; } )
-      .attr("class", "joblabel")
-      .attr("style", "font: "+labelFontSize+"px sans-serif")
-      .text(function (d) {
-        return d.name;
-      });
-
-    // add node stage information
-    var topstageg = svgg.append("svg:g");
-    for (var i = 0; i < numNodes; i++) {
-      var parentg = topstageg.append("svg:g")
-        .attr("class", "parent");
-      var d = nodes[i];
-      var cr = d.h / 2 - 2;
-      var cy = d.y + cr + 2;
-      var cxSpacing = d.w / d.stages.length;
-      if (cxSpacing < 2*cr)
-        cxSpacing = 2*cr;
-      var cxBase = d.x + cxSpacing / 2;
-
-      for (var j = 0; j < d.stages.length; j++) {
-        var data = d.stages[j];
-        var stageg = parentg.append("svg:g")
-          .attr("id", "child"+j);
-        var cx = cxBase + j*cxSpacing;
-        var x1 = cx + cr;
-        var x2 = cx + cxSpacing - cr;
-        if (cxSpacing!=2*cr && j!=d.stages.length-1) {
-          var path = stageg.append("svg:path")
-            .attr("class", "link stage")
-            .attr("d", "M "+x1+" "+cy+" L "+((x1+x2)/2)+" "+cy+" L "+x2+" "+cy)
-            .attr("marker-end", "url(#stage)");
-        }
-        if (j==0) {
-          stageg.append("svg:rect")
-            .attr("class", "stage")
-            .attr("x", cx - cr)
-            .attr("y", cy - cr)
-            .attr("width", 2*cr)
-            .attr("height", 2*cr)
-            .append("title")
-            .text("Map stage with "+data+" task"+(data != 1 ? "s" : ""));
-        } else {
-          stageg.append("svg:circle")
-            .attr("class", "stage")
-            .attr("r", cr)
-            .attr("cx", cx)
-            .attr("cy", cy)
-            .append("title")
-            .text("Reduce stage with "+data+" task"+(data != 1 ? "s" : ""));
-        }
-        var fontSize = stageFontSize;
-        if (data > 9) fontSize = fontSize - 2;
-        if (data > 99) fontSize = fontSize - 4;
-        if (data > 999) fontSize = fontSize - 2;
-        if (data > 9999) fontSize = fontSize - 1;
-        stageg.append("svg:text")
-          .attr("class", "stagelabel")
-          .attr("x", cx)
-          .attr("y", cy)
-          .text(data)
-          .attr("style", "font: "+fontSize+"px sans-serif");
-      }
-    }
-
-    svg.call(d3.behavior.zoom().on("zoom", function() {
-      var left = Math.min(Math.max(d3.event.translate[0]+margin.horizontal, margin.horizontal-w*d3.event.scale*scale), margin.horizontal+w);
-      var top = Math.min(Math.max(d3.event.translate[1]+margin.vertical, margin.vertical-h*d3.event.scale*scale), margin.vertical+h);
-      svgg.attr("transform", "translate("+left+","+top+") scale("+(d3.event.scale*scale)+")");
-    }));
-  },
-  formatDuration:function(d) {
-    if (d==0) { return "0" }
-    var subseconds = parseInt(d) / 1000;
-    if (subseconds < 1)
-      return subseconds + "s";
-    var seconds = Math.floor(subseconds);
-    if ( seconds < 60 )
-      return seconds + "s";
-    var minutes = Math.floor(seconds / 60);
-    if ( minutes < 60 ) {
-      var x = seconds - 60*minutes;
-      return minutes + "m" + (x==0 ? "" : " " + x + "s");
-    }
-    var hours = Math.floor(minutes / 60);
-    if ( hours < 24 ) {
-      var x = minutes - 60*hours;
-      return hours + "h" + (x==0 ? "" : " " + x + "m");
-    }
-    var days = Math.floor(hours / 24);
-    if ( days < 7 ) {
-      var x = hours - 24*days;
-      return days + "d " + (x==0 ? "" : " " + x + "h");
-    }
-    var weeks = Math.floor(days / 7);
-    var x = days - 7*weeks;
-    return weeks + "w " + (x==0 ? "" : " " + x + "d");
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/41ea642b/ambari-web/app/views.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views.js b/ambari-web/app/views.js
index b957ded..2942026 100644
--- a/ambari-web/app/views.js
+++ b/ambari-web/app/views.js
@@ -195,7 +195,6 @@ require('views/main/apps_view');
 require('views/main/apps/item_view');
 require('views/main/apps/item/bar_view');
 require('views/main/apps/item/dag_view');
-require('views/main/apps/item/app_view');
 require('views/main/mirroring_view');
 require('views/main/mirroring/dropdown_view');
 require('views/main/mirroring/dataset_view');

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/41ea642b/ambari-web/app/views/main/apps/item/app_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/apps/item/app_view.js b/ambari-web/app/views/main/apps/item/app_view.js
deleted file mode 100644
index b279d28..0000000
--- a/ambari-web/app/views/main/apps/item/app_view.js
+++ /dev/null
@@ -1,136 +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.
- */
-
-var App = require('app');
-var sort = require('views/common/sort_view');
-var appGraph = require('utils/app_graph');
-
-App.MainAppsItemAppView = Em.View.extend({
-  templateName: require('templates/main/apps/item/app'),
-  elementId : 'jobs',
-  content:function(){
-    return this.get('controller.content.jobs');
-  }.property('controller.content.jobs'),
-
-  classNames:['table','dataTable'],
-  /**
-   * convert content to special jobs object
-   */
-  jobs: function(){
-    var c = this.get('content');
-    var result = [];
-    c.forEach(function(item, index){
-      result[index] = new Object({
-        'name' : item.get('id'),
-        'type' : item.get('app_type'),
-        'entityName' : item.get('workflow_entity_name'),
-        'status' : item.get('status'),
-        'submitTime' : item.get('submit_time'),
-        'finishTime' : item.get('finish_time'),
-        'elapsedTime' : appGraph.formatDuration(item.get('elapsed_time')),
-        'numStages' : item.get('num_stages'),
-        'stages' : item.get('stages')
-      })
-    });
-    return result;
-  }.property('content'),
-
-  loaded : false,
-
-  hasManyJobs: function(){
-    return (this.get('content') && this.get('content').length > 1);
-  }.property('content'),
-
-  onLoad:function (){
-    if(!this.get('controller.content.loadAllJobs') || this.get('loaded')){
-      return;
-    }
-
-    this.set('loaded', true);
-
-    var self = this;
-
-    Ember.run.next(function(){
-      self.draw();
-    });
-
-  }.observes('controller.content.loadAllJobs'),
-
-  resizeModal: function () {
-    var modal = $('.modal');
-    var body = $('body');
-    modal.find('.modal-body').first().css('max-height', 'none');
-    var modalHeight = modal.height() + 300;
-    var bodyHeight = body.height();
-    if (modalHeight > bodyHeight) {
-      modal.css('top', '20px');
-      $('.modal-body').height(bodyHeight - 180);
-    } else {
-      modal.css('top', (bodyHeight - modalHeight) / 2 + 'px');
-    }
-
-    var modalWidth = modal.width();
-    var bodyWidth = body.width();
-    if (modalWidth > bodyWidth) {
-      modal.css('left', '10px');
-      modal.width(bodyWidth - 20);
-    } else {
-      modal.css('left', (bodyWidth - modalWidth) / 2 + 'px');
-    }
-  },
-
-  didInsertElement: function(){
-    this.onLoad();
-  },
-
-  draw: function(){
-    var dagSchema = this.get('controller.content.workflowContext');
-    var jobs = this.get('jobs');
-    this.resizeModal();
-    appGraph.create('app_graph', dagSchema, jobs, this.$().width(), 300);
-  },
-  sortView: sort.wrapperView,
-  nameSort: sort.fieldView.extend({
-    name:'workflow_entity_name',
-    displayName: Em.I18n.t('apps.item.dag.job')
-  }),
-  idSort: sort.fieldView.extend({
-    name:'id',
-    displayName: Em.I18n.t('apps.item.dag.jobId')
-  }),
-  typeSort: sort.fieldView.extend({
-    name:'app_type',
-    displayName: Em.I18n.t('apps.item.dag.type')
-  }),
-  statusSort: sort.fieldView.extend({
-    name:'status',
-    displayName: Em.I18n.t('apps.item.dag.status')
-  }),
-  numStagesSort: sort.fieldView.extend({
-    name:'num_stages',
-    displayName: Em.I18n.t('apps.item.dag.num_stages')
-  }),
-  stagesSort: sort.fieldView.extend({
-    name:'stages',
-    displayName: Em.I18n.t('apps.item.dag.stages')
-  }),
-  durationSort: sort.fieldView.extend({
-    name:'elapsed_time',
-    displayName: Em.I18n.t('apps.item.dag.duration')
-  })
-});

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/41ea642b/ambari-web/app/views/main/apps/item_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/apps/item_view.js b/ambari-web/app/views/main/apps/item_view.js
index b9acd61..29300d1 100644
--- a/ambari-web/app/views/main/apps/item_view.js
+++ b/ambari-web/app/views/main/apps/item_view.js
@@ -17,13 +17,23 @@
  */
 
 var App = require('app');
-var stringUtils = require('utils/string_utils');
 
 App.MainAppsItemView = Em.View.extend({
   tagName: 'tr',
   classNames : ['containerRow'],
   templateName:require('templates/main/apps/item'),
-  menuTabs:[],
+  menuTabs:[
+    Em.Object.create({
+      label:Em.I18n.t('apps.dagCharts.popup.dag'),
+      active:'active',
+      content:'App.MainAppsItemDagView'
+    }),
+    Em.Object.create({
+      label:Em.I18n.t('apps.dagCharts.popup.tasks'),
+      active:'',
+      content:'App.MainAppsItemBarView'
+    })
+  ],
   activeTab:null,
   switchTab:function(event){
     var tabs = this.get('menuTabs');
@@ -38,30 +48,10 @@ App.MainAppsItemView = Em.View.extend({
     this.set('activeTab', event.context);
   },
   didInsertElement: function(){
-    if (!App.testMode && stringUtils.compareVersions(App.get('currentStackVersionNumber'), "2.0") === -1) {
-      var tabs = [
-        Em.Object.create({
-          label:Em.I18n.t('apps.dagCharts.popup.dag'),
-          active:'active',
-          content:'App.MainAppsItemDagView'
-        }),
-        Em.Object.create({
-          label:Em.I18n.t('apps.dagCharts.popup.tasks'),
-          active:'',
-          content:'App.MainAppsItemBarView'
-        })];
-      this.set('menuTabs', tabs);
-      this.set('activeTab', tabs[0]);
-    } else {
-      var tabs = [
-        Em.Object.create({
-          label:Em.I18n.t('apps.dagCharts.popup.dag'),
-          active:'active',
-          content:'App.MainAppsItemAppView'
-        })];
-      this.set('menuTabs', tabs);
-      this.set('activeTab', tabs[0]);
-    }
+    var tabs = this.get('menuTabs');
+    tabs[0].set('active', 'active');
+    tabs[1].set('active', '');
+    this.set('activeTab', tabs[0]);
   },
   containerView: Em.ContainerView.extend({
     onchange:function(){

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/41ea642b/ambari-web/app/views/main/apps_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/apps_view.js b/ambari-web/app/views/main/apps_view.js
index 2d449cd..fbfa214 100644
--- a/ambari-web/app/views/main/apps_view.js
+++ b/ambari-web/app/views/main/apps_view.js
@@ -100,7 +100,7 @@ App.MainAppsView = Em.View.extend({
     class: "sorting",
     widthClass: "",
     content: null,
-    defaultColumn: 9,
+    defaultColumn: 8,
 
     didInsertElement: function () {
       this.set("widthClass", "col" + this.get('content.index'));
@@ -158,21 +158,13 @@ App.MainAppsView = Em.View.extend({
     fieldType: 'input-small'
   }),
   /**
-   * Filter-field for tags.
-   * Based on <code>filters</code> library
-   */
-  tagFilterView: filters.createTextView({
-    valueBinding: "controller.filterObject.tagSearch",
-    fieldType: 'input-super-mini'
-  }),
-  /**
    * Filter-field for type.
    * Based on <code>filters</code> library
    */
   typeFilterView: filters.createSelectView({
     fieldType: 'input-small',
     valueBinding: "controller.filterObject.runType",
-    content: ['Any', 'Pig', 'Hive', 'MapReduce', 'Yarn']
+    content: ['Any', 'Pig', 'Hive', 'MapReduce']
   }),
 
   /**
@@ -222,6 +214,22 @@ App.MainAppsView = Em.View.extend({
     valueBinding: "controller.filterObject.jobs"
   }),
   /**
+   * Filter-field for Input.
+   * Based on <code>filters</code> library
+   */
+  inputFilterView: filters.createTextView({
+    fieldType: 'input-super-mini',
+    valueBinding: "controller.filterObject.input"
+  }),
+  /**
+   * Filter-field for Output.
+   * Based on <code>filters</code> library
+   */
+  outputFilterView: filters.createTextView({
+    fieldType: 'input-super-mini',
+    valueBinding: "controller.filterObject.output"
+  }),
+  /**
    * Filter-field for Duration.
    * Based on <code>filters</code> library
    */
@@ -344,4 +352,4 @@ App.MainAppsView = Em.View.extend({
 
   })
 
-});
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/41ea642b/ambari-web/vendor/styles/cubism.css
----------------------------------------------------------------------
diff --git a/ambari-web/vendor/styles/cubism.css b/ambari-web/vendor/styles/cubism.css
index 9a3b43f..b572148 100644
--- a/ambari-web/vendor/styles/cubism.css
+++ b/ambari-web/vendor/styles/cubism.css
@@ -43,7 +43,7 @@
 #dag_viewer rect {
   fill: #ccc;
   stroke: #333;
-  stroke-width: 1.5px;
+  stroke-width: 1px;
 }
 
 #dag_viewer rect.finished {


[2/2] git commit: AMBARI-3466. Revert 1.4.1 changes to job history. (billie)

Posted by yu...@apache.org.
AMBARI-3466. Revert 1.4.1 changes to job history. (billie)

Reverting ambari-log4j and web service.


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

Branch: refs/heads/branch-1.4.1
Commit: 9afc48b0e49d4b8662d8a1d145386bb8ba995a9c
Parents: 41ea642
Author: Yusaku Sako <yu...@hortonworks.com>
Authored: Sat Oct 5 16:24:14 2013 -0700
Committer: Yusaku Sako <yu...@hortonworks.com>
Committed: Sat Oct 5 16:25:10 2013 -0700

----------------------------------------------------------------------
 .../apache/ambari/eventdb/db/DBConnector.java   |  13 +-
 .../ambari/eventdb/db/PostgresConnector.java    |  75 ++-----
 .../org/apache/ambari/eventdb/model/Apps.java   | 193 -------------------
 .../ambari/eventdb/model/WorkflowContext.java   |   9 -
 .../apache/ambari/eventdb/model/Workflows.java  |  12 +-
 .../eventdb/webservice/WorkflowJsonService.java |  56 ++----
 .../main/resources/Ambari-DDL-MySQL-CREATE.sql  |   2 +-
 .../main/resources/Ambari-DDL-Oracle-CREATE.sql |   2 +-
 .../resources/Ambari-DDL-Postgres-CREATE.sql    |  16 +-
 .../upgrade/ddl/Ambari-DDL-Oracle-UPGRADE.sql   |   2 -
 .../ddl/Ambari-DDL-Postgres-UPGRADE-1.3.0.sql   |   3 -
 11 files changed, 43 insertions(+), 340 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/9afc48b0/ambari-server/src/main/java/org/apache/ambari/eventdb/db/DBConnector.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/eventdb/db/DBConnector.java b/ambari-server/src/main/java/org/apache/ambari/eventdb/db/DBConnector.java
index 7a2913c..b859114 100644
--- a/ambari-server/src/main/java/org/apache/ambari/eventdb/db/DBConnector.java
+++ b/ambari-server/src/main/java/org/apache/ambari/eventdb/db/DBConnector.java
@@ -19,8 +19,11 @@ package org.apache.ambari.eventdb.db;
 import java.io.IOException;
 import java.util.List;
 
-import org.apache.ambari.eventdb.model.*;
+import org.apache.ambari.eventdb.model.DataTable;
 import org.apache.ambari.eventdb.model.Jobs.JobDBEntry;
+import org.apache.ambari.eventdb.model.TaskAttempt;
+import org.apache.ambari.eventdb.model.WorkflowContext;
+import org.apache.ambari.eventdb.model.Workflows;
 import org.apache.ambari.eventdb.model.Workflows.WorkflowDBEntry.WorkflowFields;
 
 public interface DBConnector {
@@ -34,11 +37,9 @@ public interface DBConnector {
   
   public DataTable fetchWorkflows(int offset, int limit, String searchTerm, int echo, WorkflowFields field, boolean sortAscending, String searchWorkflowId,
       String searchWorkflowName, String searchWorkflowType, String searchUserName, int minJobs, int maxJobs, long minInputBytes, long maxInputBytes,
-      long minOutputBytes, long maxOutputBytes, long minDuration, long maxDuration, long minStartTime, long maxStartTime, long minFinishTime, 
-      long maxFinishTime, String tagSearchTerm) throws IOException;
-
-  public List<Apps.AppDBEntry> fetchAppDetails(String workflowId) throws IOException;
-
+      long minOutputBytes, long maxOutputBytes, long minDuration, long maxDuration, long minStartTime, long maxStartTime, long minFinishTime, long maxFinishTime)
+      throws IOException;
+  
   public List<JobDBEntry> fetchJobDetails(String workflowID) throws IOException;
   
   public List<JobDBEntry> fetchJobDetails(long minFinishTime, long maxStartTime) throws IOException;

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/9afc48b0/ambari-server/src/main/java/org/apache/ambari/eventdb/db/PostgresConnector.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/eventdb/db/PostgresConnector.java b/ambari-server/src/main/java/org/apache/ambari/eventdb/db/PostgresConnector.java
index a3ed09b..552df9c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/eventdb/db/PostgresConnector.java
+++ b/ambari-server/src/main/java/org/apache/ambari/eventdb/db/PostgresConnector.java
@@ -27,18 +27,20 @@ import java.util.EnumMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.ambari.eventdb.model.*;
+import org.apache.ambari.eventdb.model.DataTable;
 import org.apache.ambari.eventdb.model.DataTable.AvgData;
 import org.apache.ambari.eventdb.model.DataTable.Summary;
 import org.apache.ambari.eventdb.model.DataTable.Summary.SummaryFields;
 import org.apache.ambari.eventdb.model.DataTable.Times;
 import org.apache.ambari.eventdb.model.Jobs.JobDBEntry;
 import org.apache.ambari.eventdb.model.Jobs.JobDBEntry.JobFields;
+import org.apache.ambari.eventdb.model.TaskAttempt;
 import org.apache.ambari.eventdb.model.TaskAttempt.TaskAttemptFields;
+import org.apache.ambari.eventdb.model.WorkflowContext;
+import org.apache.ambari.eventdb.model.Workflows;
 import org.apache.ambari.eventdb.model.Workflows.WorkflowDBEntry;
 import org.apache.ambari.eventdb.model.Workflows.WorkflowDBEntry.WorkflowFields;
 import org.apache.commons.lang.NotImplementedException;
-import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.codehaus.jackson.JsonParseException;
@@ -48,7 +50,6 @@ import org.codehaus.jackson.map.ObjectMapper;
 public class PostgresConnector implements DBConnector {
   private static Log LOG = LogFactory.getLog(PostgresConnector.class);
   private static final String WORKFLOW_TABLE_NAME = "workflow";
-  private static final String APP_TABLE_NAME = "application";
   private static final String JOB_TABLE_NAME = "job";
   private static final String TASK_ATTEMPT_TABLE_NAME = "taskattempt";
   public static final String SORT_ASC = "ASC";
@@ -74,7 +75,6 @@ public class PostgresConnector implements DBConnector {
         + getAvg(WorkflowFields.DURATION, SummaryFields.avgDuration, SummaryFields.minDuration, SummaryFields.maxDuration) + ", min("
         + WorkflowFields.STARTTIME + ") as " + SummaryFields.oldest + ", max(" + WorkflowFields.STARTTIME + ") as " + SummaryFields.youngest + " FROM "
         + WORKFLOW_TABLE_NAME),
-    FAD_PS("SELECT " + Apps.AppDBEntry.APP_FIELDS + " FROM " + APP_TABLE_NAME + " WHERE " + Apps.AppDBEntry.AppFields.WORKFLOWID.toString() + " = ?"),
     FJD_PS("SELECT " + JobDBEntry.JOB_FIELDS + " FROM " + JOB_TABLE_NAME + " WHERE " + JobFields.WORKFLOWID.toString() + " = ?"),
     FJD_TIMERANGE_PS("SELECT " + JobDBEntry.JOB_FIELDS + " FROM " + JOB_TABLE_NAME + " WHERE " + JobFields.FINISHTIME.toString() + " >= ? AND "
         + JobFields.SUBMITTIME.toString() + " <= ? ORDER BY " + JobFields.WORKFLOWID + ", " + JobFields.JOBID),
@@ -214,7 +214,6 @@ public class PostgresConnector implements DBConnector {
     w.setOutputBytes(WorkflowFields.OUTPUTBYTES.getLong(rs));
     w.setNumJobsCompleted(WorkflowFields.NUMJOBSCOMPLETED.getInt(rs));
     w.setWorkflowContext(jsonMapper.readValue(WorkflowFields.WORKFLOWCONTEXT.getString(rs), WorkflowContext.class));
-    w.setWorkflowTags(WorkflowFields.WORKFLOWTAGS.getString(rs));
     return w;
   }
   
@@ -229,8 +228,8 @@ public class PostgresConnector implements DBConnector {
   @Override
   public DataTable fetchWorkflows(int offset, int limit, String searchTerm, int echo, WorkflowFields col, boolean sortAscending, String searchWorkflowId,
       String searchWorkflowName, String searchWorkflowType, String searchUserName, int minJobs, int maxJobs, long minInputBytes, long maxInputBytes,
-      long minOutputBytes, long maxOutputBytes, long minDuration, long maxDuration, long minStartTime, long maxStartTime, long minFinishTime, 
-      long maxFinishTime, String tagSearchTerm) throws IOException {
+      long minOutputBytes, long maxOutputBytes, long minDuration, long maxDuration, long minStartTime, long maxStartTime, long minFinishTime, long maxFinishTime)
+      throws IOException {
     int total = 0;
     PreparedStatement ps = getPS(Statements.FW_COUNT_PS);
     ResultSet rs = null;
@@ -250,8 +249,7 @@ public class PostgresConnector implements DBConnector {
     }
     
     String searchClause = buildSearchClause(searchTerm, searchWorkflowId, searchWorkflowName, searchWorkflowType, searchUserName, minJobs, maxJobs,
-        minInputBytes, maxInputBytes, minOutputBytes, maxOutputBytes, minDuration, maxDuration, minStartTime, maxStartTime, minFinishTime, maxFinishTime,
-        tagSearchTerm);
+        minInputBytes, maxInputBytes, minOutputBytes, maxOutputBytes, minDuration, maxDuration, minStartTime, maxStartTime, minFinishTime, maxFinishTime);
     List<WorkflowDBEntry> workflows = fetchWorkflows(getQualifiedPS(Statements.FW_PS, searchClause, col, sortAscending, offset, limit));
     Summary summary = fetchSummary(getQualifiedPS(Statements.FW_SUMMARY_PS, searchClause));
     DataTable table = new DataTable();
@@ -269,54 +267,7 @@ public class PostgresConnector implements DBConnector {
     table.setSummary(summary);
     return table;
   }
-
-  private static Apps.AppDBEntry getAppDBEntry(ResultSet rs) throws SQLException {
-    Apps.AppDBEntry a = new Apps.AppDBEntry();
-    a.setWorkflowId(Apps.AppDBEntry.AppFields.WORKFLOWID.getString(rs));
-    a.setWorkflowEntityName(Apps.AppDBEntry.AppFields.WORKFLOWENTITYNAME.getString(rs));
-    a.setAppId(Apps.AppDBEntry.AppFields.APPID.getString(rs));
-    a.setAppName(Apps.AppDBEntry.AppFields.APPNAME.getString(rs));
-    a.setAppType(Apps.AppDBEntry.AppFields.APPTYPE.getString(rs));
-    a.setFinishTime(Apps.AppDBEntry.AppFields.FINISHTIME.getLong(rs));
-    a.setLaunchTime(Apps.AppDBEntry.AppFields.LAUNCHTIME.getLong(rs));
-    a.setQueue(Apps.AppDBEntry.AppFields.QUEUE.getString(rs));
-    String[] stageStrings = StringUtils.split(Apps.AppDBEntry.AppFields.APPINFO.getString(rs), "-");
-    List<Integer> stages = new ArrayList<Integer>();
-    for (String s : stageStrings)
-      stages.add(Integer.parseInt(s));
-    a.setStages(stages);
-    a.setStatus(Apps.AppDBEntry.AppFields.STATUS.getString(rs));
-    a.setSubmitTime(Apps.AppDBEntry.AppFields.SUBMITTIME.getLong(rs));
-    a.setUserName(Apps.AppDBEntry.AppFields.USERNAME.getString(rs));
-    return a;
-  }
-
-  @Override
-  public List<Apps.AppDBEntry> fetchAppDetails(String workflowId) throws IOException {
-    PreparedStatement ps = getPS(Statements.FAD_PS);
-    List<Apps.AppDBEntry> apps = new ArrayList<Apps.AppDBEntry>();
-    ResultSet rs = null;
-    try {
-      ps.setString(1, workflowId);
-      rs = ps.executeQuery();
-      while (rs.next()) {
-        apps.add(getAppDBEntry(rs));
-      }
-      rs.close();
-    } catch (SQLException e) {
-      throw new IOException(e);
-    } finally {
-      if (rs != null)
-        try {
-          rs.close();
-        } catch (SQLException e) {
-          LOG.error("Exception while closing ResultSet", e);
-        }
-
-    }
-    return apps;
-  }
-
+  
   private static JobDBEntry getJobDBEntry(ResultSet rs) throws SQLException {
     JobDBEntry j = new JobDBEntry();
     j.setConfPath(JobFields.CONFPATH.getString(rs));
@@ -338,7 +289,7 @@ public class PostgresConnector implements DBConnector {
     j.setWorkflowId(JobFields.WORKFLOWID.getString(rs));
     return j;
   }
-
+  
   @Override
   public List<JobDBEntry> fetchJobDetails(String workflowId) throws IOException {
     PreparedStatement ps = getPS(Statements.FJD_PS);
@@ -360,11 +311,11 @@ public class PostgresConnector implements DBConnector {
         } catch (SQLException e) {
           LOG.error("Exception while closing ResultSet", e);
         }
-
+      
     }
     return jobs;
   }
-
+  
   @Override
   public List<JobDBEntry> fetchJobDetails(long minFinishTime, long maxStartTime) throws IOException {
     PreparedStatement ps = getPS(Statements.FJD_TIMERANGE_PS);
@@ -597,7 +548,7 @@ public class PostgresConnector implements DBConnector {
   
   private static String buildSearchClause(String searchTerm, String searchWorkflowId, String searchWorkflowName, String searchWorkflowType,
       String searchUserName, int minJobs, int maxJobs, long minInputBytes, long maxInputBytes, long minOutputBytes, long maxOutputBytes, long minDuration,
-      long maxDuration, long minStartTime, long maxStartTime, long minFinishTime, long maxFinishTime, String searchTags) {
+      long maxDuration, long minStartTime, long maxStartTime, long minFinishTime, long maxFinishTime) {
     StringBuilder sb = new StringBuilder();
     sb.append(WHERE);
     if (searchTerm != null && searchTerm.length() > 0) {
@@ -617,8 +568,6 @@ public class PostgresConnector implements DBConnector {
       append(sb, startsWith(WorkflowFields.WORKFLOWID, searchWorkflowType));
     if (searchUserName != null)
       append(sb, equals(WorkflowFields.USERNAME, searchUserName));
-    if (searchTags != null)
-      append(sb, like(WorkflowFields.WORKFLOWTAGS, searchTags));
     addRangeSearch(sb, WorkflowFields.NUMJOBSTOTAL, minJobs, maxJobs);
     addRangeSearch(sb, WorkflowFields.INPUTBYTES, minInputBytes, maxInputBytes);
     addRangeSearch(sb, WorkflowFields.OUTPUTBYTES, minOutputBytes, maxOutputBytes);

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/9afc48b0/ambari-server/src/main/java/org/apache/ambari/eventdb/model/Apps.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/eventdb/model/Apps.java b/ambari-server/src/main/java/org/apache/ambari/eventdb/model/Apps.java
deleted file mode 100644
index 7b57114..0000000
--- a/ambari-server/src/main/java/org/apache/ambari/eventdb/model/Apps.java
+++ /dev/null
@@ -1,193 +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.eventdb.model;
-
-import org.apache.commons.lang.StringUtils;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlTransient;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.List;
-
-@XmlRootElement
-@XmlAccessorType(XmlAccessType.FIELD)
-public class Apps {
-  List<AppDBEntry> apps;
-
-  public static class AppDBEntry {
-    public static enum AppFields {
-      APPID,
-      APPNAME,
-      APPTYPE,
-      STATUS,
-      USERNAME,
-      QUEUE,
-      SUBMITTIME,
-      LAUNCHTIME,
-      FINISHTIME,
-      APPINFO,
-      WORKFLOWID,
-      WORKFLOWENTITYNAME;
-
-      public String getString(ResultSet rs) throws SQLException {
-        return rs.getString(this.toString());
-      }
-
-      public int getInt(ResultSet rs) throws SQLException {
-        return rs.getInt(this.toString());
-      }
-
-      public long getLong(ResultSet rs) throws SQLException {
-        return rs.getLong(this.toString());
-      }
-
-      public static String join() {
-        String[] tmp = new String[AppFields.values().length];
-        for (int i = 0; i < tmp.length; i++)
-          tmp[i] = AppFields.values()[i].toString();
-        return StringUtils.join(tmp, ",");
-      }
-    }
-
-    @XmlTransient
-    public static final String APP_FIELDS = AppFields.join();
-
-    private String appId;
-    private String appName;
-    private String appType;
-    private String status;
-    private String userName;
-    private String queue;
-    private long submitTime;
-    private long launchTime;
-    private long finishTime;
-    private List<Integer> stages;
-    private String workflowId;
-    private String workflowEntityName;
-
-    public AppDBEntry() {
-      /* Required by JAXB. */
-    }
-
-    public String getAppId() {
-      return appId;
-    }
-
-    public void setAppId(String appId) {
-      this.appId = appId;
-    }
-
-    public String getAppName() {
-      return appName;
-    }
-
-    public void setAppName(String appName) {
-      this.appName = appName;
-    }
-
-    public String getAppType() {
-      return appType;
-    }
-
-    public void setAppType(String appType) {
-      this.appType = appType;
-    }
-
-    public String getStatus() {
-      return status;
-    }
-
-    public void setStatus(String status) {
-      this.status = status;
-    }
-
-    public String getUserName() {
-      return userName;
-    }
-
-    public void setUserName(String userName) {
-      this.userName = userName;
-    }
-
-    public String getQueue() {
-      return queue;
-    }
-
-    public void setQueue(String queue) {
-      this.queue = queue;
-    }
-
-    public long getSubmitTime() {
-      return submitTime;
-    }
-
-    public void setSubmitTime(long submitTime) {
-      this.submitTime = submitTime;
-    }
-
-    public long getLaunchTime() {
-      return launchTime;
-    }
-
-    public void setLaunchTime(long launchTime) {
-      this.launchTime = launchTime;
-    }
-
-    public long getFinishTime() {
-      return finishTime;
-    }
-
-    public void setFinishTime(long finishTime) {
-      this.finishTime = finishTime;
-    }
-
-    public List<Integer> getStages() {
-      return stages;
-    }
-
-    public void setStages(List<Integer> stages) {
-      this.stages = stages;
-    }
-
-    public String getWorkflowId() {
-      return workflowId;
-    }
-
-    public void setWorkflowId(String workflowId) {
-      this.workflowId = workflowId;
-    }
-
-    public String getWorkflowEntityName() {
-      return workflowEntityName;
-    }
-
-    public void setWorkflowEntityName(String workflowEntityName) {
-      this.workflowEntityName = workflowEntityName;
-    }
-  }
-
-  public List<AppDBEntry> getApps() {
-    return apps;
-  }
-
-  public void setApps(List<AppDBEntry> apps) {
-    this.apps = apps;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/9afc48b0/ambari-server/src/main/java/org/apache/ambari/eventdb/model/WorkflowContext.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/eventdb/model/WorkflowContext.java b/ambari-server/src/main/java/org/apache/ambari/eventdb/model/WorkflowContext.java
index a8b3945..c2b0468 100644
--- a/ambari-server/src/main/java/org/apache/ambari/eventdb/model/WorkflowContext.java
+++ b/ambari-server/src/main/java/org/apache/ambari/eventdb/model/WorkflowContext.java
@@ -29,7 +29,6 @@ public class WorkflowContext {
   private String workflowId;
   private String workflowName;
   private String workflowEntityName;
-  private String workflowTags;
   
   private WorkflowDag workflowDag;
   
@@ -52,10 +51,6 @@ public class WorkflowContext {
     return this.workflowEntityName;
   }
   
-  public String getWorkflowTags() {
-    return workflowTags;
-  }
-  
   public WorkflowDag getWorkflowDag() {
     return this.workflowDag;
   }
@@ -77,10 +72,6 @@ public class WorkflowContext {
     this.workflowEntityName = wfEntityName;
   }
   
-  public void setWorkflowTags(String workflowTags) {
-    this.workflowTags = workflowTags;
-  }
-  
   public void setWorkflowDag(WorkflowDag wfDag) {
     this.workflowDag = wfDag;
   }

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/9afc48b0/ambari-server/src/main/java/org/apache/ambari/eventdb/model/Workflows.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/eventdb/model/Workflows.java b/ambari-server/src/main/java/org/apache/ambari/eventdb/model/Workflows.java
index 0aa3e74..541ce79 100644
--- a/ambari-server/src/main/java/org/apache/ambari/eventdb/model/Workflows.java
+++ b/ambari-server/src/main/java/org/apache/ambari/eventdb/model/Workflows.java
@@ -47,8 +47,7 @@ public class Workflows {
       INPUTBYTES,
       OUTPUTBYTES,
       PARENTWORKFLOWID,
-      WORKFLOWCONTEXT,
-      WORKFLOWTAGS;
+      WORKFLOWCONTEXT;
       
       public String getString(ResultSet rs) throws SQLException {
         return rs.getString(this.toString());
@@ -84,7 +83,6 @@ public class Workflows {
     private int numJobsCompleted;
     private String parentWorkflowId;
     private WorkflowContext workflowContext;
-    private String workflowTags;
     
     public WorkflowDBEntry() {
       /* Required by JAXB. */
@@ -126,10 +124,6 @@ public class Workflows {
       return workflowContext;
     }
     
-    public String getWorkflowTags() {
-      return workflowTags;
-    }
-    
     public void setWorkflowId(String workflowId) {
       this.workflowId = workflowId;
     }
@@ -166,10 +160,6 @@ public class Workflows {
       this.workflowContext = workflowContext;
     }
     
-    public void setWorkflowTags(String workflowTags) {
-      this.workflowTags = workflowTags;
-    }
-    
     public long getInputBytes() {
       return inputBytes;
     }

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/9afc48b0/ambari-server/src/main/java/org/apache/ambari/eventdb/webservice/WorkflowJsonService.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/eventdb/webservice/WorkflowJsonService.java b/ambari-server/src/main/java/org/apache/ambari/eventdb/webservice/WorkflowJsonService.java
index 42d474b..7d653f2 100644
--- a/ambari-server/src/main/java/org/apache/ambari/eventdb/webservice/WorkflowJsonService.java
+++ b/ambari-server/src/main/java/org/apache/ambari/eventdb/webservice/WorkflowJsonService.java
@@ -36,10 +36,15 @@ import javax.ws.rs.core.MediaType;
 import org.apache.ambari.eventdb.db.MySQLConnector;
 import org.apache.ambari.eventdb.db.OracleConnector;
 import org.apache.ambari.eventdb.db.PostgresConnector;
-import org.apache.ambari.eventdb.model.*;
+import org.apache.ambari.eventdb.model.DataTable;
+import org.apache.ambari.eventdb.model.Jobs;
 import org.apache.ambari.eventdb.model.Jobs.JobDBEntry;
+import org.apache.ambari.eventdb.model.TaskAttempt;
+import org.apache.ambari.eventdb.model.TaskData;
 import org.apache.ambari.eventdb.model.TaskData.Point;
+import org.apache.ambari.eventdb.model.TaskLocalityData;
 import org.apache.ambari.eventdb.model.TaskLocalityData.DataPoint;
+import org.apache.ambari.eventdb.model.Workflows;
 import org.apache.ambari.eventdb.model.Workflows.WorkflowDBEntry;
 import org.apache.ambari.eventdb.model.Workflows.WorkflowDBEntry.WorkflowFields;
 import org.apache.ambari.server.configuration.Configuration;
@@ -62,7 +67,6 @@ public class WorkflowJsonService {
   
   private static final Workflows EMPTY_WORKFLOWS = new Workflows();
   private static final List<JobDBEntry> EMPTY_JOBS = Collections.emptyList();
-  private static final List<Apps.AppDBEntry> EMPTY_APPS = Collections.emptyList();
   {
     List<WorkflowDBEntry> emptyWorkflows = Collections.emptyList();
     EMPTY_WORKFLOWS.setWorkflows(emptyWorkflows);
@@ -134,8 +138,7 @@ public class WorkflowJsonService {
       @DefaultValue("-1") @QueryParam("minOutputBytes") long minOutputBytes, @DefaultValue("-1") @QueryParam("maxOutputBytes") long maxOutputBytes,
       @DefaultValue("-1") @QueryParam("minDuration") long minDuration, @DefaultValue("-1") @QueryParam("maxDuration") long maxDuration,
       @DefaultValue("-1") @QueryParam("minStartTime") long minStartTime, @DefaultValue("-1") @QueryParam("maxStartTime") long maxStartTime,
-      @DefaultValue("-1") @QueryParam("minFinishTime") long minFinishTime, @DefaultValue("-1") @QueryParam("maxFinishTime") long maxFinishTime,
-      @QueryParam("tagSearch") String tagSearchTerm) {
+      @DefaultValue("-1") @QueryParam("minFinishTime") long minFinishTime, @DefaultValue("-1") @QueryParam("maxFinishTime") long maxFinishTime) {
     
     if (start < 0)
       start = 0;
@@ -160,19 +163,22 @@ public class WorkflowJsonService {
       case 3: // userName
         field = WorkflowFields.USERNAME;
         break;
-      case 4: // tags
-        field = WorkflowFields.WORKFLOWTAGS;
-        break;
-      case 5: // numJobsTotal
+      case 4: // numJobsTotal
         field = WorkflowFields.NUMJOBSTOTAL;
         break;
-      case 6: // duration
+      case 5: // inputBytes
+        field = WorkflowFields.INPUTBYTES;
+        break;
+      case 6: // outputBytes
+        field = WorkflowFields.OUTPUTBYTES;
+        break;
+      case 7: // duration
         field = WorkflowFields.DURATION;
         break;
-      case 7: // startTime
+      case 8: // startTime
         field = WorkflowFields.STARTTIME;
         break;
-      case 8: // lastUpdateTime
+      case 9: // lastUpdateTime
         field = WorkflowFields.LASTUPDATETIME;
         break;
       default:
@@ -184,8 +190,7 @@ public class WorkflowJsonService {
     try {
       conn = getConnector();
       table = conn.fetchWorkflows(start, amount, searchTerm, echo, field, sortAscending, workflowId, workflowName, workflowType, userName, minJobs, maxJobs,
-          minInputBytes, maxInputBytes, minOutputBytes, maxOutputBytes, minDuration, maxDuration, minStartTime, maxStartTime, minFinishTime, maxFinishTime,
-          tagSearchTerm);
+          minInputBytes, maxInputBytes, minOutputBytes, maxOutputBytes, minDuration, maxDuration, minStartTime, maxStartTime, minFinishTime, maxFinishTime);
     } catch (IOException e) {
       LOG.error("Error interacting with RCA database ", e);
     } finally {
@@ -195,28 +200,7 @@ public class WorkflowJsonService {
     }
     return table;
   }
-
-  @GET
-  @Produces(MediaType.APPLICATION_JSON)
-  @Path("/app")
-  public Apps getApps(@QueryParam("workflowId") String workflowId) {
-    Apps apps = new Apps();
-    apps.setApps(EMPTY_APPS);
-    PostgresConnector conn = null;
-    try {
-      conn = getConnector();
-      if (workflowId != null)
-        apps.setApps(conn.fetchAppDetails(workflowId));
-    } catch (IOException e) {
-      LOG.error("Error interacting with RCA database ", e);
-    } finally {
-      if (conn != null) {
-        conn.close();
-      }
-    }
-    return apps;
-  }
-
+  
   @GET
   @Produces(MediaType.APPLICATION_JSON)
   @Path("/job")
@@ -240,7 +224,7 @@ public class WorkflowJsonService {
     }
     return jobs;
   }
-
+  
   @GET
   @Produces(MediaType.APPLICATION_JSON)
   @Path("/task")

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/9afc48b0/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
index 3f39f53..9369561 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
@@ -113,7 +113,7 @@ CREATE TABLE workflow (
   startTime BIGINT, lastUpdateTime BIGINT,
   numJobsTotal INTEGER, numJobsCompleted INTEGER,
   inputBytes BIGINT, outputBytes BIGINT,
-  duration BIGINT, workflowTags TEXT,
+  duration BIGINT,
   PRIMARY KEY (workflowId),
   FOREIGN KEY (parentWorkflowId) REFERENCES workflow(workflowId)
 );

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/9afc48b0/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
index f78f007..843daff 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
@@ -106,7 +106,7 @@ CREATE TABLE workflow (
   startTime INTEGER, lastUpdateTime INTEGER,
   numJobsTotal INTEGER, numJobsCompleted INTEGER,
   inputBytes INTEGER, outputBytes INTEGER,
-  duration INTEGER, workflowTags VARCHAR2(4000),
+  duration INTEGER,
   PRIMARY KEY (workflowId),
   FOREIGN KEY (parentWorkflowId) REFERENCES workflow(workflowId)
 );

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/9afc48b0/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
index 63a8d49..10c73ba 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
@@ -186,26 +186,12 @@ CREATE TABLE workflow (
   startTime        BIGINT, lastUpdateTime BIGINT,
   numJobsTotal     INTEGER, numJobsCompleted INTEGER,
   inputBytes       BIGINT, outputBytes BIGINT,
-  duration         BIGINT, workflowTags TEXT,
+  duration         BIGINT,
   PRIMARY KEY (workflowId),
   FOREIGN KEY (parentWorkflowId) REFERENCES workflow (workflowId)
 );
 GRANT ALL PRIVILEGES ON TABLE workflow TO "mapred";
 
-CREATE TABLE application (
-  appId              TEXT,
-  workflowId         TEXT,
-  appName            TEXT,
-  workflowEntityName TEXT,
-  userName           TEXT, queue TEXT,
-  submitTime         BIGINT, launchTime BIGINT, finishTime BIGINT,
-  appType            TEXT,
-  status             TEXT,
-  appInfo            TEXT,
-  PRIMARY KEY (appId), FOREIGN KEY (workflowId) REFERENCES workflow (workflowId)
-);
-GRANT ALL PRIVILEGES ON TABLE application TO "mapred";
-
 CREATE TABLE job (
   jobId        TEXT, workflowId TEXT, jobName TEXT, workflowEntityName TEXT,
   userName     TEXT, queue TEXT, acls TEXT, confPath TEXT,

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/9afc48b0/ambari-server/src/main/resources/upgrade/ddl/Ambari-DDL-Oracle-UPGRADE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/upgrade/ddl/Ambari-DDL-Oracle-UPGRADE.sql b/ambari-server/src/main/resources/upgrade/ddl/Ambari-DDL-Oracle-UPGRADE.sql
index e0f5df7..c16a689 100644
--- a/ambari-server/src/main/resources/upgrade/ddl/Ambari-DDL-Oracle-UPGRADE.sql
+++ b/ambari-server/src/main/resources/upgrade/ddl/Ambari-DDL-Oracle-UPGRADE.sql
@@ -23,8 +23,6 @@ ALTER TABLE clusterconfigmapping ADD (user_name VARCHAR2 (255) DEFAULT '_db');
 
 ALTER TABLE hostconfigmapping ADD (user_name VARCHAR2 (255) DEFAULT '_db');
 
-ALTER TABLE workflow ADD (workflowTags VARCHAR2 (4000));
-
 -- DML
 --Upgrade version to current
 UPDATE metainfo SET "metainfo_key" = 'version', "metainfo_value" = '${ambariVersion}';

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/9afc48b0/ambari-server/src/main/resources/upgrade/ddl/Ambari-DDL-Postgres-UPGRADE-1.3.0.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/upgrade/ddl/Ambari-DDL-Postgres-UPGRADE-1.3.0.sql b/ambari-server/src/main/resources/upgrade/ddl/Ambari-DDL-Postgres-UPGRADE-1.3.0.sql
index 85a63e8..4a211f9 100644
--- a/ambari-server/src/main/resources/upgrade/ddl/Ambari-DDL-Postgres-UPGRADE-1.3.0.sql
+++ b/ambari-server/src/main/resources/upgrade/ddl/Ambari-DDL-Postgres-UPGRADE-1.3.0.sql
@@ -107,6 +107,3 @@ ALTER TABLE ambari.clusterconfigmapping
 SELECT update_clusterconfigmapping();
 GRANT ALL PRIVILEGES ON TABLE ambari.clusterconfigmapping TO :username;
 
--- ambari log4j DDL
-\connect ambarirca;
-ALTER TABLE workflow ADD COLUMN workflowTags TEXT;