diff --git a/efak-api/src/main/java/org/smartloli/kafka/eagle/api/im/queue/AbstractJob.java b/efak-api/src/main/java/org/smartloli/kafka/eagle/api/im/queue/AbstractJob.java new file mode 100644 index 000000000..d18cdde08 --- /dev/null +++ b/efak-api/src/main/java/org/smartloli/kafka/eagle/api/im/queue/AbstractJob.java @@ -0,0 +1,84 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.smartloli.kafka.eagle.api.im.queue; + +import com.alibaba.fastjson.JSONObject; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.smartloli.kafka.eagle.common.protocol.alarm.queue.BaseJobContext; +import org.smartloli.kafka.eagle.common.util.HttpClientUtils; +import org.smartloli.kafka.eagle.common.util.KConstants.AlarmQueue; +import org.smartloli.kafka.eagle.common.util.LoggerUtils; + +import java.text.MessageFormat; +import java.util.Map; + +/** + * alarm AbstractJob + * + * AbstractJob + * author:yinzhidong + * email:yinzhidong@shizhuang-inc.com + * time:2022/6/30 5:51 下午 + */ +public abstract class AbstractJob implements Job { + + public final static String SEND_MSG = "{0} SendMsg Result: {1}"; + + public final static String SEND_ERROR_MSG = "Send alarm message has error by {0}, msg is "; + + /** + * Send alarm information + */ + public void execute(JobExecutionContext jobContext) throws JobExecutionException { + BaseJobContext bjc = (BaseJobContext) jobContext.getJobDetail().getJobDataMap().get(AlarmQueue.JOB_PARAMS); + sendMsg(bjc.getData(), bjc.getUrl()); + } + + + private int sendMsg(String data, String url) { + Class jobClass = this.getClass(); + String simpleClassName = jobClass.getSimpleName(); + + try { + // abstrct method parseSendMessage, that different alarm platforms, different implementations + Map parseSendMessage = this.parseSendMessage(data, url); + String result = HttpClientUtils.doPostJson(url, JSONObject.toJSONString(parseSendMessage)); + + String info = MessageFormat.format(SEND_MSG, simpleClassName, result); + LoggerUtils.print(jobClass).info(info); + } catch (Exception e) { + String errorInfo = MessageFormat.format(SEND_ERROR_MSG, simpleClassName); + LoggerUtils.print(jobClass).error(errorInfo, e); + return 0; + } + return 1; + } + + + /** + * parse alarm information of Map + * + * @param data + * @param url + * @return + */ + protected abstract Map parseSendMessage(String data, String url); + +} diff --git a/efak-api/src/main/java/org/smartloli/kafka/eagle/api/im/queue/DingDingJob.java b/efak-api/src/main/java/org/smartloli/kafka/eagle/api/im/queue/DingDingJob.java index 1d2de9365..a223746cc 100644 --- a/efak-api/src/main/java/org/smartloli/kafka/eagle/api/im/queue/DingDingJob.java +++ b/efak-api/src/main/java/org/smartloli/kafka/eagle/api/im/queue/DingDingJob.java @@ -17,15 +17,7 @@ */ package org.smartloli.kafka.eagle.api.im.queue; -import com.alibaba.fastjson.JSONObject; -import org.quartz.Job; -import org.quartz.JobExecutionContext; -import org.quartz.JobExecutionException; -import org.smartloli.kafka.eagle.common.protocol.alarm.queue.BaseJobContext; -import org.smartloli.kafka.eagle.common.util.HttpClientUtils; -import org.smartloli.kafka.eagle.common.util.KConstants.AlarmQueue; import org.smartloli.kafka.eagle.common.util.KConstants.IM; -import org.smartloli.kafka.eagle.common.util.LoggerUtils; import java.util.HashMap; import java.util.Map; @@ -37,27 +29,8 @@ *

* Created by Oct 27, 2019 */ -public class DingDingJob implements Job { +public class DingDingJob extends AbstractJob { - /** - * Send alarm information by dingding. - */ - public void execute(JobExecutionContext jobContext) throws JobExecutionException { - BaseJobContext bjc = (BaseJobContext) jobContext.getJobDetail().getJobDataMap().get(AlarmQueue.JOB_PARAMS); - sendMsg(bjc.getData(), bjc.getUrl()); - } - - private int sendMsg(String data, String url) { - try { - Map dingDingMarkdownMessage = getDingDingMarkdownMessage(IM.TITLE, data, true); - String result = HttpClientUtils.doPostJson(url, JSONObject.toJSONString(dingDingMarkdownMessage)); - LoggerUtils.print(this.getClass()).info("DingDing SendMsg Result: " + result); - } catch (Exception e) { - LoggerUtils.print(this.getClass()).error("Send alarm message has error by dingding, msg is ", e); - return 0; - } - return 1; - } /** * create markdown format map, do not point @user, option @all. @@ -82,4 +55,9 @@ private static Map getDingDingMarkdownMessage(String title, Stri return map; } + + @Override + protected Map parseSendMessage(String data, String url) { + return getDingDingMarkdownMessage(IM.TITLE, data, true); + } } diff --git a/efak-api/src/main/java/org/smartloli/kafka/eagle/api/im/queue/WeChatJob.java b/efak-api/src/main/java/org/smartloli/kafka/eagle/api/im/queue/WeChatJob.java index 3f19e1710..07ae094dc 100644 --- a/efak-api/src/main/java/org/smartloli/kafka/eagle/api/im/queue/WeChatJob.java +++ b/efak-api/src/main/java/org/smartloli/kafka/eagle/api/im/queue/WeChatJob.java @@ -17,15 +17,7 @@ */ package org.smartloli.kafka.eagle.api.im.queue; -import com.alibaba.fastjson.JSONObject; -import org.quartz.Job; -import org.quartz.JobExecutionContext; -import org.quartz.JobExecutionException; -import org.smartloli.kafka.eagle.common.protocol.alarm.queue.BaseJobContext; -import org.smartloli.kafka.eagle.common.util.HttpClientUtils; -import org.smartloli.kafka.eagle.common.util.KConstants.AlarmQueue; import org.smartloli.kafka.eagle.common.util.KConstants.WeChat; -import org.smartloli.kafka.eagle.common.util.LoggerUtils; import java.util.HashMap; import java.util.Map; @@ -37,27 +29,8 @@ *

* Created by Oct 27, 2019 */ -public class WeChatJob implements Job { +public class WeChatJob extends AbstractJob { - /** - * Send alarm information by wechat. - */ - public void execute(JobExecutionContext jobContext) throws JobExecutionException { - BaseJobContext bjc = (BaseJobContext) jobContext.getJobDetail().getJobDataMap().get(AlarmQueue.JOB_PARAMS); - sendMsg(bjc.getData(), bjc.getUrl()); - } - - private int sendMsg(String data, String url) { - try { - Map wechatMarkdownMessage = getWeChatMarkdownMessage(data); - String result = HttpClientUtils.doPostJson(url, JSONObject.toJSONString(wechatMarkdownMessage)); - LoggerUtils.print(this.getClass()).info("DingDing SendMsg Result: " + result); - } catch (Exception e) { - LoggerUtils.print(this.getClass()).error("Send alarm message has error by wechat, msg is ", e); - return 0; - } - return 1; - } private static Map getWeChatMarkdownMessage(String text) { Map map = new HashMap<>(); @@ -75,4 +48,8 @@ private static Map getWeChatMarkdownMessage(String text) { return map; } + @Override + protected Map parseSendMessage(String data, String url) { + return getWeChatMarkdownMessage(data); + } } diff --git a/efak-api/src/test/java/org/smartloli/kafka/eagle/api/sms/TestIM.java b/efak-api/src/test/java/org/smartloli/kafka/eagle/api/sms/TestIM.java index 37a406988..20b54ce2d 100644 --- a/efak-api/src/test/java/org/smartloli/kafka/eagle/api/sms/TestIM.java +++ b/efak-api/src/test/java/org/smartloli/kafka/eagle/api/sms/TestIM.java @@ -20,8 +20,11 @@ import org.smartloli.kafka.eagle.api.im.IMFactory; import org.smartloli.kafka.eagle.api.im.IMService; import org.smartloli.kafka.eagle.api.im.IMServiceImpl; +import org.smartloli.kafka.eagle.api.im.queue.AbstractJob; import org.smartloli.kafka.eagle.common.protocol.alarm.AlarmMessageInfo; +import java.text.MessageFormat; + /** * TODO * @@ -31,10 +34,12 @@ */ public class TestIM { public static void main(String[] args) { - testAlarmClusterByDingDingMarkDownNewStyle(); -// testAlarmClusterByDingDingMarkDown(); -// testAlarmClusterByWeChatMarkDown(); + // testAlarmClusterByDingDingMarkDownNewStyle(); + // testAlarmClusterByDingDingMarkDown(); + testAlarmClusterByWeChatMarkDown(); + + testAbstractJobParseMessageFormat(); } /** @@ -100,4 +105,16 @@ private static void testAlarmClusterByDingDingMarkDownNewStyle() { im.sendPostMsgByDingDing(alarmMsg.toDingDingMarkDown(), "https://oapi.dingtalk.com/robot/send?access_token=3b7b59d17db0145549b1f65f62921b44bacd1701e635e797da45318a94339060"); } + + private static void testAbstractJobParseMessageFormat() { + String simpleClassName = TestIM.class.getSimpleName(); + String result = "{\"state\": 1, \"msg\": \"ok\"}"; + + String info = MessageFormat.format(AbstractJob.SEND_MSG, simpleClassName, result); + System.out.println(info); + + + info = MessageFormat.format(AbstractJob.SEND_ERROR_MSG, simpleClassName); + System.out.println(info); + } }