You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tez.apache.org by sr...@apache.org on 2016/02/24 23:35:19 UTC

[42/45] tez git commit: TEZ-3084. Tez UI 2: Display caller type and info (sree)

TEZ-3084. Tez UI 2: Display caller type and info (sree)


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

Branch: refs/heads/TEZ-2980
Commit: 94599693c05d276df850f10dffdedcc8d275e9e6
Parents: c6ce4ec
Author: Sreenath Somarajapuram <sr...@apache.org>
Authored: Tue Feb 2 01:41:24 2016 +0530
Committer: Sreenath Somarajapuram <sr...@apache.org>
Committed: Thu Feb 25 03:32:53 2016 +0530

----------------------------------------------------------------------
 TEZ-2980-CHANGES.txt                            |  1 +
 .../src/main/webapp/app/adapters/timeline.js    |  2 +-
 .../main/webapp/app/components/caller-info.js   | 76 ++++++++++++++++++++
 .../webapp/app/components/dags-page-search.js   |  4 +-
 .../src/main/webapp/app/controllers/app/dags.js |  4 +-
 tez-ui2/src/main/webapp/app/controllers/dags.js | 18 +++--
 tez-ui2/src/main/webapp/app/models/dag.js       |  6 +-
 tez-ui2/src/main/webapp/app/routes/dags.js      | 14 ++--
 tez-ui2/src/main/webapp/app/serializers/dag.js  | 27 ++++++-
 .../app/templates/components/caller-info.hbs    | 24 +++++++
 .../templates/components/dags-page-search.hbs   |  6 +-
 .../src/main/webapp/app/templates/dag/index.hbs |  4 ++
 tez-ui2/src/main/webapp/bower.json              |  3 +-
 tez-ui2/src/main/webapp/ember-cli-build.js      |  5 ++
 .../integration/components/caller-info-test.js  | 42 +++++++++++
 15 files changed, 212 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tez/blob/94599693/TEZ-2980-CHANGES.txt
----------------------------------------------------------------------
diff --git a/TEZ-2980-CHANGES.txt b/TEZ-2980-CHANGES.txt
index e4ab014..38f474a 100644
--- a/TEZ-2980-CHANGES.txt
+++ b/TEZ-2980-CHANGES.txt
@@ -31,3 +31,4 @@ ALL CHANGES:
   TEZ-3069. Tez UI 2: Make error bar fully functional
   TEZ-3062. Tez UI 2: Integrate graphical view
   TEZ-3058. Tez UI 2: Add download data functionality
+  TEZ-3084. Tez UI 2: Display caller type and info

