aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStas Vilchik <vilchiks@gmail.com>2015-06-15 15:36:35 +0200
committerStas Vilchik <vilchiks@gmail.com>2015-06-15 15:51:04 +0200
commit1982a35ea22ede4245131054cee6f16c10e52ba6 (patch)
tree7adfea96b4e54e8d99bbb3a4c09bac9f09d148e5
parentcc9c0c54d3fe6ada071d20edae5b5e75abab37be (diff)
downloadsonarqube-1982a35ea22ede4245131054cee6f16c10e52ba6.tar.gz
sonarqube-1982a35ea22ede4245131054cee6f16c10e52ba6.zip
SONAR-6639 redesign migration page, step 1
-rw-r--r--server/sonar-web/Gruntfile.coffee4
-rw-r--r--server/sonar-web/src/main/js/apps/maintenance/app.js17
-rw-r--r--server/sonar-web/src/main/js/apps/maintenance/main-view.js46
-rw-r--r--server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-down.hbs5
-rw-r--r--server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration-failed.hbs2
-rw-r--r--server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration-needed.hbs8
-rw-r--r--server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration-not-supported.hbs2
-rw-r--r--server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration-running.hbs11
-rw-r--r--server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration-succeeded.hbs9
-rw-r--r--server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration.hbs10
-rw-r--r--server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-no-migration.hbs4
-rw-r--r--server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-up.hbs5
-rw-r--r--server/sonar-web/src/main/js/apps/maintenance/templates/maintenance-main.hbs23
-rw-r--r--server/sonar-web/src/main/less/components/page.less6
-rw-r--r--server/sonar-web/src/main/less/init/misc.less2
-rw-r--r--server/sonar-web/src/main/less/init/type.less2
-rw-r--r--server/sonar-web/src/main/less/pages.less1
-rw-r--r--server/sonar-web/src/main/less/pages/maintenance.less22
-rw-r--r--server/sonar-web/src/main/webapp/WEB-INF/app/views/layouts/nonav.html.erb5
-rw-r--r--server/sonar-web/src/main/webapp/WEB-INF/app/views/maintenance/index.html.erb18
-rw-r--r--server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/db_uptodate.html.erb15
-rw-r--r--server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/dbdown.html.erb7
-rw-r--r--server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/failed.html.erb9
-rw-r--r--server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/form.html.erb20
-rw-r--r--server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/migration_running.html.erb15
25 files changed, 213 insertions, 55 deletions
diff --git a/server/sonar-web/Gruntfile.coffee b/server/sonar-web/Gruntfile.coffee
index be7a3ae2ab3..831558a585b 100644
--- a/server/sonar-web/Gruntfile.coffee
+++ b/server/sonar-web/Gruntfile.coffee
@@ -125,6 +125,7 @@ module.exports = (grunt) ->
'build-app:computation'
'build-app:drilldown'
'build-app:groups'
+ 'build-app:maintenance'
'build-app:markdown'
'build-app:measures'
'build-app:metrics'
@@ -232,6 +233,9 @@ module.exports = (grunt) ->
'<%= BUILD_PATH %>/js/apps/metrics/templates.js': [
'<%= SOURCE_PATH %>/js/apps/metrics/templates/**/*.hbs'
]
+ '<%= BUILD_PATH %>/js/apps/maintenance/templates.js': [
+ '<%= SOURCE_PATH %>/js/apps/maintenance/templates/**/*.hbs'
+ ]
clean:
diff --git a/server/sonar-web/src/main/js/apps/maintenance/app.js b/server/sonar-web/src/main/js/apps/maintenance/app.js
new file mode 100644
index 00000000000..cc7b016bef0
--- /dev/null
+++ b/server/sonar-web/src/main/js/apps/maintenance/app.js
@@ -0,0 +1,17 @@
+define([
+ './main-view'
+], function (MainView) {
+
+ var App = new Marionette.Application();
+
+ App.on('start', function (options) {
+ var viewOptions = _.extend(options, {
+ model: new Backbone.Model()
+ });
+ var mainView = new MainView(viewOptions);
+ mainView.render().refresh();
+ });
+
+ return App;
+
+});
diff --git a/server/sonar-web/src/main/js/apps/maintenance/main-view.js b/server/sonar-web/src/main/js/apps/maintenance/main-view.js
new file mode 100644
index 00000000000..ff445f919d7
--- /dev/null
+++ b/server/sonar-web/src/main/js/apps/maintenance/main-view.js
@@ -0,0 +1,46 @@
+define([
+ './templates'
+], function () {
+
+ return Marionette.ItemView.extend({
+ template: Templates['maintenance-main'],
+
+ events: {
+ 'click #start-migration': 'onStartMigrationClick'
+ },
+
+ initialize: function () {
+ this.requestOptions = { type: 'GET', url: baseUrl + '/api/system/status' };
+ setInterval(function () {
+ this.refresh();
+ }.bind(this), 5000);
+ },
+
+ refresh: function () {
+ return Backbone.ajax(this.requestOptions).done(function (r) {
+ if (r.status === 'DB_MIGRATION_RUNNING' && this.options.setup) {
+ // we are at setup page and migration is running
+ // so, let's switch to the migration status WS
+ return this.startMigration();
+ }
+ this.model.set(r);
+ this.render();
+ }.bind(this));
+ },
+
+ onStartMigrationClick: function (e) {
+ e.preventDefault();
+ this.startMigration();
+ },
+
+ startMigration: function () {
+ this.requestOptions = { type: 'POST', url: baseUrl + '/api/system/migrate_db' };
+ return this.refresh();
+ },
+
+ serializeData: function () {
+ return _.extend(this._super(), { setup: this.options.setup });
+ }
+ });
+
+});
diff --git a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-down.hbs b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-down.hbs
new file mode 100644
index 00000000000..6507cbafa2e
--- /dev/null
+++ b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-down.hbs
@@ -0,0 +1,5 @@
+<h1 class="maintenance-title text-danger">SonarQube is down</h1>
+<p class="maintenance-text">Something went wrong. Please contact your system administrator.</p>
+<p class="maintenance-text text-center">
+ <a href="{{link '/'}}">Try Again</a>
+</p>
diff --git a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration-failed.hbs b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration-failed.hbs
new file mode 100644
index 00000000000..2392a0f243e
--- /dev/null
+++ b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration-failed.hbs
@@ -0,0 +1,2 @@
+<h1 class="maintenance-title text-danger">Upgrade Failed</h1>
+<p class="maintenance-text">Database connection cannot be established. Please check database status and JDBC settings.</p>
diff --git a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration-needed.hbs b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration-needed.hbs
new file mode 100644
index 00000000000..ec59b035dc1
--- /dev/null
+++ b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration-needed.hbs
@@ -0,0 +1,8 @@
+<h1 class="maintenance-title">Upgrade Database</h1>
+<p class="maintenance-text">The database upgrade can take several minutes.</p>
+<p class="maintenance-text">It is mandatory to <strong>back up database</strong> before upgrading.</p>
+<p class="maintenance-text"><strong>Copy the directory /extensions</strong> from previous version before upgrading.
+</p>
+<div class="maintenance-spinner">
+ <button id="start-migration">Upgrade</button>
+</div>
diff --git a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration-not-supported.hbs b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration-not-supported.hbs
new file mode 100644
index 00000000000..c139aa32211
--- /dev/null
+++ b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration-not-supported.hbs
@@ -0,0 +1,2 @@
+<h1 class="maintenance-title text-danger">Migration not supported</h1>
+<p>Migration is not supported on embedded databases.</p>
diff --git a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration-running.hbs b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration-running.hbs
new file mode 100644
index 00000000000..52702e27c31
--- /dev/null
+++ b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration-running.hbs
@@ -0,0 +1,11 @@
+<h1 class="maintenance-title">Database Migration</h1>
+{{#if message}}
+ <p class="maintenance-text text-center">{{message}}</p>
+{{/if}}
+{{#if startedAt}}
+ <p class="maintenance-text text-center">
+ Started {{fromNow startedAt}}<br>
+ <small class="text-muted">{{dt startedAt}}</small>
+ </p>
+{{/if}}
+<p class="maintenance-spinner"><i class="spinner"></i></p>
diff --git a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration-succeeded.hbs b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration-succeeded.hbs
new file mode 100644
index 00000000000..8b8c7b8e307
--- /dev/null
+++ b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration-succeeded.hbs
@@ -0,0 +1,9 @@
+<h1 class="maintenance-title text-success">Done</h1>
+<p>Database migration has run and has been successful.</p>
+{{#if startedAt}}
+ <p class="maintenance-text text-center">
+ Started {{fromNow startedAt}}<br>
+ <small class="text-muted">{{dt startedAt}}</small>
+ </p>
+{{/if}}
+<p class="maintenance-spinner"><i class="spinner"></i></p>
diff --git a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration.hbs b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration.hbs
new file mode 100644
index 00000000000..c7957397871
--- /dev/null
+++ b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration.hbs
@@ -0,0 +1,10 @@
+<h1 class="maintenance-title">SonarQube is under maintenance</h1>
+<p class="maintenance-text">Whilst waiting, you might want to check
+ <a href="http://redirect.sonarsource.com/doc/plugin-library.html">new plugins</a> to extend the current functionality.
+</p>
+<p class="maintenance-text">If you are an administrator and have no idea why this message is showing, you should read the
+ <a href="http://redirect.sonarsource.com/doc/upgrading.html">upgrade guide</a>.
+</p>
+{{#eq status 'DB_MIGRATION_RUNNING'}}
+ <p class="maintenance-spinner"><i class="spinner"></i></p>
+{{/eq}}
diff --git a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-no-migration.hbs b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-no-migration.hbs
new file mode 100644
index 00000000000..ee20022fcc4
--- /dev/null
+++ b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-no-migration.hbs
@@ -0,0 +1,4 @@
+<h1 class="maintenance-title">Database is up-to-date</h1>
+<p class="maintenance-text text-center">
+ <a href="{{link '/'}}">Go Home</a>
+</p>
diff --git a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-up.hbs b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-up.hbs
new file mode 100644
index 00000000000..01ca264cb21
--- /dev/null
+++ b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-up.hbs
@@ -0,0 +1,5 @@
+<h1 class="maintenance-title">SonarQube is up</h1>
+<p class="maintenance-text text-center">All systems operational.</p>
+<p class="maintenance-text text-center">
+ <a href="{{link '/'}}">Go Home</a>
+</p>
diff --git a/server/sonar-web/src/main/js/apps/maintenance/templates/maintenance-main.hbs b/server/sonar-web/src/main/js/apps/maintenance/templates/maintenance-main.hbs
new file mode 100644
index 00000000000..668eaee8ba4
--- /dev/null
+++ b/server/sonar-web/src/main/js/apps/maintenance/templates/maintenance-main.hbs
@@ -0,0 +1,23 @@
+{{#unless setup}}
+
+ {{#eq status 'UP'}}{{> '_maintenance-status-up'}}{{/eq}}
+ {{#eq status 'DOWN'}}{{> '_maintenance-status-down'}}{{/eq}}
+ {{#eq status 'DB_MIGRATION_NEEDED'}}{{> '_maintenance-status-migration'}}{{/eq}}
+ {{#eq status 'DB_MIGRATION_RUNNING'}}{{> '_maintenance-status-migration'}}{{/eq}}
+
+{{else}}
+
+ {{#notNull state}}
+ {{#eq state 'NO_MIGRATION'}}{{> '_maintenance-status-no-migration'}}{{/eq}}
+ {{#eq state 'NOT_SUPPORTED'}}{{> '_maintenance-status-migration-not-supported'}}{{/eq}}
+ {{#eq state 'MIGRATION_RUNNING'}}{{> '_maintenance-status-migration-running'}}{{/eq}}
+ {{#eq state 'MIGRATION_SUCCEEDED'}}{{> '_maintenance-status-migration-succeeded'}}{{/eq}}
+ {{#eq state 'MIGRATION_FAILED'}}{{> '_maintenance-status-migration-failed'}}{{/eq}}
+ {{else}}
+ {{#eq status 'UP'}}{{> '_maintenance-status-up'}}{{/eq}}
+ {{#eq status 'DOWN'}}{{> '_maintenance-status-down'}}{{/eq}}
+ {{#eq status 'DB_MIGRATION_NEEDED'}}{{> '_maintenance-status-migration-needed'}}{{/eq}}
+ {{#eq status 'DB_MIGRATION_RUNNING'}}{{> '_maintenance-status-migration-running'}}{{/eq}}
+ {{/notNull}}
+
+{{/unless}}
diff --git a/server/sonar-web/src/main/less/components/page.less b/server/sonar-web/src/main/less/components/page.less
index 2b3faf8c067..47730d7bffb 100644
--- a/server/sonar-web/src/main/less/components/page.less
+++ b/server/sonar-web/src/main/less/components/page.less
@@ -46,7 +46,11 @@
}
.page-simple {
- margin: 50px 180px 0;
+ max-width: 400px;
+ margin: 50px auto 0;
+ padding: 40px;
+ border: 1px solid @barBorderColor;
+ background-color: #fff;
text-align: left;
}
diff --git a/server/sonar-web/src/main/less/init/misc.less b/server/sonar-web/src/main/less/init/misc.less
index d9d5442cf20..b5e41704b74 100644
--- a/server/sonar-web/src/main/less/init/misc.less
+++ b/server/sonar-web/src/main/less/init/misc.less
@@ -48,6 +48,8 @@
.big-spacer-bottom { margin-bottom: 16px; }
.big-spacer-top { margin-top: 16px; }
+.huge-spacer-top { margin-top: 40px; }
+
.little-spacer-left { margin-left: 4px; }
.little-spacer-right { margin-right: 4px; }
.little-spacer-bottom { margin-bottom: 4px; }
diff --git a/server/sonar-web/src/main/less/init/type.less b/server/sonar-web/src/main/less/init/type.less
index 756597cf14a..490dd34e895 100644
--- a/server/sonar-web/src/main/less/init/type.less
+++ b/server/sonar-web/src/main/less/init/type.less
@@ -63,7 +63,7 @@ sub { vertical-align: text-bottom; }
// Emphasising
em { font-style: italic; }
-strong { font-weight: bold; }
+strong { font-weight: 500; }
// Quotes
diff --git a/server/sonar-web/src/main/less/pages.less b/server/sonar-web/src/main/less/pages.less
index c9d1c235da9..79570a5f8d4 100644
--- a/server/sonar-web/src/main/less/pages.less
+++ b/server/sonar-web/src/main/less/pages.less
@@ -24,3 +24,4 @@
@import "pages/issues";
@import "pages/libraries";
@import "pages/quality-gates";
+@import "pages/maintenance";
diff --git a/server/sonar-web/src/main/less/pages/maintenance.less b/server/sonar-web/src/main/less/pages/maintenance.less
new file mode 100644
index 00000000000..bee10c60c8c
--- /dev/null
+++ b/server/sonar-web/src/main/less/pages/maintenance.less
@@ -0,0 +1,22 @@
+@import (reference) "../variables";
+@import (reference) "../init/links";
+
+.maintenance-title {
+ margin-bottom: 40px;
+ line-height: 1.5;
+ font-size: 24px;
+ font-weight: 300;
+ text-align: center;
+}
+
+.maintenance-text {
+ margin-bottom: 16px;
+ line-height: 1.5;
+ font-size: 16px;
+ font-weight: 300;
+}
+
+.maintenance-spinner {
+ margin-top: 40px;
+ text-align: center;
+}
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/layouts/nonav.html.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/layouts/nonav.html.erb
index 2c76816b05c..a2976adc994 100644
--- a/server/sonar-web/src/main/webapp/WEB-INF/app/views/layouts/nonav.html.erb
+++ b/server/sonar-web/src/main/webapp/WEB-INF/app/views/layouts/nonav.html.erb
@@ -6,4 +6,9 @@
</div>
</div>
</div>
+<script>
+ (function ($) {
+ $('html').addClass('dashboard-page');
+ })(window.jQuery);
+</script>
</body></html>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/maintenance/index.html.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/maintenance/index.html.erb
index d325ed11658..fd604b7694f 100644
--- a/server/sonar-web/src/main/webapp/WEB-INF/app/views/maintenance/index.html.erb
+++ b/server/sonar-web/src/main/webapp/WEB-INF/app/views/maintenance/index.html.erb
@@ -1,12 +1,8 @@
-<style>
-#maintenance {
- padding: 10px;
- border: 2px solid #4B9FD5;
- background-color: #CAE3F2;
-}
-</style>
+<div id="maintenance"></div>
+
+<script>
+ require(['apps/maintenance/app'], function (App) {
+ App.start({ el: '#maintenance', setup: false });
+ });
+</script>
-<div id="maintenance">
-<h1>SonarQube is under maintenance. <a href="<%= ApplicationController.root_context -%>/">Please check back later.</a></h1>
-<p>Whilst waiting, you might want to check <a href="http://redirect.sonarsource.com/doc/plugin-library.html">new plugins</a> to extend the current functionality. </p><p>If you are an administrator and have no idea why this message is showing, you should read the <a href="http://redirect.sonarsource.com/doc/upgrading.html">upgrade guide</a>.</p>
-</div>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/db_uptodate.html.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/db_uptodate.html.erb
index 63b3c49006d..cbe4b12434f 100644
--- a/server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/db_uptodate.html.erb
+++ b/server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/db_uptodate.html.erb
@@ -1,10 +1,9 @@
<meta http-equiv='refresh' content='5;url=<%= home_path -%>'>
-
-<div class="notice migration" style="padding:10px">
- <%= image_tag 'accept.png' -%> <b>Database is up-to-date.</b>
- <br/>
- <br/>
+<h1 class="maintenance-title text-success">Database is up-to-date</h1>
+<p class="maintenance-text">
You will be redirected shortly to SonarQube.
- <br/>
- <i>(if this does not happen, you can <a href="<%= home_path -%>">click here to be redirected</a>)</i>
-</div> \ No newline at end of file
+ <br>
+ <small class="text-muted">
+ (if this does not happen, you can <a href="<%= home_path -%>">click here to be redirected</a>)
+ </small>
+</p>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/dbdown.html.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/dbdown.html.erb
index 29aa2c67f1b..1040fb71839 100644
--- a/server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/dbdown.html.erb
+++ b/server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/dbdown.html.erb
@@ -1,6 +1,5 @@
-<div class="alert alert-danger">
- <h3 class="text-danger">Fail to connect to database</h3>
- <p>Database connection cannot be established. Please check database status and JDBC settings.</p>
- <br/>
+<h1 class="maintenance-title text-danger">Fail to connect to database</h1>
+<p class="maintenance-text">Database connection cannot be established. Please check database status and JDBC settings.</p>
+<div class="maintenance-spinner">
<%= button_to "Try again", { :action => "index" }, :method => :get %>
</div>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/failed.html.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/failed.html.erb
index 5c4306fc70d..36062451e19 100644
--- a/server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/failed.html.erb
+++ b/server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/failed.html.erb
@@ -1,7 +1,2 @@
-<div class="error migration" style="padding:10px">
- <%= image_tag 'exclamation.png' -%>
- <b>Impossible to upgrade database</b>
- <br/>
- <br/>
- <%= DatabaseMigrationManager.instance.message -%>
-</div> \ No newline at end of file
+<h1 class="maintenance-title text-danger">Impossible to upgrade database</h1>
+<p class="maintenance-text"><%= DatabaseMigrationManager.instance.message -%></p>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/form.html.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/form.html.erb
index 69a41abb6ac..648083a90b1 100644
--- a/server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/form.html.erb
+++ b/server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/form.html.erb
@@ -1,14 +1,10 @@
<form action="<%= ApplicationController.root_context -%>/setup/setup_database" method="POST">
-<div class="admin migration">
- <h1 class="marginbottom10">Upgrade database</h1>
- <br/>
- <h3>Important</h3>
- <ul>
- <li>The database upgrade can take several minutes.</li>
- <li>It is mandatory to <b>back up database</b> before upgrading.</li>
- <li><b>Copy the directory /extensions</b> from previous version before upgrading.</li>
- </ul>
- <br/>
- <input type="submit" value="Upgrade">
-</div>
+ <h1 class="maintenance-title">Upgrade database</h1>
+ <p class="maintenance-text">The database upgrade can take several minutes.</p>
+ <p class="maintenance-text">It is mandatory to <strong>back up database</strong> before upgrading.</p>
+ <p class="maintenance-text"><strong>Copy the directory /extensions</strong> from previous version before upgrading.
+ </p>
+ <div class="maintenance-spinner">
+ <input type="submit" value="Upgrade">
+ </div>
</form>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/migration_running.html.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/migration_running.html.erb
index 6d4bc3b7746..d10ba7c6513 100644
--- a/server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/migration_running.html.erb
+++ b/server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/migration_running.html.erb
@@ -1,13 +1,6 @@
<meta http-equiv='refresh' content='5;'>
-<%
- start_time = DatabaseMigrationManager.instance.migration_start_time
-%>
-
-<div class="admin migration" style="padding:10px">
- <i class="spinner" style="vertical-align: text-bottom;"></i>
- <b>SonarQube Database is currently upgrading.</b>
- <br/>
- <br/>
- Started <%= distance_of_time_in_words(start_time, Time.now) -%> ago (<%= l start_time -%>)
-</div>
+<% start_time = DatabaseMigrationManager.instance.migration_start_time %>
+<h1 class="maintenance-title">Database is currently upgrading</h1>
+<p class="maintenance-text text-center">Started <%= distance_of_time_in_words(start_time, Time.now) -%> ago (<%= l start_time -%>)</p>
+<div class="maintenance-spinner"><i class="spinner"></i></div>