diff --git a/ui/src/kapacitor/apis/index.js b/ui/src/kapacitor/apis/index.js index 221e769f1..9cc5d4235 100644 --- a/ui/src/kapacitor/apis/index.js +++ b/ui/src/kapacitor/apis/index.js @@ -1,111 +1,5 @@ -import AJAX from 'utils/ajax' -import {cloneDeep, get} from 'lodash' - -const outRule = rule => { - // fit into range - const {value, rangeValue, operator} = rule.values - - if (operator === 'inside range' || operator === 'outside range') { - rule.values.value = Math.min(value, rangeValue).toString() - rule.values.rangeValue = Math.max(value, rangeValue).toString() - } - // remap serviceNow from '_type' back to 'type', see getRule/getRules - if (Array.isArray(get(rule, ['alertNodes', 'serviceNow']))) { - rule = cloneDeep(rule) - rule.alertNodes.serviceNow = rule.alertNodes.serviceNow.map(val => ({ - ...val, - type: val._type, - _type: undefined, - })) - } - // remap zenoss from '_type' back to 'type', see getRule/getRules - if (Array.isArray(get(rule, ['alertNodes', 'zenoss']))) { - rule = cloneDeep(rule) - rule.alertNodes.zenoss = rule.alertNodes.zenoss.map(val => ({ - ...val, - type: val._type, - _type: undefined, - })) - } - - return rule -} - -export const createRule = (kapacitor, rule) => { - return AJAX({ - method: 'POST', - url: kapacitor.links.rules, - data: outRule(rule), - }) -} - -function addUnderscoreType(alertArray) { - // rename 'type' to '_type' property, because `type` conflicts with existing UI property - if (Array.isArray(alertArray)) { - alertArray.forEach(x => { - if (x.type !== undefined) { - x._type = x.type - } - }) - } -} - -export const getRules = kapacitor => { - return AJAX({ - method: 'GET', - url: kapacitor.links.rules, - }).then(response => { - const rules = get(response, ['data', 'rules']) - if (Array.isArray(rules)) { - rules.forEach(rule => { - addUnderscoreType(rule.alertNodes.serviceNow) - addUnderscoreType(rule.alertNodes.zenoss) - }) - } - return response - }) -} - -export const getRule = async (kapacitor, ruleID) => { - try { - const response = await AJAX({ - method: 'GET', - url: `${kapacitor.links.rules}/${ruleID}`, - }) - const alertNodes = get(response, ['data', 'alertNodes']) - if (alertNodes) { - addUnderscoreType(alertNodes.serviceNow) - addUnderscoreType(alertNodes.zenoss) - } - return response - } catch (error) { - console.error(error) - throw error - } -} - -export const editRule = rule => { - return AJAX({ - method: 'PUT', - url: rule.links.self, - data: outRule(rule), - }) -} - -export const deleteRule = rule => { - return AJAX({ - method: 'DELETE', - url: rule.links.self, - }) -} - -export const updateRuleStatus = (rule, status) => { - return AJAX({ - method: 'PATCH', - url: rule.links.self, - data: {status}, - }) -} +import AJAX from 'src/utils/ajax' +export * from './rules' export const createTask = async (kapacitor, {id, dbrps, tickscript, type}) => { try { @@ -146,36 +40,3 @@ export const updateTask = async ( throw error } } - -const kapacitorLogHeaders = { - 'Content-Type': 'application/json', - Accept: 'application/json', -} - -export const getLogStreamByRuleID = (kapacitor, ruleID, signal) => { - const url = `${kapacitor.links.proxy}?path=/kapacitor/v1preview/logs?task=${ruleID}` - const basepath = window.basepath || '' - - return fetch(`${basepath}${url}`, { - method: 'GET', - headers: kapacitorLogHeaders, - credentials: 'include', - signal, - }) -} - -export const pingKapacitorVersion = async kapacitor => { - try { - const result = await AJAX({ - method: 'GET', - url: `${kapacitor.links.proxy}?path=/kapacitor/v1preview/ping`, - headers: kapacitorLogHeaders, - credentials: 'include', - }) - const kapVersion = result.headers['x-kapacitor-version'] - return kapVersion === '' ? null : kapVersion - } catch (error) { - console.error(error) - throw error - } -} diff --git a/ui/src/kapacitor/apis/rules.ts b/ui/src/kapacitor/apis/rules.ts new file mode 100644 index 000000000..083041e3f --- /dev/null +++ b/ui/src/kapacitor/apis/rules.ts @@ -0,0 +1,158 @@ +import AJAX from 'src/utils/ajax' +import {cloneDeep, get} from 'lodash' +import {AlertRule, Kapacitor} from 'src/types' + +function outRule(rule: AlertRule): AlertRule { + // fit into range + const {value, rangeValue, operator} = rule.values + + if (operator === 'inside range' || operator === 'outside range') { + rule.values.value = Math.min(Number(value), Number(rangeValue)).toString() + rule.values.rangeValue = Math.max( + Number(value), + Number(rangeValue) + ).toString() + } + // remap serviceNow from '_type' back to 'type', see getRule/getRules + if (Array.isArray(get(rule, ['alertNodes', 'serviceNow']))) { + rule = cloneDeep(rule) + rule.alertNodes.serviceNow = rule.alertNodes.serviceNow.map(val => ({ + ...val, + type: val._type, + _type: undefined, + })) + } + // remap zenoss from '_type' back to 'type', see getRule/getRules + if (Array.isArray(get(rule, ['alertNodes', 'zenoss']))) { + rule = cloneDeep(rule) + rule.alertNodes.zenoss = rule.alertNodes.zenoss.map(val => ({ + ...val, + type: val._type, + _type: undefined, + })) + } + + return rule +} + +export async function createRule( + kapacitor: Kapacitor, + rule: AlertRule +): Promise { + await AJAX({ + method: 'POST', + url: kapacitor.links.rules, + data: outRule(rule), + }) +} + +function addUnderscoreType(alertArray: any[]): void { + // rename 'type' to '_type' property, because `type` conflicts with existing UI property + if (Array.isArray(alertArray)) { + alertArray.forEach(x => { + if (x.type !== undefined) { + x._type = x.type + } + }) + } +} + +export async function getRules( + kapacitor: Kapacitor, + opts?: {params?: Record; signal?: AbortSignal} +): Promise<{data: AlertRule[]}> { + const response = await AJAX({ + method: 'GET', + url: kapacitor.links.rules, + ...opts, + }) + const rules = get(response, ['data', 'rules']) + if (Array.isArray(rules)) { + rules.forEach(rule => { + addUnderscoreType(rule.alertNodes.serviceNow) + addUnderscoreType(rule.alertNodes.zenoss) + }) + } + return response +} + +export async function getRule( + kapacitor: Kapacitor, + ruleID: string +): Promise<{data: AlertRule}> { + try { + const response = await AJAX({ + method: 'GET', + url: `${kapacitor.links.rules}/${ruleID}`, + }) + const alertNodes = get(response, ['data', 'alertNodes']) + if (alertNodes) { + addUnderscoreType(alertNodes.serviceNow) + addUnderscoreType(alertNodes.zenoss) + } + return response + } catch (error) { + console.error(error) + throw error + } +} + +export async function editRule(rule: AlertRule): Promise { + await AJAX({ + method: 'PUT', + url: rule.links.self, + data: outRule(rule), + }) +} + +export async function deleteRule(rule: AlertRule): Promise { + await AJAX({ + method: 'DELETE', + url: rule.links.self, + }) +} + +export async function updateRuleStatus( + rule: AlertRule, + status: string +): Promise { + await AJAX({ + method: 'PATCH', + url: rule.links.self, + data: {status}, + }) +} + +const kapacitorLogHeaders = { + 'Content-Type': 'application/json', + Accept: 'application/json', +} + +export const getLogStreamByRuleID = (kapacitor, ruleID, signal) => { + const url = `${kapacitor.links.proxy}?path=/kapacitor/v1preview/logs?task=${ruleID}` + const basepath = window.basepath || '' + + return fetch(`${basepath}${url}`, { + method: 'GET', + headers: kapacitorLogHeaders, + credentials: 'include', + signal, + }) +} + +export async function pingKapacitorVersion( + kapacitor: Kapacitor +): Promise { + try { + const result = await AJAX({ + method: 'GET', + url: `${kapacitor.links.proxy}?path=/kapacitor/v1preview/ping`, + headers: kapacitorLogHeaders, + }) + const kapVersion = result.headers['x-kapacitor-version'] + return kapVersion === '' ? null : kapVersion + } catch (error) { + console.error(error) + throw error + } +}