78 lines
1.4 KiB
JavaScript
78 lines
1.4 KiB
JavaScript
|
const Rickshaw = require('rickshaw');
|
||
|
const ReactRedux = require('react-redux');
|
||
|
const React = require('react');
|
||
|
const style = require('./style.css');
|
||
|
|
||
|
const {
|
||
|
connect
|
||
|
} = ReactRedux;
|
||
|
|
||
|
const {
|
||
|
Graph
|
||
|
} = Rickshaw;
|
||
|
|
||
|
let i = 0;
|
||
|
|
||
|
const Component = React.createClass({
|
||
|
ref: function(name) {
|
||
|
this._refs = this._refs || {};
|
||
|
|
||
|
return (el) => {
|
||
|
this._refs[name] = el;
|
||
|
};
|
||
|
},
|
||
|
fromData: function(data) {
|
||
|
return (data || []).map((d, i) => {
|
||
|
return {
|
||
|
y: d.cpu,
|
||
|
x: i
|
||
|
};
|
||
|
});
|
||
|
},
|
||
|
componentDidMount: function() {
|
||
|
this._chart = new Graph({
|
||
|
element: this._refs.component,
|
||
|
renderer: 'bar',
|
||
|
width: 500,
|
||
|
height: 200,
|
||
|
series: [{
|
||
|
data: this.fromData(this.props.data)
|
||
|
}]
|
||
|
});
|
||
|
|
||
|
this._chart.render();
|
||
|
},
|
||
|
componentWillReceiveProps: function(nextProps) {
|
||
|
this._chart.series[0].data = this.fromData(this.props.data);
|
||
|
this._chart.update();
|
||
|
},
|
||
|
render: function() {
|
||
|
const {
|
||
|
data = []
|
||
|
} = this.props;
|
||
|
|
||
|
const className = (data.length && data[data.length - 1].cpu > 50)
|
||
|
? style.red
|
||
|
: style.blue;
|
||
|
|
||
|
return (
|
||
|
<div
|
||
|
className={`${style.rickshaw_graph} ${className}`}
|
||
|
ref={this.ref('component')}
|
||
|
/>
|
||
|
);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
const mapStateToProps = ({
|
||
|
data
|
||
|
}) => {
|
||
|
return {
|
||
|
data
|
||
|
};
|
||
|
};
|
||
|
|
||
|
module.exports = connect(
|
||
|
mapStateToProps
|
||
|
)(Component);
|