From 3254819e0d0552a490095ebff99555fd2fe05e39 Mon Sep 17 00:00:00 2001 From: Pavel Zavora Date: Fri, 26 Feb 2021 18:47:33 +0100 Subject: [PATCH] feat(kapacitor): map serviceNow rule type to _type to avoid conflict --- ui/src/kapacitor/apis/index.js | 44 ++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/ui/src/kapacitor/apis/index.js b/ui/src/kapacitor/apis/index.js index aac11d240..cc48a2b47 100644 --- a/ui/src/kapacitor/apis/index.js +++ b/ui/src/kapacitor/apis/index.js @@ -1,12 +1,21 @@ import AJAX from 'utils/ajax' +import {cloneDeep, get} from 'lodash' -const rangeRule = rule => { +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 '_type' to 'type' that could not be used + if (Array.isArray(get(rule, ['alertNodes', 'serviceNow']))) { + rule = cloneDeep(rule) + rule.alertNodes.serviceNow = rule.alertNodes.serviceNow.map( + val => ({...val, type: val._type, _type: undefined}) + ) + } return rule } @@ -15,7 +24,7 @@ export const createRule = (kapacitor, rule) => { return AJAX({ method: 'POST', url: kapacitor.links.rules, - data: rangeRule(rule), + data: outRule(rule), }) } @@ -23,15 +32,38 @@ export const getRules = kapacitor => { return AJAX({ method: 'GET', url: kapacitor.links.rules, + }).then(response => { + // remap serviceNow 'type' to '_type', it conflicts with UI property + const rules = get(response, ['data', 'rules']) + if (Array.isArray(rules)) { + rules.forEach(rule => { + if (Array.isArray(rule.alertNodes.serviceNow)) { + rule.alertNodes.serviceNow = rule.alertNodes.serviceNow.map( + val => ({...val, _type: val.type, type: undefined}) + ) + } + }) + } + return response }) } export const getRule = async (kapacitor, ruleID) => { try { - return await AJAX({ + const response = await AJAX({ method: 'GET', url: `${kapacitor.links.rules}/${ruleID}`, }) + // remap serviceNow 'type' to '_type', it conflicts with UI property + const serviceNow = get(response, ['data', 'alertNodes', 'serviceNow']) + if (Array.isArray(serviceNow)) { + serviceNow.forEach(x => { + if (x.type !== undefined) { + x._type = x.type + } + }) + } + return response } catch (error) { console.error(error) throw error @@ -42,7 +74,7 @@ export const editRule = rule => { return AJAX({ method: 'PUT', url: rule.links.self, - data: rangeRule(rule), + data: outRule(rule), }) } @@ -122,9 +154,7 @@ export const getLogStream = kapacitor => { export const getLogStreamByRuleID = (kapacitor, ruleID) => { // axios doesn't support the chunked transfer encoding response kapacitor uses for logs // AJAX adds basepath, but we need to supply it directly to fetch - const url = `${ - kapacitor.links.proxy - }?path=/kapacitor/v1preview/logs?task=${ruleID}` + const url = `${kapacitor.links.proxy}?path=/kapacitor/v1preview/logs?task=${ruleID}` const basepath = window.basepath || '' return fetch(`${basepath}${url}`, {