AlertingStore.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { types, getEnv, flow } from 'mobx-state-tree';
  2. import moment from 'moment';
  3. import alertDef from 'app/features/alerting/alert_def';
  4. export const AlertRule = types.model('AlertRule', {
  5. id: types.identifier(types.number),
  6. dashboardId: types.number,
  7. panelId: types.number,
  8. name: types.string,
  9. state: types.string,
  10. stateText: types.string,
  11. stateIcon: types.string,
  12. stateClass: types.string,
  13. stateAge: types.string,
  14. info: types.string,
  15. dashboardUri: types.string,
  16. });
  17. export const AlertingStore = types
  18. .model('AlertingStore', {
  19. rules: types.array(AlertRule),
  20. })
  21. .actions(self => ({
  22. loadRules: flow(function* load() {
  23. let backendSrv = getEnv(self).backendSrv;
  24. let rules = yield backendSrv.get('/api/alerts');
  25. self.rules.clear();
  26. for (let rule of rules) {
  27. let stateModel = alertDef.getStateDisplayModel(rule.state);
  28. rule.stateText = stateModel.text;
  29. rule.stateIcon = stateModel.iconClass;
  30. rule.stateClass = stateModel.stateClass;
  31. rule.stateAge = moment(rule.newStateDate)
  32. .fromNow()
  33. .replace(' ago', '');
  34. if (rule.executionError) {
  35. rule.info = 'Execution Error: ' + rule.executionError;
  36. }
  37. if (rule.evalData && rule.evalData.noData) {
  38. rule.info = 'Query returned no data';
  39. }
  40. self.rules.push(AlertRule.create(rule));
  41. }
  42. }),
  43. }));