From 11ac0edbbdb028c6f6bff204084fb20ee056101d Mon Sep 17 00:00:00 2001 From: zhangxin10 Date: Mon, 14 Dec 2015 15:03:46 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E8=A7=A3=E5=86=B3=E5=91=8A=E8=AD=A6?= =?UTF-8?q?=E7=9A=84=E9=93=BE=E6=8E=A5=E5=86=99=E6=AD=BB=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=202.=20=E8=A7=A3=E5=86=B3=E8=8E=B7=E5=8F=96=E5=91=8A?= =?UTF-8?q?=E8=AD=A6=E4=BF=A1=E6=81=AF=E7=9A=84=E6=97=B6=E9=97=B4=E5=8F=96?= =?UTF-8?q?=E5=80=BC=E6=9C=89=E8=AF=AF=E7=9A=84=E9=97=AE=E9=A2=98=203.=20?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=89=A7=E8=A1=8C=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- skywalking-alarm/bin/sw-alarm-server.sh | 49 +++++++++++++++++++ .../skywalking/alarm/UserInfoCoordinator.java | 10 ++-- .../cloud/skywalking/alarm/conf/Config.java | 4 ++ .../skywalking/alarm/dao/SystemConfigDao.java | 2 +- .../alarm/procesor/AlarmMessageProcessor.java | 29 +++++------ .../cloud/skywalking/alarm/util/MailUtil.java | 2 +- .../alarm/util/TemplateConfigurationUtil.java | 24 +++++++++ 7 files changed, 97 insertions(+), 23 deletions(-) create mode 100644 skywalking-alarm/bin/sw-alarm-server.sh create mode 100644 skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/util/TemplateConfigurationUtil.java diff --git a/skywalking-alarm/bin/sw-alarm-server.sh b/skywalking-alarm/bin/sw-alarm-server.sh new file mode 100644 index 000000000..2c140e7b4 --- /dev/null +++ b/skywalking-alarm/bin/sw-alarm-server.sh @@ -0,0 +1,49 @@ +#!/bin/sh + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false +os400=false +darwin=false +case "`uname`" in +CYGWIN*) cygwin=true;; +OS400*) os400=true;; +Darwin*) darwin=true;; +esac + +# resolve links - $0 may be a softlink +SW_SERVER_BIN="$0" + +while [ -h "$SW_SERVER_BIN" ]; do + ls=`ls -ld "$SW_SERVER_BIN"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + SW_SERVER_BIN="$link" + else + SW_SERVER_BIN=`dirname "$SW_SERVER_BIN"`/"$link" + fi +done + +# Get standard environment variables +SW_SERVER_BIN_DIR=`dirname "$SW_SERVER_BIN"` +SW_PREFIX="${SW_SERVER_BIN_DIR}/.." +SW_LOG_DIR="${SW_SERVER_BIN_DIR}/../log" +SW_CFG_DIR="${SW_SERVER_BIN_DIR}/../config" + +#echo $SW_SERVER_BIN_DIR +#set java home +if [ "$JAVA_HOME" != "" ]; then + JAVA="$JAVA_HOME/bin/java" +else + JAVA=java +fi + +CLASSPATH="$SW_CFG_DIR:$CLASSPATH" + +for i in "${SW_SERVER_BIN_DIR}"/../lib/*.jar +do + CLASSPATH="$i:$CLASSPATH" +done + +echo "CLASSPATH=$CLASSPATH" + +$JAVA -classpath $CLASSPATH com.ai.cloud.skywalking.reciever.CollectionServer >> ${SW_SERVER_BIN_DIR}/../log/sw-server.log & 2>&1& diff --git a/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/UserInfoCoordinator.java b/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/UserInfoCoordinator.java index f3858bbd2..0ae85d09c 100644 --- a/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/UserInfoCoordinator.java +++ b/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/UserInfoCoordinator.java @@ -142,7 +142,7 @@ public class UserInfoCoordinator extends Thread { } private List allocationUser(List registeredThreads, - List userIds) { + List userIds) throws Exception { List realRedistributeThread = new ArrayList(); Set sortThreadIds = new HashSet(registeredThreads); int step = (int) Math.ceil(userIds.size() * 1.0 / sortThreadIds.size()); @@ -181,12 +181,12 @@ public class UserInfoCoordinator extends Thread { return realRedistributeThread; } - private List acquireAllRegisteredThread() { + private List acquireAllRegisteredThread() throws Exception { return ZKUtil.getChildren(Config.ZKPath.REGISTER_SERVER_PATH); } private boolean checkAllProcessStatus(List registeredThreadIds, - ProcessThreadStatus status) { + ProcessThreadStatus status) throws Exception { String registerPathPrefix = Config.ZKPath.REGISTER_SERVER_PATH + "/"; for (String threadId : registeredThreadIds) { @@ -202,7 +202,7 @@ public class UserInfoCoordinator extends Thread { } private ProcessThreadStatus getProcessThreadStatus( - String registerPathPrefix, String threadId) { + String registerPathPrefix, String threadId) throws Exception { if (!ZKUtil.exists(Config.ZKPath.REGISTER_SERVER_PATH + "/" + threadId)) return ProcessThreadStatus.FREE; String value = ZKUtil.getPathData(registerPathPrefix + threadId); @@ -214,7 +214,7 @@ public class UserInfoCoordinator extends Thread { } private void changeStatus(List registeredThreadIds, - ProcessThreadStatus status) { + ProcessThreadStatus status) throws Exception { for (String threadId : registeredThreadIds) { ProcessUtil.changeProcessThreadStatus(threadId, status); } diff --git a/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/conf/Config.java b/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/conf/Config.java index a466c4f0b..7907cb3df 100644 --- a/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/conf/Config.java +++ b/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/conf/Config.java @@ -73,4 +73,8 @@ public class Config { public static class MailSenderInfo { public static String configId = "1000"; } + + public static class TemplateInfo{ + public static String CONFIG_ID = "1001"; + } } \ No newline at end of file diff --git a/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/dao/SystemConfigDao.java b/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/dao/SystemConfigDao.java index 07666552d..8b08c14c1 100644 --- a/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/dao/SystemConfigDao.java +++ b/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/dao/SystemConfigDao.java @@ -11,7 +11,7 @@ import java.sql.SQLException; public class SystemConfigDao { private static Logger logger = LogManager.getLogger(AlarmMessageDao.class); - public static String getMailSenderInfo(String configId) throws SQLException { + public static String getSystemConfig(String configId) throws SQLException { PreparedStatement ps = DBConnectUtil.getConnection().prepareStatement( "SELECT system_config.conf_value FROM system_config WHERE system_config.sts = " + "? AND system_config.config_id = ?"); diff --git a/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/procesor/AlarmMessageProcessor.java b/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/procesor/AlarmMessageProcessor.java index c28d7530a..ba6cdfdda 100644 --- a/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/procesor/AlarmMessageProcessor.java +++ b/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/procesor/AlarmMessageProcessor.java @@ -1,12 +1,12 @@ package com.ai.cloud.skywalking.alarm.procesor; -import com.ai.cloud.skywalking.alarm.dao.AlarmMessageDao; import com.ai.cloud.skywalking.alarm.model.AlarmRule; import com.ai.cloud.skywalking.alarm.model.ApplicationInfo; import com.ai.cloud.skywalking.alarm.model.MailInfo; import com.ai.cloud.skywalking.alarm.model.UserInfo; import com.ai.cloud.skywalking.alarm.util.MailUtil; import com.ai.cloud.skywalking.alarm.util.RedisUtil; +import com.ai.cloud.skywalking.alarm.util.TemplateConfigurationUtil; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; @@ -18,6 +18,7 @@ import redis.clients.jedis.Jedis; import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; +import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.*; @@ -38,9 +39,9 @@ public class AlarmMessageProcessor { for (int period = 0; period < warningTimeWindowSize; period++) { String alarmKey = userInfo.getUserId() + "-" - + applicationInfo.getAppCode() + + applicationInfo.getAppId() + "-" - + (currentFireMinuteTime - period); + + (currentFireMinuteTime - period - 1); warningMessageKeys.add(alarmKey); warningTracingIds.addAll(getAlarmMessages(alarmKey)); @@ -50,6 +51,8 @@ public class AlarmMessageProcessor { // 发送告警数据 if (warningTracingIds.size() > 0) { if ("0".equals(rule.getTodoType())) { + logger.info("A total of {} alarm information needs to be sent {}", warningTracingIds.size(), + rule.getConfigArgsDescriber().getMailInfo().getMailTo()); // 发送邮件 String subjects = generateSubject(warningTracingIds.size(), rule.getPreviousFireTimeM(), currentFireMinuteTime); @@ -60,8 +63,6 @@ public class AlarmMessageProcessor { rule.getPreviousFireTimeM() * 10000 * 6))); parameter.put("endDate", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date( currentFireMinuteTime * 10000 * 6))); - //TODO portalAddr需要初始化 - parameter.put("portalAddr", "http://127.0.0.1:8080/skywalking-webui/"); String mailContext = generateContent(rule .getConfigArgsDescriber().getMailInfo() .getMailTemp(), parameter); @@ -135,11 +136,9 @@ public class AlarmMessageProcessor { } private String generateContent(String templateStr, Map parameter) { - Configuration cfg = new Configuration(new Version("2.3.23")); - cfg.setDefaultEncoding("UTF-8"); Template t = null; try { - t = new Template(null, new StringReader(templateStr), cfg); + t = new Template(null, new StringReader(templateStr), TemplateConfigurationUtil.getConfiguration()); StringWriter out = new StringWriter(); t.process(parameter, out); return out.getBuffer().toString(); @@ -147,18 +146,16 @@ public class AlarmMessageProcessor { logger.error("Template illegal.", e); } catch (TemplateException e) { logger.error("Failed to generate content.", e); + } catch (SQLException e) { + logger.error("Failed to find template config"); } return ""; } - public static void main(String[] args) throws InterruptedException { - UserInfo userInfo = new UserInfo("27"); - userInfo.setUserName("123"); - List rules = AlarmMessageDao.selectAlarmRulesByUserId(userInfo.getUserId()); - while (true) { - new AlarmMessageProcessor().process(userInfo, rules.get(0)); - Thread.sleep(60 * 1000L); - } + public static void main(String[] args) { + System.out.println(System.currentTimeMillis() / (10000 * 6)); + AlarmMessageProcessor processor = new AlarmMessageProcessor(); + processor.getAlarmMessages("27-order-application-24167725"); } } diff --git a/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/util/MailUtil.java b/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/util/MailUtil.java index 47ad21bb5..9a48f5cfe 100644 --- a/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/util/MailUtil.java +++ b/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/util/MailUtil.java @@ -23,7 +23,7 @@ public class MailUtil { static { try { - String senderInfo = SystemConfigDao.getMailSenderInfo(Config.MailSenderInfo.configId); + String senderInfo = SystemConfigDao.getSystemConfig(Config.MailSenderInfo.configId); Properties prop = new Gson().fromJson(senderInfo, Properties.class); session = Session.getInstance(prop); ts = session.getTransport(); diff --git a/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/util/TemplateConfigurationUtil.java b/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/util/TemplateConfigurationUtil.java new file mode 100644 index 000000000..12b3718e1 --- /dev/null +++ b/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/util/TemplateConfigurationUtil.java @@ -0,0 +1,24 @@ +package com.ai.cloud.skywalking.alarm.util; + +import com.ai.cloud.skywalking.alarm.conf.Config; +import com.ai.cloud.skywalking.alarm.dao.SystemConfigDao; +import freemarker.template.Configuration; +import freemarker.template.TemplateModelException; +import freemarker.template.Version; + +import java.sql.SQLException; + +public class TemplateConfigurationUtil { + + private static Configuration cfg; + + public static Configuration getConfiguration() throws SQLException, TemplateModelException { + if (cfg == null) { + cfg = new Configuration(new Version("2.3.23")); + cfg.setDefaultEncoding("UTF-8"); + cfg.setSharedVariable("portalAddr", SystemConfigDao.getSystemConfig(Config.TemplateInfo.CONFIG_ID)); + } + + return cfg; + } +}