You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by pi...@apache.org on 2022/02/08 11:40:28 UTC

[atlas] branch branch-2.0 updated: ATLAS-4532: #1 UI: Statistics button not working in new UI

This is an automated email from the ASF dual-hosted git repository.

pinal pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/atlas.git


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new 4c77b60  ATLAS-4532: #1 UI: Statistics button not working in new UI
4c77b60 is described below

commit 4c77b60ed5160128b6dfa4aa2002aca1b9c684ce
Author: prasad pawar <pr...@freestoneinfotech.com>
AuthorDate: Thu Jan 13 20:28:43 2022 +0530

    ATLAS-4532: #1 UI: Statistics button not working in new UI
    
    Signed-off-by: Pinal Shah <pi...@freestoneinfotech.com>
    (cherry picked from commit 5374b38f5551314205380ede28b730e33256ff23)
---
 dashboardv2/public/js/migration.js                 | 106 +++++++++++++--
 dashboardv2/public/js/views/site/Statistics.js     |   2 +-
 dashboardv3/gruntfile.js                           |   4 +-
 dashboardv3/public/css/scss/migration-style.scss   |  32 +++++
 dashboardv3/public/css/scss/stats.scss             |  52 +++++++
 .../public/js/migration.js                         | 109 +++++++++++++--
 .../js/templates/migration/MigrationView_tmpl.html |  17 +++
 .../public/js/templates/site/Statistics_tmpl.html  |  15 +-
 dashboardv3/public/js/utils/MigrationEnums.js      |  32 +++++
 dashboardv3/public/js/utils/UrlLinks.js            |   3 +
 .../public/js/views/migration/MigrationView.js     |  68 ++++++++++
 dashboardv3/public/js/views/site/Statistics.js     | 151 +++++++++++++++++----
 dashboardv3/public/migration-status.html.tpl       |  61 +++++++++
 13 files changed, 596 insertions(+), 56 deletions(-)

diff --git a/dashboardv2/public/js/migration.js b/dashboardv2/public/js/migration.js
index fca59ce..d6ed687 100644
--- a/dashboardv2/public/js/migration.js
+++ b/dashboardv2/public/js/migration.js
@@ -49,6 +49,13 @@ require.config({
             'deps': ['underscore', 'jquery'],
             'exports': 'Backbone'
         },
+        'jquery-ui': {
+            'deps': ['jquery']
+        },
+        'asBreadcrumbs': {
+            'deps': ['jquery'],
+            'exports': 'asBreadcrumbs'
+        },
         'bootstrap': {
             'deps': ['jquery'],
             'exports': 'jquery'
@@ -59,26 +66,79 @@ require.config({
         'marionette': {
             'deps': ['backbone']
         },
+        'backgrid': {
+            'deps': ['backbone'],
+            'exports': 'Backgrid'
+        },
+        'backgrid-paginator': {
+            'deps': ['backbone', 'backgrid']
+        },
+        'backgrid-filter': {
+            'deps': ['backbone', 'backgrid']
+        },
+        'backgrid-orderable': {
+            'deps': ['backbone', 'backgrid'],
+        },
+        'backgrid-sizeable': {
+            'deps': ['backbone', 'backgrid'],
+        },
+        'backgrid-select-all': {
+            'deps': ['backbone', 'backgrid']
+        },
+        'backgrid-columnmanager': {
+            'deps': ['backbone', 'backgrid'],
+        },
         'hbs': {
             'deps': ['underscore', 'handlebars']
         },
+        'd3': {
+            'exports': ['d3']
+        },
+        'd3-tip': {
+            'deps': ['d3'],
+            'exports': ['d3-tip']
+        },
+        'LineageHelper': {
+            'deps': ['d3'],
+        },
+        'dagreD3': {
+            'deps': ['d3'],
+            'exports': ['dagreD3']
+        },
+        'sparkline': {
+            'deps': ['jquery'],
+            'exports': ['sparkline']
+        },
+        'pnotify': {
+            'exports': ['pnotify']
+        },
         'jquery-placeholder': {
             'deps': ['jquery']
         },
-        'jquery-ui': {
+        'query-builder': {
             'deps': ['jquery']
         },
+        'daterangepicker': {
+            'deps': ['jquery', 'moment']
+        },
         'moment-timezone': {
             'deps': ['moment']
         },
         'moment': {
             'exports': ['moment']
         },
-        'pnotify': {
-            'exports': ['pnotify']
+        'jstree': {
+            'deps': ['jquery']
         },
-        'd3': {
-            'exports': ['d3']
+        'jquery-steps': {
+            'deps': ['jquery']
+        },
+        'DOMPurify': {
+            'exports': 'DOMPurify'
+        },
+        'trumbowyg': {
+            'deps': ['jquery'],
+            'exports': 'trumbowyg'
         }
     },
 
@@ -90,20 +150,44 @@ require.config({
         'backbone.babysitter': 'libs/backbone.babysitter/lib/backbone.babysitter.min',
         'marionette': 'libs/backbone-marionette/backbone.marionette.min',
         'backbone.paginator': 'libs/backbone-paginator/backbone.paginator.min',
+        'backbone.wreqr': 'libs/backbone-wreqr/backbone.wreqr.min',
+        'backgrid': 'libs/backgrid/js/backgrid',
+        'backgrid-filter': 'libs/backgrid-filter/js/backgrid-filter.min',
+        'backgrid-orderable': 'libs/backgrid-orderable-columns/js/backgrid-orderable-columns',
+        'backgrid-paginator': 'libs/backgrid-paginator/js/backgrid-paginator.min',
+        'backgrid-sizeable': 'libs/backgrid-sizeable-columns/js/backgrid-sizeable-columns',
+        'backgrid-columnmanager': 'external_lib/backgrid-columnmanager/js/Backgrid.ColumnManager',
+        'asBreadcrumbs': 'libs/jquery-asBreadcrumbs/js/jquery-asBreadcrumbs.min',
+        'd3': 'libs/d3/d3.min',
+        'd3-tip': 'libs/d3/index',
+        'LineageHelper': 'external_lib/atlas-lineage/dist/index',
+        'dagreD3': 'libs/dagre-d3/dagre-d3.min',
+        'sparkline': 'libs/sparkline/jquery.sparkline.min',
         'tmpl': 'templates',
         'requirejs.text': 'libs/requirejs-text/text',
         'handlebars': 'external_lib/require-handlebars-plugin/js/handlebars',
         'hbs': 'external_lib/require-handlebars-plugin/js/hbs',
         'i18nprecompile': 'external_lib/require-handlebars-plugin/js/i18nprecompile',
-        'jquery-placeholder': 'libs/jquery-placeholder/js/jquery.placeholder',
-        'platform': 'libs/platform/platform',
-        'pnotify': 'external_lib/pnotify/pnotify.custom.min',
-        'pnotify.buttons': 'external_lib/pnotify/pnotify.custom.min',
-        'pnotify.confirm': 'external_lib/pnotify/pnotify.custom.min',
+        'select2': 'libs/select2/select2.full.min',
+        'backgrid-select-all': 'libs/backgrid-select-all/backgrid-select-all.min',
         'moment': 'libs/moment/js/moment.min',
         'moment-timezone': 'libs/moment-timezone/moment-timezone-with-data.min',
         'jquery-ui': 'external_lib/jquery-ui/jquery-ui.min',
-        'd3': 'libs/d3/d3.min'
+        'pnotify': 'external_lib/pnotify/pnotify.custom.min',
+        'pnotify.buttons': 'external_lib/pnotify/pnotify.custom.min',
+        'pnotify.confirm': 'external_lib/pnotify/pnotify.custom.min',
+        'jquery-placeholder': 'libs/jquery-placeholder/js/jquery.placeholder',
+        'platform': 'libs/platform/platform',
+        'query-builder': 'libs/jQueryQueryBuilder/js/query-builder.standalone.min',
+        'daterangepicker': 'libs/bootstrap-daterangepicker/js/daterangepicker',
+        'table-dragger': 'libs/table-dragger/table-dragger',
+        'jstree': 'libs/jstree/jstree.min',
+        'jquery-steps': 'libs/jquery-steps/jquery.steps.min',
+        'dropzone': 'libs/dropzone/js/dropzone-amd-module',
+        'lossless-json': 'libs/lossless-json/lossless-json',
+        'store': 'external_lib/idealTimeout/store.min',
+        'DOMPurify': 'external_lib/dompurify/purify.min',
+        'trumbowyg': 'external_lib/trumbowyg/trumbowyg'
     },
 
     /**
diff --git a/dashboardv2/public/js/views/site/Statistics.js b/dashboardv2/public/js/views/site/Statistics.js
index 32a6669..c4d4ace 100644
--- a/dashboardv2/public/js/views/site/Statistics.js
+++ b/dashboardv2/public/js/views/site/Statistics.js
@@ -126,7 +126,7 @@ define(['require',
                     success: function(data) {
                         var data = _.first(data.toJSON()),
                             migrationStatus = data.MigrationStatus || null,
-                            operationStatus = migrationStatus.operationStatus,
+                            operationStatus = migrationStatus ? migrationStatus.operationStatus : null,
                             showProgress = true,
                             totalProgress = 0,
                             progressMessage = "";
diff --git a/dashboardv3/gruntfile.js b/dashboardv3/gruntfile.js
index b1b7b59..37e4b32 100644
--- a/dashboardv3/gruntfile.js
+++ b/dashboardv3/gruntfile.js
@@ -214,6 +214,7 @@ module.exports = function(grunt) {
             build: {
                 files: {
                     [distPath + '/css/style.css']: modulesPath + 'css/scss/style.scss',
+                    [distPath + '/css/migration-style.css']: modulesPath + 'css/scss/migration-style.scss',
                     [distPath + '/css/login.css']: modulesPath + 'css/scss/login.scss'
                 }
             }
@@ -292,7 +293,8 @@ module.exports = function(grunt) {
                     }
                 },
                 files: {
-                    [distPath + '/index.html']: [modulesPath + 'index.html.tpl']
+                    [distPath + '/index.html']: [modulesPath + 'index.html.tpl'],
+                    [distPath + '/migration-status.html']: [modulesPath + 'migration-status.html.tpl']
                 }
             }
         }
diff --git a/dashboardv3/public/css/scss/migration-style.scss b/dashboardv3/public/css/scss/migration-style.scss
new file mode 100644
index 0000000..60c9758
--- /dev/null
+++ b/dashboardv3/public/css/scss/migration-style.scss
@@ -0,0 +1,32 @@
+/*
+ * 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 "__mixin.scss";
+@import "__variable.scss";
+@import "common.scss";
+@import "table.scss";
+@import "form.scss";
+@import "panel.scss";
+@import "loader.scss";
+@import "theme.scss";
+@import "stats.scss";
+@import "override.scss";
+
+.initialLoading {
+    left: 0px !important;
+}
\ No newline at end of file
diff --git a/dashboardv3/public/css/scss/stats.scss b/dashboardv3/public/css/scss/stats.scss
index e96ee56..7a83249 100644
--- a/dashboardv3/public/css/scss/stats.scss
+++ b/dashboardv3/public/css/scss/stats.scss
@@ -121,6 +121,58 @@
     }
 }
 
+.statistics-header {
+    height: 50px;
+    width: 100%;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    position: fixed;
+    z-index: 999;
+    top: 0px;
+    padding: 0px 15px;
+    background: #fff;
+    border-bottom: 1px #e8e9ee solid;
+    box-shadow: 0 2px 6px 0 rgba(0, 0, 0, .05);
+
+    &>div {
+        margin: 0px 5px;
+    }
+
+    pre {
+        width: 100%;
+        padding: 5px 10px;
+        margin: 0px 10px;
+        color: $gray;
+
+        .color {
+            color: $color_jungle_green_approx;
+            font-weight: bold;
+        }
+    }
+
+    .progress {
+        width: 100%;
+        margin-top: 7px;
+        margin-bottom: 0px;
+
+        .progress-bar-success {
+            background-color: $color_jungle_green_approx;
+        }
+    }
+
+    .refresh-container {
+        background: white;
+        border-radius: 23px;
+
+        .btn {
+            margin: 0px;
+            border-radius: 23px;
+            padding: 10px 10px;
+        }
+    }
+}
+
 .statistics-time-list {
     padding-right: 0px;
     width: 230px;
diff --git a/dashboardv2/public/js/migration.js b/dashboardv3/public/js/migration.js
similarity index 63%
copy from dashboardv2/public/js/migration.js
copy to dashboardv3/public/js/migration.js
index fca59ce..abb748f 100644
--- a/dashboardv2/public/js/migration.js
+++ b/dashboardv3/public/js/migration.js
@@ -49,6 +49,13 @@ require.config({
             'deps': ['underscore', 'jquery'],
             'exports': 'Backbone'
         },
+        'jquery-ui': {
+            'deps': ['jquery']
+        },
+        'asBreadcrumbs': {
+            'deps': ['jquery'],
+            'exports': 'asBreadcrumbs'
+        },
         'bootstrap': {
             'deps': ['jquery'],
             'exports': 'jquery'
@@ -59,26 +66,79 @@ require.config({
         'marionette': {
             'deps': ['backbone']
         },
+        'backgrid': {
+            'deps': ['backbone'],
+            'exports': 'Backgrid'
+        },
+        'backgrid-paginator': {
+            'deps': ['backbone', 'backgrid']
+        },
+        'backgrid-filter': {
+            'deps': ['backbone', 'backgrid']
+        },
+        'backgrid-orderable': {
+            'deps': ['backbone', 'backgrid'],
+        },
+        'backgrid-sizeable': {
+            'deps': ['backbone', 'backgrid'],
+        },
+        'backgrid-select-all': {
+            'deps': ['backbone', 'backgrid']
+        },
+        'backgrid-columnmanager': {
+            'deps': ['backbone', 'backgrid'],
+        },
         'hbs': {
             'deps': ['underscore', 'handlebars']
         },
+        'd3': {
+            'exports': ['d3']
+        },
+        'd3-tip': {
+            'deps': ['d3'],
+            'exports': ['d3-tip']
+        },
+        'LineageHelper': {
+            'deps': ['d3'],
+        },
+        'dagreD3': {
+            'deps': ['d3'],
+            'exports': ['dagreD3']
+        },
+        'sparkline': {
+            'deps': ['jquery'],
+            'exports': ['sparkline']
+        },
+        'pnotify': {
+            'exports': ['pnotify']
+        },
         'jquery-placeholder': {
             'deps': ['jquery']
         },
-        'jquery-ui': {
+        'query-builder': {
             'deps': ['jquery']
         },
+        'daterangepicker': {
+            'deps': ['jquery', 'moment']
+        },
         'moment-timezone': {
             'deps': ['moment']
         },
         'moment': {
             'exports': ['moment']
         },
-        'pnotify': {
-            'exports': ['pnotify']
+        'jstree': {
+            'deps': ['jquery']
         },
-        'd3': {
-            'exports': ['d3']
+        'jquery-steps': {
+            'deps': ['jquery']
+        },
+        'DOMPurify': {
+            'exports': 'DOMPurify'
+        },
+        'trumbowyg': {
+            'deps': ['jquery'],
+            'exports': 'trumbowyg'
         }
     },
 
@@ -90,20 +150,44 @@ require.config({
         'backbone.babysitter': 'libs/backbone.babysitter/lib/backbone.babysitter.min',
         'marionette': 'libs/backbone-marionette/backbone.marionette.min',
         'backbone.paginator': 'libs/backbone-paginator/backbone.paginator.min',
+        'backbone.wreqr': 'libs/backbone-wreqr/backbone.wreqr.min',
+        'backgrid': 'libs/backgrid/js/backgrid',
+        'backgrid-filter': 'libs/backgrid-filter/js/backgrid-filter.min',
+        'backgrid-orderable': 'libs/backgrid-orderable-columns/js/backgrid-orderable-columns',
+        'backgrid-paginator': 'libs/backgrid-paginator/js/backgrid-paginator.min',
+        'backgrid-sizeable': 'libs/backgrid-sizeable-columns/js/backgrid-sizeable-columns',
+        'backgrid-columnmanager': 'external_lib/backgrid-columnmanager/js/Backgrid.ColumnManager',
+        'asBreadcrumbs': 'libs/jquery-asBreadcrumbs/js/jquery-asBreadcrumbs.min',
+        'd3': 'libs/d3/d3.min',
+        'd3-tip': 'libs/d3/index',
+        'LineageHelper': 'external_lib/atlas-lineage/dist/index',
+        'dagreD3': 'libs/dagre-d3/dagre-d3.min',
+        'sparkline': 'libs/sparkline/jquery.sparkline.min',
         'tmpl': 'templates',
         'requirejs.text': 'libs/requirejs-text/text',
         'handlebars': 'external_lib/require-handlebars-plugin/js/handlebars',
         'hbs': 'external_lib/require-handlebars-plugin/js/hbs',
         'i18nprecompile': 'external_lib/require-handlebars-plugin/js/i18nprecompile',
-        'jquery-placeholder': 'libs/jquery-placeholder/js/jquery.placeholder',
-        'platform': 'libs/platform/platform',
-        'pnotify': 'external_lib/pnotify/pnotify.custom.min',
-        'pnotify.buttons': 'external_lib/pnotify/pnotify.custom.min',
-        'pnotify.confirm': 'external_lib/pnotify/pnotify.custom.min',
+        'select2': 'libs/select2/select2.full.min',
+        'backgrid-select-all': 'libs/backgrid-select-all/backgrid-select-all.min',
         'moment': 'libs/moment/js/moment.min',
         'moment-timezone': 'libs/moment-timezone/moment-timezone-with-data.min',
         'jquery-ui': 'external_lib/jquery-ui/jquery-ui.min',
-        'd3': 'libs/d3/d3.min'
+        'pnotify': 'external_lib/pnotify/pnotify.custom.min',
+        'pnotify.buttons': 'external_lib/pnotify/pnotify.custom.min',
+        'pnotify.confirm': 'external_lib/pnotify/pnotify.custom.min',
+        'jquery-placeholder': 'libs/jquery-placeholder/js/jquery.placeholder',
+        'platform': 'libs/platform/platform',
+        'query-builder': 'libs/jQueryQueryBuilder/js/query-builder.standalone.min',
+        'daterangepicker': 'libs/bootstrap-daterangepicker/js/daterangepicker',
+        'table-dragger': 'libs/table-dragger/table-dragger',
+        'jstree': 'libs/jstree/jstree.min',
+        'jquery-steps': 'libs/jquery-steps/jquery.steps.min',
+        'dropzone': 'libs/dropzone/js/dropzone-amd-module',
+        'lossless-json': 'libs/lossless-json/lossless-json',
+        'store': 'external_lib/idealTimeout/store.min',
+        'DOMPurify': 'external_lib/dompurify/purify.min',
+        'trumbowyg': 'external_lib/trumbowyg/trumbowyg'
     },
 
     /**
@@ -118,7 +202,8 @@ require.config({
 require([
     'marionette',
     'utils/Helper',
-    'bootstrap'
+    'bootstrap',
+    'select2'
 ], function(Marionette, Helper) {
     var that = this;
     var App = new Marionette.Application();
diff --git a/dashboardv3/public/js/templates/migration/MigrationView_tmpl.html b/dashboardv3/public/js/templates/migration/MigrationView_tmpl.html
new file mode 100644
index 0000000..67572fa
--- /dev/null
+++ b/dashboardv3/public/js/templates/migration/MigrationView_tmpl.html
@@ -0,0 +1,17 @@
+<!--
+ * 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="r_statisticsView" style="padding-top:60px;"></div>
\ No newline at end of file
diff --git a/dashboardv3/public/js/templates/site/Statistics_tmpl.html b/dashboardv3/public/js/templates/site/Statistics_tmpl.html
index 5bf0a9c..646e37f 100644
--- a/dashboardv3/public/js/templates/site/Statistics_tmpl.html
+++ b/dashboardv3/public/js/templates/site/Statistics_tmpl.html
@@ -14,7 +14,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
 -->
-<div class="panel-group server-stats-container statsContainer hide" id="accordion">
+<div class="statistics-header col-md-12 hide">
+    <div class="progress hide">
+        <div class="progress-bar progress-bar-success progress-bar-striped" role="progressbar" aria-valuemin="0" aria-valuemax="100" data-id="migrationProgressBar">
+            <span data-id="migrationProgressBarValue"></span>
+        </div>
+    </div>
+    <pre class="successStatus hide">Migration is <span class="color">successful</span>. To exit form migration mode, please remove <span class="color">atlas.migration.data.filename</span> property and restart Atlas.</pre>
+    <div class="refresh-container statisticsRefresh" data-id="statisticsRefresh">
+        <button type="button" class="btn fa fa-refresh pull-right btn-sm btn-action" title="Refresh Data"></button>
+    </div>
+</div>
+<div class="panel-group server-stats-container statsContainer hide col-md-12" id="accordion">
     <div class="panel panel-default custom-panel expand_collapse_panel-icon" data-id="entity">
         <div class="panel-heading" data-toggle="collapse" href="#entityCountCollapse" aria-expanded="true">
             <h4 class="panel-title">
@@ -89,7 +100,7 @@
                     </div>
                 </div>
                 <div class="col-sm-12">
-                    <div class="card-container panel panel-primary">
+                    <div class="card-container panel panel-primary hide" data-id="notificationDetails">
                         <div class="panel-heading">Notification Details</div>
                         <div class="panel-body">
                             <table data-id="offset-card" class="table stat-table notification-table table-striped ">
diff --git a/dashboardv3/public/js/utils/MigrationEnums.js b/dashboardv3/public/js/utils/MigrationEnums.js
new file mode 100644
index 0000000..c89b9da
--- /dev/null
+++ b/dashboardv3/public/js/utils/MigrationEnums.js
@@ -0,0 +1,32 @@
+/**
+ * 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.
+ */
+
+define(['require'], function(require) {
+    'use strict';
+
+    var Enums = {};
+
+    Enums.migrationStatus = {
+        STARTED: "STARTED",
+        IN_PROGRESS: "IN_PROGRESS",
+        FAIL: "FAIL",
+        DONE: "DONE"
+    }
+
+    return Enums;
+});
\ No newline at end of file
diff --git a/dashboardv3/public/js/utils/UrlLinks.js b/dashboardv3/public/js/utils/UrlLinks.js
index 0d64ada..b9a9c81 100644
--- a/dashboardv3/public/js/utils/UrlLinks.js
+++ b/dashboardv3/public/js/utils/UrlLinks.js
@@ -64,6 +64,9 @@ define(['require', 'utils/Enums', 'utils/Utils', 'underscore'], function(require
         regitrydataDefApiUrl: function(name) {
             return this.baseUrlV2 + '/entity/getRegistryData';
         },
+        migrationStatusApiUrl: function() {
+            return this.baseUrl + '/admin/status'
+        },
         rootEntityDefUrl: function(name) {
             return this.baseUrlV2 + '/types/entitydef/name/' + name;
         },
diff --git a/dashboardv3/public/js/views/migration/MigrationView.js b/dashboardv3/public/js/views/migration/MigrationView.js
new file mode 100644
index 0000000..e7000f3
--- /dev/null
+++ b/dashboardv3/public/js/views/migration/MigrationView.js
@@ -0,0 +1,68 @@
+/**
+ * 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.
+ */
+
+define(['require',
+    'backbone',
+    'hbs!tmpl/migration/MigrationView_tmpl'
+], function(require, Backbone, MigrationViewTmpl) {
+    'use strict';
+
+    var ProfileLayoutView = Backbone.Marionette.LayoutView.extend(
+        /** @lends ProfileLayoutView */
+        {
+            _viewName: 'MigrationView',
+
+            template: MigrationViewTmpl,
+
+            /** Layout sub regions */
+            regions: {
+                RStatisticsView: "#r_statisticsView",
+            },
+            /** ui selector cache */
+            ui: {},
+            /** ui events hash */
+            events: function() {},
+            /**
+             * intialize a new ProfileLayoutView Layout
+             * @constructs
+             */
+            initialize: function(options) {
+                this.apiBaseUrl = this.getBaseUrl(window.location.pathname);
+            },
+            bindEvents: function() {},
+            getBaseUrl: function(url) {
+                var path = url.replace(/\/[\w-]+.(jsp|html)|\/+$/ig, ''),
+                    splitPath = path.split("/");
+                if (splitPath && splitPath[splitPath.length - 1] === "n") {
+                    splitPath.pop();
+                    return splitPath.join("/");
+                }
+                return path;
+            },
+            onRender: function() {
+                var that = this;
+                require(["views/site/Statistics", "collection/VTagList", "utils/UrlLinks"], function(Statistics, VTagList, UrlLinks) {
+                    that.metricCollection = new VTagList();
+                    that.metricCollection.url = UrlLinks.metricsApiUrl();
+                    that.metricCollection.modelAttrName = "data";
+                    that.RStatisticsView.show(new Statistics({ metricCollection: that.metricCollection, isMigrationView: true }));
+                })
+            }
+        });
+    return ProfileLayoutView;
+});
\ No newline at end of file
diff --git a/dashboardv3/public/js/views/site/Statistics.js b/dashboardv3/public/js/views/site/Statistics.js
index 9eb714d..c4d4ace 100644
--- a/dashboardv3/public/js/views/site/Statistics.js
+++ b/dashboardv3/public/js/views/site/Statistics.js
@@ -28,11 +28,12 @@ define(['require',
     'collection/VTagList',
     'utils/CommonViewFunction',
     'utils/Enums',
+    'utils/MigrationEnums',
     'moment',
     'utils/Utils',
     'utils/Globals',
     'moment-timezone'
-], function(require, Backbone, StatTmpl, StatsNotiTable, TopicOffsetTable, EntityTable, Modal, VCommon, UrlLinks, VTagList, CommonViewFunction, Enums, moment, Utils, Globals) {
+], function(require, Backbone, StatTmpl, StatsNotiTable, TopicOffsetTable, EntityTable, Modal, VCommon, UrlLinks, VTagList, CommonViewFunction, Enums, MigrationEnums, moment, Utils, Globals) {
     'use strict';
 
     var StatisticsView = Backbone.Marionette.LayoutView.extend(
@@ -56,10 +57,22 @@ define(['require',
                 osCard: "[data-id='os-card']",
                 runtimeCard: "[data-id='runtime-card']",
                 memoryCard: "[data-id='memory-card']",
-                memoryPoolUsage: "[data-id='memory-pool-usage-card']"
+                memoryPoolUsage: "[data-id='memory-pool-usage-card']",
+                statisticsRefresh: "[data-id='statisticsRefresh']",
+                notificationDetails: "[data-id='notificationDetails']",
+                migrationProgressBar: "[data-id='migrationProgressBar']",
+                migrationProgressBarValue: "[data-id='migrationProgressBarValue']"
             },
             /** ui events hash */
-            events: function() {},
+            events: function() {
+                var events = {};
+                events["click " + this.ui.statisticsRefresh] = function(e) {
+                    this.showLoader();
+                    this.fetchMetricData();
+                    this.fetchStatusData();
+                };
+                return events;
+            },
             /**
              * intialize a new AboutAtlasView Layout
              * @constructs
@@ -68,28 +81,35 @@ define(['require',
                 _.extend(this, options);
                 var that = this;
                 this.DATA_MAX_LENGTH = 25;
-                var modal = new Modal({
-                    title: 'Statistics',
-                    content: this,
-                    okCloses: true,
-                    okText: "Close",
-                    showFooter: true,
-                    allowCancel: false,
-                    width: "60%",
-                    headerButtons: [{
-                        title: "Refresh Data",
-                        btnClass: "fa fa-refresh",
-                        onClick: function() {
-                            modal.$el.find('.header-button .fa-refresh').tooltip('hide').prop('disabled', true).addClass('fa-spin');
-                            that.fetchMetricData({ update: true });
-                        }
-                    }]
-                });
-                modal.on('closeModal', function() {
-                    modal.trigger('cancel');
-                });
-                this.modal = modal;
-                modal.open();
+                this.loaderCount = 0;
+                if (this.isMigrationView) {
+                    this.migrationImportStatus = new VTagList();
+                    this.migrationImportStatus.url = UrlLinks.migrationStatusApiUrl();
+                } else {
+                    var modal = new Modal({
+                        title: 'Statistics',
+                        content: this,
+                        okCloses: true,
+                        okText: "Close",
+                        showFooter: true,
+                        allowCancel: false,
+                        width: "60%",
+                        headerButtons: [{
+                            title: "Refresh Data",
+                            btnClass: "fa fa-refresh",
+                            onClick: function() {
+                                modal.$el.find('.header-button .fa-refresh').tooltip('hide').prop('disabled', true).addClass('fa-spin');
+                                that.fetchMetricData({ update: true });
+                            }
+                        }]
+                    });
+                    modal.on('closeModal', function() {
+                        modal.trigger('cancel');
+                    });
+                    this.modal = modal;
+                    modal.open();
+                }
+
             },
             bindEvents: function() {
                 var that = this;
@@ -99,8 +119,54 @@ define(['require',
                     })
                 }
             },
+            fetchStatusData: function() {
+                var that = this;
+                ++this.loaderCount;
+                that.migrationImportStatus.fetch({
+                    success: function(data) {
+                        var data = _.first(data.toJSON()),
+                            migrationStatus = data.MigrationStatus || null,
+                            operationStatus = migrationStatus ? migrationStatus.operationStatus : null,
+                            showProgress = true,
+                            totalProgress = 0,
+                            progressMessage = "";
+                        if (migrationStatus) {
+                            if (MigrationEnums.migrationStatus[operationStatus] === "DONE") {
+                                showProgress = false;
+                            } else if (MigrationEnums.migrationStatus[operationStatus] === "IN_PROGRESS" || MigrationEnums.migrationStatus[operationStatus] === "STARTED") {
+                                var currentIndex = migrationStatus.currentIndex || 0,
+                                    totalCount = migrationStatus.totalCount || 0;
+                                totalProgress = Math.ceil((migrationStatus.currentIndex / migrationStatus.totalCount) * 100)
+                                progressMessage = totalProgress + "%";
+                                that.ui.migrationProgressBar.removeClass("progress-bar-danger");
+                                that.ui.migrationProgressBar.addClass("progress-bar-success");
+                            } else if (MigrationEnums.migrationStatus[operationStatus] === "FAIL") {
+                                totalProgress = "100";
+                                progressMessage = "Failed";
+                                that.ui.migrationProgressBar.addClass("progress-bar-danger");
+                                that.ui.migrationProgressBar.removeClass("progress-bar-success");
+                            }
+                            if (showProgress) {
+                                that.$el.find(".statistics-header>.progress").removeClass("hide");
+                                that.$el.find(".statistics-header>.successStatus").addClass("hide");
+                                that.ui.migrationProgressBar.css({ width: totalProgress + '%' });
+                                that.ui.migrationProgressBarValue.text(progressMessage);
+                            } else {
+                                that.$el.find(".statistics-header>.progress").addClass("hide");
+                                that.$el.find(".statistics-header>.successStatus").removeClass("hide");
+                            }
+                        }
+
+                    },
+                    complete: function() {
+                        --that.loaderCount;
+                        that.hideLoader();
+                    }
+                });
+            },
             fetchMetricData: function(options) {
                 var that = this;
+                ++this.loaderCount;
                 this.metricCollection.fetch({
                     success: function(data) {
                         var data = _.first(data.toJSON());
@@ -108,19 +174,45 @@ define(['require',
                         that.renderEntities({ data: data });
                         that.renderSystemDeatils({ data: data });
                         that.renderClassifications({ data: data });
-                        that.$('.statsContainer,.statsNotificationContainer').removeClass('hide');
-                        that.$('.statsLoader,.statsNotificationLoader').removeClass('show');
                         if (options && options.update) {
-                            that.modal.$el.find('.header-button .fa-refresh').prop('disabled', false).removeClass('fa-spin');
+                            if (that.modal) {
+                                that.modal.$el.find('.header-button .fa-refresh').prop('disabled', false).removeClass('fa-spin');
+                            }
                             Utils.notifySuccess({
                                 content: "Metric data is refreshed"
                             })
                         }
+                    },
+                    complete: function() {
+                        --that.loaderCount;
+                        that.hideLoader()
                     }
                 });
             },
+            hideLoader: function() {
+                if (this.loaderCount === 0) {
+                    var className = ".statsContainer";
+                    if (this.isMigrationView) {
+                        className += ",.statistics-header";
+                    }
+                    this.$(className).removeClass('hide');
+                    this.$('.statsLoader').removeClass('show');
+                }
+            },
+            showLoader: function() {
+                var className = ".statsContainer";
+                if (this.isMigrationView) {
+                    className += ",.statistics-header";
+                }
+                this.$(className).addClass('hide');
+                this.$('.statsLoader').addClass('show');
+            },
             onRender: function() {
                 this.bindEvents();
+                if (this.isMigrationView) {
+                    this.showLoader();
+                    this.fetchStatusData();
+                }
                 this.fetchMetricData();
             },
             closePanel: function(options) {
@@ -276,7 +368,7 @@ define(['require',
                         });
                         return tableBody;
                     };
-                if (data.Notification) {
+                if (!that.isMigrationView && data.Notification) {
                     var tableCol = [{
                                 label: "Total <br> (from " + (that.getValue({
                                     "value": data.Server["startTimeStamp"],
@@ -344,6 +436,7 @@ define(['require',
                             }
                         })
                     )
+                    that.ui.notificationDetails.removeClass('hide');
                 }
 
                 if (data.Server) {
diff --git a/dashboardv3/public/migration-status.html.tpl b/dashboardv3/public/migration-status.html.tpl
new file mode 100644
index 0000000..1e7c991
--- /dev/null
+++ b/dashboardv3/public/migration-status.html.tpl
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<!--
+ * 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.
+-->
+<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
+<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
+<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
+<!--[if gt IE 7]>
+    <script src="js/external_lib/es5-shim.min.js?bust=<%- bust %>"></script>
+    <script src="js/external_lib/respond.min.js?bust=<%- bust %>"></script>
+<![endif]-->
+<!--[if gt IE 8]><!-->
+<html class="no-js">
+<!--<![endif]-->
+
+<head>
+    <meta charset="utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8;" />
+    <title>Atlas</title>
+    <meta name="description" content="" />
+    <meta name="viewport" content="width=device-width" />
+    <link rel="shortcut icon" href="img/favicon.ico?bust=<%- bust %>" type="image/x-icon" />
+    <link rel="icon" href="img/favicon.ico?bust=<%- bust %>" type="image/x-icon" />
+    <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
+    <link rel="stylesheet" type="text/css" href="css/animate.min.css?bust=<%- bust %>" />
+    <link rel="stylesheet" href="js/libs/backgrid/css/backgrid.css?bust=<%- bust %>" />
+    <link rel="stylesheet" href="js/libs/bootstrap/css/bootstrap.min.css?bust=<%- bust %>" />
+    <link rel="stylesheet" href="css/googlefonts.css?bust=<%- bust %>" type="text/css" />
+    <link href="js/libs/font-awesome/css/font-awesome.min.css?bust=<%- bust %>" rel="stylesheet" />
+    <link href="css/migration-style.css?bust=<%- bust %>" rel="stylesheet" />
+</head>
+
+<body>
+    <div class="page-wrapper">
+        <div class="initialLoading"></div>
+    </div>
+    <!-- build:js scripts/main.js -->
+    <script data-main="js/migration.js?bust=<%- bust %>" src="js/libs/requirejs/require.js?bust=<%- bust %>"></script>
+    <!-- endbuild -->
+    <script type="text/javascript">
+    var getBustValue = function() {
+        return "<%- bust %>";
+    };
+    </script>
+</body>
+
+</html>
\ No newline at end of file