You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by ma...@apache.org on 2017/01/24 17:18:10 UTC

incubator-atlas git commit: ATLAS-1486: UI updates to handle errors from V2 APIs

Repository: incubator-atlas
Updated Branches:
  refs/heads/master 143c0f813 -> 6679c8eed


ATLAS-1486: UI updates to handle errors from V2 APIs

Signed-off-by: Madhan Neethiraj <ma...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/incubator-atlas/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-atlas/commit/6679c8ee
Tree: http://git-wip-us.apache.org/repos/asf/incubator-atlas/tree/6679c8ee
Diff: http://git-wip-us.apache.org/repos/asf/incubator-atlas/diff/6679c8ee

Branch: refs/heads/master
Commit: 6679c8eed29d9850a43b682970084e197ad16dc7
Parents: 143c0f8
Author: kevalbhatt <kb...@apache.org>
Authored: Tue Jan 24 18:02:48 2017 +0530
Committer: Madhan Neethiraj <ma...@apache.org>
Committed: Tue Jan 24 09:18:00 2017 -0800

----------------------------------------------------------------------
 .../public/js/collection/BaseCollection.js      | 14 +---
 .../public/js/collection/VCatalogList.js        |  1 -
 dashboardv2/public/js/collection/VCommonList.js |  1 -
 dashboardv2/public/js/collection/VEntityList.js |  1 -
 .../public/js/collection/VLineageList.js        |  1 -
 dashboardv2/public/js/collection/VSchemaList.js |  1 -
 dashboardv2/public/js/collection/VSearchList.js |  1 -
 dashboardv2/public/js/collection/VTagList.js    |  1 -
 dashboardv2/public/js/models/BaseModel.js       | 12 ++--
 dashboardv2/public/js/models/VCatalog.js        |  1 -
 dashboardv2/public/js/models/VCommon.js         |  1 -
 dashboardv2/public/js/models/VEntity.js         |  1 -
 dashboardv2/public/js/models/VLineage.js        |  1 -
 dashboardv2/public/js/models/VSchema.js         |  1 -
 dashboardv2/public/js/models/VSearch.js         |  1 -
 dashboardv2/public/js/models/VTag.js            |  1 -
 .../public/js/utils/CommonViewFunction.js       | 19 ++----
 dashboardv2/public/js/utils/Messages.js         |  3 +-
 dashboardv2/public/js/utils/Overrides.js        | 20 +++++-
 dashboardv2/public/js/utils/Utils.js            | 68 +++++++++++---------
 .../BusinessCatalogDetailLayoutView.js          |  8 ---
 .../js/views/business_catalog/TreeLayoutView.js | 25 ++-----
 .../public/js/views/common/aboutAtlas.js        |  1 -
 .../js/views/entity/CreateEntityLayoutView.js   |  7 --
 .../public/js/views/graph/LineageLayoutView.js  |  3 +-
 .../js/views/search/SearchResultLayoutView.js   |  1 -
 .../public/js/views/tag/CreateTagLayoutView.js  |  1 -
 .../views/tag/TagAttributeDetailLayoutView.js   |  7 --
 .../public/js/views/tag/TagLayoutView.js        |  7 --
 .../public/js/views/tag/addTagModalView.js      |  8 +--
 release-log.txt                                 |  2 +
 31 files changed, 81 insertions(+), 139 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/collection/BaseCollection.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/collection/BaseCollection.js b/dashboardv2/public/js/collection/BaseCollection.js
index 1f3faba..78261ee 100644
--- a/dashboardv2/public/js/collection/BaseCollection.js
+++ b/dashboardv2/public/js/collection/BaseCollection.js
@@ -36,19 +36,6 @@ define(['require',
             initialize: function() {
                 this.sort_key = 'id';
             },
-            bindErrorEvents: function() {
-                this.bind("error", Utils.defaultErrorHandler);
-            },
-            bindRequest: function() {
-                this.bind('request', function(model, ajaxObj, collectionObj) {
-                    this.ajaxStart(model, ajaxObj, collectionObj);
-                }, this);
-                this.bind('sync', function(model, ajaxObj, collectionObj) {
-                    this.ajaxComplete(model, ajaxObj, collectionObj);
-                }, this);
-            },
-            ajaxStart: function(model, ajaxObj, collectionObj) {},
-            ajaxComplete: function(model, ajaxObj, collectionObj) {},
             comparator: function(key, value) {
                 key = key.get(this.sort_key);
                 value = value.get(this.sort_key);
@@ -140,6 +127,7 @@ define(['require',
                 return retCols;
             },
             nonCrudOperation: function(url, requestMethod, options) {
+                var that = this;
                 options['beforeSend'] = CommonViewFunction.addRestCsrfCustomHeader;
                 return Backbone.sync.call(this, null, this, _.extend({
                     url: url,

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/collection/VCatalogList.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/collection/VCatalogList.js b/dashboardv2/public/js/collection/VCatalogList.js
index a631de1..7899b3e 100644
--- a/dashboardv2/public/js/collection/VCatalogList.js
+++ b/dashboardv2/public/js/collection/VCatalogList.js
@@ -33,7 +33,6 @@ define(['require',
             initialize: function() {
                 this.modelName = 'VCatalog';
                 this.modelAttrName = '';
-                this.bindErrorEvents();
             },
             fetch: function(options) {
                 //Call Backbone's fetch

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/collection/VCommonList.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/collection/VCommonList.js b/dashboardv2/public/js/collection/VCommonList.js
index 87091ca..8b9254f 100644
--- a/dashboardv2/public/js/collection/VCommonList.js
+++ b/dashboardv2/public/js/collection/VCommonList.js
@@ -33,7 +33,6 @@ define(['require',
             initialize: function() {
                 this.modelName = 'VCommon';
                 this.modelAttrName = '';
-                this.bindErrorEvents();
             },
         },
         //Static Class Members

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/collection/VEntityList.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/collection/VEntityList.js b/dashboardv2/public/js/collection/VEntityList.js
index 99b0f3b..642ef93 100644
--- a/dashboardv2/public/js/collection/VEntityList.js
+++ b/dashboardv2/public/js/collection/VEntityList.js
@@ -33,7 +33,6 @@ define(['require',
             initialize: function() {
                 this.modelName = 'VEntity';
                 this.modelAttrName = '';
-                this.bindErrorEvents();
             },
             parseRecords: function(resp, options) {
                 try {

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/collection/VLineageList.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/collection/VLineageList.js b/dashboardv2/public/js/collection/VLineageList.js
index a2656df..982921c 100644
--- a/dashboardv2/public/js/collection/VLineageList.js
+++ b/dashboardv2/public/js/collection/VLineageList.js
@@ -33,7 +33,6 @@ define(['require',
             initialize: function() {
                 this.modelName = 'VLineage';
                 this.modelAttrName = 'results';
-                this.bindErrorEvents();
             },
             getLineage: function(id, options) {
                 var url = UrlLinks.lineageApiUrl(id);

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/collection/VSchemaList.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/collection/VSchemaList.js b/dashboardv2/public/js/collection/VSchemaList.js
index 18ffeda..af58244 100644
--- a/dashboardv2/public/js/collection/VSchemaList.js
+++ b/dashboardv2/public/js/collection/VSchemaList.js
@@ -31,7 +31,6 @@ define(['require',
             initialize: function() {
                 this.modelName = 'VSchema';
                 this.modelAttrName = 'results';
-                this.bindErrorEvents();
             },
             parseRecords: function(resp, options) {
                 try {

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/collection/VSearchList.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/collection/VSearchList.js b/dashboardv2/public/js/collection/VSearchList.js
index 3b02f05..2ec4952 100644
--- a/dashboardv2/public/js/collection/VSearchList.js
+++ b/dashboardv2/public/js/collection/VSearchList.js
@@ -33,7 +33,6 @@ define(['require',
             initialize: function() {
                 this.modelName = 'VSearch';
                 this.modelAttrName = 'results';
-                this.bindErrorEvents();
             },
             parseRecords: function(resp, options) {
                 this.responseData = {

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/collection/VTagList.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/collection/VTagList.js b/dashboardv2/public/js/collection/VTagList.js
index 92c6436..0aa74df 100644
--- a/dashboardv2/public/js/collection/VTagList.js
+++ b/dashboardv2/public/js/collection/VTagList.js
@@ -31,7 +31,6 @@ define(['require',
             initialize: function() {
                 this.modelName = 'VTag';
                 this.modelAttrName = 'list';
-                this.bindErrorEvents();
             },
             parseRecords: function(resp, options) {
                 try {

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/models/BaseModel.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/models/BaseModel.js b/dashboardv2/public/js/models/BaseModel.js
index 27e0332..666ade7 100644
--- a/dashboardv2/public/js/models/BaseModel.js
+++ b/dashboardv2/public/js/models/BaseModel.js
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-define(['require', 'utils/Utils', 'backbone','utils/CommonViewFunction'], function(require, Utils, Backbone,CommonViewFunction) {
+define(['require', 'utils/Utils', 'backbone', 'utils/CommonViewFunction'], function(require, Utils, Backbone, CommonViewFunction) {
     'use strict';
 
     var BaseModel = Backbone.Model.extend(
@@ -27,12 +27,7 @@ define(['require', 'utils/Utils', 'backbone','utils/CommonViewFunction'], functi
              * @augments Backbone.Model
              * @constructs
              */
-            initialize: function() {
-
-            },
-            bindErrorEvents: function() {
-                this.bind("error", Utils.defaultErrorHandler);
-            },
+            initialize: function() {},
             /**
              * toString for a model. Every model should implement this function.
              */
@@ -60,7 +55,8 @@ define(['require', 'utils/Utils', 'backbone','utils/CommonViewFunction'], functi
              * @return {[type]}               [description]
              */
             nonCrudOperation: function(url, requestMethod, options) {
-                options['beforeSend'] =  CommonViewFunction.addRestCsrfCustomHeader;
+                var that = this;
+                options['beforeSend'] = CommonViewFunction.addRestCsrfCustomHeader;
                 return Backbone.sync.call(this, null, this, _.extend({
                     url: url,
                     type: requestMethod

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/models/VCatalog.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/models/VCatalog.js b/dashboardv2/public/js/models/VCatalog.js
index 85160b7..eb52e9a 100644
--- a/dashboardv2/public/js/models/VCatalog.js
+++ b/dashboardv2/public/js/models/VCatalog.js
@@ -33,7 +33,6 @@ define(['require',
 
         initialize: function() {
             this.modelName = 'VCatalog';
-            this.bindErrorEvents();
         },
         toString: function() {
             return this.get('name');

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/models/VCommon.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/models/VCommon.js b/dashboardv2/public/js/models/VCommon.js
index 25462fe..062e1b6 100644
--- a/dashboardv2/public/js/models/VCommon.js
+++ b/dashboardv2/public/js/models/VCommon.js
@@ -33,7 +33,6 @@ define(['require',
 
         initialize: function() {
             this.modelName = 'VCommon';
-            this.bindErrorEvents();
         },
         toString: function() {
             return this.get('name');

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/models/VEntity.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/models/VEntity.js b/dashboardv2/public/js/models/VEntity.js
index 2173534..ce86c24 100644
--- a/dashboardv2/public/js/models/VEntity.js
+++ b/dashboardv2/public/js/models/VEntity.js
@@ -34,7 +34,6 @@ define(['require',
 
         initialize: function() {
             this.modelName = 'VEntity';
-            this.bindErrorEvents();
         },
         toString: function() {
             return this.get('name');

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/models/VLineage.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/models/VLineage.js b/dashboardv2/public/js/models/VLineage.js
index d55bfeb..d65418f 100644
--- a/dashboardv2/public/js/models/VLineage.js
+++ b/dashboardv2/public/js/models/VLineage.js
@@ -34,7 +34,6 @@ define(['require',
 
         initialize: function() {
             this.modelName = 'VLineage';
-            this.bindErrorEvents();
         },
         toString: function() {
             return this.get('id');

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/models/VSchema.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/models/VSchema.js b/dashboardv2/public/js/models/VSchema.js
index f7f083c..5743c19 100644
--- a/dashboardv2/public/js/models/VSchema.js
+++ b/dashboardv2/public/js/models/VSchema.js
@@ -33,7 +33,6 @@ define(['require',
 
         initialize: function() {
             this.modelName = 'VSchema';
-            this.bindErrorEvents();
         },
         toString: function() {
             return this.get('id');

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/models/VSearch.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/models/VSearch.js b/dashboardv2/public/js/models/VSearch.js
index 906b96f..5c3df97 100644
--- a/dashboardv2/public/js/models/VSearch.js
+++ b/dashboardv2/public/js/models/VSearch.js
@@ -33,7 +33,6 @@ define(['require',
 
         initialize: function() {
             this.modelName = 'VSearch';
-            this.bindErrorEvents();
         },
         toString: function() {
             return this.get('name');

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/models/VTag.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/models/VTag.js b/dashboardv2/public/js/models/VTag.js
index 73cf3c8..064c1f0 100644
--- a/dashboardv2/public/js/models/VTag.js
+++ b/dashboardv2/public/js/models/VTag.js
@@ -33,7 +33,6 @@ define(['require',
 
         initialize: function() {
             this.modelName = 'VTag';
-            this.bindErrorEvents();
         },
         toString: function() {
             return this.get('name');

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/utils/CommonViewFunction.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/utils/CommonViewFunction.js b/dashboardv2/public/js/utils/CommonViewFunction.js
index 7d41c1c..c0203ea 100644
--- a/dashboardv2/public/js/utils/CommonViewFunction.js
+++ b/dashboardv2/public/js/utils/CommonViewFunction.js
@@ -37,6 +37,7 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
             var tagModel = new VTag();
             if (options && options.guid && options.tagName) {
                 tagModel.deleteTag(options.guid, options.tagName, {
+                    skipDefaultError: true,
                     success: function(data) {
                         var msg = "Tag " + name.name + Messages.removeSuccessMessage;
                         if (options.tagOrTerm === "term") {
@@ -55,16 +56,15 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
                         }
 
                     },
-                    error: function(error, data, status) {
+                    cust_error: function(model, response) {
                         var message = options.tagName + Messages.deleteErrorMessage;
-                        if (data.error) {
-                            message = data.error;
+                        if (response && response.responseJSON) {
+                            message = response.responseJSON.errorMessage;
                         }
                         Utils.notifyError({
                             content: message
                         });
-                    },
-                    complete: function() {}
+                    }
                 });
             }
         });
@@ -106,7 +106,6 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
                             scope.$('td div[data-id="' + id + '"]').append(deleteButton);
                         }
                     },
-                    error: function(error, data, status) {},
                     complete: function() {
                         if (searchTable) {
                             --scope.fetchList;
@@ -377,14 +376,6 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
                         options.collection.fetch({ reset: true });
                     }
                 },
-                error: function(error, data, status) {
-                    if (data && data.responseText) {
-                        var data = JSON.parse(data.responseText);
-                        Utils.notifyError({
-                            content: data.message || data.msgDesc
-                        });
-                    }
-                },
                 complete: function() {
                     --that.asyncFetchCounter
                     if (that.callback && that.asyncFetchCounter === 0) {

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/utils/Messages.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/utils/Messages.js b/dashboardv2/public/js/utils/Messages.js
index d6acc32..4bf404e 100644
--- a/dashboardv2/public/js/utils/Messages.js
+++ b/dashboardv2/public/js/utils/Messages.js
@@ -20,6 +20,7 @@ define(['require'], function(require) {
     'use strict';
 
     var Messages = {
+        defaultErrorMessage: "Something went wrong",
         addSuccessMessage: " has been created successfully",
         addErrorMessage: " could not be Created",
         addTermToEntitySuccessMessage: " has been added to entity",
@@ -34,7 +35,7 @@ define(['require'], function(require) {
         updateTagDescriptionMessage: "Tag description is updated successfully",
         updateTermDescriptionMessage: "Term description is updated successfully",
         editSuccessMessage: " has been updated successfully",
-        assignDeletedEntity: " entity is deleted, Tag cannot be assign"
+        assignDeletedEntity: " entity is deleted, tag cannot be assigned"
     };
     return Messages;
 });

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/utils/Overrides.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/utils/Overrides.js b/dashboardv2/public/js/utils/Overrides.js
index 3945e9f..d6d9b6c 100644
--- a/dashboardv2/public/js/utils/Overrides.js
+++ b/dashboardv2/public/js/utils/Overrides.js
@@ -16,13 +16,31 @@
  * limitations under the License.
  */
 
-define(['require', 'marionette', 'backgrid', 'asBreadcrumbs', 'jquery-placeholder'], function(require) {
+define(['require', 'utils/Utils', 'marionette', 'backgrid', 'asBreadcrumbs', 'jquery-placeholder'], function(require, Utils) {
     'use strict';
 
     Backbone.$.ajaxSetup({
         cache: false
     });
 
+    var oldBackboneSync = Backbone.sync;
+    Backbone.sync = function(method, model, options) {
+        var that = this;
+        return oldBackboneSync.apply(this, [method, model,
+            _.extend(options, {
+                error: function(response) {
+                    if (!options.skipDefaultError) {
+                        Utils.defaultErrorHandler(that, response);
+                    }
+                    that.trigger("error", that, response);
+                    if (options.cust_error) {
+                        options.cust_error(that, response);
+                    }
+                }
+            })
+        ]);
+    }
+
     // For placeholder support 
     if (!('placeholder' in HTMLInputElement.prototype)) {
         var originalRender = Backbone.Marionette.LayoutView.prototype.render;

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/utils/Utils.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/utils/Utils.js b/dashboardv2/public/js/utils/Utils.js
index 4e003d9..259ea2c 100644
--- a/dashboardv2/public/js/utils/Utils.js
+++ b/dashboardv2/public/js/utils/Utils.js
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-define(['require', 'utils/Globals', 'pnotify'], function(require, Globals, pnotify) {
+define(['require', 'utils/Globals', 'pnotify', 'utils/Messages'], function(require, Globals, pnotify, Messages) {
     'use strict';
 
     var Utils = {};
@@ -79,43 +79,47 @@ define(['require', 'utils/Globals', 'pnotify'], function(require, Globals, pnoti
         });
     };
     Utils.defaultErrorHandler = function(model, error) {
-        if (error.status == 401) {
-             if (error.statusText) {
-                var redirectURL;
-                    try {
-                        redirectURL = JSON.parse(error.statusText).knoxssoredirectURL;
-                    } catch(err){
-                    }
-                    if(redirectURL!=undefined && redirectURL!='' ){
-                         window.location.replace(decodeURIComponent(redirectURL));
-                    }else{
-                        window.location = 'login.jsp';
-                    }
+        if (error && error.status) {
+            if (error.status == 401) {
+                window.location = 'login.jsp'
+            } else if (error.status == 419) {
+                window.location = 'login.jsp'
+            } else if (error.status == 403) {
+                var message = "You are not authorized";
+                if (error.statusText) {
+                    message = JSON.parse(error.statusText).AuthorizationError;
+                }
+                Utils.notifyError({
+                    content: message
+                });
+            } else if (error.status == "0" && error.statusText != "abort") {
+                var diffTime = (new Date().getTime() - prevNetworkErrorTime);
+                if (diffTime > 3000) {
+                    prevNetworkErrorTime = new Date().getTime();
+                    Utils.notifyError({
+                        content: "Network Connection Failure : " +
+                            "It seems you are not connected to the internet. Please check your internet connection and try again"
+                    });
+                }
             } else {
-                    window.location = 'login.jsp';
-            }
-        } else if (error.status == 419) {
-            window.location = 'login.jsp'
-        } else if (error.status == 403) {
-            var message = "You are not authorized";
-            if (error.statusText) {
-                message = JSON.parse(error.statusText).AuthorizationError;
+                Utils.serverErrorHandler(model, error)
             }
+        } else {
+            Utils.serverErrorHandler(model, error)
+        }
+    };
+    Utils.serverErrorHandler = function(model, response) {
+        var responseJSON = response ? response.responseJSON : response;
+        if (response && responseJSON && (responseJSON.errorMessage || responseJSON.message || responseJSON.error)) {
             Utils.notifyError({
-                content: message
+                content: responseJSON.errorMessage || responseJSON.message || responseJSON.error
+            });
+        } else {
+            Utils.notifyError({
+                content: Messages.defaultErrorMessage
             });
-        } else if (error.status == "0" && error.statusText != "abort") {
-            var diffTime = (new Date().getTime() - prevNetworkErrorTime);
-            if (diffTime > 3000) {
-                prevNetworkErrorTime = new Date().getTime();
-                Utils.notifyError({
-                    content: "Network Connection Failure : " +
-                        "It seems you are not connected to the internet. Please check your internet connection and try again"
-                });
-            }
         }
     };
-
     Utils.localStorage = {
         checkLocalStorage: function(key, value) {
             if (typeof(Storage) !== "undefined") {

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/views/business_catalog/BusinessCatalogDetailLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/business_catalog/BusinessCatalogDetailLayoutView.js b/dashboardv2/public/js/views/business_catalog/BusinessCatalogDetailLayoutView.js
index edf5dec..6971a3a 100644
--- a/dashboardv2/public/js/views/business_catalog/BusinessCatalogDetailLayoutView.js
+++ b/dashboardv2/public/js/views/business_catalog/BusinessCatalogDetailLayoutView.js
@@ -158,14 +158,6 @@ define(['require',
                         Utils.notifySuccess({
                             content: message
                         });
-                    },
-                    error: function(model, response) {
-                        if (response.responseJSON && response.responseJSON.error) {
-                            that.collection.fetch({ reset: true });
-                            Utils.notifyError({
-                                content: response.responseJSON.error
-                            });
-                        }
                     }
                 });
             }

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/views/business_catalog/TreeLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/business_catalog/TreeLayoutView.js b/dashboardv2/public/js/views/business_catalog/TreeLayoutView.js
index 431a6e7..b872e50 100644
--- a/dashboardv2/public/js/views/business_catalog/TreeLayoutView.js
+++ b/dashboardv2/public/js/views/business_catalog/TreeLayoutView.js
@@ -119,19 +119,9 @@ define(['require',
                     this.termSearchData();
                 }, this);
                 this.listenTo(this.childCollection, 'error', function(model, response) {
-                    if (response && response.responseJSON && response.responseJSON.message) {
-                        Utils.notifyError({
-                            content: response.responseJSON.message
-                        });
-                    }
                     this.hideLoader();
                 }, this);
                 this.listenTo(this.parentCollection, 'error', function(model, response) {
-                    if (response && response.responseJSON && response.responseJSON.message) {
-                        Utils.notifyError({
-                            content: response.responseJSON.message
-                        });
-                    }
                     this.hideLoader();
                 }, this);
             },
@@ -515,11 +505,6 @@ define(['require',
                             content: "Term " + view.ui.termName.val() + Messages.addSuccessMessage
                         });
                     },
-                    error: function(model, response) {
-                        Utils.notifyError({
-                            content: "Term " + view.ui.termName.val() + Messages.addErrorMessage
-                        });
-                    },
                     complete: function() {
                         that.hideLoader();
                     }
@@ -550,6 +535,7 @@ define(['require',
                         url = that.$('.taxonomyTree').find('li.active a').data('href');
                     var termName = that.$('.taxonomyTree').find('li.active a').text();
                     termModel.deleteTerm(url, {
+                        skipDefaultError: true,
                         success: function(data) {
                             Utils.notifySuccess({
                                 content: "Term " + termName + Messages.deleteSuccessMessage
@@ -567,10 +553,10 @@ define(['require',
                             }
                             that.fetchCollection(termURL, true);
                         },
-                        error: function(error, data, status) {
+                        cust_error: function(model, response) {
                             var message = "Term " + termName + Messages.deleteErrorMessage;
-                            if (data.error) {
-                                message = data.error;
+                            if (response && response.responseJSON) {
+                                message = response.responseJSON.errorMessage;
                             }
                             Utils.notifyError({
                                 content: message
@@ -652,13 +638,14 @@ define(['require',
                 view.model.url = url + "/" + view.ui.termName.val();
                 this.showLoader();
                 view.model.set({ description: view.ui.termDetail.val() }).save(null, {
+                    skipDefaultError: true,
                     success: function(model, response) {
                         that.fetchCollection(view.model.url, true);
                         Utils.notifySuccess({
                             content: "Default taxonomy " + view.ui.termName.val() + Messages.addSuccessMessage
                         });
                     },
-                    error: function(error, data, status) {
+                    cust_error: function(model, response) {
                         Utils.notifyError({
                             content: "Default taxonomy " + view.ui.termName.val() + Messages.addErrorMessage
                         });

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/views/common/aboutAtlas.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/common/aboutAtlas.js b/dashboardv2/public/js/views/common/aboutAtlas.js
index 75b009c..8fff13c 100644
--- a/dashboardv2/public/js/views/common/aboutAtlas.js
+++ b/dashboardv2/public/js/views/common/aboutAtlas.js
@@ -56,7 +56,6 @@ define(['require',
                         var str = "<b>Version : </b>" + data.Version;
                         that.ui.atlasVersion.html(str);
                     },
-                    error: function(error, data, status) {},
                     complete: function() {}
                 });
             },

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/views/entity/CreateEntityLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/entity/CreateEntityLayoutView.js b/dashboardv2/public/js/views/entity/CreateEntityLayoutView.js
index c98ea18..9f4e1d7 100644
--- a/dashboardv2/public/js/views/entity/CreateEntityLayoutView.js
+++ b/dashboardv2/public/js/views/entity/CreateEntityLayoutView.js
@@ -516,13 +516,6 @@ define(['require',
                                 content: "entity " + Messages[that.guid ? 'editSuccessMessage' : 'addSuccessMessage']
                             });
                         },
-                        error: function(response) {
-                            if (response.responseJSON) {
-                                Utils.notifyError({
-                                    content: response.responseJSON.error || response.responseJSON.errorMessage
-                                });
-                            }
-                        },
                         complete: function() {
                             that.hideLoader();
                         }

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/views/graph/LineageLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/graph/LineageLayoutView.js b/dashboardv2/public/js/views/graph/LineageLayoutView.js
index c1d860a..7dae6d8 100644
--- a/dashboardv2/public/js/views/graph/LineageLayoutView.js
+++ b/dashboardv2/public/js/views/graph/LineageLayoutView.js
@@ -92,6 +92,7 @@ define(['require',
                 var that = this;
                 this.fromToObj = {};
                 this.collection.getLineage(this.guid, {
+                    skipDefaultError: true,
                     success: function(data) {
                         if (data.relations.length) {
                             that.generateData(data.relations, data.guidEntityMap);
@@ -99,7 +100,7 @@ define(['require',
                             that.noLineage();
                         }
                     },
-                    error: function(error, data, status) {
+                    cust_error: function(model, response) {
                         that.noLineage();
                     },
                     complete: function() {}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/views/search/SearchResultLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/search/SearchResultLayoutView.js b/dashboardv2/public/js/views/search/SearchResultLayoutView.js
index 8d0720e..23d74a5 100644
--- a/dashboardv2/public/js/views/search/SearchResultLayoutView.js
+++ b/dashboardv2/public/js/views/search/SearchResultLayoutView.js
@@ -362,7 +362,6 @@ define(['require',
                                             }
                                         }
                                     },
-                                    error: function(error, data, status) {},
                                     complete: function() {
                                         --that.asyncFetchCounter;
                                         if (that.asyncFetchCounter === 0) {

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/views/tag/CreateTagLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/tag/CreateTagLayoutView.js b/dashboardv2/public/js/views/tag/CreateTagLayoutView.js
index 3179276..41f8886 100644
--- a/dashboardv2/public/js/views/tag/CreateTagLayoutView.js
+++ b/dashboardv2/public/js/views/tag/CreateTagLayoutView.js
@@ -101,7 +101,6 @@ define(['require',
                     str += '<option>' + _.escape(val.get("name")) + '</option>';
                 });
                 that.ui.parentTag.html(str);
-                console.log(platform);
                 // IE9 support
                 if (platform.name === "IE") {
                     that.ui.parentTag.select2({

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/views/tag/TagAttributeDetailLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/tag/TagAttributeDetailLayoutView.js b/dashboardv2/public/js/views/tag/TagAttributeDetailLayoutView.js
index ac28c0f..24e1e24 100644
--- a/dashboardv2/public/js/views/tag/TagAttributeDetailLayoutView.js
+++ b/dashboardv2/public/js/views/tag/TagAttributeDetailLayoutView.js
@@ -147,13 +147,6 @@ define(['require',
                             content: message
                         });
                         that.modal.close();
-                    },
-                    error: function(model, response) {
-                        if (response.responseJSON && response.responseJSON.error) {
-                            Utils.notifyError({
-                                content: response.responseJSON.error
-                            });
-                        }
                     }
                 });
             },

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/views/tag/TagLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/tag/TagLayoutView.js b/dashboardv2/public/js/views/tag/TagLayoutView.js
index 9ed7ae9..450866c 100644
--- a/dashboardv2/public/js/views/tag/TagLayoutView.js
+++ b/dashboardv2/public/js/views/tag/TagLayoutView.js
@@ -251,13 +251,6 @@ define(['require',
                             content: "Tag " + that.name + Messages.addSuccessMessage
                         });
                         modal.trigger('cancel');
-                    },
-                    error: function(model, response) {
-                        if (response.responseJSON && response.responseJSON.error) {
-                            Utils.notifyError({
-                                content: response.responseJSON.error
-                            });
-                        }
                     }
                 });
             },

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/dashboardv2/public/js/views/tag/addTagModalView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/tag/addTagModalView.js b/dashboardv2/public/js/views/tag/addTagModalView.js
index 9c82d5c..dcefc5a 100644
--- a/dashboardv2/public/js/views/tag/addTagModalView.js
+++ b/dashboardv2/public/js/views/tag/addTagModalView.js
@@ -207,6 +207,7 @@ define(['require',
                     "attributes": tagAttributes
                 }];
             this.entityModel.saveEntity(options.guid, {
+                skipDefaultError: true,
                 data: JSON.stringify(json),
                 success: function(data) {
                     Utils.notifySuccess({
@@ -216,11 +217,10 @@ define(['require',
                         options.modalCollection.fetch({ reset: true });
                     }
                 },
-                error: function(error, data, status) {
+                    cust_error: function(model, response) {
                     var message = "Tag " + tagName + " could not be added";
-                    if (error && error.responseText) {
-                        var data = JSON.parse(error.responseText);
-                        message = data.error;
+                    if (response && response.responseJSON) {
+                        message = response.responseJSON.errorMessage;
                     }
                     Utils.notifyError({
                         content: message

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6679c8ee/release-log.txt
----------------------------------------------------------------------
diff --git a/release-log.txt b/release-log.txt
index a770877..dc7d12e 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -9,6 +9,8 @@ ATLAS-1060 Add composite indexes for exact match performance improvements for al
 ATLAS-1127 Modify creation and modification timestamps to Date instead of Long(sumasai)
 
 ALL CHANGES:
+ATLAS-1486 UI updates to handle errors from V2 APIs (Kalyanikashikar via mneethiraj)
+ATLAS-1436 Metrics collection using gremlin (apoorvnaik via mneethiraj)
 ATLAS-1489 Show create/edit entity button based on role (Kalyanikashikar via kevalbhatt)
 ATLAS-1478 REST API to add classification to multiple entities (svimal2106 via mneethiraj)
 ATLAS-1490 added methods to get sub-types of entity and classification types (mneethiraj)