From 1138dd67705829a6af0d6c610cf3dbe09082187c Mon Sep 17 00:00:00 2001 From: Joram Wilander Date: Wed, 14 Jun 2017 08:56:56 -0400 Subject: PLT-6657 Move system console to use v4 endpoints and redux (#6572) * Move system console to use v4 endpoints and redux * Rename logs dir to get past gitignore * Fix test email * Update brand unit test * Updates per feedback --- .../components/admin_console/server_logs/index.js | 27 +++++ .../components/admin_console/server_logs/logs.jsx | 123 +++++++++++++++++++++ 2 files changed, 150 insertions(+) create mode 100644 webapp/components/admin_console/server_logs/index.js create mode 100644 webapp/components/admin_console/server_logs/logs.jsx (limited to 'webapp/components/admin_console/server_logs') diff --git a/webapp/components/admin_console/server_logs/index.js b/webapp/components/admin_console/server_logs/index.js new file mode 100644 index 000000000..3adacaf1a --- /dev/null +++ b/webapp/components/admin_console/server_logs/index.js @@ -0,0 +1,27 @@ +// Copyright (c) 2017 Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +import {connect} from 'react-redux'; +import {bindActionCreators} from 'redux'; +import {getLogs} from 'mattermost-redux/actions/admin'; + +import * as Selectors from 'mattermost-redux/selectors/entities/admin'; + +import Logs from './logs.jsx'; + +function mapStateToProps(state, ownProps) { + return { + ...ownProps, + logs: Selectors.getLogs(state) + }; +} + +function mapDispatchToProps(dispatch) { + return { + actions: bindActionCreators({ + getLogs + }, dispatch) + }; +} + +export default connect(mapStateToProps, mapDispatchToProps)(Logs); diff --git a/webapp/components/admin_console/server_logs/logs.jsx b/webapp/components/admin_console/server_logs/logs.jsx new file mode 100644 index 000000000..b60a66ce6 --- /dev/null +++ b/webapp/components/admin_console/server_logs/logs.jsx @@ -0,0 +1,123 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +import LoadingScreen from 'components/loading_screen.jsx'; + +import React from 'react'; +import PropTypes from 'prop-types'; +import {FormattedMessage} from 'react-intl'; + +export default class Logs extends React.PureComponent { + static propTypes = { + + /* + * Array of logs to render + */ + logs: PropTypes.arrayOf(PropTypes.string).isRequired, + + actions: PropTypes.shape({ + + /* + * Function to fetch logs + */ + getLogs: PropTypes.func.isRequired + }).isRequired + } + + constructor(props) { + super(props); + + this.state = { + loadingLogs: true + }; + } + + componentDidMount() { + this.refs.logPanel.focus(); + + this.props.actions.getLogs().then( + () => this.setState({loadingLogs: false}) + ); + } + + componentDidUpdate() { + // Scroll Down to get the latest logs + var node = this.refs.logPanel; + node.scrollTop = node.scrollHeight; + node.focus(); + } + + reload = () => { + this.setState({loadingLogs: true}); + this.props.actions.getLogs().then( + () => this.setState({loadingLogs: false}) + ); + } + + render() { + let content = null; + + if (this.state.loadingLogs) { + content = ; + } else { + content = []; + + for (let i = 0; i < this.props.logs.length; i++) { + const style = { + whiteSpace: 'nowrap', + fontFamily: 'monospace' + }; + + if (this.props.logs[i].indexOf('[EROR]') > 0) { + style.color = 'red'; + } + + content.push(
); + content.push( + + {this.props.logs[i]} + + ); + } + } + + return ( +
+

+ +

+
+
+ +
+
+ +
+ {content} +
+
+ ); + } +} -- cgit v1.2.3-1-g7c22