diff options
author | Stas Vilchik <vilchiks@gmail.com> | 2016-01-18 09:49:10 +0100 |
---|---|---|
committer | Stas Vilchik <vilchiks@gmail.com> | 2016-01-18 09:49:10 +0100 |
commit | ffe74dc3c60db3cb1ff95de564cf756184964b0c (patch) | |
tree | b7d80d888d281e6b22cdb165b74c0b2eff1649ac | |
parent | 1ddd5a5b912b35d079d0e6b34ef6a08bfe2f004a (diff) | |
download | sonarqube-ffe74dc3c60db3cb1ff95de564cf756184964b0c.tar.gz sonarqube-ffe74dc3c60db3cb1ff95de564cf756184964b0c.zip |
SONAR-1976 ask confirmation before restart server
6 files changed, 92 insertions, 38 deletions
diff --git a/server/sonar-web/src/main/js/apps/system/main.js b/server/sonar-web/src/main/js/apps/system/main.js index 36569d172a1..e12d12f29a8 100644 --- a/server/sonar-web/src/main/js/apps/system/main.js +++ b/server/sonar-web/src/main/js/apps/system/main.js @@ -19,18 +19,15 @@ */ import _ from 'underscore'; import React from 'react'; -import { getSystemInfo, restartAndWait } from '../../api/system'; +import { getSystemInfo } from '../../api/system'; import Section from './section'; import { translate } from '../../helpers/l10n'; +import RestartModal from '../../components/RestartModal'; const SECTIONS_ORDER = ['SonarQube', 'Database', 'Plugins', 'System', 'ElasticSearch', 'JvmProperties', 'ComputeEngine']; export default React.createClass({ - getInitialState() { - return { restarting: false }; - }, - componentDidMount() { getSystemInfo().then(info => this.setState({ sections: this.parseSections(info) })); }, @@ -58,15 +55,12 @@ export default React.createClass({ }, handleServerRestart () { - this.setState({ restarting: true }); - restartAndWait().then(() => { - document.location.reload(); - }); + new RestartModal().render(); }, render() { let sections = null; - if (this.state.sections) { + if (this.state && this.state.sections) { sections = this.state.sections.map(section => { return <Section key={section.name} section={section.name} items={section.items}/>; }); @@ -78,16 +72,12 @@ export default React.createClass({ <div className="page-actions"> <a className="spacer-right" href={window.baseUrl + '/api/system/logs'} id="logs-link">Logs</a> <a href={window.baseUrl + '/api/system/info'} id="download-link">Download</a> - {this.state.restarting ? ( - <i className="spinner"/> - ) : ( - <button - id="restart-server-button" - className="big-spacer-left" - onClick={this.handleServerRestart}> - Restart Server - </button> - )} + <button + id="restart-server-button" + className="big-spacer-left" + onClick={this.handleServerRestart}> + Restart Server + </button> </div> </header> {sections} diff --git a/server/sonar-web/src/main/js/apps/update-center/header-view.js b/server/sonar-web/src/main/js/apps/update-center/header-view.js index ab758cda934..c7d8f6b1a3a 100644 --- a/server/sonar-web/src/main/js/apps/update-center/header-view.js +++ b/server/sonar-web/src/main/js/apps/update-center/header-view.js @@ -20,7 +20,7 @@ import _ from 'underscore'; import Marionette from 'backbone.marionette'; import Template from './templates/update-center-header.hbs'; -import { restartAndWait } from '../../api/system'; +import RestartModal from '../../components/RestartModal'; export default Marionette.ItemView.extend({ template: Template, @@ -34,16 +34,8 @@ export default Marionette.ItemView.extend({ 'click .js-cancel-all': 'cancelAll' }, - initialize () { - this.restarting = false; - }, - restart () { - this.restarting = true; - this.render(); - restartAndWait().then(() => { - document.location.reload(true); - }); + new RestartModal().render(); }, cancelAll () { @@ -53,8 +45,7 @@ export default Marionette.ItemView.extend({ serializeData () { return _.extend(Marionette.ItemView.prototype.serializeData.apply(this, arguments), { installing: this.collection._installedCount, - uninstalling: this.collection._uninstalledCount, - restarting: this.restarting + uninstalling: this.collection._uninstalledCount }); } }); diff --git a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-header.hbs b/server/sonar-web/src/main/js/apps/update-center/templates/update-center-header.hbs index 518c96ce81b..a89a1112d5c 100644 --- a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-header.hbs +++ b/server/sonar-web/src/main/js/apps/update-center/templates/update-center-header.hbs @@ -22,12 +22,8 @@ </p> </div> <div class="pull-right"> - {{#if restarting}} - <i class="spinner"></i> - {{else}} - <button class="js-restart">Restart</button> - <button class="js-cancel-all button-red">Revert</button> - {{/if}} + <button class="js-restart">Restart</button> + <button class="js-cancel-all button-red">Revert</button> </div> </div> {{/any}} diff --git a/server/sonar-web/src/main/js/components/RestartModal/index.js b/server/sonar-web/src/main/js/components/RestartModal/index.js new file mode 100644 index 00000000000..dd449be2e51 --- /dev/null +++ b/server/sonar-web/src/main/js/components/RestartModal/index.js @@ -0,0 +1,48 @@ +/* + * SonarQube :: Web + * Copyright (C) 2009-2016 SonarSource SA + * mailto:contact AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +import ModalForm from '../common/modal-form'; +import Template from './templates/template.hbs'; +import RestartingTemplate from './templates/restarting.hbs'; +import { restartAndWait } from '../../api/system'; + + +const RestartModal = ModalForm.extend({ + template: Template, + restartingTemplate: RestartingTemplate, + + initialize() { + this.restarting = false; + }, + + getTemplate() { + return this.restarting ? this.restartingTemplate : this.template; + }, + + onFormSubmit() { + ModalForm.prototype.onFormSubmit.apply(this, arguments); + this.restarting = true; + this.render(); + restartAndWait().then(() => { + document.location.reload(); + }); + } +}); + +export default RestartModal; diff --git a/server/sonar-web/src/main/js/components/RestartModal/templates/restarting.hbs b/server/sonar-web/src/main/js/components/RestartModal/templates/restarting.hbs new file mode 100644 index 00000000000..bab7b505ab7 --- /dev/null +++ b/server/sonar-web/src/main/js/components/RestartModal/templates/restarting.hbs @@ -0,0 +1,14 @@ +<form id="restart-server-form"> + <div class="modal-head"> + <h2>Restart Server</h2> + </div> + <div class="modal-body"> + <div class="js-modal-messages"></div> + <p class="spacer-top spacer-bottom text-center"> + Server is restarting. This page will be automatically refreshed. + </p> + <p class="big-spacer-top spacer-bottom text-center"> + <i class="spinner"></i> + </p> + </div> +</form> diff --git a/server/sonar-web/src/main/js/components/RestartModal/templates/template.hbs b/server/sonar-web/src/main/js/components/RestartModal/templates/template.hbs new file mode 100644 index 00000000000..6058532191c --- /dev/null +++ b/server/sonar-web/src/main/js/components/RestartModal/templates/template.hbs @@ -0,0 +1,15 @@ +<form id="restart-server-form"> + <div class="modal-head"> + <h2>Restart Server</h2> + </div> + <div class="modal-body"> + <div class="js-modal-messages"></div> + <p class="spacer-top spacer-bottom"> + Are you sure you want to restart the server? + </p> + </div> + <div class="modal-foot"> + <button id="restart-server-submit">Restart</button> + <a href="#" class="js-modal-close" id="restart-server-cancel">Cancel</a> + </div> +</form> |