ServerStats.tsx 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import React, { PureComponent } from 'react';
  2. import { hot } from 'react-hot-loader';
  3. import { connect } from 'react-redux';
  4. import { NavModel, StoreState } from 'app/types';
  5. import { getNavModel } from 'app/core/selectors/navModel';
  6. import { getServerStats, ServerStat } from '../apis';
  7. import PageHeader from 'app/core/components/PageHeader/PageHeader';
  8. interface Props {
  9. navModel: NavModel;
  10. getServerStats: () => Promise<ServerStat[]>;
  11. }
  12. interface State {
  13. stats: ServerStat[];
  14. }
  15. export class ServerStats extends PureComponent<Props, State> {
  16. constructor(props) {
  17. super(props);
  18. this.state = {
  19. stats: [],
  20. };
  21. }
  22. async componentDidMount() {
  23. try {
  24. const stats = await this.props.getServerStats();
  25. this.setState({ stats });
  26. } catch (error) {
  27. console.error(error);
  28. }
  29. }
  30. render() {
  31. const { navModel } = this.props;
  32. const { stats } = this.state;
  33. return (
  34. <div>
  35. <PageHeader model={navModel} />
  36. <div className="page-container page-body">
  37. <table className="filter-table form-inline">
  38. <thead>
  39. <tr>
  40. <th>Name</th>
  41. <th>Value</th>
  42. </tr>
  43. </thead>
  44. <tbody>{stats.map(StatItem)}</tbody>
  45. </table>
  46. </div>
  47. </div>
  48. );
  49. }
  50. }
  51. function StatItem(stat: ServerStat) {
  52. return (
  53. <tr key={stat.name}>
  54. <td>{stat.name}</td>
  55. <td>{stat.value}</td>
  56. </tr>
  57. );
  58. }
  59. const mapStateToProps = (state: StoreState) => ({
  60. navModel: getNavModel(state.navIndex, 'server-stats'),
  61. getServerStats: getServerStats,
  62. });
  63. export default hot(module)(connect(mapStateToProps)(ServerStats));