| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- import { types, getEnv, flow } from 'mobx-state-tree';
- import { AlertRule as AlertRuleModel } from './AlertRule';
- import { setStateFields } from './helpers';
- type AlertRuleType = typeof AlertRuleModel.Type;
- export interface AlertRule extends AlertRuleType {}
- export const AlertListStore = types
- .model('AlertListStore', {
- rules: types.array(AlertRuleModel),
- stateFilter: types.optional(types.string, 'all'),
- search: types.optional(types.string, ''),
- })
- .views(self => ({
- get filteredRules() {
- let regex = new RegExp(self.search, 'i');
- return self.rules.filter(alert => {
- return regex.test(alert.name) || regex.test(alert.stateText) || regex.test(alert.info);
- });
- },
- }))
- .actions(self => ({
- loadRules: flow(function* load(filters) {
- const backendSrv = getEnv(self).backendSrv;
- self.stateFilter = filters.state; // store state filter used in api query
- const apiRules = yield backendSrv.get('/api/alerts', filters);
- self.rules.clear();
- for (let rule of apiRules) {
- setStateFields(rule, rule.state);
- if (rule.state !== 'paused') {
- if (rule.executionError) {
- rule.info = 'Execution Error: ' + rule.executionError;
- }
- if (rule.evalData && rule.evalData.noData) {
- rule.info = 'Query returned no data';
- }
- }
- self.rules.push(AlertRuleModel.create(rule));
- }
- }),
- setSearchQuery(query: string) {
- self.search = query;
- },
- }));
|