package org.stagemonitor.jdbc;
import com.p6spy.engine.common.ConnectionInformation;
import com.p6spy.engine.event.CompoundJdbcEventListener;
import com.p6spy.engine.event.DefaultEventListener;
import com.p6spy.engine.event.JdbcEventListener;
import com.p6spy.engine.wrapper.ConnectionWrapper;
import com.p6spy.engine.wrapper.P6Proxy;
import org.stagemonitor.core.CorePlugin;
import org.stagemonitor.configuration.ConfigurationRegistry;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Arrays;
import javax.sql.DataSource;
public class ConnectionMonitor {
private final boolean active;
private final JdbcEventListener jdbcEventListener;
public ConnectionMonitor(ConfigurationRegistry configuration) {
active = ConnectionMonitor.isActive(configuration.getConfig(CorePlugin.class));
jdbcEventListener = new CompoundJdbcEventListener(Arrays.asList(DefaultEventListener.INSTANCE, new StagemonitorJdbcEventListener(configuration)));
}
public Connection monitorGetConnection(Connection connection, Object dataSource, long duration) throws SQLException {
if (active && dataSource instanceof DataSource && !(connection instanceof P6Proxy)) {
return ConnectionWrapper.wrap(connection, jdbcEventListener, ConnectionInformation.fromDataSource((DataSource) dataSource, connection, duration));
} else {
return connection;
}
}
public static boolean isActive(CorePlugin corePlugin) {
return !corePlugin.getDisabledPlugins().contains(JdbcPlugin.class.getSimpleName()) &&
corePlugin.isStagemonitorActive();
}
}