http://git-wip-us.apache.org/repos/asf/tez/blob/94599693/tez-ui2/src/main/webapp/app/adapters/timeline.js
----------------------------------------------------------------------
diff --git a/tez-ui2/src/main/webapp/app/adapters/timeline.js b/tez-ui2/src/main/webapp/app/adapters/timeline.js
index 82faed8..1a341f7 100644
--- a/tez-ui2/src/main/webapp/app/adapters/timeline.js
+++ b/tez-ui2/src/main/webapp/app/adapters/timeline.js
@@ -37,7 +37,7 @@ export default AbstractAdapter.extend({
     dagName: 'dagName',
     user: "user",
     status: "status",
-    contextID: "callerId"
+    callerID: "callerId"
   },
 
   stringifyFilters: function (filters) {

http://git-wip-us.apache.org/repos/asf/tez/blob/94599693/tez-ui2/src/main/webapp/app/components/caller-info.js
----------------------------------------------------------------------
diff --git a/tez-ui2/src/main/webapp/app/components/caller-info.js b/tez-ui2/src/main/webapp/app/components/caller-info.js
new file mode 100644
index 0000000..3680049
--- /dev/null
+++ b/tez-ui2/src/main/webapp/app/components/caller-info.js
@@ -0,0 +1,76 @@
+/*global CodeMirror*/
+/**
+ * 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.
+ */
+
+// Must be convert into an ember addon
+
+import Ember from 'ember';
+
+export default Ember.Component.extend({
+
+  type: null,
+  info: null,
+
+  codeMirror: null,
+
+  mode: Ember.computed("type", function () {
+    switch(this.get("type")) {
+      case 'Hive':
+        return 'text/x-hive';
+      case 'Pig':
+        return 'text/x-pig';
+      default:
+        return 'text/x-sql';
+    }
+  }),
+
+  _init:  Ember.on('didInsertElement', function() {
+    var element  = Ember.$(this.get('element')).find('textarea')[0],
+        codeMirror = CodeMirror.fromTextArea(element, {
+          theme: 'default',
+          indentUnit: 2,
+          smartIndent: true,
+          tabSize: 4,
+          electricChars: true,
+          lineWrapping: true,
+          lineNumbers: true,
+          readOnly: true,
+          autofocus: false,
+          dragDrop: false,
+        });
+
+    this.set('codeMirror', codeMirror);
+
+    this._modeChanged();
+    this._infoChanged();
+  }),
+
+  _modeChanged: Ember.observer("mode", function() {
+    this.get('codeMirror').setOption("mode", this.get("mode"));
+  }),
+
+  _infoChanged: Ember.observer("info", function() {
+    var codeMirror = this.get('codeMirror'),
+        info = this.get('info') || '';
+
+    if (this.get('codeMirror').getValue() !== info) {
+      codeMirror.setValue(info);
+    }
+  })
+
+});

http://git-wip-us.apache.org/repos/asf/tez/blob/94599693/tez-ui2/src/main/webapp/app/components/dags-page-search.js
----------------------------------------------------------------------
diff --git a/tez-ui2/src/main/webapp/app/components/dags-page-search.js b/tez-ui2/src/main/webapp/app/components/dags-page-search.js
index c9c01e3..f95a901 100644
--- a/tez-ui2/src/main/webapp/app/components/dags-page-search.js
+++ b/tez-ui2/src/main/webapp/app/components/dags-page-search.js
@@ -37,8 +37,8 @@ export default Ember.Component.extend({
     appIDChanged: function (value) {
       this.get('targetObject.targetObject').send('searchChanged', 'appID', value);
     },
-    contextIDChanged: function (value) {
-      this.get('targetObject.targetObject').send('searchChanged', 'contextID', value);
+    callerIDChanged: function (value) {
+      this.get('targetObject.targetObject').send('searchChanged', 'callerID', value);
     },
   }
 });

http://git-wip-us.apache.org/repos/asf/tez/blob/94599693/tez-ui2/src/main/webapp/app/controllers/app/dags.js
----------------------------------------------------------------------
diff --git a/tez-ui2/src/main/webapp/app/controllers/app/dags.js b/tez-ui2/src/main/webapp/app/controllers/app/dags.js
index b3e855a..6510e93 100644
--- a/tez-ui2/src/main/webapp/app/controllers/app/dags.js
+++ b/tez-ui2/src/main/webapp/app/controllers/app/dags.js
@@ -83,9 +83,9 @@ export default MultiTableController.extend({
     headerTitle: 'Queue',
     contentPath: 'queue'
   },{
-    id: 'contextID',
+    id: 'callerID',
     headerTitle: 'Context ID',
-    contentPath: 'contextID'
+    contentPath: 'callerID'
   },{
     id: 'logs',
     headerTitle: 'Logs',

http://git-wip-us.apache.org/repos/asf/tez/blob/94599693/tez-ui2/src/main/webapp/app/controllers/dags.js
----------------------------------------------------------------------
diff --git a/tez-ui2/src/main/webapp/app/controllers/dags.js b/tez-ui2/src/main/webapp/app/controllers/dags.js
index 021a1e0..1a760d1 100644
--- a/tez-ui2/src/main/webapp/app/controllers/dags.js
+++ b/tez-ui2/src/main/webapp/app/controllers/dags.js
@@ -24,27 +24,27 @@ import TableDefinition from 'em-table/utils/table-definition';
 
 export default TableController.extend({
 
-  queryParams: ["dagName", "dagID", "submitter", "status", "appID", "contextID", "pageNo"],
+  queryParams: ["dagName", "dagID", "submitter", "status", "appID", "callerID", "pageNo"],
   dagName: "",
   dagID: "",
   submitter: "",
   status: "",
   appID: "",
-  contextID: "",
+  callerID: "",
   pageNo: 1,
 
   breadcrumbs: [],
 
   headerComponentNames: ['dags-page-search', 'table-controls', 'dags-pagination-ui'],
 
-  definition: Ember.computed("dagName", "dagID", "submitter", "status", "appID", "contextID", "pageNo", function () {
+  definition: Ember.computed("dagName", "dagID", "submitter", "status", "appID", "callerID", "pageNo", function () {
     return TableDefinition.create({
       dagName: this.get("dagName"),
       dagID: this.get("dagID"),
       submitter: this.get("submitter"),
       status: this.get("status"),
       appID: this.get("appID"),
-      contextID: this.get("contextID"),
+      callerID: this.get("callerID"),
 
       pageNum: this.get("pageNo"),
       rowCountOptions: [5, 10, 25, 50, 100, 250, 500]
@@ -121,9 +121,13 @@ export default TableController.extend({
     headerTitle: 'Queue',
     contentPath: 'queue'
   },{
-    id: 'contextID',
-    headerTitle: 'Context ID',
-    contentPath: 'contextID'
+    id: 'callerID',
+    headerTitle: 'Caller ID',
+    contentPath: 'callerID'
+  },{
+    id: 'callerType',
+    headerTitle: 'Caller Type',
+    contentPath: 'callerType'
   },{
     id: 'logs',
     headerTitle: 'Logs',

http://git-wip-us.apache.org/repos/asf/tez/blob/94599693/tez-ui2/src/main/webapp/app/models/dag.js
----------------------------------------------------------------------
diff --git a/tez-ui2/src/main/webapp/app/models/dag.js b/tez-ui2/src/main/webapp/app/models/dag.js
index 4c4cd96..7114a7c 100644
--- a/tez-ui2/src/main/webapp/app/models/dag.js
+++ b/tez-ui2/src/main/webapp/app/models/dag.js
@@ -44,7 +44,6 @@ export default AMTimelineModel.extend({
   name: DS.attr("string"),
 
   submitter: DS.attr("string"),
-  contextID: DS.attr("string"),
 
   // Serialize when required
   vertices: DS.attr('object'),
@@ -58,4 +57,9 @@ export default AMTimelineModel.extend({
   }),
 
   vertexIdNameMap: DS.attr("object"),
+
+  callerID: DS.attr("string"),
+  callerType: DS.attr("string"),
+  callerInfo: DS.attr("string"),
+
 });

http://git-wip-us.apache.org/repos/asf/tez/blob/94599693/tez-ui2/src/main/webapp/app/routes/dags.js
----------------------------------------------------------------------
diff --git a/tez-ui2/src/main/webapp/app/routes/dags.js b/tez-ui2/src/main/webapp/app/routes/dags.js
index 45fd25d..4902460 100644
--- a/tez-ui2/src/main/webapp/app/routes/dags.js
+++ b/tez-ui2/src/main/webapp/app/routes/dags.js
@@ -31,7 +31,7 @@ export default AbstractRoute.extend({
     submitter: REFRESH,
     status: REFRESH,
     appID: REFRESH,
-    contextID: REFRESH,
+    callerID: REFRESH,
     pageNo: REFRESH,
 
     rowCount: REFRESH,
@@ -43,7 +43,7 @@ export default AbstractRoute.extend({
     user: "submitter",
     status: "status",
     appID: "appID",
-    contextID: "contextID",
+    callerID: "callerID",
 
     pageNo: "pageNo",
     limit: "rowCount",
@@ -62,7 +62,7 @@ export default AbstractRoute.extend({
       submitter: query.submitter,
       status: query.status,
       appID: query.appID,
-      contextID: query.contextID
+      callerID: query.callerID
     };
 
     return records.filter(function (record) {
@@ -90,7 +90,13 @@ export default AbstractRoute.extend({
     }
 
     return loader.then(function (records) {
-      return that.filterRecords(records, query);
+      records = that.filterRecords(records, query);
+      records.forEach(function (record) {
+        if(record.get("status") === "RUNNING") {
+          that.get("loader").loadNeed(record, "am", {reload: true});
+        }
+      });
+      return records;
     });
   },
 

http://git-wip-us.apache.org/repos/asf/tez/blob/94599693/tez-ui2/src/main/webapp/app/serializers/dag.js
----------------------------------------------------------------------
diff --git a/tez-ui2/src/main/webapp/app/serializers/dag.js b/tez-ui2/src/main/webapp/app/serializers/dag.js
index f7d2f21..b5cc42c 100644
--- a/tez-ui2/src/main/webapp/app/serializers/dag.js
+++ b/tez-ui2/src/main/webapp/app/serializers/dag.js
@@ -107,7 +107,6 @@ export default TimelineSerializer.extend({
     name: 'primaryfilters.dagName.0',
 
     submitter: 'primaryfilters.user.0',
-    contextID: 'primaryfilters.callerId.0',
 
     atsStatus: getStatus,
     // progress
@@ -125,6 +124,28 @@ export default TimelineSerializer.extend({
     // queue
     containerLogs: getContainerLogs,
 
-    vertexIdNameMap: getIdNameMap
-  }
+    vertexIdNameMap: getIdNameMap,
+
+    callerID: 'primaryfilters.callerId.0',
+    callerType: 'callerType',
+    callerInfo: 'callerInfo',
+  },
+
+  extractAttributes: function (modelClass, resourceHash) {
+    var data = resourceHash.data,
+        dagInfo = Ember.get(resourceHash, "data.otherinfo.dagPlan.dagInfo");
+
+    if(dagInfo) {
+      let infoObj = {};
+      try{
+        infoObj = JSON.parse(dagInfo);
+      }catch(e){}
+
+      data.callerType = Ember.get(infoObj, "context");
+      data.callerInfo = Ember.get(infoObj, "description") || Ember.get(dagInfo, "blob") || dagInfo;
+    }
+
+    return this._super(modelClass, resourceHash);
+  },
+
 });

http://git-wip-us.apache.org/repos/asf/tez/blob/94599693/tez-ui2/src/main/webapp/app/templates/components/caller-info.hbs
----------------------------------------------------------------------
diff --git a/tez-ui2/src/main/webapp/app/templates/components/caller-info.hbs b/tez-ui2/src/main/webapp/app/templates/components/caller-info.hbs
new file mode 100644
index 0000000..72a52db
--- /dev/null
+++ b/tez-ui2/src/main/webapp/app/templates/components/caller-info.hbs
@@ -0,0 +1,24 @@
+{{!
+ * 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 class="panel panel-info">
+  <div class="panel-heading">
+    Additional Info from {{type}}
+  </div>
+  <textarea></textarea>
+</div>

http://git-wip-us.apache.org/repos/asf/tez/blob/94599693/tez-ui2/src/main/webapp/app/templates/components/dags-page-search.hbs
----------------------------------------------------------------------
diff --git a/tez-ui2/src/main/webapp/app/templates/components/dags-page-search.hbs b/tez-ui2/src/main/webapp/app/templates/components/dags-page-search.hbs
index 0c118e4..94015dc 100644
--- a/tez-ui2/src/main/webapp/app/templates/components/dags-page-search.hbs
+++ b/tez-ui2/src/main/webapp/app/templates/components/dags-page-search.hbs
@@ -63,12 +63,12 @@
         value={{tableDefinition.appID}}
         onchange={{action "appIDChanged" value="target.value"}}>
   </div><div class="search-element">
-    <label for="pwd">Context ID:</label>
+    <label for="pwd">Caller ID:</label>
     <input
         type="text"
         class="form-control input-sm"
         placeholder="Search..."
-        value={{tableDefinition.contextID}}
-        onchange={{action "contextIDChanged" value="target.value"}}>
+        value={{tableDefinition.callerID}}
+        onchange={{action "callerIDChanged" value="target.value"}}>
   </div>
 </div>

http://git-wip-us.apache.org/repos/asf/tez/blob/94599693/tez-ui2/src/main/webapp/app/templates/dag/index.hbs
----------------------------------------------------------------------
diff --git a/tez-ui2/src/main/webapp/app/templates/dag/index.hbs b/tez-ui2/src/main/webapp/app/templates/dag/index.hbs
index 59bb6a9..7ea00c5 100644
--- a/tez-ui2/src/main/webapp/app/templates/dag/index.hbs
+++ b/tez-ui2/src/main/webapp/app/templates/dag/index.hbs
@@ -74,6 +74,10 @@
     </tbody>
   </table>
 
+  {{#if model.callerInfo}}
+    {{caller-info type=model.callerType info=model.callerInfo}}
+  {{/if}}
+
   {{outlet}}
 
 {{else}}

http://git-wip-us.apache.org/repos/asf/tez/blob/94599693/tez-ui2/src/main/webapp/bower.json
----------------------------------------------------------------------
diff --git a/tez-ui2/src/main/webapp/bower.json b/tez-ui2/src/main/webapp/bower.json
index 8d23c02..f0fec1a 100644
--- a/tez-ui2/src/main/webapp/bower.json
+++ b/tez-ui2/src/main/webapp/bower.json
@@ -20,6 +20,7 @@
     "snippet-ss": "~1.11.0",
     "jquery-mousewheel": "~3.1.13",
     "FileSaver": "#230de7d",
-    "zip.js": "#1bead0a"
+    "zip.js": "#1bead0a",
+    "codemirror": "~5.11.0"
   }
 }

http://git-wip-us.apache.org/repos/asf/tez/blob/94599693/tez-ui2/src/main/webapp/ember-cli-build.js
----------------------------------------------------------------------
diff --git a/tez-ui2/src/main/webapp/ember-cli-build.js b/tez-ui2/src/main/webapp/ember-cli-build.js
index 24c24fb..6068ee4 100644
--- a/tez-ui2/src/main/webapp/ember-cli-build.js
+++ b/tez-ui2/src/main/webapp/ember-cli-build.js
@@ -52,5 +52,10 @@ module.exports = function(defaults) {
   app.import('bower_components/FileSaver/FileSaver.js');
   app.import('bower_components/zip.js/WebContent/zip.js');
 
+  app.import('bower_components/codemirror/lib/codemirror.js');
+  app.import('bower_components/codemirror/mode/sql/sql.js');
+  app.import('bower_components/codemirror/mode/pig/pig.js');
+  app.import('bower_components/codemirror/lib/codemirror.css');
+
   return app.toTree(new MergeTrees([configEnv, zipWorker]));
 };

http://git-wip-us.apache.org/repos/asf/tez/blob/94599693/tez-ui2/src/main/webapp/tests/integration/components/caller-info-test.js
----------------------------------------------------------------------
diff --git a/tez-ui2/src/main/webapp/tests/integration/components/caller-info-test.js b/tez-ui2/src/main/webapp/tests/integration/components/caller-info-test.js
new file mode 100644
index 0000000..20f787c
--- /dev/null
+++ b/tez-ui2/src/main/webapp/tests/integration/components/caller-info-test.js
@@ -0,0 +1,42 @@
+/**
+ * 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.
+ */
+
+import { moduleForComponent, test } from 'ember-qunit';
+import hbs from 'htmlbars-inline-precompile';
+
+moduleForComponent('caller-info', 'Integration | Component | caller info', {
+  integration: true
+});
+
+test('Basic creation test', function(assert) {
+  var testType = "Typ",
+      heading = "Additional Info from " + testType;
+
+  this.set("type", testType);
+
+  this.render(hbs`{{caller-info type=type}}`);
+  assert.equal(this.$(".panel-heading").text().trim(), heading);
+
+  // Template block usage:" + EOL +
+  this.render(hbs`
+    {{#caller-info type=type}}
+      template block text
+    {{/caller-info}}
+  `);
+  assert.equal(this.$(".panel-heading").text().trim(), heading);
+});