Repository: tez Updated Branches: refs/heads/branch-0.7 aa5a978a0 -> 4d08c7f17
TEZ-2453. Tez UI: show the dagInfo is the application has set the same. (pramachandran) (cherry picked from commit b59b6a9b618575fce17a551f86cc827e8746e6a9) Project: http://git-wip-us.apache.org/repos/asf/tez/repo Commit: http://git-wip-us.apache.org/repos/asf/tez/commit/4d08c7f1 Tree: http://git-wip-us.apache.org/repos/asf/tez/tree/4d08c7f1 Diff: http://git-wip-us.apache.org/repos/asf/tez/diff/4d08c7f1 Branch: refs/heads/branch-0.7 Commit: 4d08c7f1785702bf9bda81565fc5c484d550c298 Parents: aa5a978 Author: Prakash Ramachandran <[email protected]> Authored: Mon May 18 16:09:34 2015 +0530 Committer: Prakash Ramachandran <[email protected]> Committed: Mon May 18 16:11:03 2015 +0530 ---------------------------------------------------------------------- CHANGES.txt | 1 + tez-ui/src/main/resources/META-INF/LICENSE.txt | 1 + tez-ui/src/main/webapp/Gruntfile.js | 3 +- tez-ui/src/main/webapp/app/index.html | 4 + .../app/scripts/components/code-mirror.js | 86 ++++++++++++++++++++ .../scripts/controllers/dag_index_controller.js | 48 +++++++++++ .../app/scripts/models/TimelineRestAdapter.js | 1 + .../src/main/webapp/app/scripts/models/dag.js | 1 + tez-ui/src/main/webapp/app/styles/main.less | 6 ++ .../src/main/webapp/app/templates/dag/index.hbs | 8 ++ tez-ui/src/main/webapp/bower.json | 7 +- 11 files changed, 162 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tez/blob/4d08c7f1/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 2929fd7..615834e 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -7,6 +7,7 @@ Release 0.7.1: Unreleased INCOMPATIBLE CHANGES ALL CHANGES: + TEZ-2453. Tez UI: show the dagInfo is the application has set the same. TEZ-2447. Tez UI: Generic changes based on feedbacks. Release 0.7.0: Unreleased http://git-wip-us.apache.org/repos/asf/tez/blob/4d08c7f1/tez-ui/src/main/resources/META-INF/LICENSE.txt ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/resources/META-INF/LICENSE.txt b/tez-ui/src/main/resources/META-INF/LICENSE.txt index dbeb161..cbb42f3 100644 --- a/tez-ui/src/main/resources/META-INF/LICENSE.txt +++ b/tez-ui/src/main/resources/META-INF/LICENSE.txt @@ -227,6 +227,7 @@ The Apache TEZ tez-ui bundles the following files under the MIT License: - jquery-ui v1.11 (http://jqueryui.com/) - Copyright 2014 jQuery Foundation and other contributors - moment v2.8.4 (http://momentjs.com/) - authors : Tim Wood, Iskren Chernev, Moment.js contributors - FileSaver.js master branch #24b303f49213b905ec9062b708f7cd43d56a5dde (https://github.com/eligrey/FileSaver.js) authors : Eli Grey. + - CodeMirror 5.2.0 (https://codemirror.net/) authors: Copyright (C) 2015 by Marijn Haverbeke <[email protected]> and others All rights reserved. http://git-wip-us.apache.org/repos/asf/tez/blob/4d08c7f1/tez-ui/src/main/webapp/Gruntfile.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/Gruntfile.js b/tez-ui/src/main/webapp/Gruntfile.js index 98f62b1..dc92bb2 100644 --- a/tez-ui/src/main/webapp/Gruntfile.js +++ b/tez-ui/src/main/webapp/Gruntfile.js @@ -205,7 +205,8 @@ module.exports = function (grunt) { '<%= yeoman.app %>/styles/{,*/}*.css', '<%= yeoman.app %>/bower_components/ember-table/dist/ember-table.css', '<%= yeoman.app %>/bower_components/font-awesome/css/font-awesome.css', - '<%= yeoman.app %>/bower_components/jquery-ui/themes/smoothness/jquery-ui.css' + '<%= yeoman.app %>/bower_components/jquery-ui/themes/smoothness/jquery-ui.css', + '<%= yeoman.app %>/bower_components/codemirror/lib/codemirror.css' ] } } http://git-wip-us.apache.org/repos/asf/tez/blob/4d08c7f1/tez-ui/src/main/webapp/app/index.html ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/index.html b/tez-ui/src/main/webapp/app/index.html index 35cfa20..3a6c9f6 100644 --- a/tez-ui/src/main/webapp/app/index.html +++ b/tez-ui/src/main/webapp/app/index.html @@ -29,6 +29,7 @@ <link rel="stylesheet" href="bower_components/ember-table/dist/ember-table.css"> <link rel="stylesheet" href="bower_components/font-awesome/css/font-awesome.css"> <link rel="stylesheet" href="bower_components/jquery-ui/themes/smoothness/jquery-ui.css"> + <link rel="stylesheet" href="bower_components/codemirror/lib/codemirror.css"> <!-- endbuild --> </head> @@ -61,6 +62,9 @@ <script src="bower_components/d3/d3.js"></script> <script src="bower_components/zip.js/WebContent/zip.js"></script> <script src="bower_components/FileSaver.js/FileSaver.min.js"></script> + <script src="bower_components/codemirror/lib/codemirror.js"></script> + <script src="bower_components/codemirror/mode/sql/sql.js"></script> + <script src="bower_components/codemirror/mode/pig/pig.js"></script> <!-- endbuild --> <!-- build:js(.tmp) scripts/templates.js --> http://git-wip-us.apache.org/repos/asf/tez/blob/4d08c7f1/tez-ui/src/main/webapp/app/scripts/components/code-mirror.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/scripts/components/code-mirror.js b/tez-ui/src/main/webapp/app/scripts/components/code-mirror.js new file mode 100644 index 0000000..24d8f76 --- /dev/null +++ b/tez-ui/src/main/webapp/app/scripts/components/code-mirror.js @@ -0,0 +1,86 @@ +/** + * 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. + */ + +App.CodeMirrorComponent = Em.Component.extend({ + tagName: 'textarea', + + value: null, + + mode: 'text/x-hive', + theme: 'default', + indentUnit: 2, + smartIndent: true, + tabSize: 4, + electricChars: true, + lineWrapping: true, + lineNumbers: true, + readOnly: true, + autofocus: false, + dragDrop: false, + + _init: Em.on('didInsertElement', function() { + var codeMirror = CodeMirror.fromTextArea(this.get('element')); + + this.set('codeMirror', codeMirror); + + // Set up bindings for CodeMirror options. + this._bindCodeMirrorOption('mode'); + this._bindCodeMirrorOption('theme'); + this._bindCodeMirrorOption('indentUnit'); + this._bindCodeMirrorOption('smartIndent'); + this._bindCodeMirrorOption('tabSize'); + this._bindCodeMirrorOption('electricChars'); + this._bindCodeMirrorOption('lineWrapping'); + this._bindCodeMirrorOption('lineNumbers'); + this._bindCodeMirrorOption('readOnly'); + this._bindCodeMirrorOption('autofocus'); + this._bindCodeMirrorOption('dragDrop'); + + this._bindProperty('value', this, '_valueDidChange'); + this._valueDidChange(); + + this.on('becameVisible', codeMirror, 'refresh'); + }), + + _bindCodeMirrorOption: function(key) { + this._bindProperty(key, this, '_optionDidChange'); + + // Set the initial option synchronously. + this._optionDidChange(this, key); + }, + + _bindProperty: function(key, target, method) { + this.addObserver(key, target, method); + + this.on('willDestroyElement', function() { + this.removeObserver(key, target, method); + }) + }, + + _optionDidChange: function(sender, key) { + this.get('codeMirror').setOption(key, this.get(key)); + }, + + _valueDidChange: function() { + var codeMirror = this.get('codeMirror'), + value = this.get('value') || ''; + + if (this.get('codeMirror').getValue() != value) { + codeMirror.setValue(value); + } + } +}); http://git-wip-us.apache.org/repos/asf/tez/blob/4d08c7f1/tez-ui/src/main/webapp/app/scripts/controllers/dag_index_controller.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/dag_index_controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/dag_index_controller.js index 2deab2d..e120bd6 100644 --- a/tez-ui/src/main/webapp/app/scripts/controllers/dag_index_controller.js +++ b/tez-ui/src/main/webapp/app/scripts/controllers/dag_index_controller.js @@ -115,4 +115,52 @@ App.DagIndexController = Em.ObjectController.extend(App.ModelRefreshMixin, { return '#/dag/%@/taskAttempts?searchText=Status%3AFAILED'.fmt(this.get('id')); }.property('id'), + dagPlanContextInfoJson: function() { + var dagInfo = { + context: null, + description: '' + }, + dagInfoStr = this.get('dagPlanContextInfo'); + + try { + var tmpInfo = $.parseJSON(dagInfoStr); + dagInfo.context = tmpInfo['context']; + dagInfo.description = tmpInfo['description']; + } catch (err) { + Em.Logger.debug("error parsing daginfo " + err); + dagInfo.description = dagInfoStr; + } + + return dagInfo; + }.property('dagPlanContextInfo'), + + hasDagInfoContext: function() { + var x = this.get('dagPlanContextInfoJson'); + return !!this.get('dagPlanContextInfoJson').description; + }.property('dagPlanContextInfoJson'), + + additionalInfoHeading: function() { + var contextName = this.get('dagPlanContextInfoJson').context; + var heading = "Additional Info" + if (!!contextName) { + heading += " from " + contextName; + } + return heading; + }.property('dagPlanContextInfoJson'), + + dagInfoContextType: function() { + switch (this.get('dagPlanContextInfoJson').context) { + case 'Hive': + return 'text/x-hive'; + case 'Pig': + return 'text/x-pig'; + default: + return 'text/x-sql'; + } + }.property('dagPlanContextInfoJson'), + + dagInfoContextDesc: function() { + return this.get('dagPlanContextInfoJson').description || 'N/A' + }.property('dagPlanContextInfoJson'), + }); http://git-wip-us.apache.org/repos/asf/tez/blob/4d08c7f1/tez-ui/src/main/webapp/app/scripts/models/TimelineRestAdapter.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/scripts/models/TimelineRestAdapter.js b/tez-ui/src/main/webapp/app/scripts/models/TimelineRestAdapter.js index 704ba2f..d763f3d 100644 --- a/tez-ui/src/main/webapp/app/scripts/models/TimelineRestAdapter.js +++ b/tez-ui/src/main/webapp/app/scripts/models/TimelineRestAdapter.js @@ -110,6 +110,7 @@ var timelineJsonToDagMap = { planName: 'otherinfo.dagPlan.dagName', planVersion: 'otherinfo.dagPlan.version', + dagPlanContextInfo: 'otherinfo.dagPlan.dagInfo', vertices: 'otherinfo.dagPlan.vertices', edges: 'otherinfo.dagPlan.edges', vertexGroups: 'otherinfo.dagPlan.vertexGroups', http://git-wip-us.apache.org/repos/asf/tez/blob/4d08c7f1/tez-ui/src/main/webapp/app/scripts/models/dag.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/scripts/models/dag.js b/tez-ui/src/main/webapp/app/scripts/models/dag.js index db6577f..a4b6eb3 100644 --- a/tez-ui/src/main/webapp/app/scripts/models/dag.js +++ b/tez-ui/src/main/webapp/app/scripts/models/dag.js @@ -63,6 +63,7 @@ App.Dag = App.AbstractEntity.extend({ // Dag plan reated data planName: DS.attr('string'), planVersion: DS.attr('number'), + dagPlanContextInfo: DS.attr('string'), vertices: DS.attr('array'), // Serialize when required edges: DS.attr('array'), // Serialize when required vertexGroups: DS.attr('array'), http://git-wip-us.apache.org/repos/asf/tez/blob/4d08c7f1/tez-ui/src/main/webapp/app/styles/main.less ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/styles/main.less b/tez-ui/src/main/webapp/app/styles/main.less index 26f92bf..233bd62 100644 --- a/tez-ui/src/main/webapp/app/styles/main.less +++ b/tez-ui/src/main/webapp/app/styles/main.less @@ -910,3 +910,9 @@ body, html { color: white !important; border: none !important; } + +// CodeMirror does not have any facility to add classes to the generated div +.CodeMirror { + height: auto !important; + viewportMargin: Infinity !important; +} http://git-wip-us.apache.org/repos/asf/tez/blob/4d08c7f1/tez-ui/src/main/webapp/app/templates/dag/index.hbs ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/templates/dag/index.hbs b/tez-ui/src/main/webapp/app/templates/dag/index.hbs index 1384de2..ec80f6c 100644 --- a/tez-ui/src/main/webapp/app/templates/dag/index.hbs +++ b/tez-ui/src/main/webapp/app/templates/dag/index.hbs @@ -92,3 +92,11 @@ {{/bs-panel}} </div> {{/if}} + +{{#if hasDagInfoContext}} + <div class='margin-small-vertical'> + {{#bs-panel heading=additionalInfoHeading collapsible=false dismiss=false type='info'}} + {{code-mirror value=dagInfoContextDesc mode=dagInfoContextType classNames='additional-dag-info'}} + {{/bs-panel}} + </div> +{{/if}} http://git-wip-us.apache.org/repos/asf/tez/blob/4d08c7f1/tez-ui/src/main/webapp/bower.json ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/bower.json b/tez-ui/src/main/webapp/bower.json index 54f6f57..e905c55 100644 --- a/tez-ui/src/main/webapp/bower.json +++ b/tez-ui/src/main/webapp/bower.json @@ -13,9 +13,10 @@ "d3": "3.4.11", "ember-addons.bs_for_ember": "~0.7.0", "ember-table": "~0.2.4", - "font-awesome":"4.2.0", + "font-awesome": "4.2.0", "FileSaver.js": "https://github.com/eligrey/FileSaver.js.git#24b303f49213b905ec9062b708f7cd43d56a5dde", - "zip.js": "https://github.com/gildas-lormeau/zip.js.git#bfd76c66293305faaf9fcbb65b5ff7fe2dbe621a" + "zip.js": "https://github.com/gildas-lormeau/zip.js.git#bfd76c66293305faaf9fcbb65b5ff7fe2dbe621a", + "codemirror": "~5.2.0" }, "resolutions": { "jquery": "1.10.2", @@ -25,6 +26,6 @@ "handlebars": "~1.3.0", "jquery-mousewheel": "~3.1.12", "antiscroll": "1.0.0", - "font-awesome":"4.2.0" + "font-awesome": "4.2.0" } }
