AlertRuleList.tsx 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import React from 'react';
  2. import classNames from 'classnames';
  3. import { inject, observer } from 'mobx-react';
  4. import PageHeader from 'app/core/components/PageHeader/PageHeader';
  5. export interface IProps {
  6. store: any;
  7. }
  8. @inject('store')
  9. @observer
  10. export class AlertRuleList extends React.Component<IProps, any> {
  11. constructor(props) {
  12. super(props);
  13. this.props.store.nav.load('alerting', 'alert-list');
  14. this.props.store.alerting.loadRules();
  15. }
  16. render() {
  17. return (
  18. <div>
  19. <PageHeader model={this.props.store.nav} />
  20. <div className="page-container page-body">
  21. <div className="page-action-bar">
  22. <div className="gf-form">
  23. <label className="gf-form-label">Filter by state</label>
  24. <div className="gf-form-select-wrapper width-13">
  25. <select
  26. className="gf-form-input"
  27. ng-model="ctrl.filters.state"
  28. ng-options="f.value as f.text for f in ctrl.stateFilters"
  29. ng-change="ctrl.filtersChanged()"
  30. />
  31. </div>
  32. </div>
  33. <div className="page-action-bar__spacer" />
  34. <a className="btn btn-secondary" ng-click="ctrl.openHowTo()">
  35. <i className="fa fa-info-circle" /> How to add an alert
  36. </a>
  37. </div>
  38. <section className="card-section card-list-layout-list">
  39. <ol className="card-list">{this.props.store.alerting.rules.map(AlertRuleItem)}</ol>
  40. </section>
  41. </div>
  42. </div>
  43. );
  44. }
  45. }
  46. function AlertRuleItem(rule) {
  47. let stateClass = classNames({
  48. fa: true,
  49. 'fa-play': rule.state === 'paused',
  50. 'fa-pause': rule.state !== 'paused',
  51. });
  52. let ruleUrl = `dashboard/${rule.dashboardUri}?panelId=${rule.panelId}&fullscreen&edit&tab=alert`;
  53. return (
  54. <li className="card-item-wrapper">
  55. <div className="card-item card-item--alert">
  56. <div className="card-item-header">
  57. <div className="card-item-type">
  58. <a className="card-item-cog" title="Pausing an alert rule prevents it from executing">
  59. <i className={stateClass} />
  60. </a>
  61. <a className="card-item-cog" href={ruleUrl} title="Edit alert rule">
  62. <i className="icon-gf icon-gf-settings" />
  63. </a>
  64. </div>
  65. </div>
  66. <div className="card-item-body">
  67. <div className="card-item-details">
  68. <div className="card-item-name">
  69. <a href={ruleUrl}>{rule.name}</a>
  70. </div>
  71. <div className="card-item-sub-name">
  72. <span className={`alert-list-item-state ${rule.stateClass}`}>
  73. <i className={rule.stateIcon} /> {rule.stateText}
  74. </span>
  75. <span> for {rule.stateAge}</span>
  76. </div>
  77. {rule.info && <div className="small muted">{rule.info}</div>}
  78. </div>
  79. </div>
  80. </div>
  81. </li>
  82. );
  83. }