/* * Copyright 2014 NAVER Corp. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.navercorp.pinpoint.web.alarm; import java.util.LinkedList; import java.util.List; import com.navercorp.pinpoint.web.alarm.DataCollectorFactory.DataCollectorCategory; import com.navercorp.pinpoint.web.alarm.checker.AlarmChecker; import com.navercorp.pinpoint.web.alarm.checker.ErrorCountChecker; import com.navercorp.pinpoint.web.alarm.checker.ErrorCountToCalleeChecker; import com.navercorp.pinpoint.web.alarm.checker.ErrorRateChecker; import com.navercorp.pinpoint.web.alarm.checker.ErrorRateToCalleeChecker; import com.navercorp.pinpoint.web.alarm.checker.HeapUsageRateChecker; import com.navercorp.pinpoint.web.alarm.checker.JvmCpuUsageRateChecker; import com.navercorp.pinpoint.web.alarm.checker.ResponseCountChecker; import com.navercorp.pinpoint.web.alarm.checker.SlowCountChecker; import com.navercorp.pinpoint.web.alarm.checker.SlowCountToCalleeChecker; import com.navercorp.pinpoint.web.alarm.checker.SlowRateChecker; import com.navercorp.pinpoint.web.alarm.checker.SlowRateToCalleeChecker; import com.navercorp.pinpoint.web.alarm.checker.TotalCountToCalleeChecker; import com.navercorp.pinpoint.web.alarm.collector.AgentStatDataCollector; import com.navercorp.pinpoint.web.alarm.collector.DataCollector; import com.navercorp.pinpoint.web.alarm.collector.MapStatisticsCallerDataCollector; import com.navercorp.pinpoint.web.alarm.collector.ResponseTimeDataCollector; import com.navercorp.pinpoint.web.alarm.vo.Rule; /** * @author minwoo.jung */ public enum CheckerCategory { SLOW_COUNT("SLOW COUNT", DataCollectorCategory.RESPONSE_TIME) { @Override public AlarmChecker createChecker(DataCollector dataCollector, Rule rule) { return new SlowCountChecker((ResponseTimeDataCollector)dataCollector, rule); } }, SLOW_RATE("SLOW RATE", DataCollectorCategory.RESPONSE_TIME) { @Override public AlarmChecker createChecker(DataCollector dataCollector, Rule rule) { return new SlowRateChecker((ResponseTimeDataCollector)dataCollector, rule); } }, ERROR_COUNT("ERROR COUNT", DataCollectorCategory.RESPONSE_TIME) { @Override public AlarmChecker createChecker(DataCollector dataCollector, Rule rule) { return new ErrorCountChecker((ResponseTimeDataCollector)dataCollector, rule); } }, ERROR_RATE("ERROR RATE", DataCollectorCategory.RESPONSE_TIME) { @Override public AlarmChecker createChecker(DataCollector dataCollector, Rule rule) { return new ErrorRateChecker((ResponseTimeDataCollector)dataCollector, rule); } }, TOTAL_COUNT("TOTAL COUNT", DataCollectorCategory.RESPONSE_TIME) { @Override public AlarmChecker createChecker(DataCollector dataCollector, Rule rule) { return new ResponseCountChecker((ResponseTimeDataCollector)dataCollector, rule); } }, SLOW_COUNT_TO_CALLEE("SLOW COUNT TO CALLEE", DataCollectorCategory.CALLER_STAT) { @Override public AlarmChecker createChecker(DataCollector dataCollector, Rule rule) { return new SlowCountToCalleeChecker((MapStatisticsCallerDataCollector)dataCollector, rule); } }, SLOW_RATE_TO_CALLEE("SLOW RATE TO CALLEE", DataCollectorCategory.CALLER_STAT) { @Override public AlarmChecker createChecker(DataCollector dataCollector, Rule rule) { return new SlowRateToCalleeChecker((MapStatisticsCallerDataCollector)dataCollector, rule); } }, ERROR_COUNT_TO_CALLEE("ERROR COUNT TO CALLEE", DataCollectorCategory.CALLER_STAT) { @Override public AlarmChecker createChecker(DataCollector dataCollector, Rule rule) { return new ErrorCountToCalleeChecker((MapStatisticsCallerDataCollector)dataCollector, rule); } }, ERROR_RATE_TO_CALLEE("ERROR RATE TO CALLEE", DataCollectorCategory.CALLER_STAT) { @Override public AlarmChecker createChecker(DataCollector dataCollector, Rule rule) { return new ErrorRateToCalleeChecker((MapStatisticsCallerDataCollector)dataCollector, rule); } }, TOTAL_COUNT_TO_CALLEE("TOTAL COUNT TO CALLEE", DataCollectorCategory.CALLER_STAT) { @Override public AlarmChecker createChecker(DataCollector dataCollector, Rule rule) { return new TotalCountToCalleeChecker((MapStatisticsCallerDataCollector)dataCollector, rule); } }, HEAP_USAGE_RATE("HEAP USAGE RATE", DataCollectorCategory.AGENT_STAT) { @Override public AlarmChecker createChecker(DataCollector dataCollector, Rule rule) { return new HeapUsageRateChecker((AgentStatDataCollector)dataCollector, rule); } }, // GC_COUNT("GC COUNT", DataCollectorCategory.AGENT_STAT) { // @Override // 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 AlarmChecker createChecker(DataCollector dataCollector, Rule rule) { return new JvmCpuUsageRateChecker((AgentStatDataCollector)dataCollector, rule); } }; public static CheckerCategory getValue(String value) { for (CheckerCategory category : CheckerCategory.values()) { if (category.getName().equalsIgnoreCase(value)) { return category; } } throw new IllegalArgumentException("Unknown CheckerCategory : " + value); } public static List<String> getNames() { List<String> names = new LinkedList<>(); for (CheckerCategory category : CheckerCategory.values()) { names.add(category.getName()); } return names; } private final String name; private final DataCollectorCategory dataCollectorCategory; CheckerCategory(String name, DataCollectorCategory dataCollectorCategory) { this.name = name; this.dataCollectorCategory = dataCollectorCategory; } public DataCollectorCategory getDataCollectorCategory() { return this.dataCollectorCategory; } public String getName() { return name; } public abstract AlarmChecker createChecker(DataCollector dataCollector, Rule rule); }