From: Stas Vilchik Date: Fri, 16 Oct 2015 16:41:43 +0000 (+0200) Subject: SONAR-6928 Rewrite the System Info page X-Git-Tag: 5.3-RC1~483 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=be6bb0b97dc41ca7e21238a34abcd17e7facd480;p=sonarqube.git SONAR-6928 Rewrite the System Info page --- diff --git a/server/sonar-web/src/main/js/api/system.js b/server/sonar-web/src/main/js/api/system.js index 59ef364d9ee..226f8724ef8 100644 --- a/server/sonar-web/src/main/js/api/system.js +++ b/server/sonar-web/src/main/js/api/system.js @@ -1,6 +1,13 @@ +import { getJSON } from '../helpers/request.js'; import $ from 'jquery'; +// TODO migrate to fetch() export function setLogLevel (level) { let url = baseUrl + '/api/system/change_log_level'; return $.post(url, { level }); } + +export function getSystemInfo () { + let url = baseUrl + '/api/system/info'; + return getJSON(url); +} diff --git a/server/sonar-web/src/main/js/apps/system/app.js b/server/sonar-web/src/main/js/apps/system/app.js index 391c313d9ec..b4b9a61c4a6 100644 --- a/server/sonar-web/src/main/js/apps/system/app.js +++ b/server/sonar-web/src/main/js/apps/system/app.js @@ -1,57 +1,9 @@ -import $ from 'jquery'; -import {setLogLevel} from '../../api/system'; +import React from 'react'; +import Main from './main'; -const LOG_LEVELS = ['INFO', 'DEBUG', 'TRACE']; - -window.sonarqube.appStarted.then(() => { - let cell = $('#sonarqube-logs-level').find('td:last-child'); - if (cell.length) { - let currentValue = cell.text().trim(); - cell.empty(); - - let select = $('{options}; + } +}); diff --git a/server/sonar-web/src/main/js/apps/system/item-object.js b/server/sonar-web/src/main/js/apps/system/item-object.js new file mode 100644 index 00000000000..15583def4bb --- /dev/null +++ b/server/sonar-web/src/main/js/apps/system/item-object.js @@ -0,0 +1,14 @@ +import React from 'react'; +import ItemValue from './item-value'; + +export default React.createClass({ + render() { + let rows = Object.keys(this.props.value).map(key => { + return + {key} + + ; + }); + return {rows}
; + } +}); diff --git a/server/sonar-web/src/main/js/apps/system/item-value.js b/server/sonar-web/src/main/js/apps/system/item-value.js new file mode 100644 index 00000000000..a4d2da93154 --- /dev/null +++ b/server/sonar-web/src/main/js/apps/system/item-value.js @@ -0,0 +1,26 @@ +import React from 'react'; +import ItemBoolean from './item-boolean'; +import ItemObject from './item-object'; +import ItemLogLevel from './item-log-level'; + +export default React.createClass({ + render() { + if (this.props.name === 'Logs Level') { + return ; + } + + let rawValue = this.props.value, + formattedValue; + switch (typeof this.props.value) { + case 'boolean': + formattedValue = ; + break; + case 'object': + formattedValue = ; + break; + default: + formattedValue = {rawValue}; + } + return formattedValue; + } +}); diff --git a/server/sonar-web/src/main/js/apps/system/main.js b/server/sonar-web/src/main/js/apps/system/main.js new file mode 100644 index 00000000000..fe69d83a6c0 --- /dev/null +++ b/server/sonar-web/src/main/js/apps/system/main.js @@ -0,0 +1,55 @@ +import _ from 'underscore'; +import React from 'react'; +import { getSystemInfo } from '../../api/system'; +import Section from './section'; + +const SECTIONS_ORDER = ['SonarQube', 'Database', 'Plugins', 'System', 'ElasticSearch', 'JvmProperties', + 'ComputeEngineQueue']; + +export default React.createClass({ + componentDidMount() { + getSystemInfo().then(info => this.setState({ sections: this.parseSections(info) })); + }, + + parseSections (data) { + let sections = Object.keys(data).map(section => { + return { name: section, items: this.parseItems(data[section]) }; + }); + return this.orderSections(sections); + }, + + orderSections (sections) { + return _.sortBy(sections, section => SECTIONS_ORDER.indexOf(section.name)); + }, + + parseItems (data) { + let items = Object.keys(data).map(item => { + return { name: item, value: data[item] }; + }); + return this.orderItems(items); + }, + + orderItems (items) { + return _.sortBy(items, 'name'); + }, + + render() { + let sections = null; + if (this.state && this.state.sections) { + sections = this.state.sections.map(section => { + return
; + }); + } + + return
+
+

{window.t('system_info.page')}

+
+ Logs + Download +
+
+ {sections} +
; + } +}); diff --git a/server/sonar-web/src/main/js/apps/system/section.js b/server/sonar-web/src/main/js/apps/system/section.js new file mode 100644 index 00000000000..63b05a45520 --- /dev/null +++ b/server/sonar-web/src/main/js/apps/system/section.js @@ -0,0 +1,22 @@ +import React from 'react'; +import ItemValue from './item-value'; + +export default React.createClass({ + render() { + let items = this.props.items.map(item => { + return + +
{item.name}
+ + + ; + }); + + return
+

{this.props.section}

+ + {items} +
+
; + } +}); diff --git a/server/sonar-web/src/main/js/main/nav/settings/settings-nav.js b/server/sonar-web/src/main/js/main/nav/settings/settings-nav.js index 13fae339cda..5f186c494b0 100644 --- a/server/sonar-web/src/main/js/main/nav/settings/settings-nav.js +++ b/server/sonar-web/src/main/js/main/nav/settings/settings-nav.js @@ -57,7 +57,8 @@ export default React.createClass({
    {this.renderLink('/updatecenter', window.t('update_center.page'))} - {this.renderLink('/system', window.t('system_info.page'))} + {this.renderLink('/system/index', window.t('system_info.page'))} + {this.renderNewLink('/system/new', window.t('system_info.page'))}
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/system_controller.rb b/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/system_controller.rb index 929d1a6fcc9..0234fe68808 100644 --- a/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/system_controller.rb +++ b/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/system_controller.rb @@ -32,4 +32,8 @@ class SystemController < ApplicationController ] end + def new + + end + end diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/system/index.html.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/system/index.html.erb index f80abacd882..51e1c98c663 100644 --- a/server/sonar-web/src/main/webapp/WEB-INF/app/views/system/index.html.erb +++ b/server/sonar-web/src/main/webapp/WEB-INF/app/views/system/index.html.erb @@ -14,9 +14,3 @@ <% end %> - - -<% content_for :extra_script do %> - -<% end %> - diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/system/new.html.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/system/new.html.erb new file mode 100644 index 00000000000..8e9f0861c90 --- /dev/null +++ b/server/sonar-web/src/main/webapp/WEB-INF/app/views/system/new.html.erb @@ -0,0 +1,4 @@ +<% content_for :extra_script do %> + +<% end %> +