Skip to content

Commit

Permalink
#2391 Fix that the profiler.jdbc.dbcp option is not working
Browse files Browse the repository at this point in the history
  • Loading branch information
koo-taejin committed Dec 26, 2016
1 parent 1e98aaf commit 62285cf
Show file tree
Hide file tree
Showing 3 changed files with 135 additions and 6 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*
* Copyright 2016 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.plugin.commons.dbcp;

import com.navercorp.pinpoint.bootstrap.config.ProfilerConfig;

/**
* @author Taejin Koo
*/
public class CommonsDbcpConfig {

static final String DBCP_PLUGIN_ENABLE = "profiler.jdbc.dbcp";
static final String DBCP_PROFILE_CONNECTIONCLOSE_ENABLE = "profiler.jdbc.dbcp.connectionclose";

private final boolean pluginEnable;
private final boolean profileClose;

public CommonsDbcpConfig(ProfilerConfig config) {
pluginEnable = config.readBoolean(DBCP_PLUGIN_ENABLE, false);
profileClose = config.readBoolean(DBCP_PROFILE_CONNECTIONCLOSE_ENABLE, false);
}

public boolean isPluginEnable() {
return pluginEnable;
}

public boolean isProfileClose() {
return profileClose;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,35 +15,46 @@
*/
package com.navercorp.pinpoint.plugin.commons.dbcp;

import java.security.ProtectionDomain;

import com.navercorp.pinpoint.bootstrap.instrument.InstrumentClass;
import com.navercorp.pinpoint.bootstrap.instrument.InstrumentException;
import com.navercorp.pinpoint.bootstrap.instrument.Instrumentor;
import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformCallback;
import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformTemplate;
import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformTemplateAware;
import com.navercorp.pinpoint.bootstrap.logging.PLogger;
import com.navercorp.pinpoint.bootstrap.logging.PLoggerFactory;
import com.navercorp.pinpoint.bootstrap.plugin.ProfilerPlugin;
import com.navercorp.pinpoint.bootstrap.plugin.ProfilerPluginSetupContext;
import com.navercorp.pinpoint.common.trace.ServiceType;
import com.navercorp.pinpoint.common.trace.ServiceTypeFactory;

import java.security.ProtectionDomain;

/**
* @author Jongho Moon
*/
public class CommonsDbcpPlugin implements ProfilerPlugin, TransformTemplateAware {

private final PLogger logger = PLoggerFactory.getLogger(this.getClass());


public static final ServiceType DBCP_SERVICE_TYPE = ServiceTypeFactory.of(6050, "DBCP");
public static final String DBCP_SCOPE = "DBCP_SCOPE";

private CommonsDbcpConfig config;

private TransformTemplate transformTemplate;

@Override
public void setup(ProfilerPluginSetupContext context) {
config = new CommonsDbcpConfig(context.getConfig());
if (!config.isPluginEnable()) {
logger.info("Disable commons dbcp option. 'profiler.jdbc.dbcp=false'");
return;
}

addBasicDataSourceTransformer();

boolean profileClose = context.getConfig().readBoolean("profiler.jdbc.dbcp.connectionclose", false);

if (profileClose) {
if (config.isProfileClose()) {
addPoolGuardConnectionWrapperTransformer();
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/*
* Copyright 2016 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.plugin.commons.dbcp;

import com.navercorp.pinpoint.bootstrap.config.DefaultProfilerConfig;
import com.navercorp.pinpoint.bootstrap.config.ProfilerConfig;
import org.junit.Assert;
import org.junit.Test;

import java.util.Properties;

/**
* @author Taejin Koo
*/
public class CommonsDbcpConfigTest {

@Test
public void configTest1() throws Exception {
CommonsDbcpConfig commonsDbcpConfig = createCommonsDbcpConfig("false", "false");

Assert.assertFalse(commonsDbcpConfig.isPluginEnable());
Assert.assertFalse(commonsDbcpConfig.isProfileClose());
}

@Test
public void configTest2() throws Exception {
CommonsDbcpConfig commonsDbcpConfig = createCommonsDbcpConfig("false", "true");

Assert.assertFalse(commonsDbcpConfig.isPluginEnable());
Assert.assertTrue(commonsDbcpConfig.isProfileClose());
}

@Test
public void configTest3() throws Exception {
CommonsDbcpConfig commonsDbcpConfig = createCommonsDbcpConfig("true", "false");

Assert.assertTrue(commonsDbcpConfig.isPluginEnable());
Assert.assertFalse(commonsDbcpConfig.isProfileClose());
}

@Test
public void configTest4() throws Exception {
CommonsDbcpConfig commonsDbcpConfig = createCommonsDbcpConfig("true", "true");

Assert.assertTrue(commonsDbcpConfig.isPluginEnable());
Assert.assertTrue(commonsDbcpConfig.isProfileClose());
}

private CommonsDbcpConfig createCommonsDbcpConfig(String pluginEnable, String profileConnectionCloseEnable) {
Properties properties = new Properties();
properties.put(CommonsDbcpConfig.DBCP_PLUGIN_ENABLE, pluginEnable);
properties.put(CommonsDbcpConfig.DBCP_PROFILE_CONNECTIONCLOSE_ENABLE, profileConnectionCloseEnable);

ProfilerConfig profilerConfig = new DefaultProfilerConfig(properties);

return new CommonsDbcpConfig(profilerConfig);
}

}

0 comments on commit 62285cf

Please # to comment.