diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/manage/HandlerManager.java b/collector/src/main/java/com/navercorp/pinpoint/collector/manage/HandlerManager.java new file mode 100644 index 000000000..9c9871d12 --- /dev/null +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/manage/HandlerManager.java @@ -0,0 +1,48 @@ +/* + * 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.collector.manage; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author Taejin Koo + */ +public class HandlerManager extends AbstractPinpointCollectorMBean implements HandlerManagerMBean { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + private volatile boolean enable = true; + + @Override + public void enableAccess() { + logger.warn("Enable access to manager."); + this.enable = true; + } + + @Override + public void disableAccess() { + logger.warn("Disable access to manager."); + this.enable = false; + } + + @Override + public boolean isEnable() { + return enable; + } + +} diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/manage/HandlerManagerMBean.java b/collector/src/main/java/com/navercorp/pinpoint/collector/manage/HandlerManagerMBean.java new file mode 100644 index 000000000..6f92f3bf5 --- /dev/null +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/manage/HandlerManagerMBean.java @@ -0,0 +1,30 @@ +/* + * 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.collector.manage; + +/** + * @author Taejin Koo + */ +public interface HandlerManagerMBean { + + void enableAccess(); + + void disableAccess(); + + boolean isEnable(); + +} diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/manage/PinpointCollectorManager.java b/collector/src/main/java/com/navercorp/pinpoint/collector/manage/PinpointCollectorManager.java index bbf6cf442..fcf6ebe07 100644 --- a/collector/src/main/java/com/navercorp/pinpoint/collector/manage/PinpointCollectorManager.java +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/manage/PinpointCollectorManager.java @@ -24,6 +24,7 @@ import javax.annotation.PreDestroy; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; /** * @author Taejin Koo @@ -34,6 +35,9 @@ public class PinpointCollectorManager { private final PinpointMBeanServer pinpointMBeanServer; private final List pinpointMBeanList = new ArrayList(); + + @Autowired + private HandlerManager collectorHandlerManager; public PinpointCollectorManager() { this.pinpointMBeanServer = new PinpointMBeanServer(); @@ -43,6 +47,8 @@ public class PinpointCollectorManager { public void setUp() { logger.info("PinpointCollectorManager initialization started."); + pinpointMBeanList.add(collectorHandlerManager); + for (PinpointCollectorMBean pinpontMBean : pinpointMBeanList) { try { pinpointMBeanServer.registerMBean(pinpontMBean); diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/receiver/AbstractDispatchHandler.java b/collector/src/main/java/com/navercorp/pinpoint/collector/receiver/AbstractDispatchHandler.java index 5f9362661..b8ae9c8c8 100644 --- a/collector/src/main/java/com/navercorp/pinpoint/collector/receiver/AbstractDispatchHandler.java +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/receiver/AbstractDispatchHandler.java @@ -19,7 +19,9 @@ package com.navercorp.pinpoint.collector.receiver; import com.navercorp.pinpoint.collector.handler.Handler; import com.navercorp.pinpoint.collector.handler.RequestResponseHandler; import com.navercorp.pinpoint.collector.handler.SimpleHandler; +import com.navercorp.pinpoint.collector.manage.HandlerManager; import com.navercorp.pinpoint.collector.util.AcceptedTimeService; +import com.navercorp.pinpoint.thrift.dto.TResult; import org.apache.thrift.TBase; import org.slf4j.Logger; @@ -37,6 +39,9 @@ public abstract class AbstractDispatchHandler implements DispatchHandler { @Autowired private AcceptedTimeService acceptedTimeService; + @Autowired + private HandlerManager handlerManager; + public AbstractDispatchHandler() { } @@ -46,6 +51,12 @@ public abstract class AbstractDispatchHandler implements DispatchHandler { // mark accepted time acceptedTimeService.accept(); + + if (!handlerManager.isEnable()) { + logger.debug("Handler is disabled. Skipping send message {}.", tBase); + return; + } + // TODO consider to change dispatch table automatically SimpleHandler simpleHandler = getSimpleHandler(tBase); if (simpleHandler != null) { @@ -72,6 +83,13 @@ public abstract class AbstractDispatchHandler implements DispatchHandler { // mark accepted time acceptedTimeService.accept(); + if (!handlerManager.isEnable()) { + logger.debug("Handler is disabled. Skipping request message {}.", tBase); + TResult result = new TResult(false); + result.setMessage("Handler is disabled. Skipping request message."); + return result; + } + RequestResponseHandler requestResponseHandler = getRequestResponseHandler(tBase); if (requestResponseHandler != null) { if (logger.isTraceEnabled()) { diff --git a/collector/src/main/resources/applicationContext-collector.xml b/collector/src/main/resources/applicationContext-collector.xml index 74a8ebdc7..a359216a6 100644 --- a/collector/src/main/resources/applicationContext-collector.xml +++ b/collector/src/main/resources/applicationContext-collector.xml @@ -68,6 +68,10 @@ + + + +