diff --git a/web/src/main/java/com/navercorp/pinpoint/web/alarm/AlarmMailTemplate.java b/web/src/main/java/com/navercorp/pinpoint/web/alarm/AlarmMailTemplate.java index 70e1be9ad..8f7978233 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/alarm/AlarmMailTemplate.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/alarm/AlarmMailTemplate.java @@ -30,8 +30,7 @@ public class AlarmMailTemplate { body.append(LINE_FEED); body.append(String.format("Rule : %s", rule.getCheckerName())); body.append(LINE_FEED); - body.append(String.format("%s value is %s during the past 5 mins.(Threshold : %s%s)", rule.getCheckerName(), checker.getDetectedValue(), rule.getThreshold(), checker.getUnit())); - body.append(LINE_FEED); + body.append(checker.getEmailMessage()); body.append(String.format(LINK_FORMAT, pinpointUrl, pinpointUrl)); return body.toString(); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/alarm/AlarmReader.java b/web/src/main/java/com/navercorp/pinpoint/web/alarm/AlarmReader.java index 8933a23d7..a5b4a70cd 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/alarm/AlarmReader.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/alarm/AlarmReader.java @@ -21,8 +21,6 @@ import com.nhn.pinpoint.web.dao.ApplicationIndexDao; import com.nhn.pinpoint.web.vo.Application; public class AlarmReader implements ItemReader, StepExecutionListener { - - private final static long SLOT_INTERVAL = 300000; @Autowired private DataCollectorFactory dataCollectorFactory; @@ -79,7 +77,7 @@ public class AlarmReader implements ItemReader, StepExecutionL DataCollector collector = collectorMap.get(checkerCategory); if(collector == null) { - collector = dataCollectorFactory.createDataCollector(checkerCategory, application, timeSlotEndTime, SLOT_INTERVAL); + collector = dataCollectorFactory.createDataCollector(checkerCategory, application, timeSlotEndTime); collectorMap.put(collector.getDataCollectorCategory(), collector); } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/alarm/AlarmWriter.java b/web/src/main/java/com/navercorp/pinpoint/web/alarm/AlarmWriter.java index 1035be1f1..8c1172810 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/alarm/AlarmWriter.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/alarm/AlarmWriter.java @@ -84,16 +84,18 @@ public class AlarmWriter implements ItemWriter { CloseableHttpClient client = HttpClients.createDefault(); try { - List nvps = new ArrayList(); - nvps.add(new BasicNameValuePair("serviceId", SMS_SERVICE_ID)); - nvps.add(new BasicNameValuePair("sendMdn", QUOTATATION + SENDER_NUMBER + QUOTATATION)); - nvps.add(new BasicNameValuePair("receiveMdnList",convertToReceiverFormat(receivers))); - nvps.add(new BasicNameValuePair("content", QUOTATATION + makeSmsMessage(checker) + QUOTATATION)); - - HttpGet get = new HttpGet(smsServerUrl + "?" + URLEncodedUtils.format(nvps, "UTF-8")); - logger.debug("SMSServer url : {}", get.getURI()); - HttpResponse response = client.execute(get); - logger.debug("SMSServer call result ={}", EntityUtils.toString(response.getEntity())); + for(String message : checker.getSmsMessage()) { + List nvps = new ArrayList(); + nvps.add(new BasicNameValuePair("serviceId", SMS_SERVICE_ID)); + nvps.add(new BasicNameValuePair("sendMdn", QUOTATATION + SENDER_NUMBER + QUOTATATION)); + nvps.add(new BasicNameValuePair("receiveMdnList",convertToReceiverFormat(receivers))); + nvps.add(new BasicNameValuePair("content", QUOTATATION + message + QUOTATATION)); + + HttpGet get = new HttpGet(smsServerUrl + "?" + URLEncodedUtils.format(nvps, "UTF-8")); + logger.debug("SMSServer url : {}", get.getURI()); + HttpResponse response = client.execute(get); + logger.debug("SMSServer call result ={}", EntityUtils.toString(response.getEntity())); + } } catch (Exception e) { logger.warn(e.getMessage(), e); } finally { @@ -105,12 +107,6 @@ public class AlarmWriter implements ItemWriter { } } - private String makeSmsMessage(AlarmCheckFilter checker) { - Rule rule = checker.getRule(); - return String.format("[PINPOINT Alarm - %s] %s is %s (Threshold : %s%s)", rule.getApplicationId(), rule.getCheckerName(), checker.getDetectedValue(), rule.getThreshold(), checker.getUnit()); - } - - private String convertToReceiverFormat(List receivers) { List result = new ArrayList(); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/alarm/CheckerCategory.java b/web/src/main/java/com/navercorp/pinpoint/web/alarm/CheckerCategory.java index 95c512034..dcf695f31 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/alarm/CheckerCategory.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/alarm/CheckerCategory.java @@ -4,11 +4,15 @@ import java.util.LinkedList; import java.util.List; import com.nhn.pinpoint.web.alarm.DataCollectorFactory.DataCollectorCategory; +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; @@ -49,8 +53,28 @@ public enum CheckerCategory { public AlarmCheckFilter 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) { + return new HeapUsageRateChecker((AgentStatDataCollector)dataCollector, rule); + } + }, + + GC_COUNT("GC_COUNT", DataCollectorCategory.AGENT_STAT) { + @Override + public AlarmCheckFilter 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) { + return new JvmCpuUsageRateChecker((AgentStatDataCollector)dataCollector, rule); + } + }; public static CheckerCategory getValue(String value) { for (CheckerCategory category : CheckerCategory.values()) { diff --git a/web/src/main/java/com/navercorp/pinpoint/web/alarm/DataCollectorFactory.java b/web/src/main/java/com/navercorp/pinpoint/web/alarm/DataCollectorFactory.java index 400efd6c1..55ca99cc2 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/alarm/DataCollectorFactory.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/alarm/DataCollectorFactory.java @@ -3,28 +3,44 @@ package com.nhn.pinpoint.web.alarm; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +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.dao.hbase.HbaseAgentStatDao; +import com.nhn.pinpoint.web.dao.hbase.HbaseApplicationIndexDao; import com.nhn.pinpoint.web.dao.hbase.HbaseMapResponseTimeDao; import com.nhn.pinpoint.web.vo.Application; @Component public class DataCollectorFactory { + + public final static long SLOT_INTERVAL_FIVE_MIN = 300000; + + public final static long SLOT_INTERVAL_THREE_MIN = 180000; @Autowired private HbaseMapResponseTimeDao hbaseMapResponseTimeDao; - public DataCollector createDataCollector(CheckerCategory checker, Application application, long timeSlotEndTime, long slotInterval) { + @Autowired + private HbaseAgentStatDao hbaseAgentStatDao; + + @Autowired + private HbaseApplicationIndexDao hbaseApplicationIndexDao; + + public DataCollector createDataCollector(CheckerCategory checker, Application application, long timeSlotEndTime) { switch (checker.getDataCollectorCategory()) { case RESPONSE_TIME: - return new ResponseTimeDataCollector(application, hbaseMapResponseTimeDao, timeSlotEndTime, slotInterval); + return new ResponseTimeDataCollector(DataCollectorCategory.RESPONSE_TIME, application, hbaseMapResponseTimeDao, timeSlotEndTime, SLOT_INTERVAL_FIVE_MIN); + case AGENT_STAT: + return new AgentStatDataCollector(DataCollectorCategory.AGENT_STAT, application, hbaseAgentStatDao, hbaseApplicationIndexDao, timeSlotEndTime, SLOT_INTERVAL_THREE_MIN); } - throw new RuntimeException("not create DataCollector : " + checker.getName()); + throw new IllegalArgumentException("not create DataCollector : " + checker.getName()); } public enum DataCollectorCategory { - RESPONSE_TIME; + RESPONSE_TIME, + AGENT_STAT; } } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/alarm/SubCategory.java b/web/src/main/java/com/navercorp/pinpoint/web/alarm/SubCategory.java index 0e156f503..b44878a4e 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/alarm/SubCategory.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/alarm/SubCategory.java @@ -118,7 +118,8 @@ public enum SubCategory { AlarmFilter createAlarmFilter(Application application, AlarmRuleResource rule) throws Exception { List parentSupportCategoryList = getParentSupportCategoryList(); if (parentSupportCategoryList.size() == 1) { - return createAlarmFilter(application, parentSupportCategoryList.get(0), rule); +// return createAlarmFilter(application, parentSupportCategoryList.get(0), rule); + return null; } else { throw new Exception("Ambiguous ParentCategory Exception"); } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/alarm/collector/AgentStatDataCollector.java b/web/src/main/java/com/navercorp/pinpoint/web/alarm/collector/AgentStatDataCollector.java new file mode 100644 index 000000000..df5548206 --- /dev/null +++ b/web/src/main/java/com/navercorp/pinpoint/web/alarm/collector/AgentStatDataCollector.java @@ -0,0 +1,99 @@ +package com.nhn.pinpoint.web.alarm.collector; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; + +import com.nhn.pinpoint.web.alarm.DataCollectorFactory.DataCollectorCategory; +import com.nhn.pinpoint.web.dao.AgentStatDao; +import com.nhn.pinpoint.web.dao.ApplicationIndexDao; +import com.nhn.pinpoint.web.vo.AgentStat; +import com.nhn.pinpoint.web.vo.Application; +import com.nhn.pinpoint.web.vo.Range; + +public class AgentStatDataCollector extends DataCollector { + + private final Application application; + private final AgentStatDao agentStatDao; + private final ApplicationIndexDao applicationIndexDao; + private final long timeSlotEndTime; + private final long slotInterval; + private final AtomicBoolean init =new AtomicBoolean(false);// 동시에 checker들이 동작 되면 동시성 고려가 필요함 + + private final Map agentHeapUsageRate = new HashMap(); + private final Map agentGcCount = new HashMap(); + private final Map agentJvmCpuUsageRate = new HashMap(); + + public AgentStatDataCollector(DataCollectorCategory category, Application application, AgentStatDao agentStatDao, ApplicationIndexDao applicationIndexDao, long timeSlotEndTime, long slotInterval) { + super(category); + this.application = application; + this.agentStatDao = agentStatDao; + this.applicationIndexDao = applicationIndexDao; + this.timeSlotEndTime = timeSlotEndTime; + this.slotInterval = slotInterval; + } + + @Override + public void collect() { + if (init.get()) { + return; + } + + Range range = Range.createUncheckedRange(timeSlotEndTime - slotInterval, timeSlotEndTime); + List agentIds = applicationIndexDao.selectAgentIds(application.getName()); + + for(String agentId : agentIds) { + List scanAgentStatList = agentStatDao.scanAgentStatList(agentId, range); + int listSize = scanAgentStatList.size(); + long totalHeapSize = 0; + long usedHeapSize = 0; + long jvmCpuUsaged = 0; + + for (AgentStat agentStat : scanAgentStatList) { + totalHeapSize += agentStat.getMemoryGc().getJvmMemoryHeapMax(); + usedHeapSize += agentStat.getMemoryGc().getJvmMemoryHeapUsed(); + + jvmCpuUsaged += agentStat.getCpuLoad().getJvmCpuLoad(); + } + + long percent = 0; + percent = calculatePercent(usedHeapSize, totalHeapSize); + agentHeapUsageRate.put(agentId, percent); + + percent = calculatePercent(jvmCpuUsaged, 100*scanAgentStatList.size()); + agentJvmCpuUsageRate.put(agentId, percent); + + if(listSize > 0) { + long accruedFirstGCcount = scanAgentStatList.get(0).getMemoryGc().getJvmGcOldCount(); + long accruedLastGCcount= scanAgentStatList.get(listSize - 1).getMemoryGc().getJvmGcOldCount(); + agentGcCount.put(agentId, accruedLastGCcount - accruedFirstGCcount); + } + + } + + init.set(true); + + } + + private long calculatePercent(long used, long total) { + if (total == 0 || used == 0) { + return 0; + } else { + return Math.round((used * 100) / total); + } + } + + public Map getHeapUsageRate() { + return agentHeapUsageRate; + } + + public Map getGCCount() { + return agentGcCount; + } + + public Map getJvmCpuUsageRate() { + return agentJvmCpuUsageRate; + } + +} diff --git a/web/src/main/java/com/navercorp/pinpoint/web/alarm/collector/ResponseTimeDataCollector.java b/web/src/main/java/com/navercorp/pinpoint/web/alarm/collector/ResponseTimeDataCollector.java index 91ab6c274..7b5ffacb4 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/alarm/collector/ResponseTimeDataCollector.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/alarm/collector/ResponseTimeDataCollector.java @@ -25,8 +25,8 @@ public class ResponseTimeDataCollector extends DataCollector { private int slowRate = 0; private int errorRate = 0; - public ResponseTimeDataCollector(Application application, MapResponseDao responseDAO, long timeSlotEndTime, long slotInterval) { - super(DataCollectorCategory.RESPONSE_TIME); + public ResponseTimeDataCollector(DataCollectorCategory category, Application application, MapResponseDao responseDAO, long timeSlotEndTime, long slotInterval) { + super(category); this.application = application; this.responseDao = responseDAO; this.timeSlotEndTime = timeSlotEndTime; diff --git a/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/AgentChecker.java b/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/AgentChecker.java new file mode 100644 index 000000000..0dfb5834b --- /dev/null +++ b/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/AgentChecker.java @@ -0,0 +1,64 @@ +package com.nhn.pinpoint.web.alarm.filter; + +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +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 { + + protected Map detectedAgents = new HashMap(); + + protected AgentChecker(Rule rule, String unit, DataCollector dataCollector) { + super(rule, unit, dataCollector); + } + + @Override + public void check() { + logger.debug("{} check.", this.getClass().getSimpleName()); + dataCollector.collect(); + + Map agents = getAgentValues(); + + for(Entry agent : agents.entrySet()) { + if (decideResult(agent.getValue())) { + detected = true; + detectedAgents.put(agent.getKey(), agent.getValue()); + } + } + } + + @Override + protected long getDetectedValue() { + throw new UnsupportedOperationException(this.getClass() + "is not support getDetectedValue function. you should use getAgentValues"); + } + + public List getSmsMessage() { + List messages = new LinkedList(); + + for (Entry detected : detectedAgents.entrySet()) { + messages.add(String.format("[PINPOINT Alarm - %s] %s is %s (Threshold : %s%s)", detected.getKey(), rule.getCheckerName(), detected.getValue(), rule.getThreshold(), unit)); + } + + return messages; + }; + + @Override + public String getEmailMessage() { + StringBuilder message = new StringBuilder(); + + for (Entry detected : detectedAgents.entrySet()) { + message.append(String.format(" Value of agent(%s) is %s during the past 5 mins.(Threshold : %s%s)", detected.getKey(), detected.getValue(), rule.getThreshold(), unit)); + message.append("
"); + } + + return message.toString(); + }; + + protected abstract Map getAgentValues(); + +} diff --git a/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/AlarmCheckFilter.java b/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/AlarmCheckFilter.java index 1284db2a1..7ad020713 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/AlarmCheckFilter.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/AlarmCheckFilter.java @@ -1,5 +1,8 @@ package com.nhn.pinpoint.web.alarm.filter; +import java.util.LinkedList; +import java.util.List; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -10,9 +13,9 @@ import com.nhn.pinpoint.web.alarm.vo.Rule; * * @author koo.taejin */ -public abstract class AlarmCheckFilter implements AlarmFilter { +public abstract class AlarmCheckFilter { - private final Logger logger = LoggerFactory.getLogger(this.getClass()); + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); protected final DataCollector dataCollector; protected final Rule rule; protected boolean detected = false; @@ -68,7 +71,17 @@ public abstract class AlarmCheckFilter implements AlarmFilter { } } - abstract public long getDetectedValue(); + public List getSmsMessage() { + List messages = new LinkedList(); + messages.add(String.format("[PINPOINT Alarm - %s] %s is %s (Threshold : %s%s)", rule.getApplicationId(), rule.getCheckerName(), getDetectedValue(), rule.getThreshold(), unit)); + return messages; + }; + + public String getEmailMessage() { + return String.format("%s value is %s during the past 5 mins.(Threshold : %s%s)
", rule.getCheckerName(), getDetectedValue(), rule.getThreshold(), unit); + }; + + protected abstract long getDetectedValue(); } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/ErrorCountChecker.java b/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/ErrorCountChecker.java index dd0765839..4241aa7b4 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/ErrorCountChecker.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/ErrorCountChecker.java @@ -10,7 +10,7 @@ public class ErrorCountChecker extends AlarmCheckFilter { } @Override - public long getDetectedValue() { + protected long getDetectedValue() { return ((ResponseTimeDataCollector)dataCollector).getErrorCount(); } } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/ErrorRateChecker.java b/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/ErrorRateChecker.java index c41b6f79d..eff8108c4 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/ErrorRateChecker.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/ErrorRateChecker.java @@ -10,7 +10,7 @@ public class ErrorRateChecker extends AlarmCheckFilter { } @Override - public long getDetectedValue() { + protected long getDetectedValue() { return ((ResponseTimeDataCollector)dataCollector).getErrorRate(); } } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/FailureCountFilter.java b/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/FailureCountFilter.java index c5d54bc63..9ad70efdb 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/FailureCountFilter.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/FailureCountFilter.java @@ -93,7 +93,7 @@ public class FailureCountFilter extends AlarmCheckCountFilter { } @Override - public long getDetectedValue() { + protected long getDetectedValue() { return 0; } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/FailureRatesFilter.java b/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/FailureRatesFilter.java index d1a59785f..e9c5f0d0d 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/FailureRatesFilter.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/FailureRatesFilter.java @@ -94,7 +94,7 @@ public class FailureRatesFilter extends AlarmCheckRatesFilter { } @Override - public long getDetectedValue() { + protected long getDetectedValue() { // TODO Auto-generated method stub return 0; } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/GcCountChecker.java b/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/GcCountChecker.java new file mode 100644 index 000000000..68b695328 --- /dev/null +++ b/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/GcCountChecker.java @@ -0,0 +1,18 @@ +package com.nhn.pinpoint.web.alarm.filter; + +import java.util.Map; + +import com.nhn.pinpoint.web.alarm.collector.AgentStatDataCollector; +import com.nhn.pinpoint.web.alarm.vo.Rule; + +public class GcCountChecker extends AgentChecker { + + public GcCountChecker(AgentStatDataCollector dataCollector, Rule rule) { + super(rule, "", dataCollector); + } + + @Override + protected Map getAgentValues() { + return ((AgentStatDataCollector)dataCollector).getGCCount(); + } +} diff --git a/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/HeapUsageRateChecker.java b/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/HeapUsageRateChecker.java new file mode 100644 index 000000000..7c00391db --- /dev/null +++ b/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/HeapUsageRateChecker.java @@ -0,0 +1,19 @@ +package com.nhn.pinpoint.web.alarm.filter; + +import java.util.Map; + +import com.nhn.pinpoint.web.alarm.collector.AgentStatDataCollector; +import com.nhn.pinpoint.web.alarm.vo.Rule; + +public class HeapUsageRateChecker extends AgentChecker { + + public HeapUsageRateChecker(AgentStatDataCollector dataCollector, Rule rule) { + super(rule, "%", dataCollector); + } + + @Override + protected Map getAgentValues() { + return ((AgentStatDataCollector)dataCollector).getHeapUsageRate(); + } + +} diff --git a/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/JvmCpuUsageRateChecker.java b/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/JvmCpuUsageRateChecker.java new file mode 100644 index 000000000..91f53a22b --- /dev/null +++ b/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/JvmCpuUsageRateChecker.java @@ -0,0 +1,19 @@ +package com.nhn.pinpoint.web.alarm.filter; + +import java.util.Map; + +import com.nhn.pinpoint.web.alarm.collector.AgentStatDataCollector; +import com.nhn.pinpoint.web.alarm.vo.Rule; + +public class JvmCpuUsageRateChecker extends AgentChecker { + + public JvmCpuUsageRateChecker(AgentStatDataCollector dataCollector, Rule rule) { + super(rule, "%", dataCollector); + } + + @Override + protected Map getAgentValues() { + return ((AgentStatDataCollector)dataCollector).getJvmCpuUsageRate(); + } + +} diff --git a/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/ResponseCountChecker.java b/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/ResponseCountChecker.java index 7aead6863..218fe3f06 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/ResponseCountChecker.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/ResponseCountChecker.java @@ -10,7 +10,7 @@ public class ResponseCountChecker extends AlarmCheckFilter { } @Override - public long getDetectedValue() { + protected long getDetectedValue() { return ((ResponseTimeDataCollector)dataCollector).getTotalCount(); } } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/SlowCountFilter.java b/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/SlowCountFilter.java index 4ea518103..d40d40c34 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/SlowCountFilter.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/SlowCountFilter.java @@ -10,7 +10,7 @@ public class SlowCountFilter extends AlarmCheckFilter { } @Override - public long getDetectedValue() { + protected long getDetectedValue() { return ((ResponseTimeDataCollector)dataCollector).getSlowCount(); } } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/SlowRatesFilter.java b/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/SlowRatesFilter.java index eb09d7857..8dcc2db0a 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/SlowRatesFilter.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/alarm/filter/SlowRatesFilter.java @@ -13,8 +13,8 @@ public class SlowRatesFilter extends AlarmCheckFilter { super(rule, "%", dataCollector); } - @Override - public long getDetectedValue() { + @Override + protected long getDetectedValue() { return ((ResponseTimeDataCollector)dataCollector).getSlowRate(); } } \ No newline at end of file diff --git a/web/src/main/java/com/navercorp/pinpoint/web/scheduler/DefaultAlarmScheduler.java b/web/src/main/java/com/navercorp/pinpoint/web/scheduler/DefaultAlarmScheduler.java index b737fe870..7bd52dede 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/scheduler/DefaultAlarmScheduler.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/scheduler/DefaultAlarmScheduler.java @@ -150,7 +150,7 @@ public class DefaultAlarmScheduler implements AlarmScheduler { } List alarmRuleList = ruleGroup.getAlarmRuleList(); List alarmCheckFilterList = createAlarmCheckFilter(application, alarmRuleList); - alarmJob.addFilter(alarmCheckFilterList); +// alarmJob.addFilter(alarmCheckFilterList); if (CollectionUtils.isEmpty(alarmCheckFilterList)) { logger.warn("Application={}, Rule={} can't find valid rule resource.", applicationName, alarmName); return null; diff --git a/web/src/main/resources/applicationContext-web.xml b/web/src/main/resources/applicationContext-web.xml index 7136d4a55..447378ef5 100644 --- a/web/src/main/resources/applicationContext-web.xml +++ b/web/src/main/resources/applicationContext-web.xml @@ -8,7 +8,6 @@ xmlns:hdp="http://www.springframework.org/schema/hadoop" xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd - http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd diff --git a/web/src/test/java/com/navercorp/pinpoint/web/alarm/DataCollectorFactoryTest.java b/web/src/test/java/com/navercorp/pinpoint/web/alarm/DataCollectorFactoryTest.java index 6eb0b78ca..f922d22fd 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/alarm/DataCollectorFactoryTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/alarm/DataCollectorFactoryTest.java @@ -19,7 +19,7 @@ public class DataCollectorFactoryTest { @Test public void createDataCollector() { - DataCollector collector = factory.createDataCollector(CheckerCategory.SLOW_COUNT, null, 0, 0); + DataCollector collector = factory.createDataCollector(CheckerCategory.SLOW_COUNT, null, 0); assertNotNull(collector); } diff --git a/web/src/test/java/com/navercorp/pinpoint/web/alarm/ProcessorTest.java b/web/src/test/java/com/navercorp/pinpoint/web/alarm/ProcessorTest.java index 3503d030a..d6ead6e02 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/alarm/ProcessorTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/alarm/ProcessorTest.java @@ -14,6 +14,7 @@ import org.springframework.test.context.ContextConfiguration; 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.collector.ResponseTimeDataCollector; import com.nhn.pinpoint.web.alarm.filter.AlarmCheckFilter; import com.nhn.pinpoint.web.alarm.vo.Rule; @@ -27,7 +28,7 @@ import com.nhn.pinpoint.web.vo.ResponseTime; @ContextConfiguration("classpath:applicationContext-test.xml") public class ProcessorTest { - private static final String SERVICE_NAME = "minwoo_tomcat"; + private static final String SERVICE_NAME = "local_tomcat"; @Autowired AlarmProcessor processor; @@ -68,7 +69,7 @@ public class ProcessorTest { @Test public void processTest() { Application application = new Application(SERVICE_NAME, ServiceType.TOMCAT); - ResponseTimeDataCollector collector = new ResponseTimeDataCollector(application, mockMapResponseDAO, 3000000, System.currentTimeMillis()); + 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); diff --git a/web/src/test/java/com/navercorp/pinpoint/web/alarm/ReaderTest.java b/web/src/test/java/com/navercorp/pinpoint/web/alarm/ReaderTest.java index 7bc6f41c7..3a3fb339c 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/alarm/ReaderTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/alarm/ReaderTest.java @@ -14,6 +14,7 @@ import org.springframework.batch.core.StepExecution; import org.springframework.batch.item.ExecutionContext; import com.nhn.pinpoint.common.ServiceType; +import com.nhn.pinpoint.web.alarm.DataCollectorFactory.DataCollectorCategory; import com.nhn.pinpoint.web.alarm.collector.DataCollector; import com.nhn.pinpoint.web.alarm.collector.ResponseTimeDataCollector; import com.nhn.pinpoint.web.alarm.vo.Rule; @@ -124,8 +125,8 @@ public class ReaderTest { dataCollectorFactory = new DataCollectorFactory() { @Override - public DataCollector createDataCollector(CheckerCategory checker, Application application, long timeSlotEndTime, long slotInterval) { - return new ResponseTimeDataCollector(null, null, 0, 0); + public DataCollector createDataCollector(CheckerCategory checker, Application application, long timeSlotEndTime) { + return new ResponseTimeDataCollector(DataCollectorCategory.RESPONSE_TIME, null, null, 0, 0); } }; } diff --git a/web/src/test/java/com/navercorp/pinpoint/web/alarm/WriterTest.java b/web/src/test/java/com/navercorp/pinpoint/web/alarm/WriterTest.java index 0733adf44..cb9ad57cf 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/alarm/WriterTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/alarm/WriterTest.java @@ -32,7 +32,7 @@ public class WriterTest { } @Override - public long getDetectedValue() { + protected long getDetectedValue() { return 10000; } }; @@ -53,7 +53,7 @@ public class WriterTest { } @Override - public long getDetectedValue() { + protected long getDetectedValue() { return 10000; } }; diff --git a/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/ErrorCountCheckerTest.java b/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/ErrorCountCheckerTest.java index 27cc79bb3..afc552f24 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/ErrorCountCheckerTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/ErrorCountCheckerTest.java @@ -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.collector.ResponseTimeDataCollector; import com.nhn.pinpoint.web.alarm.vo.Rule; import com.nhn.pinpoint.web.applicationmap.histogram.TimeHistogram; @@ -62,7 +63,7 @@ public class ErrorCountCheckerTest { @Test public void checkTest1() { Application application = new Application(SERVICE_NAME, ServiceType.TOMCAT); - ResponseTimeDataCollector collector = new ResponseTimeDataCollector(application, mockMapResponseDAO, System.currentTimeMillis(), 300000); + ResponseTimeDataCollector collector = new ResponseTimeDataCollector(DataCollectorCategory.RESPONSE_TIME, application, mockMapResponseDAO, System.currentTimeMillis(), 300000); Rule rule = new Rule(SERVICE_NAME, CheckerCategory.ERROR_COUNT.getName(), 74, "testGroup", false, false); ErrorCountChecker filter = new ErrorCountChecker(collector, rule); @@ -76,7 +77,7 @@ public class ErrorCountCheckerTest { @Test public void checkTest2() { Application application = new Application(SERVICE_NAME, ServiceType.TOMCAT); - ResponseTimeDataCollector collector = new ResponseTimeDataCollector(application, mockMapResponseDAO, System.currentTimeMillis(), 300000); + ResponseTimeDataCollector collector = new ResponseTimeDataCollector(DataCollectorCategory.RESPONSE_TIME, application, mockMapResponseDAO, System.currentTimeMillis(), 300000); Rule rule = new Rule(SERVICE_NAME, CheckerCategory.ERROR_COUNT.getName(), 76, "testGroup", false, false); ErrorCountChecker filter = new ErrorCountChecker(collector, rule); diff --git a/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/ErrorRateCheckerTest.java b/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/ErrorRateCheckerTest.java index 68d6fad16..a57c5ec23 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/ErrorRateCheckerTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/ErrorRateCheckerTest.java @@ -10,6 +10,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.collector.ResponseTimeDataCollector; import com.nhn.pinpoint.web.alarm.vo.Rule; import com.nhn.pinpoint.web.applicationmap.histogram.TimeHistogram; @@ -61,7 +62,7 @@ public class ErrorRateCheckerTest { @Test public void checkTest1() { Application application = new Application(SERVICE_NAME, ServiceType.TOMCAT); - ResponseTimeDataCollector collector = new ResponseTimeDataCollector(application, mockMapResponseDAO, System.currentTimeMillis(), 300000); + ResponseTimeDataCollector collector = new ResponseTimeDataCollector(DataCollectorCategory.RESPONSE_TIME, application, mockMapResponseDAO, System.currentTimeMillis(), 300000); Rule rule = new Rule(SERVICE_NAME, CheckerCategory.ERROR_RATE.getName(), 60, "testGroup", false, false); ErrorRateChecker filter = new ErrorRateChecker(collector, rule); @@ -75,7 +76,7 @@ public class ErrorRateCheckerTest { @Test public void checkTest2() { Application application = new Application(SERVICE_NAME, ServiceType.TOMCAT); - ResponseTimeDataCollector collector = new ResponseTimeDataCollector(application, mockMapResponseDAO, System.currentTimeMillis(), 300000); + ResponseTimeDataCollector collector = new ResponseTimeDataCollector(DataCollectorCategory.RESPONSE_TIME, application, mockMapResponseDAO, System.currentTimeMillis(), 300000); Rule rule = new Rule(SERVICE_NAME, CheckerCategory.ERROR_RATE.getName(), 61, "testGroup", false, false); ErrorRateChecker filter = new ErrorRateChecker(collector, rule); diff --git a/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/GcCountCheckerTest.java b/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/GcCountCheckerTest.java new file mode 100644 index 000000000..598155552 --- /dev/null +++ b/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/GcCountCheckerTest.java @@ -0,0 +1,106 @@ +package com.nhn.pinpoint.web.alarm.filter; + +import static org.junit.Assert.*; + +import java.util.LinkedList; +import java.util.List; + +import org.junit.BeforeClass; +import org.junit.Test; + +import com.nhn.pinpoint.common.ServiceType; +import com.nhn.pinpoint.common.bo.AgentStatMemoryGcBo; +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.collector.AgentStatDataCollector; +import com.nhn.pinpoint.web.alarm.vo.Rule; +import com.nhn.pinpoint.web.dao.AgentStatDao; +import com.nhn.pinpoint.web.dao.ApplicationIndexDao; +import com.nhn.pinpoint.web.vo.AgentStat; +import com.nhn.pinpoint.web.vo.Application; +import com.nhn.pinpoint.web.vo.Range; + +public class GcCountCheckerTest { + + + private static final String SERVICE_NAME = "local_service"; + + private static ApplicationIndexDao applicationIndexDao; + + private static AgentStatDao agentStatDao; + + @BeforeClass + public static void before() { + agentStatDao = new AgentStatDao() { + + @Override + public List scanAgentStatList(String agentId, Range range) { + List AgentStatList = new LinkedList(); + + for (int i = 1; i < 37; i++) { + Builder builder = new Builder("AGETNT_NAME", 0L, 1L); + builder.jvmGcOldCount(i); + AgentStatMemoryGcBo memoryBo = builder.build(); + + AgentStat stat = new AgentStat(); + stat.setMemoryGc(memoryBo); + + AgentStatList.add(stat); + } + + return AgentStatList; + } + }; + + applicationIndexDao = new ApplicationIndexDao() { + + @Override + public List selectAllApplicationNames() { + throw new UnsupportedOperationException(); + } + + @Override + public List selectAgentIds(String applicationName) { + if (SERVICE_NAME.equals(applicationName)) { + List agentIds = new LinkedList(); + agentIds.add("local_tomcat"); + return agentIds; + } + + throw new IllegalArgumentException(); + } + + @Override + public void deleteApplicationName(String applicationName) { + throw new UnsupportedOperationException(); + } + + }; + } + + + @Test + public void checkTest1() { + Rule rule = new Rule(SERVICE_NAME, CheckerCategory.GC_COUNT.getName(), 35, "testGroup", false, false); + Application application = new Application(SERVICE_NAME, ServiceType.TOMCAT); + AgentStatDataCollector collector = new AgentStatDataCollector(DataCollectorCategory.AGENT_STAT, application, agentStatDao, applicationIndexDao, System.currentTimeMillis(), DataCollectorFactory.SLOT_INTERVAL_FIVE_MIN); + AgentChecker checker = new GcCountChecker(collector, rule); + + checker.check(); + assertTrue(checker.isDetected()); + } + + @Test + public void checkTest2() { + Rule rule = new Rule(SERVICE_NAME, CheckerCategory.GC_COUNT.getName(), 36, "testGroup", false, false); + Application application = new Application(SERVICE_NAME, ServiceType.TOMCAT); + AgentStatDataCollector collector = new AgentStatDataCollector(DataCollectorCategory.AGENT_STAT, application, agentStatDao, applicationIndexDao, System.currentTimeMillis(), DataCollectorFactory.SLOT_INTERVAL_FIVE_MIN); + AgentChecker checker = new GcCountChecker(collector, rule); + + checker.check(); + assertFalse(checker.isDetected()); + } + +} diff --git a/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/HeapUsageRateCheckerTest.java b/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/HeapUsageRateCheckerTest.java new file mode 100644 index 000000000..1fb000e7f --- /dev/null +++ b/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/HeapUsageRateCheckerTest.java @@ -0,0 +1,130 @@ +package com.nhn.pinpoint.web.alarm.filter; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.LinkedList; +import java.util.List; + +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.nhn.pinpoint.common.ServiceType; +import com.nhn.pinpoint.common.bo.AgentStatMemoryGcBo; +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.collector.AgentStatDataCollector; +import com.nhn.pinpoint.web.alarm.vo.Rule; +import com.nhn.pinpoint.web.dao.AgentStatDao; +import com.nhn.pinpoint.web.dao.ApplicationIndexDao; +import com.nhn.pinpoint.web.vo.AgentStat; +import com.nhn.pinpoint.web.vo.Application; +import com.nhn.pinpoint.web.vo.Range; + +//@RunWith(SpringJUnit4ClassRunner.class) +//@ContextConfiguration("classpath:applicationContext-test.xml") +public class HeapUsageRateCheckerTest { + + private static final String SERVICE_NAME = "local_service"; + + private static ApplicationIndexDao applicationIndexDao; + + private static AgentStatDao agentStatDao; + + @BeforeClass + public static void before() { + agentStatDao = new AgentStatDao() { + + @Override + public List scanAgentStatList(String agentId, Range range) { + List AgentStatList = new LinkedList(); + + for (int i = 0; i < 36; i++) { + Builder builder = new Builder("AGETNT_NAME", 0L, 1L); + builder.jvmMemoryHeapUsed(70L); + builder.jvmMemoryHeapMax(100L); + AgentStatMemoryGcBo memoryBo = builder.build(); + + AgentStat stat = new AgentStat(); + stat.setMemoryGc(memoryBo); + + AgentStatList.add(stat); + } + + return AgentStatList; + } + }; + + applicationIndexDao = new ApplicationIndexDao() { + + @Override + public List selectAllApplicationNames() { + throw new UnsupportedOperationException(); + } + + @Override + public List selectAgentIds(String applicationName) { + if (SERVICE_NAME.equals(applicationName)) { + List agentIds = new LinkedList(); + agentIds.add("local_tomcat"); + return agentIds; + } + + throw new IllegalArgumentException(); + } + + @Override + public void deleteApplicationName(String applicationName) { + throw new UnsupportedOperationException(); + } + + }; + } + + + @Test + public void checkTest1() { + Rule rule = new Rule(SERVICE_NAME, CheckerCategory.HEAP_USAGE_RATE.getName(), 70, "testGroup", false, false); + Application application = new Application(SERVICE_NAME, ServiceType.TOMCAT); + AgentStatDataCollector collector = new AgentStatDataCollector(DataCollectorCategory.AGENT_STAT, application, agentStatDao, applicationIndexDao, System.currentTimeMillis(), DataCollectorFactory.SLOT_INTERVAL_FIVE_MIN); + AgentChecker checker = new HeapUsageRateChecker(collector, rule); + + checker.check(); + assertTrue(checker.isDetected()); + } + + @Test + public void checkTest2() { + Rule rule = new Rule(SERVICE_NAME, CheckerCategory.HEAP_USAGE_RATE.getName(), 71, "testGroup", false, false); + Application application = new Application(SERVICE_NAME, ServiceType.TOMCAT); + AgentStatDataCollector collector = new AgentStatDataCollector(DataCollectorCategory.AGENT_STAT, application, agentStatDao, applicationIndexDao, System.currentTimeMillis(), DataCollectorFactory.SLOT_INTERVAL_FIVE_MIN); + AgentChecker checker = new HeapUsageRateChecker(collector, rule); + + checker.check(); + assertFalse(checker.isDetected()); + } + + +// @Autowired +// private HbaseAgentStatDao hbaseAgentStatDao ; + +// @Autowired +// private HbaseApplicationIndexDao applicationIndexDao; + +// @Test +// public void checkTest1() { +// Rule rule = new Rule(SERVICE_NAME, CheckerCategory.HEAP_USAGE_RATE.getName(), 60, "testGroup", false, false); +// Application application = new Application(SERVICE_NAME, ServiceType.TOMCAT); +// AgentStatDataCollector collector = new AgentStatDataCollector(DataCollectorCategory.AGENT_STAT, application, hbaseAgentStatDao, applicationIndexDao, System.currentTimeMillis(), (long)300000); +// AgentChecker checker = new HeapUsageRateChecker(collector, rule); +// +// checker.check(); +// assertTrue(checker.isDetected()); +// } + +} diff --git a/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/JvmCpuUsageRateCheckerTest.java b/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/JvmCpuUsageRateCheckerTest.java new file mode 100644 index 000000000..89a52135d --- /dev/null +++ b/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/JvmCpuUsageRateCheckerTest.java @@ -0,0 +1,109 @@ +package com.nhn.pinpoint.web.alarm.filter; + +import static org.junit.Assert.*; + +import java.util.LinkedList; +import java.util.List; + +import org.junit.BeforeClass; +import org.junit.Test; + +import com.nhn.pinpoint.common.ServiceType; +import com.nhn.pinpoint.common.bo.AgentStatCpuLoadBo; +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.collector.AgentStatDataCollector; +import com.nhn.pinpoint.web.alarm.vo.Rule; +import com.nhn.pinpoint.web.dao.AgentStatDao; +import com.nhn.pinpoint.web.dao.ApplicationIndexDao; +import com.nhn.pinpoint.web.vo.AgentStat; +import com.nhn.pinpoint.web.vo.Application; +import com.nhn.pinpoint.web.vo.Range; + +public class JvmCpuUsageRateCheckerTest { + + private static final String SERVICE_NAME = "local_service"; + + private static ApplicationIndexDao applicationIndexDao; + + private static AgentStatDao agentStatDao; + + @BeforeClass + public static void before() { + agentStatDao = new AgentStatDao() { + + @Override + public List scanAgentStatList(String agentId, Range range) { + List AgentStatList = new LinkedList(); + + for (int i = 0; i < 36; i++) { + AgentStatCpuLoadBo.Builder cpuLoadBoBuilder = new AgentStatCpuLoadBo.Builder("AGETNT_NAME", 0L, 1L); + cpuLoadBoBuilder.jvmCpuLoad(60); + AgentStatCpuLoadBo cpuLoadBo = cpuLoadBoBuilder.build(); + + AgentStatMemoryGcBo.Builder memoryGcBobuilder = new AgentStatMemoryGcBo.Builder("AGETNT_NAME", 0L, 1L); + AgentStatMemoryGcBo memoryGcBo = memoryGcBobuilder.build(); + + AgentStat stat = new AgentStat(); + stat.setCpuLoad(cpuLoadBo); + stat.setMemoryGc(memoryGcBo); + + AgentStatList.add(stat); + } + + return AgentStatList; + } + }; + + applicationIndexDao = new ApplicationIndexDao() { + + @Override + public List selectAllApplicationNames() { + throw new UnsupportedOperationException(); + } + + @Override + public List selectAgentIds(String applicationName) { + if (SERVICE_NAME.equals(applicationName)) { + List agentIds = new LinkedList(); + agentIds.add("local_tomcat"); + return agentIds; + } + + throw new IllegalArgumentException(); + } + + @Override + public void deleteApplicationName(String applicationName) { + throw new UnsupportedOperationException(); + } + + }; + } + + + @Test + public void checkTest1() { + Rule rule = new Rule(SERVICE_NAME, CheckerCategory.JVM_CPU_USAGE_RATE.getName(), 60, "testGroup", false, false); + Application application = new Application(SERVICE_NAME, ServiceType.TOMCAT); + AgentStatDataCollector collector = new AgentStatDataCollector(DataCollectorCategory.AGENT_STAT, application, agentStatDao, applicationIndexDao, System.currentTimeMillis(), DataCollectorFactory.SLOT_INTERVAL_FIVE_MIN); + AgentChecker checker = new JvmCpuUsageRateChecker(collector, rule); + + checker.check(); + assertTrue(checker.isDetected()); + } + + @Test + public void checkTest2() { + Rule rule = new Rule(SERVICE_NAME, CheckerCategory.JVM_CPU_USAGE_RATE.getName(), 61, "testGroup", false, false); + Application application = new Application(SERVICE_NAME, ServiceType.TOMCAT); + AgentStatDataCollector collector = new AgentStatDataCollector(DataCollectorCategory.AGENT_STAT, application, agentStatDao, applicationIndexDao, System.currentTimeMillis(), DataCollectorFactory.SLOT_INTERVAL_FIVE_MIN); + AgentChecker checker = new JvmCpuUsageRateChecker(collector, rule); + + checker.check(); + assertFalse(checker.isDetected()); + } + +} diff --git a/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/ResponseCountCheckerTest.java b/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/ResponseCountCheckerTest.java index 560439573..81026624f 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/ResponseCountCheckerTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/ResponseCountCheckerTest.java @@ -10,6 +10,8 @@ import org.junit.Test; 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.collector.ResponseTimeDataCollector; import com.nhn.pinpoint.web.alarm.vo.Rule; import com.nhn.pinpoint.web.applicationmap.histogram.TimeHistogram; @@ -62,7 +64,7 @@ public class ResponseCountCheckerTest { @Test public void checkTest1() { Application application = new Application(SERVICE_NAME, ServiceType.TOMCAT); - ResponseTimeDataCollector collector = new ResponseTimeDataCollector(application, mockMapResponseDAO, System.currentTimeMillis(), 300000); + ResponseTimeDataCollector collector = new ResponseTimeDataCollector(DataCollectorCategory.RESPONSE_TIME, application, mockMapResponseDAO, System.currentTimeMillis(), DataCollectorFactory.SLOT_INTERVAL_FIVE_MIN); Rule rule = new Rule(SERVICE_NAME, CheckerCategory.RESPONSE_COUNT.getName(), 125, "testGroup", false, false); ResponseCountChecker filter = new ResponseCountChecker(collector, rule); @@ -76,11 +78,18 @@ public class ResponseCountCheckerTest { @Test public void checkTest2() { Application application = new Application(SERVICE_NAME, ServiceType.TOMCAT); - ResponseTimeDataCollector collector = new ResponseTimeDataCollector(application, mockMapResponseDAO, System.currentTimeMillis(), 300000); + ResponseTimeDataCollector collector = new ResponseTimeDataCollector(DataCollectorCategory.RESPONSE_TIME, application, mockMapResponseDAO, System.currentTimeMillis(), 300000); Rule rule = new Rule(SERVICE_NAME, CheckerCategory.RESPONSE_COUNT.getName(), 126, "testGroup", false, false); ResponseCountChecker filter = new ResponseCountChecker(collector, rule); filter.check(); assertFalse(filter.isDetected()); } + + @Test + public void test() { + double val = -1; + int i = (int) val; + System.out.println(val); + } } diff --git a/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/SlowCountFilterTest.java b/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/SlowCountFilterTest.java index 6592e9260..85ed83d0f 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/SlowCountFilterTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/SlowCountFilterTest.java @@ -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.collector.DataCollector; import com.nhn.pinpoint.web.alarm.collector.ResponseTimeDataCollector; import com.nhn.pinpoint.web.alarm.vo.Rule; @@ -63,7 +64,7 @@ public class SlowCountFilterTest { @Test public void checkTest1() { Application application = new Application(SERVICE_NAME, ServiceType.TOMCAT); - ResponseTimeDataCollector collector = new ResponseTimeDataCollector(application, mockMapResponseDAO, System.currentTimeMillis(), 300000); + ResponseTimeDataCollector collector = new ResponseTimeDataCollector(DataCollectorCategory.RESPONSE_TIME, application, mockMapResponseDAO, System.currentTimeMillis(), 300000); Rule rule = new Rule(SERVICE_NAME, CheckerCategory.SLOW_COUNT.getName(), 74, "testGroup", false, false); SlowCountFilter filter = new SlowCountFilter(collector, rule); @@ -77,7 +78,7 @@ public class SlowCountFilterTest { @Test public void checkTest2() { Application application = new Application(SERVICE_NAME, ServiceType.TOMCAT); - ResponseTimeDataCollector collector = new ResponseTimeDataCollector(application, mockMapResponseDAO, System.currentTimeMillis(), 300000); + ResponseTimeDataCollector collector = new ResponseTimeDataCollector(DataCollectorCategory.RESPONSE_TIME, application, mockMapResponseDAO, System.currentTimeMillis(), 300000); Rule rule = new Rule(SERVICE_NAME, CheckerCategory.SLOW_COUNT.getName(), 76, "testGroup", false, false); SlowCountFilter filter = new SlowCountFilter(collector, rule); diff --git a/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/SlowRatesFilterTest.java b/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/SlowRatesFilterTest.java index cda0ed842..da01089f3 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/SlowRatesFilterTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/alarm/filter/SlowRatesFilterTest.java @@ -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.collector.ResponseTimeDataCollector; import com.nhn.pinpoint.web.alarm.vo.Rule; import com.nhn.pinpoint.web.applicationmap.histogram.TimeHistogram; @@ -62,7 +63,7 @@ public class SlowRatesFilterTest { @Test public void checkTest1() { Application application = new Application(SERVICE_NAME, ServiceType.TOMCAT); - ResponseTimeDataCollector collector = new ResponseTimeDataCollector(application, mockMapResponseDAO, System.currentTimeMillis(), 300000); + ResponseTimeDataCollector collector = new ResponseTimeDataCollector(DataCollectorCategory.RESPONSE_TIME, application, mockMapResponseDAO, System.currentTimeMillis(), 300000); Rule rule = new Rule(SERVICE_NAME, CheckerCategory.SLOW_RATE.getName(), 60, "testGroup", false, false); SlowRatesFilter filter = new SlowRatesFilter(collector, rule); @@ -76,7 +77,7 @@ public class SlowRatesFilterTest { @Test public void checkTest2() { Application application = new Application(SERVICE_NAME, ServiceType.TOMCAT); - ResponseTimeDataCollector collector = new ResponseTimeDataCollector(application, mockMapResponseDAO, System.currentTimeMillis(), 300000); + ResponseTimeDataCollector collector = new ResponseTimeDataCollector(DataCollectorCategory.RESPONSE_TIME, application, mockMapResponseDAO, System.currentTimeMillis(), 300000); Rule rule = new Rule(SERVICE_NAME, CheckerCategory.SLOW_RATE.getName(), 61, "testGroup", false, false); SlowRatesFilter filter = new SlowRatesFilter(collector, rule);