Commit 1857a4b0 authored by zhu-mingye's avatar zhu-mingye

Add alarm information sending test

parent 76e3ad81
package com.dlink.controller; package com.dlink.controller;
import com.dlink.alert.AlertPool; import com.dlink.alert.AlertPool;
import com.dlink.alert.AlertResult;
import com.dlink.common.result.ProTableResult; import com.dlink.common.result.ProTableResult;
import com.dlink.common.result.Result; import com.dlink.common.result.Result;
import com.dlink.model.AlertInstance; import com.dlink.model.AlertInstance;
...@@ -8,13 +9,7 @@ import com.dlink.service.AlertInstanceService; ...@@ -8,13 +9,7 @@ import com.dlink.service.AlertInstanceService;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -92,4 +87,20 @@ public class AlertInstanceController { ...@@ -92,4 +87,20 @@ public class AlertInstanceController {
public Result listEnabledAll() { public Result listEnabledAll() {
return Result.succeed(alertInstanceService.listEnabledAll(), "获取成功"); return Result.succeed(alertInstanceService.listEnabledAll(), "获取成功");
} }
/**
* 发送告警实例的测试信息
*/
@PostMapping("/sendTest")
public Result sendTest(@RequestBody AlertInstance alertInstance) throws Exception {
AlertResult alertResult = alertInstanceService.getAlerTesttResult(alertInstance);
if (alertResult.getSuccess()) {
return Result.succeed("发送成功");
}else {
return Result.failed("发送失败");
}
}
} }
package com.dlink.service; package com.dlink.service;
import com.dlink.alert.AlertResult;
import com.dlink.db.service.ISuperService; import com.dlink.db.service.ISuperService;
import com.dlink.model.AlertInstance; import com.dlink.model.AlertInstance;
...@@ -14,4 +15,6 @@ import java.util.List; ...@@ -14,4 +15,6 @@ import java.util.List;
public interface AlertInstanceService extends ISuperService<AlertInstance> { public interface AlertInstanceService extends ISuperService<AlertInstance> {
List<AlertInstance> listEnabledAll(); List<AlertInstance> listEnabledAll();
AlertResult getAlerTesttResult(AlertInstance alertInstance);
} }
package com.dlink.service.impl; package com.dlink.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dlink.alert.*;
import com.dlink.db.service.impl.SuperServiceImpl; import com.dlink.db.service.impl.SuperServiceImpl;
import com.dlink.mapper.AlertInstanceMapper; import com.dlink.mapper.AlertInstanceMapper;
import com.dlink.model.AlertInstance; import com.dlink.model.AlertInstance;
import com.dlink.service.AlertInstanceService; import com.dlink.service.AlertInstanceService;
import com.dlink.utils.JSONUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List; import java.util.List;
import java.util.UUID;
/** /**
* AlertInstanceServiceImpl * AlertInstanceServiceImpl
...@@ -21,4 +26,29 @@ public class AlertInstanceServiceImpl extends SuperServiceImpl<AlertInstanceMapp ...@@ -21,4 +26,29 @@ public class AlertInstanceServiceImpl extends SuperServiceImpl<AlertInstanceMapp
public List<AlertInstance> listEnabledAll() { public List<AlertInstance> listEnabledAll() {
return list(new QueryWrapper<AlertInstance>().eq("enabled", 1)); return list(new QueryWrapper<AlertInstance>().eq("enabled", 1));
} }
@Override
public AlertResult getAlerTesttResult(AlertInstance alertInstance) {
AlertConfig alertConfig =null;
Alert alert = null;
if (!AlertPool.exist(alertInstance.getName())) {
alertConfig = AlertConfig.build(alertInstance.getName(), alertInstance.getType(), JSONUtil.toMap(alertInstance.getParams()));
alert = Alert.build(alertConfig);
AlertPool.push(alertInstance.getName(), alert);
}else {
alert = AlertPool.get(alertInstance.getName());
}
String currentDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());
String testSendMsg = "[{\"type\":\"Flink 实时监控\"," +
"\"time\":\""+currentDateTime+"\"," +
"\"id\":\""+ UUID.randomUUID() +"\"," +
"\"name\":\"此信息仅用于测试告警信息是否发送正常 ! 请忽略此信息!\"," +
"\"status\":\"Test\"," +
"\"content\" :\""+ UUID.randomUUID() +"\"}]";
List<AlertMsg> lists = JSONUtil.toList(testSendMsg, AlertMsg.class);
String title = "任务【测试任务】:" + alertInstance.getType() + " 报警 !";
String content = JSONUtil.toJsonString(lists);
AlertResult alertResult = alert.send(title, content);
return alertResult;
}
} }
...@@ -7,7 +7,7 @@ import {ALERT_CONFIG_LIST, ALERT_TYPE, AlertConfig} from "@/pages/AlertInstance/ ...@@ -7,7 +7,7 @@ import {ALERT_CONFIG_LIST, ALERT_TYPE, AlertConfig} from "@/pages/AlertInstance/
import {getAlertIcon} from "@/pages/AlertInstance/icon"; import {getAlertIcon} from "@/pages/AlertInstance/icon";
import {AlertStateType} from "@/pages/AlertInstance/model"; import {AlertStateType} from "@/pages/AlertInstance/model";
import DingTalkForm from "@/pages/AlertInstance/components/DingTalkForm"; import DingTalkForm from "@/pages/AlertInstance/components/DingTalkForm";
import {createOrModifyAlertInstance} from "@/pages/AlertInstance/service"; import {createOrModifyAlertInstance, sendTest} from "@/pages/AlertInstance/service";
import WeChatForm from "@/pages/AlertInstance/components/WeChatForm"; import WeChatForm from "@/pages/AlertInstance/components/WeChatForm";
import FeiShuForm from "@/pages/AlertInstance/components/FeiShuForm"; import FeiShuForm from "@/pages/AlertInstance/components/FeiShuForm";
import EmailForm from "@/pages/AlertInstance/components/EmailForm"; import EmailForm from "@/pages/AlertInstance/components/EmailForm";
...@@ -43,6 +43,11 @@ const AlertInstanceChooseForm: React.FC<UpdateFormProps> = (props) => { ...@@ -43,6 +43,11 @@ const AlertInstanceChooseForm: React.FC<UpdateFormProps> = (props) => {
} }
}; };
const onTest = async (value:any)=>{
await sendTest(value);
};
return ( return (
<Modal <Modal
width={800} width={800}
...@@ -88,6 +93,9 @@ const AlertInstanceChooseForm: React.FC<UpdateFormProps> = (props) => { ...@@ -88,6 +93,9 @@ const AlertInstanceChooseForm: React.FC<UpdateFormProps> = (props) => {
onSubmit={(value) => { onSubmit={(value) => {
onSubmit(value); onSubmit(value);
}} }}
onTest={(value) => {
onTest(value);
}}
/>:undefined />:undefined
} }
{(values?.type == ALERT_TYPE.WECHAT || alertType == ALERT_TYPE.WECHAT)? {(values?.type == ALERT_TYPE.WECHAT || alertType == ALERT_TYPE.WECHAT)?
...@@ -101,6 +109,9 @@ const AlertInstanceChooseForm: React.FC<UpdateFormProps> = (props) => { ...@@ -101,6 +109,9 @@ const AlertInstanceChooseForm: React.FC<UpdateFormProps> = (props) => {
onSubmit={(value) => { onSubmit={(value) => {
onSubmit(value); onSubmit(value);
}} }}
onTest={(value) => {
onTest(value);
}}
/>:undefined />:undefined
} }
{(values?.type == ALERT_TYPE.FEISHU || alertType == ALERT_TYPE.FEISHU)? {(values?.type == ALERT_TYPE.FEISHU || alertType == ALERT_TYPE.FEISHU)?
...@@ -114,6 +125,9 @@ const AlertInstanceChooseForm: React.FC<UpdateFormProps> = (props) => { ...@@ -114,6 +125,9 @@ const AlertInstanceChooseForm: React.FC<UpdateFormProps> = (props) => {
onSubmit={(value) => { onSubmit={(value) => {
onSubmit(value); onSubmit(value);
}} }}
onTest={(value) => {
onTest(value);
}}
/>:undefined />:undefined
} }
{(values?.type == ALERT_TYPE.EMAIL || alertType == ALERT_TYPE.EMAIL)? {(values?.type == ALERT_TYPE.EMAIL || alertType == ALERT_TYPE.EMAIL)?
...@@ -127,6 +141,9 @@ const AlertInstanceChooseForm: React.FC<UpdateFormProps> = (props) => { ...@@ -127,6 +141,9 @@ const AlertInstanceChooseForm: React.FC<UpdateFormProps> = (props) => {
onSubmit={(value) => { onSubmit={(value) => {
onSubmit(value); onSubmit(value);
}} }}
onTest={(value) => {
onTest(value);
}}
/>:undefined />:undefined
} }
</Modal> </Modal>
......
...@@ -7,6 +7,7 @@ import {ALERT_TYPE} from "@/pages/AlertInstance/conf"; ...@@ -7,6 +7,7 @@ import {ALERT_TYPE} from "@/pages/AlertInstance/conf";
export type AlertInstanceFormProps = { export type AlertInstanceFormProps = {
onCancel: (flag?: boolean) => void; onCancel: (flag?: boolean) => void;
onSubmit: (values: Partial<AlertInstanceTableListItem>) => void; onSubmit: (values: Partial<AlertInstanceTableListItem>) => void;
onTest: (values: Partial<AlertInstanceTableListItem>) => void;
modalVisible: boolean; modalVisible: boolean;
values: Partial<AlertInstanceTableListItem>; values: Partial<AlertInstanceTableListItem>;
}; };
...@@ -30,6 +31,7 @@ const DingTalkForm: React.FC<AlertInstanceFormProps> = (props) => { ...@@ -30,6 +31,7 @@ const DingTalkForm: React.FC<AlertInstanceFormProps> = (props) => {
const { const {
onSubmit: handleSubmit, onSubmit: handleSubmit,
onCancel: handleModalVisible, onCancel: handleModalVisible,
onTest: handleTest,
modalVisible, modalVisible,
} = props; } = props;
...@@ -37,6 +39,12 @@ const DingTalkForm: React.FC<AlertInstanceFormProps> = (props) => { ...@@ -37,6 +39,12 @@ const DingTalkForm: React.FC<AlertInstanceFormProps> = (props) => {
setFormVals({...formVals,...change}); setFormVals({...formVals,...change});
}; };
const sendTestForm = async () => {
const fieldsValue = await form.validateFields();
setFormVals(buildJSONData(formVals,fieldsValue));
handleTest({...formVals, ...fieldsValue});
};
const submitForm = async () => { const submitForm = async () => {
const fieldsValue = await form.validateFields(); const fieldsValue = await form.validateFields();
setFormVals(buildJSONData(formVals,fieldsValue)); setFormVals(buildJSONData(formVals,fieldsValue));
...@@ -135,6 +143,7 @@ const DingTalkForm: React.FC<AlertInstanceFormProps> = (props) => { ...@@ -135,6 +143,7 @@ const DingTalkForm: React.FC<AlertInstanceFormProps> = (props) => {
return ( return (
<> <>
<Button onClick={() => handleModalVisible(false)}>取消</Button> <Button onClick={() => handleModalVisible(false)}>取消</Button>
<Button type="primary" danger htmlType="button" onClick={sendTestForm}>测试</Button>
<Button type="primary" onClick={() => submitForm()}> <Button type="primary" onClick={() => submitForm()}>
完成 完成
</Button> </Button>
......
...@@ -7,6 +7,7 @@ import {ALERT_TYPE} from "@/pages/AlertInstance/conf"; ...@@ -7,6 +7,7 @@ import {ALERT_TYPE} from "@/pages/AlertInstance/conf";
export type AlertInstanceFormProps = { export type AlertInstanceFormProps = {
onCancel: (flag?: boolean) => void; onCancel: (flag?: boolean) => void;
onSubmit: (values: Partial<AlertInstanceTableListItem>) => void; onSubmit: (values: Partial<AlertInstanceTableListItem>) => void;
onTest: (values: Partial<AlertInstanceTableListItem>) => void;
modalVisible: boolean; modalVisible: boolean;
values: Partial<AlertInstanceTableListItem>; values: Partial<AlertInstanceTableListItem>;
}; };
...@@ -30,6 +31,7 @@ const FeiShuForm: React.FC<AlertInstanceFormProps> = (props) => { ...@@ -30,6 +31,7 @@ const FeiShuForm: React.FC<AlertInstanceFormProps> = (props) => {
const { const {
onSubmit: handleSubmit, onSubmit: handleSubmit,
onCancel: handleModalVisible, onCancel: handleModalVisible,
onTest: handleTest,
modalVisible, modalVisible,
} = props; } = props;
...@@ -37,6 +39,12 @@ const FeiShuForm: React.FC<AlertInstanceFormProps> = (props) => { ...@@ -37,6 +39,12 @@ const FeiShuForm: React.FC<AlertInstanceFormProps> = (props) => {
setFormVals({...formVals,...change}); setFormVals({...formVals,...change});
}; };
const sendTestForm = async () => {
const fieldsValue = await form.validateFields();
setFormVals({...formVals, ...fieldsValue});
handleTest({...formVals, ...fieldsValue});
};
const submitForm = async () => { const submitForm = async () => {
const fieldsValue = await form.validateFields(); const fieldsValue = await form.validateFields();
setFormVals(buildJSONData(formVals,fieldsValue)); setFormVals(buildJSONData(formVals,fieldsValue));
...@@ -173,6 +181,7 @@ const FeiShuForm: React.FC<AlertInstanceFormProps> = (props) => { ...@@ -173,6 +181,7 @@ const FeiShuForm: React.FC<AlertInstanceFormProps> = (props) => {
return ( return (
<> <>
<Button onClick={() => handleModalVisible(false)}>取消</Button> <Button onClick={() => handleModalVisible(false)}>取消</Button>
<Button type="primary" danger htmlType="button" onClick={sendTestForm}>测试</Button>
<Button type="primary" onClick={() => submitForm()}> <Button type="primary" onClick={() => submitForm()}>
完成 完成
</Button> </Button>
......
...@@ -7,6 +7,7 @@ import {ALERT_TYPE} from "@/pages/AlertInstance/conf"; ...@@ -7,6 +7,7 @@ import {ALERT_TYPE} from "@/pages/AlertInstance/conf";
export type AlertInstanceFormProps = { export type AlertInstanceFormProps = {
onCancel: (flag?: boolean) => void; onCancel: (flag?: boolean) => void;
onSubmit: (values: Partial<AlertInstanceTableListItem>) => void; onSubmit: (values: Partial<AlertInstanceTableListItem>) => void;
onTest: (values: Partial<AlertInstanceTableListItem>) => void;
modalVisible: boolean; modalVisible: boolean;
values: Partial<AlertInstanceTableListItem>; values: Partial<AlertInstanceTableListItem>;
}; };
...@@ -29,6 +30,7 @@ const FeiShuForm: React.FC<AlertInstanceFormProps> = (props) => { ...@@ -29,6 +30,7 @@ const FeiShuForm: React.FC<AlertInstanceFormProps> = (props) => {
const { const {
onSubmit: handleSubmit, onSubmit: handleSubmit,
onTest: handleTest,
onCancel: handleModalVisible, onCancel: handleModalVisible,
modalVisible, modalVisible,
} = props; } = props;
...@@ -43,6 +45,12 @@ const FeiShuForm: React.FC<AlertInstanceFormProps> = (props) => { ...@@ -43,6 +45,12 @@ const FeiShuForm: React.FC<AlertInstanceFormProps> = (props) => {
handleSubmit(buildJSONData(formVals,fieldsValue)); handleSubmit(buildJSONData(formVals,fieldsValue));
}; };
const sendTestForm = async () => {
const fieldsValue = await form.getFieldsValue();
setFormVals({...formVals, ...fieldsValue});
handleTest({...formVals, ...fieldsValue});
};
const renderContent = (vals) => { const renderContent = (vals) => {
return ( return (
<> <>
...@@ -144,6 +152,7 @@ const FeiShuForm: React.FC<AlertInstanceFormProps> = (props) => { ...@@ -144,6 +152,7 @@ const FeiShuForm: React.FC<AlertInstanceFormProps> = (props) => {
return ( return (
<> <>
<Button onClick={() => handleModalVisible(false)}>取消</Button> <Button onClick={() => handleModalVisible(false)}>取消</Button>
<Button type="primary" danger htmlType="button" onClick={sendTestForm}>测试</Button>
<Button type="primary" onClick={() => submitForm()}> <Button type="primary" onClick={() => submitForm()}>
完成 完成
</Button> </Button>
......
...@@ -7,6 +7,7 @@ import {ALERT_TYPE} from "@/pages/AlertInstance/conf"; ...@@ -7,6 +7,7 @@ import {ALERT_TYPE} from "@/pages/AlertInstance/conf";
export type AlertInstanceFormProps = { export type AlertInstanceFormProps = {
onCancel: (flag?: boolean) => void; onCancel: (flag?: boolean) => void;
onSubmit: (values: Partial<AlertInstanceTableListItem>) => void; onSubmit: (values: Partial<AlertInstanceTableListItem>) => void;
onTest: (values: Partial<AlertInstanceTableListItem>) => void;
modalVisible: boolean; modalVisible: boolean;
values: Partial<AlertInstanceTableListItem>; values: Partial<AlertInstanceTableListItem>;
}; };
...@@ -30,12 +31,18 @@ const WeChatForm: React.FC<AlertInstanceFormProps> = (props) => { ...@@ -30,12 +31,18 @@ const WeChatForm: React.FC<AlertInstanceFormProps> = (props) => {
const { const {
onSubmit: handleSubmit, onSubmit: handleSubmit,
onCancel: handleModalVisible, onCancel: handleModalVisible,
onTest: handleTest,
modalVisible, modalVisible,
} = props; } = props;
const onValuesChange = (change: any,all: any)=>{ const onValuesChange = (change: any,all: any)=>{
setFormVals({...formVals,...change}); setFormVals({...formVals,...change});
}; };
const sendTestForm = async () => {
const fieldsValue = await form.validateFields();
setFormVals({...formVals, ...fieldsValue});
handleTest({...formVals, ...fieldsValue});
};
const submitForm = async () => { const submitForm = async () => {
const fieldsValue = await form.validateFields(); const fieldsValue = await form.validateFields();
...@@ -178,6 +185,7 @@ const WeChatForm: React.FC<AlertInstanceFormProps> = (props) => { ...@@ -178,6 +185,7 @@ const WeChatForm: React.FC<AlertInstanceFormProps> = (props) => {
return ( return (
<> <>
<Button onClick={() => handleModalVisible(false)}>取消</Button> <Button onClick={() => handleModalVisible(false)}>取消</Button>
<Button type="primary" danger htmlType="button" onClick={sendTestForm}>测试</Button>
<Button type="primary" onClick={() => submitForm()}> <Button type="primary" onClick={() => submitForm()}>
完成 完成
</Button> </Button>
......
import {handleAddOrUpdate} from "@/components/Common/crud"; import {handleAddOrUpdate, postAll} from "@/components/Common/crud";
import {AlertInstanceTableListItem} from "@/pages/AlertInstance/data"; import {AlertInstanceTableListItem} from "@/pages/AlertInstance/data";
import {message} from "antd";
export async function createOrModifyAlertInstance(alertInstance: AlertInstanceTableListItem) { export async function createOrModifyAlertInstance(alertInstance: AlertInstanceTableListItem) {
return handleAddOrUpdate('/api/alertInstance', alertInstance); return handleAddOrUpdate('/api/alertInstance', alertInstance);
} }
export async function sendTest(alertInstance: AlertInstanceTableListItem) {
const hide = message.loading('正在发送测试告警信息');
try {
const {code,msg} = await postAll('/api/alertInstance/sendTest',alertInstance);
hide();
code==0?message.success(msg):message.error(msg);
} catch (error) {
hide();
message.error('请求失败,请重试');
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment