chore(ui): refactor rules API to typescript file

pull/5871/head
Pavel Zavora 2022-02-22 07:33:14 +01:00
parent 72ee515cfe
commit ee8eb0c629
2 changed files with 160 additions and 141 deletions

View File

@ -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
}
}

View File

@ -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<void> {
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<string, string>; 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<void> {
await AJAX({
method: 'PUT',
url: rule.links.self,
data: outRule(rule),
})
}
export async function deleteRule(rule: AlertRule): Promise<void> {
await AJAX({
method: 'DELETE',
url: rule.links.self,
})
}
export async function updateRuleStatus(
rule: AlertRule,
status: string
): Promise<void> {
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<string | null> {
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
}
}