mirror of
https://github.com/weaveworks/scope.git
synced 2026-03-04 10:41:14 +00:00
* Hacky working prototype. * Operate with time.Duration offset instead of fixed timestamp. * Polished the backend code. * Made a nicer UI component. * Small refactorings of the websockets code. * Fixed the backend tests. * Better websocketing and smoother transitions * Small styling refactoring. * Detecting empty topologies. * Improved error messaging. * Addressed some of David's comments. * Moved nodesDeltaBuffer to a global state to fix the paused status rendering bug. * Small styling changes * Changed the websocket global state variables a bit. * Polishing & refactoring. * More polishing. * Final refactoring. * Addressed a couple of bugs. * Hidden the timeline control behind Cloud context and a feature flag. * Addressed most of @davkal's comments. * Added mixpanel tracking.
66 lines
2.1 KiB
JavaScript
66 lines
2.1 KiB
JavaScript
import React from 'react';
|
|
import { connect } from 'react-redux';
|
|
|
|
import { isWebsocketQueryingCurrentSelector } from '../selectors/time-travel';
|
|
|
|
|
|
class Status extends React.Component {
|
|
render() {
|
|
const { errorUrl, topologiesLoaded, filteredNodeCount, topology,
|
|
websocketClosed, showingCurrentState } = this.props;
|
|
|
|
let title = '';
|
|
let text = 'Trying to reconnect...';
|
|
let showWarningIcon = false;
|
|
let classNames = 'status sidebar-item';
|
|
|
|
if (errorUrl) {
|
|
title = `Cannot reach Scope. Make sure the following URL is reachable: ${errorUrl}`;
|
|
classNames += ' status-loading';
|
|
showWarningIcon = true;
|
|
} else if (!topologiesLoaded) {
|
|
text = 'Connecting to Scope...';
|
|
classNames += ' status-loading';
|
|
showWarningIcon = true;
|
|
} else if (websocketClosed) {
|
|
classNames += ' status-loading';
|
|
showWarningIcon = true;
|
|
} else if (topology) {
|
|
const stats = topology.get('stats');
|
|
text = `${stats.get('node_count') - filteredNodeCount} nodes`;
|
|
if (stats.get('filtered_nodes')) {
|
|
text = `${text} (${stats.get('filtered_nodes') + filteredNodeCount} filtered)`;
|
|
}
|
|
classNames += ' status-stats';
|
|
showWarningIcon = false;
|
|
// TODO: Currently the stats are always pulled for the current state of the system,
|
|
// so they are incorrect when showing the past. This should be addressed somehow.
|
|
if (!showingCurrentState) {
|
|
text = '';
|
|
}
|
|
}
|
|
|
|
return (
|
|
<div className={classNames}>
|
|
{showWarningIcon && <span className="status-icon fa fa-exclamation-circle" />}
|
|
<span className="status-label" title={title}>{text}</span>
|
|
</div>
|
|
);
|
|
}
|
|
}
|
|
|
|
function mapStateToProps(state) {
|
|
return {
|
|
errorUrl: state.get('errorUrl'),
|
|
filteredNodeCount: state.get('nodes').filter(node => node.get('filtered')).size,
|
|
showingCurrentState: isWebsocketQueryingCurrentSelector(state),
|
|
topologiesLoaded: state.get('topologiesLoaded'),
|
|
topology: state.get('currentTopology'),
|
|
websocketClosed: state.get('websocketClosed'),
|
|
};
|
|
}
|
|
|
|
export default connect(
|
|
mapStateToProps
|
|
)(Status);
|