1.修复三个Jedis客户端可能链接泄露的问题。
This commit is contained in:
parent
d051fa5935
commit
28754fb01d
|
|
@ -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<Long>() {
|
||||
@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);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<Long>() {
|
||||
@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<Long>() {
|
||||
@Override
|
||||
public Long exe(Jedis client) {
|
||||
return client.hset(userId, ruleId, String.valueOf(currentFireMinuteTime));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private Collection<String> getAlarmMessages(String key) {
|
||||
Jedis client = RedisUtil.getRedisClient();
|
||||
Map<String, String> result = client.hgetAll(key);
|
||||
if (result == null) {
|
||||
return new ArrayList<String>();
|
||||
}
|
||||
|
||||
client.close();
|
||||
|
||||
return result.keySet();
|
||||
private Collection<String> getAlarmMessages(final String key) {
|
||||
return RedisUtil.execute(new Executable<Collection<String>>() {
|
||||
@Override
|
||||
public Collection<String> exe(Jedis client) {
|
||||
Map<String, String> result = client.hgetAll(key);
|
||||
if (result == null) {
|
||||
return new ArrayList<String>();
|
||||
}
|
||||
return result.keySet();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private String generateContent(String templateStr, Map parameter) throws IOException, TemplateException, SQLException {
|
||||
|
|
|
|||
|
|
@ -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> R execute(Executable<R> exec) {
|
||||
Jedis client = null;
|
||||
try {
|
||||
client = RedisUtil.getRedisClient();
|
||||
return exec.exe(client);
|
||||
} finally {
|
||||
if (client != null) {
|
||||
client.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public interface Executable<R> {
|
||||
public R exe(Jedis client);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue