From 28754fb01db896befbd5df6069307ac56f191ecd Mon Sep 17 00:00:00 2001 From: wusheng Date: Mon, 4 Jan 2016 16:57:35 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8D=E4=B8=89=E4=B8=AAJedis?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E7=AB=AF=E5=8F=AF=E8=83=BD=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E6=B3=84=E9=9C=B2=E7=9A=84=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../skywalking/alarm/model/AlarmRule.java | 26 +++--- .../alarm/procesor/AlarmMessageProcessor.java | 80 +++++++++++-------- .../skywalking/alarm/util/RedisUtil.java | 79 +++++++++++------- 3 files changed, 108 insertions(+), 77 deletions(-) diff --git a/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/model/AlarmRule.java b/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/model/AlarmRule.java index 92c86cb05..a1afffc55 100644 --- a/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/model/AlarmRule.java +++ b/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/model/AlarmRule.java @@ -1,7 +1,9 @@ package com.ai.cloud.skywalking.alarm.model; import com.ai.cloud.skywalking.alarm.util.RedisUtil; +import com.ai.cloud.skywalking.alarm.util.RedisUtil.Executable; import com.google.gson.Gson; + import redis.clients.jedis.Jedis; import java.util.ArrayList; @@ -78,18 +80,16 @@ public class AlarmRule { this.previousFireTimeM = previousFireTimeM; } - private static long getPreviousFireTime(String userId, String ruleId) { - Jedis client = RedisUtil.getRedisClient(); - try { - String previousTime = client.get(userId + "-" + ruleId); - if (previousTime == null || previousTime.length() <= 0) { - return System.currentTimeMillis() / (10000 * 6); - } - return Long.valueOf(previousTime); - } finally { - if (client != null) { - client.close(); - } - } + private static long getPreviousFireTime(final String userId, final String ruleId) { + return RedisUtil.execute(new Executable() { + @Override + public Long exe(Jedis client) { + String previousTime = client.get(userId + "-" + ruleId); + if (previousTime == null || previousTime.length() <= 0) { + return System.currentTimeMillis() / (10000 * 6); + } + return Long.valueOf(previousTime); + } + }); } } 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 c755388dc..c25c10252 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,24 +1,35 @@ package com.ai.cloud.skywalking.alarm.procesor; +import java.io.IOException; +import java.io.StringReader; +import java.io.StringWriter; +import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Properties; +import java.util.Set; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import redis.clients.jedis.Jedis; + 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.RedisUtil.Executable; import com.ai.cloud.skywalking.alarm.util.TemplateConfigurationUtil; + import freemarker.template.Template; import freemarker.template.TemplateException; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -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.*; public class AlarmMessageProcessor { @@ -117,33 +128,36 @@ public class AlarmMessageProcessor { return title; } - private void expiredAlarmMessage(String key) { - Jedis client = RedisUtil.getRedisClient(); - client.expire(key, 0); - if (client != null) { - client.close(); - } + private void expiredAlarmMessage(final String key) { + RedisUtil.execute(new Executable() { + @Override + public Long exe(Jedis client) { + return client.expire(key, 0); + } + }); } - private void savePreviousFireTime(String userId, String ruleId, - long currentFireMinuteTime) { - Jedis client = RedisUtil.getRedisClient(); - client.hset(userId, ruleId, String.valueOf(currentFireMinuteTime)); - if (client != null) { - client.close(); - } + private void savePreviousFireTime(final String userId, final String ruleId, + final long currentFireMinuteTime) { + RedisUtil.execute(new Executable() { + @Override + public Long exe(Jedis client) { + return client.hset(userId, ruleId, String.valueOf(currentFireMinuteTime)); + } + }); } - private Collection getAlarmMessages(String key) { - Jedis client = RedisUtil.getRedisClient(); - Map result = client.hgetAll(key); - if (result == null) { - return new ArrayList(); - } - - client.close(); - - return result.keySet(); + private Collection getAlarmMessages(final String key) { + return RedisUtil.execute(new Executable>() { + @Override + public Collection exe(Jedis client) { + Map result = client.hgetAll(key); + if (result == null) { + return new ArrayList(); + } + return result.keySet(); + } + }); } private String generateContent(String templateStr, Map parameter) throws IOException, TemplateException, SQLException { diff --git a/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/util/RedisUtil.java b/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/util/RedisUtil.java index 1f829923c..7c1eb0f61 100644 --- a/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/util/RedisUtil.java +++ b/skywalking-alarm/src/main/java/com/ai/cloud/skywalking/alarm/util/RedisUtil.java @@ -1,46 +1,63 @@ package com.ai.cloud.skywalking.alarm.util; -import com.ai.cloud.skywalking.alarm.conf.Config; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; + import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; +import com.ai.cloud.skywalking.alarm.conf.Config; + public class RedisUtil { - private static Logger logger = LogManager.getLogger(RedisUtil.class); - private static JedisPool jedisPool; - private static String[] config; + private static Logger logger = LogManager.getLogger(RedisUtil.class); + private static JedisPool jedisPool; + private static String[] config; - static { - GenericObjectPoolConfig genericObjectPoolConfig = buildGenericObjectPoolConfig(); - String redisServerConfig = Config.Alarm.REDIS_SERVER; - if (redisServerConfig == null || redisServerConfig.length() <= 0) { - logger.error("Redis server is not setting. Switch off alarm module. "); - } else { - config = redisServerConfig.split(":"); - if (config.length != 2) { - logger.error("Redis server address is illegal setting, need to be 'ip:port'. Switch off alarm module. "); - Config.Alarm.ALARM_OFF_FLAG = true; - } else { - jedisPool = new JedisPool(genericObjectPoolConfig, config[0], - Integer.valueOf(config[1])); - } - } - } + static { + GenericObjectPoolConfig genericObjectPoolConfig = buildGenericObjectPoolConfig(); + String redisServerConfig = Config.Alarm.REDIS_SERVER; + if (redisServerConfig == null || redisServerConfig.length() <= 0) { + logger.error("Redis server is not setting. Switch off alarm module. "); + } else { + config = redisServerConfig.split(":"); + if (config.length != 2) { + logger.error("Redis server address is illegal setting, need to be 'ip:port'. Switch off alarm module. "); + Config.Alarm.ALARM_OFF_FLAG = true; + } else { + jedisPool = new JedisPool(genericObjectPoolConfig, config[0], + Integer.valueOf(config[1])); + } + } + } - private static GenericObjectPoolConfig buildGenericObjectPoolConfig() { - GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig(); - genericObjectPoolConfig.setTestOnBorrow(true); - genericObjectPoolConfig.setMaxIdle(Config.Alarm.REDIS_MAX_IDLE); - genericObjectPoolConfig.setMinIdle(Config.Alarm.REDIS_MIN_IDLE); - genericObjectPoolConfig.setMaxTotal(Config.Alarm.REDIS_MAX_TOTAL); - return genericObjectPoolConfig; - } + private static GenericObjectPoolConfig buildGenericObjectPoolConfig() { + GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig(); + genericObjectPoolConfig.setTestOnBorrow(true); + genericObjectPoolConfig.setMaxIdle(Config.Alarm.REDIS_MAX_IDLE); + genericObjectPoolConfig.setMinIdle(Config.Alarm.REDIS_MIN_IDLE); + genericObjectPoolConfig.setMaxTotal(Config.Alarm.REDIS_MAX_TOTAL); + return genericObjectPoolConfig; + } - public static Jedis getRedisClient(){ - return jedisPool.getResource(); - } + private static Jedis getRedisClient() { + return jedisPool.getResource(); + } + public static R execute(Executable exec) { + Jedis client = null; + try { + client = RedisUtil.getRedisClient(); + return exec.exe(client); + } finally { + if (client != null) { + client.close(); + } + } + } + + public interface Executable { + public R exe(Jedis client); + } }