chore(ui): refactor rules API to typescript file
parent
72ee515cfe
commit
ee8eb0c629
|
@ -1,111 +1,5 @@
|
||||||
import AJAX from 'utils/ajax'
|
import AJAX from 'src/utils/ajax'
|
||||||
import {cloneDeep, get} from 'lodash'
|
export * from './rules'
|
||||||
|
|
||||||
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},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export const createTask = async (kapacitor, {id, dbrps, tickscript, type}) => {
|
export const createTask = async (kapacitor, {id, dbrps, tickscript, type}) => {
|
||||||
try {
|
try {
|
||||||
|
@ -146,36 +40,3 @@ export const updateTask = async (
|
||||||
throw error
|
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue