[#17] arrange & delete unnecessary class and config

This commit is contained in:
Minwoo Jung
2014-10-14 18:25:51 +09:00
parent 45e150ad0d
commit bf4503799a
61 changed files with 83 additions and 2230 deletions
@@ -1,12 +0,0 @@
package com.nhn.pinpoint.web.alarm;
/**
*
* @author koo.taejin
*/
public interface AlarmEvent {
// 머가 더 들어가야 할까
long getEventStartTimeMillis();
}
@@ -1,8 +0,0 @@
package com.nhn.pinpoint.web.alarm;
public interface AlarmJob {
boolean execute(AlarmEvent event);
}
@@ -1,15 +0,0 @@
package com.nhn.pinpoint.web.alarm;
import java.util.List;
import com.nhn.pinpoint.web.vo.Application;
public interface AlarmJobsRepository {
int getTotalJobCount();
List<AlarmJob> getAlarmJob(Application application);
List<Application> getRegistedApplicationList();
}
@@ -1,6 +1,6 @@
package com.nhn.pinpoint.web.alarm;
import com.nhn.pinpoint.web.alarm.filter.AlarmCheckFilter;
import com.nhn.pinpoint.web.alarm.checker.AlarmChecker;
import com.nhn.pinpoint.web.alarm.vo.Rule;
public class AlarmMailTemplate {
@@ -9,9 +9,9 @@ public class AlarmMailTemplate {
private static final String LINK_FORMAT = "<a href=\"%s\" >%s</a>";
private final String pinpointUrl;
private final AlarmCheckFilter checker;
private final AlarmChecker checker;
public AlarmMailTemplate(AlarmCheckFilter checker, String pinpointUrl) {
public AlarmMailTemplate(AlarmChecker checker, String pinpointUrl) {
this.checker = checker;
this.pinpointUrl =pinpointUrl;
}
@@ -2,11 +2,11 @@ package com.nhn.pinpoint.web.alarm;
import org.springframework.batch.item.ItemProcessor;
import com.nhn.pinpoint.web.alarm.filter.AlarmCheckFilter;
import com.nhn.pinpoint.web.alarm.checker.AlarmChecker;
public class AlarmProcessor implements ItemProcessor<AlarmCheckFilter, AlarmCheckFilter> {
public class AlarmProcessor implements ItemProcessor<AlarmChecker, AlarmChecker> {
public AlarmCheckFilter process(AlarmCheckFilter checker) {
public AlarmChecker process(AlarmChecker checker) {
checker.check();
return checker;
}
@@ -13,14 +13,14 @@ import org.springframework.batch.item.ItemReader;
import org.springframework.beans.factory.annotation.Autowired;
import com.nhn.pinpoint.web.alarm.DataCollectorFactory.DataCollectorCategory;
import com.nhn.pinpoint.web.alarm.checker.AlarmChecker;
import com.nhn.pinpoint.web.alarm.collector.DataCollector;
import com.nhn.pinpoint.web.alarm.filter.AlarmCheckFilter;
import com.nhn.pinpoint.web.alarm.vo.Rule;
import com.nhn.pinpoint.web.dao.AlarmResourceDao;
import com.nhn.pinpoint.web.dao.ApplicationIndexDao;
import com.nhn.pinpoint.web.vo.Application;
public class AlarmReader implements ItemReader<AlarmCheckFilter>, StepExecutionListener {
public class AlarmReader implements ItemReader<AlarmChecker>, StepExecutionListener {
@Autowired
private DataCollectorFactory dataCollectorFactory;
@@ -31,7 +31,7 @@ public class AlarmReader implements ItemReader<AlarmCheckFilter>, StepExecutionL
@Autowired
private AlarmResourceDao alarmResourceDao;
private final Queue<AlarmCheckFilter> checkers = new LinkedList<AlarmCheckFilter>();
private final Queue<AlarmChecker> checkers = new LinkedList<AlarmChecker>();
public AlarmReader() {
}
@@ -42,7 +42,7 @@ public class AlarmReader implements ItemReader<AlarmCheckFilter>, StepExecutionL
this.alarmResourceDao = alarmResourceDao;
}
public AlarmCheckFilter read() {
public AlarmChecker read() {
return checkers.poll();
}
@@ -81,7 +81,7 @@ public class AlarmReader implements ItemReader<AlarmCheckFilter>, StepExecutionL
collectorMap.put(collector.getDataCollectorCategory(), collector);
}
AlarmCheckFilter checker = checkerCategory.createChecker(collector, rule);
AlarmChecker checker = checkerCategory.createChecker(collector, rule);
checkers.add(checker);
}
@@ -20,8 +20,7 @@ import org.springframework.batch.item.ItemWriter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import com.nhn.pinpoint.web.alarm.filter.AlarmCheckFilter;
import com.nhn.pinpoint.web.alarm.vo.Rule;
import com.nhn.pinpoint.web.alarm.checker.AlarmChecker;
import com.nhn.pinpoint.web.dao.mysql.MySqlAlarmResourceDao;
import com.nhncorp.lucy.net.call.Fault;
import com.nhncorp.lucy.net.call.Reply;
@@ -30,7 +29,7 @@ import com.nhncorp.lucy.net.invoker.InvocationFuture;
import com.nhncorp.lucy.npc.connector.NpcConnectionFactory;
import com.nhncorp.lucy.npc.connector.NpcHessianConnector;
public class AlarmWriter implements ItemWriter<AlarmCheckFilter> {
public class AlarmWriter implements ItemWriter<AlarmChecker> {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@@ -56,13 +55,13 @@ public class AlarmWriter implements ItemWriter<AlarmCheckFilter> {
private static final String SMS_SERVICE_ID = "EMG00058";
@Override
public void write(List<? extends AlarmCheckFilter> checkers) throws Exception {
for(AlarmCheckFilter checker : checkers) {
public void write(List<? extends AlarmChecker> checkers) throws Exception {
for(AlarmChecker checker : checkers) {
send(checker);
}
}
private void send(AlarmCheckFilter checker) {
private void send(AlarmChecker checker) {
if (!checker.isDetected()) {
return;
}
@@ -74,7 +73,7 @@ public class AlarmWriter implements ItemWriter<AlarmCheckFilter> {
}
}
private void sendSms(AlarmCheckFilter checker) {
private void sendSms(AlarmChecker checker) {
List<String> receivers = dao.selectEmpGroupPhoneNumber(checker.getEmpGroup());
if (receivers.size() == 0) {
@@ -117,7 +116,7 @@ public class AlarmWriter implements ItemWriter<AlarmCheckFilter> {
return result.toString();
}
private void sendEmail(AlarmCheckFilter checker) {
private void sendEmail(AlarmChecker checker) {
NpcConnectionFactory factory = new NpcConnectionFactory();
factory.setBoxDirectoryServiceHostName(emailServerUrl);
factory.setCharset(Charset.forName("UTF-8"));
@@ -150,7 +149,7 @@ public class AlarmWriter implements ItemWriter<AlarmCheckFilter> {
}
}
private Object[] createSendMailParams(AlarmCheckFilter checker) {
private Object[] createSendMailParams(AlarmChecker checker) {
AlarmMailTemplate mailTemplate = new AlarmMailTemplate(checker, pinpointUrl);
List<String> receivers = dao.selectEmpGroupEmail(checker.getEmpGroup());
return new Object[] { EMAIL_SERVICE_ID, OPTION, SENDER_EMAIL_ADDRESS, "", joinAddresses(receivers), mailTemplate.createSubject(), mailTemplate.createBody()};
@@ -4,74 +4,74 @@ import java.util.LinkedList;
import java.util.List;
import com.nhn.pinpoint.web.alarm.DataCollectorFactory.DataCollectorCategory;
import com.nhn.pinpoint.web.alarm.checker.AlarmChecker;
import com.nhn.pinpoint.web.alarm.checker.ErrorCountChecker;
import com.nhn.pinpoint.web.alarm.checker.ErrorRateChecker;
import com.nhn.pinpoint.web.alarm.checker.GcCountChecker;
import com.nhn.pinpoint.web.alarm.checker.HeapUsageRateChecker;
import com.nhn.pinpoint.web.alarm.checker.JvmCpuUsageRateChecker;
import com.nhn.pinpoint.web.alarm.checker.ResponseCountChecker;
import com.nhn.pinpoint.web.alarm.checker.SlowCountFilter;
import com.nhn.pinpoint.web.alarm.checker.SlowRatesFilter;
import com.nhn.pinpoint.web.alarm.collector.AgentStatDataCollector;
import com.nhn.pinpoint.web.alarm.collector.DataCollector;
import com.nhn.pinpoint.web.alarm.collector.ResponseTimeDataCollector;
import com.nhn.pinpoint.web.alarm.filter.AlarmCheckFilter;
import com.nhn.pinpoint.web.alarm.filter.ErrorCountChecker;
import com.nhn.pinpoint.web.alarm.filter.ErrorRateChecker;
import com.nhn.pinpoint.web.alarm.filter.GcCountChecker;
import com.nhn.pinpoint.web.alarm.filter.HeapUsageRateChecker;
import com.nhn.pinpoint.web.alarm.filter.JvmCpuUsageRateChecker;
import com.nhn.pinpoint.web.alarm.filter.ResponseCountChecker;
import com.nhn.pinpoint.web.alarm.filter.SlowCountFilter;
import com.nhn.pinpoint.web.alarm.filter.SlowRatesFilter;
import com.nhn.pinpoint.web.alarm.vo.Rule;
public enum CheckerCategory {
SLOW_COUNT("SLOW_COUNT", DataCollectorCategory.RESPONSE_TIME) {
@Override
public AlarmCheckFilter createChecker(DataCollector dataCollector, Rule rule) {
public AlarmChecker createChecker(DataCollector dataCollector, Rule rule) {
return new SlowCountFilter((ResponseTimeDataCollector)dataCollector, rule);
}
},
SLOW_RATE("SLOW_RATE", DataCollectorCategory.RESPONSE_TIME) {
@Override
public AlarmCheckFilter createChecker(DataCollector dataCollector, Rule rule) {
public AlarmChecker createChecker(DataCollector dataCollector, Rule rule) {
return new SlowRatesFilter((ResponseTimeDataCollector)dataCollector, rule);
}
},
ERROR_COUNT("ERROR_COUNT", DataCollectorCategory.RESPONSE_TIME) {
@Override
public AlarmCheckFilter createChecker(DataCollector dataCollector, Rule rule) {
public AlarmChecker createChecker(DataCollector dataCollector, Rule rule) {
return new ErrorCountChecker((ResponseTimeDataCollector)dataCollector, rule);
}
},
ERROR_RATE("ERROR_RATE", DataCollectorCategory.RESPONSE_TIME) {
@Override
public AlarmCheckFilter createChecker(DataCollector dataCollector, Rule rule) {
public AlarmChecker createChecker(DataCollector dataCollector, Rule rule) {
return new ErrorRateChecker((ResponseTimeDataCollector)dataCollector, rule);
}
},
RESPONSE_COUNT("RESPONSE_COUNT", DataCollectorCategory.RESPONSE_TIME) {
@Override
public AlarmCheckFilter createChecker(DataCollector dataCollector, Rule rule) {
public AlarmChecker createChecker(DataCollector dataCollector, Rule rule) {
return new ResponseCountChecker((ResponseTimeDataCollector)dataCollector, rule);
}
},
HEAP_USAGE_RATE("HEAP_USAGE_RATE", DataCollectorCategory.AGENT_STAT) {
@Override
public AlarmCheckFilter createChecker(DataCollector dataCollector, Rule rule) {
public AlarmChecker createChecker(DataCollector dataCollector, Rule rule) {
return new HeapUsageRateChecker((AgentStatDataCollector)dataCollector, rule);
}
},
GC_COUNT("GC_COUNT", DataCollectorCategory.AGENT_STAT) {
@Override
public AlarmCheckFilter createChecker(DataCollector dataCollector, Rule rule) {
public AlarmChecker createChecker(DataCollector dataCollector, Rule rule) {
return new GcCountChecker((AgentStatDataCollector)dataCollector, rule);
}
},
JVM_CPU_USAGE_RATE("JVM_CPU_USAGE_RATE", DataCollectorCategory.AGENT_STAT) {
@Override
public AlarmCheckFilter createChecker(DataCollector dataCollector, Rule rule) {
public AlarmChecker createChecker(DataCollector dataCollector, Rule rule) {
return new JvmCpuUsageRateChecker((AgentStatDataCollector)dataCollector, rule);
}
};
@@ -112,6 +112,6 @@ public enum CheckerCategory {
return name;
}
public abstract AlarmCheckFilter createChecker(DataCollector dataCollector, Rule rule);
public abstract AlarmChecker createChecker(DataCollector dataCollector, Rule rule);
}
@@ -1,16 +0,0 @@
package com.nhn.pinpoint.web.alarm;
public class DefaultAlarmEvent implements AlarmEvent {
private final long startEventTimeMillis;
public DefaultAlarmEvent(long startEventTimeMillis) {
this.startEventTimeMillis = startEventTimeMillis;
}
@Override
public long getEventStartTimeMillis() {
return startEventTimeMillis;
}
}
@@ -1,71 +0,0 @@
package com.nhn.pinpoint.web.alarm;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.nhn.pinpoint.web.alarm.filter.AlarmCheckFilter;
import com.nhn.pinpoint.web.alarm.filter.AlarmFilter;
import com.nhn.pinpoint.web.alarm.filter.AlarmSendFilter;
import com.nhn.pinpoint.web.vo.Application;
/**
*
* @author koo.taejin
*/
public class DefaultAlarmJob implements AlarmJob {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private final Application application;
public DefaultAlarmJob(Application application) {
this.application = application;
}
private final List<AlarmCheckFilter> checkFilterList = new ArrayList<AlarmCheckFilter>();
private final List<AlarmSendFilter> sendFilterList = new ArrayList<AlarmSendFilter>();
@Override
public boolean execute(AlarmEvent event) {
logger.debug("{} {} execute. CheckFilterList={}, SendFilterList={}", application, this.getClass().getSimpleName(), checkFilterList, sendFilterList);
for (AlarmCheckFilter checkFilter : this.checkFilterList) {
checkFilter.check();
boolean isSatisfy = false;
logger.debug("{} filter Satisfy({})", checkFilter.getClass().getSimpleName(), isSatisfy);
if (!isSatisfy) {
return false;
}
}
for (AlarmSendFilter sendFilter : this.sendFilterList) {
sendFilter.send(this.checkFilterList, event);
}
return true;
}
public <T extends AlarmFilter> void addFilter(List<T> filterList) {
for (AlarmFilter filter : filterList) {
addFilter(filter);
}
}
public boolean addFilter(AlarmFilter filter) {
if (filter instanceof AlarmSendFilter) {
sendFilterList.add((AlarmSendFilter) filter);
return true;
}
if (filter instanceof AlarmCheckFilter) {
checkFilterList.add((AlarmCheckFilter) filter);
return true;
}
return false;
}
}
@@ -1,68 +0,0 @@
package com.nhn.pinpoint.web.alarm;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import com.nhn.pinpoint.web.vo.Application;
public class DefaultAlarmJobsRepository implements AlarmJobsRepository {
private final Map<Application, List<AlarmJob>> repository = new HashMap<Application, List<AlarmJob>>();
public DefaultAlarmJobsRepository() {
}
@Override
public int getTotalJobCount() {
int totalCount = 0;
Collection<List<AlarmJob>> values = repository.values();
for (List<AlarmJob> value : values) {
totalCount += value.size();
}
return totalCount;
}
public List<AlarmJob> addAlarmJob(Application application, AlarmJob job) {
List<AlarmJob> registedJobs = (List<AlarmJob>) MapUtils.getObject(repository, application, new ArrayList<AlarmJob>());
registedJobs.add(job);
repository.put(application, registedJobs);
return registedJobs;
}
public List<AlarmJob> getAlarmJob(Application application) {
List<AlarmJob> alarmJobList = repository.get(application);
if (alarmJobList == null || alarmJobList.size() == 0) {
return Collections.emptyList();
}
List<AlarmJob> shallowCopyResult = new ArrayList<AlarmJob>();
shallowCopyResult.addAll(alarmJobList);
return shallowCopyResult;
}
public List<Application> getRegistedApplicationList() {
Set<Application> keyList = repository.keySet();
if (CollectionUtils.isEmpty(keyList)) {
return Collections.emptyList();
}
List<Application> shallowCopyResult = new ArrayList<Application>();
shallowCopyResult.addAll(keyList);
return shallowCopyResult;
}
}
@@ -1,48 +0,0 @@
package com.nhn.pinpoint.web.alarm;
public enum MainCategory {
// 받은 요청, 보낸 요청 등으로 나누면 될듯
REQUEST_SENDED("REQUEST_SENDED", 1),
REQUEST_RECEIVED("REQUEST_RECEIVED", 2)
;
private final String name;
private final int code;
private MainCategory(String name, int code) {
this.name = name;
this.code = code;
}
public String getName() {
return name;
}
public int getCode() {
return code;
}
public static MainCategory getValue(String value) {
MainCategory[] categories = MainCategory.values();
for (MainCategory category : categories) {
if (category.getName().equalsIgnoreCase(value)) {
return category;
}
}
return null;
}
public static MainCategory getValue(int code) {
for (MainCategory eachCategory : MainCategory.values()) {
if (eachCategory.getCode() == code) {
return eachCategory;
}
}
return null;
}
}
@@ -1,151 +0,0 @@
package com.nhn.pinpoint.web.alarm;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.nhn.pinpoint.web.alarm.filter.AlarmCheckFilter;
import com.nhn.pinpoint.web.alarm.filter.AlarmFilter;
import com.nhn.pinpoint.web.alarm.filter.FailureCountFilter;
import com.nhn.pinpoint.web.alarm.filter.FailureRatesFilter;
import com.nhn.pinpoint.web.alarm.filter.SlowCountFilter;
import com.nhn.pinpoint.web.alarm.filter.SlowRatesFilter;
import com.nhn.pinpoint.web.alarm.vo.AlarmRuleResource;
import com.nhn.pinpoint.web.vo.Application;
/**
*
* @author koo.taejin
*/
public enum SubCategory {
// 이후에 Filter가 늘어나게 되면 Decorator패턴으로 변경하는 것도 좋은 방법일듯함
// 보낸 요청 받은 요청
FAIL_RATE("FAIL_RATE", 1, "%", MainCategory.REQUEST_SENDED) {
@Override
public AlarmCheckFilter createAlarmFilter(Application application, MainCategory parent, AlarmRuleResource rule) {
AlarmCheckFilter filter = null;
if (MainCategory.REQUEST_SENDED == parent) {
filter = new FailureRatesFilter(application);
}
if (filter != null) {
// filter.initialize(rule);
}
return filter;
}
},
FAIL_COUNT("FAIL_COUNT", 2, " ", MainCategory.REQUEST_SENDED) {
@Override
public AlarmCheckFilter createAlarmFilter(Application application, MainCategory parent, AlarmRuleResource rule) {
AlarmCheckFilter filter = null;
if (MainCategory.REQUEST_SENDED == parent) {
filter = new FailureCountFilter(application);
}
if (filter != null) {
// filter.initialize(rule);
}
return filter;
}
},
SLOW_RATE("SLOW_RATE", 3, "%", MainCategory.REQUEST_SENDED) {
@Override
public AlarmCheckFilter createAlarmFilter(Application application, MainCategory parent, AlarmRuleResource rule) {
AlarmCheckFilter filter = null;
if (MainCategory.REQUEST_SENDED == parent) {
// filter = new SlowRatesFilter(application);
}
if (filter != null) {
// filter.initialize(rule);
}
return filter;
}
},
SLOW_COUNT("SLOW_COUNT", 4, " ", MainCategory.REQUEST_SENDED) {
@Override
public AlarmCheckFilter createAlarmFilter(Application application, MainCategory parent, AlarmRuleResource rule) {
AlarmCheckFilter filter = null;
if (MainCategory.REQUEST_SENDED == parent) {
// filter = new SlowCountFilter(null, 0, false, false);
}
if (filter != null) {
// filter.initialize(rule);
}
return filter;
}
};
private final String name;
private final int code;
private final List<MainCategory> parentSupportCategoryList;
private final String unit;
private SubCategory(String name, int code, String unit, MainCategory firstParentSupportCategory, MainCategory... otherParentSupportCategories) {
this.name = name;
this.code = code;
this.unit = unit;
parentSupportCategoryList = new ArrayList<MainCategory>();
parentSupportCategoryList.add(firstParentSupportCategory);
Collections.addAll(parentSupportCategoryList, otherParentSupportCategories);
}
public String getName() {
return name;
}
public int getCode() {
return code;
}
public String getUnit() {
return unit;
}
private List<MainCategory> getParentSupportCategoryList() {
return parentSupportCategoryList;
}
AlarmFilter createAlarmFilter(Application application, AlarmRuleResource rule) throws Exception {
List<MainCategory> parentSupportCategoryList = getParentSupportCategoryList();
if (parentSupportCategoryList.size() == 1) {
// return createAlarmFilter(application, parentSupportCategoryList.get(0), rule);
return null;
} else {
throw new Exception("Ambiguous ParentCategory Exception");
}
}
public abstract AlarmCheckFilter createAlarmFilter(Application application, MainCategory parent, AlarmRuleResource rule);
public static SubCategory getValue(String value) {
SubCategory[] categories = SubCategory.values();
for (SubCategory category : categories) {
if (category.getName().equalsIgnoreCase(value)) {
return category;
}
}
return null;
}
public static SubCategory getValue(int code) {
for (SubCategory eachCategory : SubCategory.values()) {
if (eachCategory.getCode() == code) {
return eachCategory;
}
}
return null;
}
}
@@ -1,4 +1,4 @@
package com.nhn.pinpoint.web.alarm.filter;
package com.nhn.pinpoint.web.alarm.checker;
import java.util.HashMap;
import java.util.LinkedList;
@@ -9,7 +9,7 @@ import java.util.Map.Entry;
import com.nhn.pinpoint.web.alarm.collector.DataCollector;
import com.nhn.pinpoint.web.alarm.vo.Rule;
public abstract class AgentChecker extends AlarmCheckFilter {
public abstract class AgentChecker extends AlarmChecker {
protected Map<String, Long> detectedAgents = new HashMap<String, Long>();
@@ -1,4 +1,4 @@
package com.nhn.pinpoint.web.alarm.filter;
package com.nhn.pinpoint.web.alarm.checker;
import java.util.LinkedList;
import java.util.List;
@@ -13,7 +13,7 @@ import com.nhn.pinpoint.web.alarm.vo.Rule;
*
* @author koo.taejin
*/
public abstract class AlarmCheckFilter {
public abstract class AlarmChecker {
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
protected final DataCollector dataCollector;
@@ -21,7 +21,7 @@ public abstract class AlarmCheckFilter {
protected boolean detected = false;
protected final String unit;
protected AlarmCheckFilter(Rule rule, String unit, DataCollector dataCollector) {
protected AlarmChecker(Rule rule, String unit, DataCollector dataCollector) {
this.rule = rule;
this.unit = unit;
this.dataCollector = dataCollector;
@@ -1,9 +1,9 @@
package com.nhn.pinpoint.web.alarm.filter;
package com.nhn.pinpoint.web.alarm.checker;
import com.nhn.pinpoint.web.alarm.collector.ResponseTimeDataCollector;
import com.nhn.pinpoint.web.alarm.vo.Rule;
public class ErrorCountChecker extends AlarmCheckFilter {
public class ErrorCountChecker extends AlarmChecker {
public ErrorCountChecker(ResponseTimeDataCollector dataCollector, Rule rule) {
super(rule, "", dataCollector);
@@ -1,9 +1,9 @@
package com.nhn.pinpoint.web.alarm.filter;
package com.nhn.pinpoint.web.alarm.checker;
import com.nhn.pinpoint.web.alarm.collector.ResponseTimeDataCollector;
import com.nhn.pinpoint.web.alarm.vo.Rule;
public class ErrorRateChecker extends AlarmCheckFilter {
public class ErrorRateChecker extends AlarmChecker {
public ErrorRateChecker(ResponseTimeDataCollector dataCollector, Rule rule) {
super(rule, "%", dataCollector);
@@ -1,4 +1,4 @@
package com.nhn.pinpoint.web.alarm.filter;
package com.nhn.pinpoint.web.alarm.checker;
import java.util.Map;
@@ -1,4 +1,4 @@
package com.nhn.pinpoint.web.alarm.filter;
package com.nhn.pinpoint.web.alarm.checker;
import java.util.Map;
@@ -1,4 +1,4 @@
package com.nhn.pinpoint.web.alarm.filter;
package com.nhn.pinpoint.web.alarm.checker;
import java.util.Map;
@@ -1,9 +1,9 @@
package com.nhn.pinpoint.web.alarm.filter;
package com.nhn.pinpoint.web.alarm.checker;
import com.nhn.pinpoint.web.alarm.collector.ResponseTimeDataCollector;
import com.nhn.pinpoint.web.alarm.vo.Rule;
public class ResponseCountChecker extends AlarmCheckFilter {
public class ResponseCountChecker extends AlarmChecker {
public ResponseCountChecker(ResponseTimeDataCollector dataCollector, Rule rule) {
super(rule, "", dataCollector);
@@ -1,9 +1,9 @@
package com.nhn.pinpoint.web.alarm.filter;
package com.nhn.pinpoint.web.alarm.checker;
import com.nhn.pinpoint.web.alarm.collector.ResponseTimeDataCollector;
import com.nhn.pinpoint.web.alarm.vo.Rule;
public class SlowCountFilter extends AlarmCheckFilter {
public class SlowCountFilter extends AlarmChecker {
public SlowCountFilter(ResponseTimeDataCollector dataCollector, Rule rule) {
super(rule, "", dataCollector);
@@ -1,4 +1,4 @@
package com.nhn.pinpoint.web.alarm.filter;
package com.nhn.pinpoint.web.alarm.checker;
import com.nhn.pinpoint.web.alarm.collector.ResponseTimeDataCollector;
import com.nhn.pinpoint.web.alarm.vo.Rule;
@@ -7,7 +7,7 @@ import com.nhn.pinpoint.web.alarm.vo.Rule;
*
* @author koo.taejin
*/
public class SlowRatesFilter extends AlarmCheckFilter {
public class SlowRatesFilter extends AlarmChecker {
public SlowRatesFilter(ResponseTimeDataCollector dataCollector, Rule rule) {
super(rule, "%", dataCollector);
@@ -1,11 +0,0 @@
package com.nhn.pinpoint.web.alarm.filter;
import com.nhn.pinpoint.web.alarm.collector.DataCollector;
import com.nhn.pinpoint.web.alarm.vo.Rule;
public abstract class AlarmCheckCountFilter extends AlarmCheckFilter {
protected AlarmCheckCountFilter(Rule rule, String unit, DataCollector dataCollector) {
super(rule, unit, dataCollector);
}
}
@@ -1,36 +0,0 @@
package com.nhn.pinpoint.web.alarm.filter;
import com.nhn.pinpoint.web.alarm.collector.DataCollector;
import com.nhn.pinpoint.web.alarm.vo.Rule;
public abstract class AlarmCheckRatesFilter extends AlarmCheckFilter {
protected AlarmCheckRatesFilter(Rule rule, DataCollector dataCollector) {
super(rule, "%", dataCollector);
}
protected boolean check(long count, long totalCount) {
int rates = getRates(count, totalCount);
int threshold = getRule().getThreshold();
if (rates >= threshold) {
return true;
} else {
return false;
}
}
private int getRates(long count, long totalCount) {
int percent = 0;
if (count == 0 || totalCount == 0) {
return percent;
} else {
percent = Math.round((count * 100) / totalCount);
}
return percent;
}
}
@@ -1,10 +0,0 @@
package com.nhn.pinpoint.web.alarm.filter;
/**
*
* @author koo.taejin
*/
public interface AlarmFilter {
}
@@ -1,99 +0,0 @@
package com.nhn.pinpoint.web.alarm.filter;
import java.nio.charset.Charset;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.nhn.pinpoint.web.alarm.AlarmEvent;
import com.nhn.pinpoint.web.alarm.AlarmMailTemplate;
import com.nhn.pinpoint.web.alarm.resource.MailResource;
import com.nhn.pinpoint.web.vo.Application;
import com.nhncorp.lucy.net.call.Fault;
import com.nhncorp.lucy.net.call.Reply;
import com.nhncorp.lucy.net.call.ReturnValue;
import com.nhncorp.lucy.net.invoker.InvocationFuture;
import com.nhncorp.lucy.npc.connector.NpcConnectionFactory;
import com.nhncorp.lucy.npc.connector.NpcHessianConnector;
/**
*
* @author koo.taejin
*/
public class AlarmMailSendFilter extends AlarmSendFilter {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private static final String ADDR_SEPARATOR = ";";
private final Application application;
private final MailResource mailResource;
private final List<String> receiverList;
public AlarmMailSendFilter(Application application, MailResource mailResource, List<String> receiverList) {
this.application = application;
this.mailResource = mailResource;
this.receiverList = receiverList;
}
@Override
public boolean send(List<AlarmCheckFilter> alarmCheckFilterList, AlarmEvent event) {
NpcConnectionFactory factory = new NpcConnectionFactory();
factory.setBoxDirectoryServiceHostName(mailResource.getUrl());
factory.setCharset(Charset.forName("UTF-8"));
factory.setLightWeight(true);
NpcHessianConnector connector = null;
try {
connector = factory.create();
// AlarmMailTemplate mailTemplate = new AlarmMailTemplate(application, mailResource, event);
AlarmMailTemplate mailTemplate = new AlarmMailTemplate(null, null);
Object[] params = createSendMailParams(alarmCheckFilterList, mailTemplate);
InvocationFuture future = connector.invoke(null, "send", params);
future.await();
Reply reply = (Reply) future.getReturnValue();
if (reply instanceof ReturnValue) {
Object result = ((ReturnValue) reply).get();
logger.debug("MessageId:{}", result);
return true;
} else if (reply instanceof Fault) {
String code = ((Fault) reply).getCode();
String message = ((Fault) reply).getMessage();
logger.warn("Unexpected result:code={}, message={}", code, message);
} else {
logger.warn("Unexpected clazz({}).", reply.getClass());
}
} catch (Exception e) {
logger.warn(e.getMessage(), e);
} finally {
if (connector != null) {
connector.dispose();
}
}
// TODO Auto-generated method stub
return false;
}
private Object[] createSendMailParams(List<AlarmCheckFilter> alarmCheckFilterList, AlarmMailTemplate mailTemplate) {
return new Object[] {
mailResource.getServiceId(),
mailResource.getOption(),
mailResource.getSenderEmailAddress(), /* 보낸이 */
"", /* 답장 받을 주소 */
joinAddresses(receiverList), /* 받는이 */
mailTemplate.createSubject(),
mailTemplate.createBody()
};
}
private String joinAddresses(List<String> addresses) {
return StringUtils.join(addresses, ADDR_SEPARATOR);
}
}
@@ -1,15 +0,0 @@
package com.nhn.pinpoint.web.alarm.filter;
import java.util.List;
import com.nhn.pinpoint.web.alarm.AlarmEvent;
/**
*
* @author koo.taejin
*/
public abstract class AlarmSendFilter implements AlarmFilter {
abstract public boolean send(List<AlarmCheckFilter> checkFilterList, AlarmEvent event);
}
@@ -1,79 +0,0 @@
package com.nhn.pinpoint.web.alarm.filter;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.nhn.pinpoint.web.alarm.AlarmEvent;
import com.nhn.pinpoint.web.alarm.resource.SmsResource;
import com.nhn.pinpoint.web.vo.Application;
/**
*
* @author koo.taejin
*/
public class AlarmSmsSendFilter extends AlarmSendFilter {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private static final String QUOTATATION = "\"";
private final Application application;
private final SmsResource smsResource;
private final List<String> receiverList;
public AlarmSmsSendFilter(Application application, SmsResource smsResource, List<String> receiverList) {
this.application = application;
this.smsResource = smsResource;
this.receiverList = receiverList;
}
@Override
public boolean send(List<AlarmCheckFilter> alarmCheckFilterList, AlarmEvent event) {
DefaultHttpClient client = new DefaultHttpClient();
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("serviceId", smsResource.getServiceId()));
nvps.add(new BasicNameValuePair("sendMdn", QUOTATATION + smsResource.getSenderPhoneNumber() + QUOTATATION));
nvps.add(new BasicNameValuePair("receiveMdnList", convertToReceiverFormat(receiverList)));
nvps.add(new BasicNameValuePair("content", QUOTATATION + null + QUOTATATION));
HttpGet get = new HttpGet(smsResource.getUrl() + "?" + URLEncodedUtils.format(nvps, "UTF-8"));
logger.debug("{}", get.getURI());
try {
HttpResponse response = client.execute(get);
if (response != null) {
HttpEntity entity = response.getEntity();
// 이작업 자체가 닫는거랑 같음
logger.debug("result={}", EntityUtils.toString(entity));
}
} catch (Exception e) {
logger.warn(e.getMessage(), e);
} finally {
// 이건 일단 이렇게 하고 나중에 성능을 위해서 바꾸장
client.getConnectionManager().shutdown();
}
return false;
}
private String convertToReceiverFormat(List<String> receivers) {
List<String> result = new ArrayList<String>();
for (String receiver : receivers) {
result.add(QUOTATATION + receiver + QUOTATATION);
}
return result.toString();
}
}
@@ -1,100 +0,0 @@
package com.nhn.pinpoint.web.alarm.filter;
import java.util.Collection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.nhn.pinpoint.web.alarm.AlarmEvent;
import com.nhn.pinpoint.web.applicationmap.histogram.TimeHistogram;
import com.nhn.pinpoint.web.applicationmap.rawdata.AgentHistogram;
import com.nhn.pinpoint.web.applicationmap.rawdata.AgentHistogramList;
import com.nhn.pinpoint.web.applicationmap.rawdata.LinkData;
import com.nhn.pinpoint.web.applicationmap.rawdata.LinkDataMap;
import com.nhn.pinpoint.web.dao.MapStatisticsCallerDao;
import com.nhn.pinpoint.web.vo.Application;
import com.nhn.pinpoint.web.vo.Range;
/**
*
* @author koo.taejin
*/
public class FailureCountFilter extends AlarmCheckCountFilter {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private final Application application;
public FailureCountFilter(Application application) {
super(null, null, null);
this.application = application;
}
public void check() {
// return true;
}
// @Override
public boolean check(AlarmEvent event) {
logger.debug("{} check.", this.getClass().getSimpleName());
// MapStatisticsCallerDao dao = event.getMapStatisticsCallerDao();
MapStatisticsCallerDao dao = null;
if (dao == null) {
logger.warn("{} object is null.", MapStatisticsCallerDao.class.getSimpleName());
return false;
}
long startEventTimeMillis = event.getEventStartTimeMillis();
// 이것도 CheckTImeMillis의 시간이 길면 나누어야 함
// 추가적으로 시간이 범위에 있는 만큼 다 안들어 오면 ??
// 일단은 아주 단순하게
// int continuationTime = getRule().getContinuosTime();
int continuationTime = 300000;
Range range = Range.createUncheckedRange(startEventTimeMillis - continuationTime, startEventTimeMillis);
LinkDataMap linkDataMap = dao.selectCaller(application, range);
for (LinkData linkData : linkDataMap.getLinkDataList()) {
Application toApplication = linkData.getToApplication();
// if (toApplication.getServiceType().isTerminal() || toApplication.getServiceType().isUnknown()) {
// logger.debug("Application({}) is invalid serviceType. this is skip.", toApplication.getName());
// continue;
// }
AgentHistogramList sourceList = linkData.getSourceList();
Collection<AgentHistogram> agentHistogramList = sourceList.getAgentHistogramList();
boolean isSatisFied = checkCounts(toApplication, agentHistogramList);
if (isSatisFied) {
return true;
}
}
return false;
}
private boolean checkCounts(Application toApplication, Collection<AgentHistogram> agentHistogramList) {
long totalCount = 0;
long successCount = 0;
long errorCount = 0;
for (AgentHistogram agent : agentHistogramList) {
for (TimeHistogram time : agent.getTimeHistogram()) {
totalCount += time.getTotalCount();
successCount += time.getSuccessCount();
errorCount = time.getErrorCount();
}
}
logger.info("{} -> {} {}/{}(error={})", application.getName(), toApplication.getName(), successCount, totalCount, errorCount);
return decideResult(errorCount);
}
@Override
protected long getDetectedValue() {
return 0;
}
}
@@ -1,101 +0,0 @@
package com.nhn.pinpoint.web.alarm.filter;
import java.util.Collection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.nhn.pinpoint.web.alarm.AlarmEvent;
import com.nhn.pinpoint.web.applicationmap.histogram.TimeHistogram;
import com.nhn.pinpoint.web.applicationmap.rawdata.AgentHistogram;
import com.nhn.pinpoint.web.applicationmap.rawdata.AgentHistogramList;
import com.nhn.pinpoint.web.applicationmap.rawdata.LinkData;
import com.nhn.pinpoint.web.applicationmap.rawdata.LinkDataMap;
import com.nhn.pinpoint.web.dao.MapStatisticsCallerDao;
import com.nhn.pinpoint.web.vo.Application;
import com.nhn.pinpoint.web.vo.Range;
/**
*
* @author koo.taejin
*/
public class FailureRatesFilter extends AlarmCheckRatesFilter {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private final Application application;
public FailureRatesFilter(Application application) {
super(null, null);
this.application = application;
}
public void check() {
}
// @Override
public boolean check(AlarmEvent event) {
logger.debug("{} check.", this.getClass().getSimpleName());
// MapStatisticsCallerDao dao = event.getMapStatisticsCallerDao();
MapStatisticsCallerDao dao = null;
if (dao == null) {
logger.warn("{} object is null.", MapStatisticsCallerDao.class.getSimpleName());
return false;
}
long startEventTimeMillis = event.getEventStartTimeMillis();
// 이것도 CheckTImeMillis의 시간이 길면 나누어야 함
// 추가적으로 시간이 범위에 있는 만큼 다 안들어 오면 ??
// 일단은 아주 단순하게
// int continuationTime = getRule().getContinuosTime();
int continuationTime = 300000;
Range range = Range.createUncheckedRange(startEventTimeMillis - continuationTime, startEventTimeMillis);
LinkDataMap linkDataMap = dao.selectCaller(application, range);
for (LinkData linkData : linkDataMap.getLinkDataList()) {
Application toApplication = linkData.getToApplication();
// if (toApplication.getServiceType().isTerminal() || toApplication.getServiceType().isUnknown()) {
// logger.debug("Application({}) is invalid serviceType. this is skip.", toApplication.getName());
// continue;
// }
AgentHistogramList sourceList = linkData.getSourceList();
Collection<AgentHistogram> agentHistogramList = sourceList.getAgentHistogramList();
boolean isSatisFied = checkRates(toApplication, agentHistogramList);
if (isSatisFied) {
return true;
}
}
return false;
}
private boolean checkRates(Application toApplication, Collection<AgentHistogram> agentHistogramList) {
long totalCount = 0;
long successCount = 0;
long slowCount = 0;
long errorCount = 0;
for (AgentHistogram agent : agentHistogramList) {
for (TimeHistogram time : agent.getTimeHistogram()) {
totalCount += time.getTotalCount();
successCount += time.getSuccessCount();
slowCount += time.getSlowCount();
errorCount = time.getErrorCount();
}
}
logger.info("{} -> {} {}/{}(slow={}, error={})", application.getName(), toApplication.getName(), successCount, totalCount, slowCount, errorCount);
return check(errorCount, totalCount);
}
@Override
protected long getDetectedValue() {
// TODO Auto-generated method stub
return 0;
}
}
@@ -1,17 +0,0 @@
package com.nhn.pinpoint.web.alarm.resource;
public interface MailResource {
String getPinpointUrl();
String getUrl();
String getServiceId();
String getSenderEmailAddress();
String getOption();
String getSubject();
}
@@ -1,80 +0,0 @@
package com.nhn.pinpoint.web.alarm.resource;
import org.springframework.beans.factory.annotation.Value;
/**
*
* @author koo.taejin
*/
public class MailResourceImpl implements MailResource {
@Value("#{dataProps['pinpoint.url']}")
private String pinpointUrl;
@Value("#{dataProps['alarm.mail.url']}")
private String url;
@Value("#{dataProps['alarm.mail.serviceId']}")
private String serviceId;
@Value("#{dataProps['alarm.mail.sender.emailAddress']}")
private String senderEmailAddress;
@Value("#{dataProps['alarm.mail.option']}")
private String option;
@Value("#{dataProps['alarm.mail.subject']}")
private String subject;
@Override
public String getPinpointUrl() {
return pinpointUrl;
}
public void setPinpointUrl(String pinpointUrl) {
this.pinpointUrl = pinpointUrl;
}
@Override
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
@Override
public String getServiceId() {
return serviceId;
}
public void setServiceId(String serviceId) {
this.serviceId = serviceId;
}
@Override
public String getSenderEmailAddress() {
return senderEmailAddress;
}
public void setSenderEmailAddress(String senderEmailAddress) {
this.senderEmailAddress = senderEmailAddress;
}
@Override
public String getOption() {
return option;
}
public void setOption(String option) {
this.option = option;
}
@Override
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
@Override
public String toString() {
return "MailResourceImpl [pinpointUrl=" + pinpointUrl + ", url=" + url + ", serviceId=" + serviceId + ", senderEmailAddress=" + senderEmailAddress
+ ", option=" + option + ", subject=" + subject + "]";
}
}
@@ -1,13 +0,0 @@
package com.nhn.pinpoint.web.alarm.resource;
public interface SmsResource {
String getPinpointUrl();
String getUrl();
String getServiceId();
String getSenderPhoneNumber();
}
@@ -1,57 +0,0 @@
package com.nhn.pinpoint.web.alarm.resource;
import org.springframework.beans.factory.annotation.Value;
/**
*
* @author koo.taejin
*/
public class SmsResourceImpl implements SmsResource {
@Value("#{dataProps['pinpoint.url']}")
private String pinpointUrl;
@Value("#{dataProps['alarm.sms.url']}")
private String url;
@Value("#{dataProps['alarm.sms.serviceId']}")
private String serviceId;
@Value("#{dataProps['alarm.sms.sender.phoneNumber']}")
private String senderPhoneNumber;
@Override
public String getPinpointUrl() {
return pinpointUrl;
}
public void setPinpointUrl(String pinpointUrl) {
this.pinpointUrl = pinpointUrl;
}
@Override
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
@Override
public String getServiceId() {
return serviceId;
}
public void setServiceId(String serviceId) {
this.serviceId = serviceId;
}
@Override
public String getSenderPhoneNumber() {
return senderPhoneNumber;
}
public void setSenderPhoneNumber(String senderPhoneNumber) {
this.senderPhoneNumber = senderPhoneNumber;
}
@Override
public String toString() {
return "SmsResourceImpl [pinpointUrl=" + pinpointUrl + ", url=" + url + ", serviceId=" + serviceId + ", senderPhoneNumber=" + senderPhoneNumber + "]";
}
}
@@ -1,97 +0,0 @@
package com.nhn.pinpoint.web.alarm.vo;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.type.Alias;
@Alias("alarmContactGroup")
public class AlarmContactGroupResource {
private Integer id;
private String alarmContactGroupName;
private String alarmContactGroupDescrption;
private Date registerTime;
private String registerEmployeeNumber;
private Date modifyTime;
private String modifyEmployeeNumber;
private List<AlarmContactResource> alarmContactList;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAlarmContactGroupName() {
return alarmContactGroupName;
}
public void setAlarmContactGroupName(String alarmContactGroupName) {
this.alarmContactGroupName = alarmContactGroupName;
}
public String getAlarmContactGroupDescrption() {
return alarmContactGroupDescrption;
}
public void setAlarmContactGroupDescrption(String alarmContactGroupDescrption) {
this.alarmContactGroupDescrption = alarmContactGroupDescrption;
}
public List<AlarmContactResource> getAlarmContactList() {
return alarmContactList;
}
public void setAlarmContactList(List<AlarmContactResource> alarmContactList) {
this.alarmContactList = alarmContactList;
}
public Date getRegisterTime() {
return registerTime;
}
public void setRegisterTime(Date registerTime) {
this.registerTime = registerTime;
}
public String getRegisterEmployeeNumber() {
return registerEmployeeNumber;
}
public void setRegisterEmployeeNumber(String registerEmployeeNumber) {
this.registerEmployeeNumber = registerEmployeeNumber;
}
public Date getModifyTime() {
return modifyTime;
}
public void setModifyTime(Date modifyTime) {
this.modifyTime = modifyTime;
}
public String getModifyEmployeeNumber() {
return modifyEmployeeNumber;
}
public void setModifyEmployeeNumber(String modifyEmployeeNumber) {
this.modifyEmployeeNumber = modifyEmployeeNumber;
}
@Override
public String toString() {
return "AlarmContactGroupResource [id=" + id + ", alarmContactGroupName=" + alarmContactGroupName + ", alarmContactGroupDescrption="
+ alarmContactGroupDescrption + ", registerTime=" + registerTime + ", registerEmployeeNumber=" + registerEmployeeNumber + ", modifyTime="
+ modifyTime + ", modifyEmployeeNumber=" + modifyEmployeeNumber + ", alarmContactList=" + alarmContactList + "]";
}
}
@@ -1,44 +0,0 @@
package com.nhn.pinpoint.web.alarm.vo;
import org.apache.ibatis.type.Alias;
@Alias("alarmContact")
public class AlarmContactResource {
private Integer id;
private Integer alarmContactGroupId;
private String phoneNum;
private String emailAddress;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getAlarmContactGroupId() {
return alarmContactGroupId;
}
public void setAlarmContactGroupId(Integer alarmContactGroupId) {
this.alarmContactGroupId = alarmContactGroupId;
}
public String getPhoneNum() {
return phoneNum;
}
public void setPhoneNum(String phoneNum) {
this.phoneNum = phoneNum;
}
public String getEmailAddress() {
return emailAddress;
}
public void setEmailAddress(String emailAddress) {
this.emailAddress = emailAddress;
}
@Override
public String toString() {
return "AlarmContactResource [id=" + id + ", alarmContactGroupId=" + alarmContactGroupId + ", phoneNum=" + phoneNum + ", emailAddress=" + emailAddress
+ "]";
}
}
@@ -1,70 +0,0 @@
package com.nhn.pinpoint.web.alarm.vo;
import org.apache.ibatis.type.Alias;
@Alias("alarm")
public class AlarmResource {
private Integer id;
private String agentId;
private String alarmGroupName;
private String alarmGroupDescrption;
private AlarmRuleGroupResource alarmRuleGroup;
private AlarmContactGroupResource alarmContactGroup;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAgentId() {
return agentId;
}
public void setAgentId(String agentId) {
this.agentId = agentId;
}
public String getAlarmGroupName() {
return alarmGroupName;
}
public void setAlarmGroupName(String alarmGroupName) {
this.alarmGroupName = alarmGroupName;
}
public String getAlarmGroupDescrption() {
return alarmGroupDescrption;
}
public void setAlarmGroupDescrption(String alarmGroupDescrption) {
this.alarmGroupDescrption = alarmGroupDescrption;
}
public AlarmRuleGroupResource getAlarmRuleGroup() {
return alarmRuleGroup;
}
public void setAlarmRuleGroup(AlarmRuleGroupResource alarmRuleGroup) {
this.alarmRuleGroup = alarmRuleGroup;
}
public AlarmContactGroupResource getAlarmContactGroup() {
return alarmContactGroup;
}
public void setAlarmContactGroup(AlarmContactGroupResource alarmContactGroup) {
this.alarmContactGroup = alarmContactGroup;
}
@Override
public String toString() {
return "AlarmResource [id=" + id + ", agentId=" + agentId + ", alarmGroupName=" + alarmGroupName + ", alarmGroupDescrption=" + alarmGroupDescrption
+ ", alarmRuleGroup=" + alarmRuleGroup + ", alarmContactGroup=" + alarmContactGroup + "]";
}
}
@@ -1,55 +0,0 @@
package com.nhn.pinpoint.web.alarm.vo;
import java.util.List;
import org.apache.ibatis.type.Alias;
@Alias("alarmRuleGroup")
public class AlarmRuleGroupResource {
private Integer id;
private String alarmRuleGroupName;
private String alarmRuleGroupDescrption;
private List<AlarmRuleResource> alarmRuleList;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAlarmRuleGroupName() {
return alarmRuleGroupName;
}
public void setAlarmRuleGroupName(String alarmRuleGroupName) {
this.alarmRuleGroupName = alarmRuleGroupName;
}
public String getAlarmRuleGroupDescrption() {
return alarmRuleGroupDescrption;
}
public void setAlarmRuleGroupDescrption(String alarmRuleGroupDescrption) {
this.alarmRuleGroupDescrption = alarmRuleGroupDescrption;
}
public List<AlarmRuleResource> getAlarmRuleList() {
return alarmRuleList;
}
public void setAlarmRuleList(List<AlarmRuleResource> alarmRuleList) {
this.alarmRuleList = alarmRuleList;
}
@Override
public String toString() {
return "AlarmRuleGroupResource [id=" + id + ", alarmRuleGroupName=" + alarmRuleGroupName + ", alarmRuleGroupDescrption="
+ alarmRuleGroupDescrption + ", alarmRuleList=" + alarmRuleList + "]";
}
}
@@ -1,147 +0,0 @@
package com.nhn.pinpoint.web.alarm.vo;
import org.apache.ibatis.type.Alias;
import com.nhn.pinpoint.web.alarm.MainCategory;
import com.nhn.pinpoint.web.alarm.SubCategory;
/**
*
* @author koo.taejin
*/
@Alias("alarmRule")
public class AlarmRuleResource {
private Integer id;
private Integer alarmRuleGroupId;
private Integer alarmRuleSubCategoryId;
private Integer thresholdRule;
private boolean compareRule;
private Integer continuosTime;
private String alarmRuleName;
private String alarmRuleDescrption;
// private MainCategory mainCategory;
// private SubCategory subCategory;
private String mainCategory;
private String subCategory;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getAlarmRuleGroupId() {
return alarmRuleGroupId;
}
public void setAlarmRuleGroupId(Integer alarmRuleGroupId) {
this.alarmRuleGroupId = alarmRuleGroupId;
}
public Integer getAlarmRuleSubCategoryId() {
return alarmRuleSubCategoryId;
}
public void setAlarmRuleSubCategoryId(Integer alarmRuleSubCategoryId) {
this.alarmRuleSubCategoryId = alarmRuleSubCategoryId;
}
public Integer getThresholdRule() {
return thresholdRule;
}
public void setThresholdRule(Integer thresholdRule) {
this.thresholdRule = thresholdRule;
}
public boolean isCompareRule() {
return compareRule;
}
public void setCompareRule(boolean compareRule) {
this.compareRule = compareRule;
}
public Integer getContinuosTime() {
return continuosTime;
}
public void setContinuosTime(Integer continuosTime) {
this.continuosTime = continuosTime;
}
public String getAlarmRuleName() {
return alarmRuleName;
}
public void setAlarmRuleName(String alarmRuleName) {
this.alarmRuleName = alarmRuleName;
}
public String getAlarmRuleDescrption() {
return alarmRuleDescrption;
}
public void setAlarmRuleDescrption(String alarmRuleDescrption) {
this.alarmRuleDescrption = alarmRuleDescrption;
}
public MainCategory getMainCategory() {
return MainCategory.getValue(mainCategory);
}
public void setMainCategory(String mainCategory) {
this.mainCategory = mainCategory;
}
public SubCategory getSubCategory() {
return SubCategory.getValue(subCategory);
}
public void setSubCategory(String subCategory) {
this.subCategory = subCategory;
}
public String ruleToString() {
StringBuilder rule = new StringBuilder();
rule.append(getMainCategory().getName() + " ");
rule.append(getSubCategory().getName() + " ");
rule.append(">=" + thresholdRule + getSubCategory().getUnit() + " ");
rule.append("(" + getContinuosTime() + "ms)");
return rule.toString();
}
@Override
public String toString() {
return "AlarmRuleResource [id=" + id + ", alarmRuleGroupId=" + alarmRuleGroupId + ", alarmRuleSubCategoryId=" + alarmRuleSubCategoryId
+ ", thresholdRule=" + thresholdRule + ", compareRule=" + compareRule + ", continuosTime=" + continuosTime + ", alarmRuleName=" + alarmRuleName
+ ", alarmRuleDescrption=" + alarmRuleDescrption + ", mainCategory=" + mainCategory + ", subCategory=" + subCategory + "]";
}
// public String getMainCategory() {
// return mainCategory;
// }
//
// public void setMainCategory(String mainCategory) {
// this.mainCategory = mainCategory;
// }
//
// public String getSubCategory() {
// return subCategory;
// }
//
// public void setSubCategory(String subCategory) {
// this.subCategory = subCategory;
// }
}
@@ -2,39 +2,27 @@ package com.nhn.pinpoint.web.dao;
import java.util.List;
import com.nhn.pinpoint.web.alarm.vo.AlarmContactGroupResource;
import com.nhn.pinpoint.web.alarm.vo.AlarmContactResource;
import com.nhn.pinpoint.web.alarm.vo.AlarmResource;
import com.nhn.pinpoint.web.alarm.vo.AlarmRuleGroupResource;
import com.nhn.pinpoint.web.alarm.vo.AlarmRuleResource;
import com.nhn.pinpoint.web.alarm.vo.AlarmEmp;
import com.nhn.pinpoint.web.alarm.vo.Rule;
public interface AlarmResourceDao {
public List<Rule> selectAppRule(String applicationName);
public void insertAppRule(List<Rule> rules);
public void deleteAppRule(String applicationName);
public List<String> selectEmpGroupPhoneNumber(String empGroup);
public List<String> selectEmpGroupEmail(String empGroup);
int selectAlarmCount();
public List<String> selectEmpGroupName();
List<AlarmResource> selectAlarmList();
public List<AlarmEmp> selectEmpGroupMember(String alarmGroup);
List<AlarmRuleResource> selectAlarmRuleList();
List<AlarmRuleGroupResource> selectAlarmRuleGroupList();
void insertAlarmContact(AlarmContactResource resource);
List<AlarmContactResource> selectAlarmContactList();
void updateAlarmCountact(AlarmContactResource resource);
void deleteAlarmCountact(AlarmContactResource resource);
void insertAlarmContactGroup(AlarmContactGroupResource resource);
List<AlarmContactGroupResource> selectAlarmContactGroupList();
void updateAlarmContactGroup(AlarmContactGroupResource resource);
void deleteAlarmCountactGroup(AlarmContactGroupResource resource);
public void insertEmpGroupMember(List<AlarmEmp> emps);
public void deleteEmpGroupMember(String groupName);
}
@@ -7,12 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;
import com.nhn.pinpoint.web.alarm.vo.AlarmContactGroupResource;
import com.nhn.pinpoint.web.alarm.vo.AlarmContactResource;
import com.nhn.pinpoint.web.alarm.vo.AlarmEmp;
import com.nhn.pinpoint.web.alarm.vo.AlarmResource;
import com.nhn.pinpoint.web.alarm.vo.AlarmRuleGroupResource;
import com.nhn.pinpoint.web.alarm.vo.AlarmRuleResource;
import com.nhn.pinpoint.web.alarm.vo.Rule;
import com.nhn.pinpoint.web.dao.AlarmResourceDao;
@@ -64,65 +59,4 @@ public class MySqlAlarmResourceDao implements AlarmResourceDao {
public void deleteEmpGroupMember(String groupName) {
getSqlSessionTemplate().insert(NAMESPACE + "deleteAlarmGroupMember", groupName);
}
@Override
public int selectAlarmCount() {
return 1;
}
@Override
public List<AlarmResource> selectAlarmList() {
return getSqlSessionTemplate().selectList(NAMESPACE + "selectAlarmList");
}
@Override
public List<AlarmRuleResource> selectAlarmRuleList() {
return getSqlSessionTemplate().selectList(NAMESPACE + "selectAlarmRuleList", 1);
}
@Override
public List<AlarmRuleGroupResource> selectAlarmRuleGroupList() {
return getSqlSessionTemplate().selectList(NAMESPACE + "selectAlarmRuleGroupList", 1);
}
@Override
public List<AlarmContactResource> selectAlarmContactList() {
return getSqlSessionTemplate().selectList(NAMESPACE + "selectAlarmContactList", 1);
}
@Override
public List<AlarmContactGroupResource> selectAlarmContactGroupList() {
return getSqlSessionTemplate().selectList(NAMESPACE + "selectAlarmContactGroupList", 1);
}
@Override
public void insertAlarmContact(AlarmContactResource resource) {
getSqlSessionTemplate().insert(NAMESPACE + "insertAlarmContact", resource);
}
@Override
public void updateAlarmCountact(AlarmContactResource resource) {
getSqlSessionTemplate().update(NAMESPACE + "updateAlarmContact", resource);
}
@Override
public void deleteAlarmCountact(AlarmContactResource resource) {
getSqlSessionTemplate().update(NAMESPACE + "deleteAlarmContact", resource.getId());
}
@Override
public void insertAlarmContactGroup(AlarmContactGroupResource resource) {
getSqlSessionTemplate().insert(NAMESPACE + "insertAlarmContactGroup", resource);
}
@Override
public void updateAlarmContactGroup(AlarmContactGroupResource resource) {
getSqlSessionTemplate().insert(NAMESPACE + "updateAlarmContactGroup", resource);
}
@Override
public void deleteAlarmCountactGroup(AlarmContactGroupResource resource) {
getSqlSessionTemplate().update(NAMESPACE + "deleteAlarmContactGroup", resource.getId());
}
}
@@ -1,10 +0,0 @@
package com.nhn.pinpoint.web.scheduler;
public interface AlarmScheduler {
void initialize();
void execute();
}
@@ -1,226 +0,0 @@
package com.nhn.pinpoint.web.scheduler;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import com.nhn.pinpoint.web.alarm.AlarmEvent;
import com.nhn.pinpoint.web.alarm.AlarmJob;
import com.nhn.pinpoint.web.alarm.AlarmJobsRepository;
import com.nhn.pinpoint.web.alarm.DefaultAlarmEvent;
import com.nhn.pinpoint.web.alarm.DefaultAlarmJob;
import com.nhn.pinpoint.web.alarm.DefaultAlarmJobsRepository;
import com.nhn.pinpoint.web.alarm.MainCategory;
import com.nhn.pinpoint.web.alarm.SubCategory;
import com.nhn.pinpoint.web.alarm.filter.AlarmCheckFilter;
import com.nhn.pinpoint.web.alarm.filter.AlarmMailSendFilter;
import com.nhn.pinpoint.web.alarm.filter.AlarmSendFilter;
import com.nhn.pinpoint.web.alarm.filter.AlarmSmsSendFilter;
import com.nhn.pinpoint.web.alarm.resource.MailResource;
import com.nhn.pinpoint.web.alarm.resource.SmsResource;
import com.nhn.pinpoint.web.alarm.vo.AlarmContactGroupResource;
import com.nhn.pinpoint.web.alarm.vo.AlarmContactResource;
import com.nhn.pinpoint.web.alarm.vo.AlarmResource;
import com.nhn.pinpoint.web.alarm.vo.AlarmRuleGroupResource;
import com.nhn.pinpoint.web.alarm.vo.AlarmRuleResource;
import com.nhn.pinpoint.web.dao.AlarmResourceDao;
import com.nhn.pinpoint.web.dao.ApplicationIndexDao;
import com.nhn.pinpoint.web.dao.MapStatisticsCallerDao;
import com.nhn.pinpoint.web.vo.Application;
/**
*
* @author koo.taejin
*/
public class DefaultAlarmScheduler implements AlarmScheduler {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private AlarmJobsRepository repository;
@Autowired
MailResource mailResource;
@Autowired
SmsResource smsResource;
@Autowired
private AlarmResourceDao alarmResourceDao;
@Autowired
private ApplicationIndexDao applicationIndexDao;
@Autowired
private MapStatisticsCallerDao mapStatisticsCallerDao;
@Override
public void initialize() {
logger.info("{} initialize.", this.getClass().getName());
DefaultAlarmJobsRepository repository = new DefaultAlarmJobsRepository();
List<Application> applicationList = applicationIndexDao.selectAllApplicationNames();
List<AlarmResource> alarmResourceList = alarmResourceDao.selectAlarmList();
for (AlarmResource alarmResource : alarmResourceList) {
String agentId = alarmResource.getAgentId();
Application application = findApplication(agentId, applicationList);
if (application == null) {
logger.warn("Can't find Application({}).", agentId);
continue;
}
AlarmJob job = createAlarmJob(application, alarmResource);
if (job == null) {
continue;
}
repository.addAlarmJob(application, job);
}
logger.info("{} initilization success(Registred {} Jobs). ", this.getClass().getName(), repository.getTotalJobCount());
synchronized (this) {
this.repository = repository;
}
}
@Override
public void execute() {
logger.info("{} execute.", this.getClass().getName());
AlarmEvent event = createAlarmEvent();
synchronized (this) {
if (this.repository == null) {
logger.warn("{}'s repository is null. this job will be skipped.", this.getClass().getName());
return;
}
int totalJobCount = this.repository.getTotalJobCount();
List<Application> applicationList = this.repository.getRegistedApplicationList();
for (Application application : applicationList) {
executeEachApplication(application, event, totalJobCount);
}
}
}
private Application findApplication(String applicationName, List<Application> applicationList) {
for (Application application : applicationList) {
if (application.getName().equalsIgnoreCase(applicationName)) {
return application;
}
}
return null;
}
private AlarmJob createAlarmJob(Application application, AlarmResource resource) {
DefaultAlarmJob alarmJob = new DefaultAlarmJob(application);
String applicationName = application.getName();
String alarmName = resource.getAlarmGroupName();
AlarmContactGroupResource contactGroup = resource.getAlarmContactGroup();
if (contactGroup == null || CollectionUtils.isEmpty(contactGroup.getAlarmContactList())) {
logger.warn("Application={}, Rule={} does not have contact resource.", applicationName, alarmName);
return null;
}
List<AlarmContactResource> contactResourceList = contactGroup.getAlarmContactList();
List<AlarmSendFilter> alarmSendFilterList = createAlarmSendFilter(application, contactResourceList);
if (CollectionUtils.isEmpty(alarmSendFilterList)) {
logger.warn("Application={}, Rule={} can't find valid contact resource.", applicationName, alarmName);
return null;
}
alarmJob.addFilter(alarmSendFilterList);
AlarmRuleGroupResource ruleGroup = resource.getAlarmRuleGroup();
if (ruleGroup == null || CollectionUtils.isEmpty(ruleGroup.getAlarmRuleList())) {
logger.warn("Application={}, Rule={} does not have rule resource.", applicationName, alarmName);
return null;
}
List<AlarmRuleResource> alarmRuleList = ruleGroup.getAlarmRuleList();
List<AlarmCheckFilter> alarmCheckFilterList = createAlarmCheckFilter(application, alarmRuleList);
// alarmJob.addFilter(alarmCheckFilterList);
if (CollectionUtils.isEmpty(alarmCheckFilterList)) {
logger.warn("Application={}, Rule={} can't find valid rule resource.", applicationName, alarmName);
return null;
}
return alarmJob;
}
private List<AlarmSendFilter> createAlarmSendFilter(Application application, List<AlarmContactResource> contactResourceList) {
List<String> phoneNumberList = new ArrayList<String>();
List<String> emailAddressList = new ArrayList<String>();
for (AlarmContactResource contactResource : contactResourceList) {
String phoneNumber = contactResource.getPhoneNum();
if (!StringUtils.isEmpty(phoneNumber)) {
phoneNumberList.add(phoneNumber);
}
String emailAddress = contactResource.getEmailAddress();
if (!StringUtils.isEmpty(emailAddress)) {
emailAddressList.add(emailAddress);
}
}
List<AlarmSendFilter> alarmSendFilter = new ArrayList<AlarmSendFilter>();
if (!CollectionUtils.isEmpty(phoneNumberList)) {
AlarmSendFilter smsSendFilter = new AlarmSmsSendFilter(application, smsResource, phoneNumberList);
alarmSendFilter.add(smsSendFilter);
}
if (!CollectionUtils.isEmpty(emailAddressList)) {
AlarmSendFilter emailSendFilter = new AlarmMailSendFilter(application, mailResource, emailAddressList);
alarmSendFilter.add(emailSendFilter);
}
return alarmSendFilter;
}
private List<AlarmCheckFilter> createAlarmCheckFilter(Application application, List<AlarmRuleResource> ruleResourceList) {
List<AlarmCheckFilter> alarmCheckFilterList = new ArrayList<AlarmCheckFilter>();
for (AlarmRuleResource ruleResource : ruleResourceList) {
MainCategory mainCategory = ruleResource.getMainCategory();
SubCategory subCategory = ruleResource.getSubCategory();
AlarmCheckFilter alarmCheckFilter = subCategory.createAlarmFilter(application, mainCategory, ruleResource);
if (alarmCheckFilter == null) {
logger.warn("{}({}) can't build Filter.", ruleResource.getAlarmRuleName(), ruleResource.getId());
continue;
}
alarmCheckFilterList.add(alarmCheckFilter);
}
return alarmCheckFilterList;
}
private AlarmEvent createAlarmEvent() {
// DefaultAlarmEvent event = new DefaultAlarmEvent(System.currentTimeMillis(), mapStatisticsCallerDao);
DefaultAlarmEvent event = null;
return event;
}
private void executeEachApplication(Application application, AlarmEvent event, int totalJobCount) {
List<AlarmJob> jobList = repository.getAlarmJob(application);
AtomicInteger index = new AtomicInteger(1);
for (AlarmJob job : jobList) {
logger.debug("{} ({}/{}) jobs start(TotalJobCount={}).", application.getName(), index.getAndIncrement(), jobList.size(), totalJobCount);
job.execute(event);
}
}
}
@@ -1,25 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd
">
<description>Spring Batch infrastructure beans.</description>
<bean id="alarmScheduler" class="com.nhn.pinpoint.web.scheduler.DefaultAlarmScheduler" init-method="initialize"/>
<task:scheduler id="batchSchduler" pool-size="2" />
<task:scheduled-tasks scheduler="batchSchduler">
<task:scheduled ref="alarmScheduler" method="execute" fixed-delay="300000" /> <!-- 5분 -->
<task:scheduled ref="alarmScheduler" method="initialize" fixed-delay="1800000" /> <!-- 30분 -->
</task:scheduled-tasks>
</beans>
@@ -3,162 +3,6 @@
<mapper namespace="com.nhn.pinpoint.web.dao.AlarmResourceDao">
<resultMap id="alarmMap" type="alarm">
<result property="id" column="id"/>
<result property="alarmGroupName" column="alrm_grp_nm" />
<result property="alarmGroupDescrption" column="alrm_grp_desc" />
<result property="agentId" column="agt_id" />
<association property="alarmRuleGroup" column="alrm_rule_grp_id" javaType="alarmRuleGroup" select="selectAlarmRuleGroupList"/>
<association property="alarmContactGroup" column="alrm_cntt_grp_id" javaType="alarmContactGroup" select="selectAlarmContactGroupList"/>
</resultMap>
<resultMap id="alarmRuleMap" type="alarmRule">
<result property="id" column="id"/>
<result property="thresholdRule" column="thrhd_rule" />
<result property="compareRule" column="cmpr_rule" />
<result property="continuosTime" column="cntu_tm" />
<result property="alarmRuleName" column="alrm_rule_nm" />
<result property="alarmRuleDescrption" column="alrm_rule_desc" />
<result property="subCategory" column="sb_catg_nm" />
<result property="mainCategory" column="main_catg_nm" />
</resultMap>
<resultMap id="alarmRuleGroupMap" type="alarmRuleGroup">
<result property="id" column="id"/>
<result property="alarmRuleGroupName" column="alrm_rule_grp_nm" />
<result property="alarmRuleGroupDescrption" column="alrm_rule_grp_desc" />
<collection property="alarmRuleList" javaType="ArrayList" column="id" ofType="alarmRule" select="selectAlarmRuleList"> </collection>
</resultMap>
<resultMap id="alarmContactMap" type="alarmContact">
<result property="id" column="id"/>
<result property="phoneNum" column="phn_no" />
<result property="emailAddress" column="mail_addr" />
</resultMap>
<resultMap id="alarmContactGroupMap" type="alarmContactGroup">
<result property="id" column="id"/>
<result property="alarmId" column="alrm_grp_id" />
<result property="alarmContactGroupName" column="alrm_cntt_grp_nm" />
<result property="alarmContactGroupDescrption" column="alrm_cntt_grp_desc" />
<result property="registerTime" column="reg_ymd" />
<result property="registerEmployeeNumber" column="reg_emp_no" />
<result property="modifyTime" column="mod_ymd" />
<result property="modifyEmployeeNumber" column="mod_emp_no" />
<collection property="alarmContactList" javaType="ArrayList" column="id" ofType="alarmContact" select="selectAlarmContactList"> </collection>
</resultMap>
<select id="selectAlarmList" resultMap="alarmMap">
SELECT
*
FROM alrm_grp
</select>
<select id="selectAlarmRuleList" resultMap="alarmRuleMap" parameterType="int">
SELECT
rule.id AS id,
rule.alrm_rule_grp_id AS alarmRuleGroupId,
rule.alrm_rule_sb_catg_id AS alrm_rule_sb_catg_id,
rule.thrhd_rule AS thrhd_rule,
rule.cmpr_rule AS cmpr_rule,
rule.cntu_tm AS cntu_tm,
rule.alrm_rule_nm AS alrm_rule_nm,
rule.alrm_rule_desc AS alrm_rule_desc,
sub_category.sb_catg_nm AS sb_catg_nm,
main_category.catg_nm AS main_catg_nm
FROM alrm_rule_info AS rule
INNER JOIN alrm_rule_sb_catg AS sub_category ON rule.alrm_rule_sb_catg_id = sub_category.id
INNER JOIN alrm_rule_catg AS main_category ON sub_category.prnt_catg_id = main_category.id
WHERE rule.alrm_rule_grp_id = #{id}
</select>
<select id="selectAlarmRuleGroupList" resultMap="alarmRuleGroupMap" parameterType="int">
SELECT
*
FROM alrm_rule_grp
WHERE id = #{id}
</select>
<select id="selectAlarmContactList" resultMap="alarmContactMap" parameterType="int">
SELECT
*
FROM alrm_cntt_info
WHERE alrm_cntt_grp_id = #{id}
</select>
<select id="selectAlarmContactGroupList" resultMap="alarmContactGroupMap" parameterType="int">
SELECT
*
FROM alrm_cntt_grp
WHERE id = #{id}
</select>
<insert id="insertAlarmContact" parameterType="alarmContact" useGeneratedKeys="true" keyProperty="id">
INSERT INTO alrm_cntt_info (
alrm_cntt_grp_id,
phn_no,
mail_addr
) VALUES (
#{alarmContactGroupId},
#{phoneNum},
#{emailAddress}
)
</insert>
<update id="updateAlarmContact" parameterType="alarmContact">
UPDATE alrm_cntt_info
SET alrm_cntt_grp_id = #{alarmContactGroupId},
phn_no = #{phoneNum},
mail_addr = #{emailAddress}
WHERE id = #{id}
</update>
<delete id="deleteAlarmContact" parameterType="int">
DELETE FROM alrm_cntt_info
WHERE id = #{id}
</delete>
<insert id="insertAlarmContactGroup" parameterType="alarmContactGroup" useGeneratedKeys="true" keyProperty="id">
INSERT INTO alrm_cntt_grp (
alrm_cntt_grp_nm,
alrm_cntt_grp_desc,
reg_ymd,
reg_emp_no,
mod_ymd,
mod_emp_no
) VALUES (
#{alarmContactGroupName},
#{alarmContactGroupDescrption},
now(),
#{registerEmployeeNumber},
now(),
#{modifyEmployeeNumber}
)
</insert>
<update id="updateAlarmContactGroup" parameterType="alarmContactGroup">
UPDATE alrm_cntt_grp
SET alrm_cntt_grp_nm = #{alarmContactGroupName},
alrm_cntt_grp_desc = #{alarmContactGroupDescrption},
mod_ymd = CURRENT_DATETIME,
mod_emp_no = #{modifyEmployeeNumber}
WHERE id = #{id}
</update>
<update id="deleteAlarmContactGroup" parameterType="int">
DELETE FROM alrm_cntt_grp
WHERE id = #{id}
</update>
<select id="selectRules" resultType="rule" parameterType="String">
SELECT *
FROM alarm_rule
@@ -32,95 +32,4 @@ public class AlarmJobTest {
parameters.put("schedule.scheduledFireTime", new JobParameter(new Date()));
return new JobParameters(parameters);
}
// private final int threshold = 100;
// private final int ratesThreshold = 50;
//
// private AlarmRuleResource checkCountRule;
// private AlarmRuleResource checkRateRule;
//
// @Before
// public void setup() {
// this.checkCountRule = new AlarmRuleResource();
// checkCountRule.setThresholdRule(threshold);
//
// this.checkRateRule = new AlarmRuleResource();
// checkRateRule.setThresholdRule(ratesThreshold);
// }
//
// @Test
// public void simpleTest1() {
// int count = 50;
// int totalCount = 100;
//
// boolean isSuccess = execute(count, totalCount);
//
// Assert.assertFalse(isSuccess);
// }
//
// @Test
// public void simpleTest2() {
// int count = 150;
// int totalCount = 400;
//
// boolean isSuccess = execute(count, totalCount);
//
// Assert.assertFalse(isSuccess);
// }
//
// @Test
// public void simpleTest3() {
// int count = 150;
// int totalCount = 200;
//
// boolean isSuccess = execute(count, totalCount);
//
// Assert.assertTrue(isSuccess);
// }
//
// private boolean execute(int count, int totalCount) {
// Application application = new Application("TEST", ServiceType.UNDEFINED);
// DefaultAlarmJob job = new DefaultAlarmJob(application);
//
// SimpleCheckCountFilter checkCountFilter = new SimpleCheckCountFilter(count);
// checkCountFilter.initialize(checkCountRule);
//
// SimpleCheckRateFilter checkRateFilter = new SimpleCheckRateFilter(count, totalCount);
// checkRateFilter.initialize(checkRateRule);
//
// job.addFilter(checkCountFilter);
// job.addFilter(checkRateFilter);
//
// return job.execute(null);
// }
//
// class SimpleCheckCountFilter extends AlarmCheckCountFilter {
// private final int count;
//
// public SimpleCheckCountFilter(int count) {
// super(0);
// this.count = count;
// }
//
// @Override
// public void check() {
// decideResult(count);
// }
// }
//
// class SimpleCheckRateFilter extends AlarmCheckRatesFilter {
// private final int count;
// private final int totalCount;
//
// public SimpleCheckRateFilter(int count, int totalCount) {
// this.count = count;
// this.totalCount = totalCount;
// }
//
// @Override
// public void check() {
// check(count, totalCount);
// }
// }
}
@@ -1,98 +0,0 @@
package com.nhn.pinpoint.web.alarm;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
import com.nhn.pinpoint.web.alarm.filter.AlarmCheckCountFilter;
import com.nhn.pinpoint.web.alarm.filter.AlarmCheckRatesFilter;
import com.nhn.pinpoint.web.alarm.vo.AlarmRuleResource;
public class CheckFilterTest {
//
// private final int threshold = 100;
// private final int ratesThreshold = 50;
//
// private AlarmRuleResource checkCountRule;
// private AlarmRuleResource checkRateRule;
//
// @Before
// public void setup() {
// this.checkCountRule = new AlarmRuleResource();
// checkCountRule.setThresholdRule(threshold);
//
// this.checkRateRule = new AlarmRuleResource();
// checkRateRule.setThresholdRule(ratesThreshold);
// }
//
// @Test
// public void checkCountTest1() {
// SimpleCheckCountFilter simpleCheckFilter = new SimpleCheckCountFilter(30);
// simpleCheckFilter.initialize(checkCountRule);
//
// simpleCheckFilter.check();
// boolean isSuccess = simpleCheckFilter.isDetected();
// Assert.assertFalse(isSuccess);
// }
//
// @Test
// public void checkCountTest2() {
// SimpleCheckCountFilter simpleCheckFilter = new SimpleCheckCountFilter(150);
// simpleCheckFilter.initialize(checkCountRule);
//
// simpleCheckFilter.check();
// boolean isSuccess = simpleCheckFilter.isDetected();
// Assert.assertTrue(isSuccess);
// }
//
// @Test
// public void checkRateTest1() {
// SimpleCheckRateFilter simpleCheckFilter = new SimpleCheckRateFilter(30, 100);
// simpleCheckFilter.initialize(checkRateRule);
//
// simpleCheckFilter.check();
// boolean isSuccess = simpleCheckFilter.isDetected();
// Assert.assertFalse(isSuccess);
// }
//
// @Test
// public void checkRateTest2() {
// SimpleCheckRateFilter simpleCheckFilter = new SimpleCheckRateFilter(70, 100);
// simpleCheckFilter.initialize(checkRateRule);
//
// simpleCheckFilter.check();
// boolean isSuccess = simpleCheckFilter.isDetected();
// Assert.assertTrue(isSuccess);
// }
//
// class SimpleCheckCountFilter extends AlarmCheckCountFilter {
// private final int count;
//
// public SimpleCheckCountFilter(int count) {
// super(0);
// this.count = count;
// }
//
// @Override
// public void check() {
// decideResult(count);
// }
// }
//
// class SimpleCheckRateFilter extends AlarmCheckRatesFilter {
// private final int count;
// private final int totalCount;
//
// public SimpleCheckRateFilter(int count, int totalCount) {
// this.count = count;
// this.totalCount = totalCount;
// }
//
// @Override
// public void check() {
// check(count, totalCount);
// }
// }
}
@@ -6,7 +6,7 @@ import static org.junit.Assert.assertNotSame;
import org.junit.Test;
import com.nhn.pinpoint.web.alarm.filter.SlowCountFilter;
import com.nhn.pinpoint.web.alarm.checker.SlowCountFilter;
import com.nhn.pinpoint.web.alarm.vo.Rule;
public class CheckerCategoryTest {
@@ -15,8 +15,8 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.nhn.pinpoint.common.ServiceType;
import com.nhn.pinpoint.web.alarm.DataCollectorFactory.DataCollectorCategory;
import com.nhn.pinpoint.web.alarm.checker.AlarmChecker;
import com.nhn.pinpoint.web.alarm.collector.ResponseTimeDataCollector;
import com.nhn.pinpoint.web.alarm.filter.AlarmCheckFilter;
import com.nhn.pinpoint.web.alarm.vo.Rule;
import com.nhn.pinpoint.web.applicationmap.histogram.TimeHistogram;
import com.nhn.pinpoint.web.dao.MapResponseDao;
@@ -71,7 +71,7 @@ public class ProcessorTest {
Application application = new Application(SERVICE_NAME, ServiceType.TOMCAT);
ResponseTimeDataCollector collector = new ResponseTimeDataCollector(DataCollectorCategory.RESPONSE_TIME, application, mockMapResponseDAO, 3000000, System.currentTimeMillis());
Rule rule = new Rule(SERVICE_NAME, CheckerCategory.SLOW_COUNT.getName(), 74, "testGroup", false, false);
AlarmCheckFilter filter = CheckerCategory.SLOW_COUNT.createChecker(collector, rule);
AlarmChecker filter = CheckerCategory.SLOW_COUNT.createChecker(collector, rule);
filter = processor.process(filter);
assertTrue(filter.isDetected());
@@ -1,43 +0,0 @@
package com.nhn.pinpoint.web.alarm;
import junit.framework.Assert;
import org.junit.Test;
import com.nhn.pinpoint.common.ServiceType;
import com.nhn.pinpoint.web.alarm.filter.AlarmFilter;
import com.nhn.pinpoint.web.alarm.vo.AlarmRuleResource;
import com.nhn.pinpoint.web.vo.Application;
public class SubCategoryTest {
// @Test
// public void getValueTest() {
// SubCategory category = SubCategory.getValue(1);
// Assert.assertEquals(SubCategory.FAIL_RATE, category);
//
// category = SubCategory.getValue(2);
// Assert.assertEquals(SubCategory.FAIL_COUNT, category);
//
// category = SubCategory.getValue(3);
// Assert.assertEquals(SubCategory.SLOW_RATE, category);
//
// category = SubCategory.getValue(4);
// Assert.assertEquals(SubCategory.SLOW_COUNT, category);
// }
//
//
// @Test
// public void checkTest() throws Exception {
// Application application = new Application("TEST", ServiceType.UNDEFINED);
// AlarmRuleResource rule = new AlarmRuleResource();
//
// AlarmFilter filter = SubCategory.FAIL_RATE.createAlarmFilter(application, MainCategory.REQUEST_SENDED, rule);
// Assert.assertNotNull(filter);
//
// filter = SubCategory.FAIL_RATE.createAlarmFilter(application, MainCategory.REQUEST_RECEIVED, rule);
// Assert.assertNull(filter);
// }
//
}
@@ -10,8 +10,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.nhn.pinpoint.web.alarm.filter.AlarmCheckFilter;
import com.nhn.pinpoint.web.alarm.filter.SlowCountFilter;
import com.nhn.pinpoint.web.alarm.checker.AlarmChecker;
import com.nhn.pinpoint.web.alarm.checker.SlowCountFilter;
import com.nhn.pinpoint.web.alarm.vo.Rule;
@RunWith(SpringJUnit4ClassRunner.class)
@@ -37,7 +37,7 @@ public class WriterTest {
}
};
List<AlarmCheckFilter> checkers = new LinkedList<AlarmCheckFilter>();
List<AlarmChecker> checkers = new LinkedList<AlarmChecker>();
checkers.add(checker);
writer.write(checkers);
}
@@ -58,7 +58,7 @@ public class WriterTest {
}
};
List<AlarmCheckFilter> checkers = new LinkedList<AlarmCheckFilter>();
List<AlarmChecker> checkers = new LinkedList<AlarmChecker>();
checkers.add(checker);
writer.write(checkers);
}
@@ -12,6 +12,7 @@ import org.junit.Test;
import com.nhn.pinpoint.common.ServiceType;
import com.nhn.pinpoint.web.alarm.CheckerCategory;
import com.nhn.pinpoint.web.alarm.DataCollectorFactory.DataCollectorCategory;
import com.nhn.pinpoint.web.alarm.checker.ErrorCountChecker;
import com.nhn.pinpoint.web.alarm.collector.ResponseTimeDataCollector;
import com.nhn.pinpoint.web.alarm.vo.Rule;
import com.nhn.pinpoint.web.applicationmap.histogram.TimeHistogram;
@@ -11,6 +11,7 @@ import org.junit.Test;
import com.nhn.pinpoint.common.ServiceType;
import com.nhn.pinpoint.web.alarm.CheckerCategory;
import com.nhn.pinpoint.web.alarm.DataCollectorFactory.DataCollectorCategory;
import com.nhn.pinpoint.web.alarm.checker.ErrorRateChecker;
import com.nhn.pinpoint.web.alarm.collector.ResponseTimeDataCollector;
import com.nhn.pinpoint.web.alarm.vo.Rule;
import com.nhn.pinpoint.web.applicationmap.histogram.TimeHistogram;
@@ -14,6 +14,8 @@ import com.nhn.pinpoint.common.bo.AgentStatMemoryGcBo.Builder;
import com.nhn.pinpoint.web.alarm.CheckerCategory;
import com.nhn.pinpoint.web.alarm.DataCollectorFactory;
import com.nhn.pinpoint.web.alarm.DataCollectorFactory.DataCollectorCategory;
import com.nhn.pinpoint.web.alarm.checker.AgentChecker;
import com.nhn.pinpoint.web.alarm.checker.GcCountChecker;
import com.nhn.pinpoint.web.alarm.collector.AgentStatDataCollector;
import com.nhn.pinpoint.web.alarm.vo.Rule;
import com.nhn.pinpoint.web.dao.AgentStatDao;
@@ -18,6 +18,8 @@ import com.nhn.pinpoint.common.bo.AgentStatMemoryGcBo.Builder;
import com.nhn.pinpoint.web.alarm.CheckerCategory;
import com.nhn.pinpoint.web.alarm.DataCollectorFactory;
import com.nhn.pinpoint.web.alarm.DataCollectorFactory.DataCollectorCategory;
import com.nhn.pinpoint.web.alarm.checker.AgentChecker;
import com.nhn.pinpoint.web.alarm.checker.HeapUsageRateChecker;
import com.nhn.pinpoint.web.alarm.collector.AgentStatDataCollector;
import com.nhn.pinpoint.web.alarm.vo.Rule;
import com.nhn.pinpoint.web.dao.AgentStatDao;
@@ -14,6 +14,8 @@ import com.nhn.pinpoint.common.bo.AgentStatMemoryGcBo;
import com.nhn.pinpoint.web.alarm.CheckerCategory;
import com.nhn.pinpoint.web.alarm.DataCollectorFactory;
import com.nhn.pinpoint.web.alarm.DataCollectorFactory.DataCollectorCategory;
import com.nhn.pinpoint.web.alarm.checker.AgentChecker;
import com.nhn.pinpoint.web.alarm.checker.JvmCpuUsageRateChecker;
import com.nhn.pinpoint.web.alarm.collector.AgentStatDataCollector;
import com.nhn.pinpoint.web.alarm.vo.Rule;
import com.nhn.pinpoint.web.dao.AgentStatDao;
@@ -12,6 +12,7 @@ import com.nhn.pinpoint.common.ServiceType;
import com.nhn.pinpoint.web.alarm.CheckerCategory;
import com.nhn.pinpoint.web.alarm.DataCollectorFactory;
import com.nhn.pinpoint.web.alarm.DataCollectorFactory.DataCollectorCategory;
import com.nhn.pinpoint.web.alarm.checker.ResponseCountChecker;
import com.nhn.pinpoint.web.alarm.collector.ResponseTimeDataCollector;
import com.nhn.pinpoint.web.alarm.vo.Rule;
import com.nhn.pinpoint.web.applicationmap.histogram.TimeHistogram;
@@ -12,6 +12,7 @@ import org.junit.Test;
import com.nhn.pinpoint.common.ServiceType;
import com.nhn.pinpoint.web.alarm.CheckerCategory;
import com.nhn.pinpoint.web.alarm.DataCollectorFactory.DataCollectorCategory;
import com.nhn.pinpoint.web.alarm.checker.SlowCountFilter;
import com.nhn.pinpoint.web.alarm.collector.DataCollector;
import com.nhn.pinpoint.web.alarm.collector.ResponseTimeDataCollector;
import com.nhn.pinpoint.web.alarm.vo.Rule;
@@ -12,6 +12,7 @@ import org.junit.Test;
import com.nhn.pinpoint.common.ServiceType;
import com.nhn.pinpoint.web.alarm.CheckerCategory;
import com.nhn.pinpoint.web.alarm.DataCollectorFactory.DataCollectorCategory;
import com.nhn.pinpoint.web.alarm.checker.SlowRatesFilter;
import com.nhn.pinpoint.web.alarm.collector.ResponseTimeDataCollector;
import com.nhn.pinpoint.web.alarm.vo.Rule;
import com.nhn.pinpoint.web.applicationmap.histogram.TimeHistogram;
@@ -29,12 +29,6 @@
com.nhn.pinpoint.web.alarm"
/>
<!--
<context:component-scan base-package="com.nhn.pinpoint.web.dao.hbase,
com.nhn.pinpoint.web.service,
com.nhn.pinpoint.web.mapper" />
-->
<util:properties id="dataProps" location="classpath:data.properties"/>
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
@@ -50,10 +44,6 @@
<import resource="classpath:applicationContext-datasource.xml" />
<import resource="classpath:applicationContext-dao-config.xml" />
<import resource="classpath:applicationContext-batch.xml" />
<!--
<import resource="classpath:applicationContext-scheduler.xml" />
-->
<bean id="trace" class="com.nhn.pinpoint.collector.dao.hbase.HbaseTraceDao"/>
<bean class="com.nhn.pinpoint.collector.dao.hbase.HbaseAgentInfoDao"/>