/* * Copyright 2015 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.bootstrap.resolver; import java.util.List; import com.navercorp.pinpoint.bootstrap.logging.PLogger; import com.navercorp.pinpoint.bootstrap.logging.PLoggerFactory; import com.navercorp.pinpoint.bootstrap.plugin.ApplicationTypeDetector; import com.navercorp.pinpoint.common.trace.ServiceType; /** * This class attempts to resolve the current application type through {@link ApplicationTypeDetector}s. * The application type is resolved by checking the conditions defined in each of the loaded detector's {@code detect} method. * <p> * If no match is found, the application type defaults to {@code ServiceType.STAND_ALONE} * * @author HyunGil Jeong */ public class ApplicationServerTypePluginResolver { private final PLogger logger = PLoggerFactory.getLogger(this.getClass()); private final List<ApplicationTypeDetector> applicationTypeDetectors; private final ConditionProvider conditionProvider; private static final ServiceType DEFAULT_SERVER_TYPE = ServiceType.STAND_ALONE; public ApplicationServerTypePluginResolver(List<ApplicationTypeDetector> serverTypeDetectors) { this(serverTypeDetectors, ConditionProvider.DEFAULT_CONDITION_PROVIDER); } public ApplicationServerTypePluginResolver(List<ApplicationTypeDetector> serverTypeDetectors, ConditionProvider conditionProvider) { if (serverTypeDetectors == null) { throw new IllegalArgumentException("applicationTypeDetectors should not be null"); } if (conditionProvider == null) { throw new IllegalArgumentException("conditionProvider should not be null"); } this.applicationTypeDetectors = serverTypeDetectors; this.conditionProvider = conditionProvider; } public ServiceType resolve() { for (ApplicationTypeDetector currentDetector : this.applicationTypeDetectors) { String currentDetectorName = currentDetector.getClass().getName(); logger.info("Attempting to resolve using [{}]", currentDetectorName); if (currentDetector.detect(this.conditionProvider)) { logger.info("Match found using [{}]", currentDetectorName); return currentDetector.getApplicationType(); } else { logger.info("No match found using [{}]", currentDetectorName); } } logger.debug("Server type not resolved. Defaulting to {}", DEFAULT_SERVER_TYPE.getName()); return DEFAULT_SERVER_TYPE; } }