use of com.newrelic.agent.bridge.datastore.DatabaseVendor in project newrelic-java-agent by newrelic.
the class TransactionTrace method runExplainPlans.
private void runExplainPlans() {
if (!sqlTracers.isEmpty()) {
DatabaseService dbService = ServiceFactory.getDatabaseService();
for (Entry<ConnectionFactory, List<ExplainPlanExecutor>> entry : sqlTracers.entrySet()) {
Agent.LOG.finer(MessageFormat.format("Running {0} explain plan(s)", entry.getValue().size()));
Connection connection = null;
try {
connection = entry.getKey().getConnection();
DatabaseVendor vendor = entry.getKey().getDatabaseVendor();
for (ExplainPlanExecutor explainExecutor : entry.getValue()) {
if (explainExecutor != null) {
explainExecutor.runExplainPlan(dbService, connection, vendor);
}
}
} catch (Throwable t) {
String msg = MessageFormat.format("An error occurred executing an explain plan: {0}", t.toString());
if (Agent.LOG.isLoggable(Level.FINER)) {
Agent.LOG.log(Level.FINER, msg, t);
} else {
Agent.LOG.fine(msg);
}
} finally {
if (connection != null) {
try {
connection.close();
} catch (Exception e) {
Agent.LOG.log(Level.FINER, "Unable to close connection", e);
}
}
}
}
sqlTracers.clear();
}
}
use of com.newrelic.agent.bridge.datastore.DatabaseVendor in project newrelic-java-agent by newrelic.
the class SqlTraceServiceTest method startSqlTracer.
private SqlTracer startSqlTracer(final String sql, final long duration) throws SQLException {
DummyConnection conn = new DummyConnection();
Statement statement = conn.createStatement();
Transaction tx = Transaction.getTransaction();
ClassMethodSignature sig = new ClassMethodSignature("com.foo.Statement", "executeQuery", "(Ljava/lang/String;)Ljava/sql/ResultSet;");
SqlTracer sqlTracer = new OtherRootSqlTracer(tx, sig, statement, new SimpleMetricNameFormat(null)) {
@Override
public long getDuration() {
return duration;
}
@Override
public Object getSql() {
return sql;
}
};
sqlTracer.setConnectionFactory(new ConnectionFactory() {
@Override
public Connection getConnection() throws SQLException {
return null;
}
@Override
public DatabaseVendor getDatabaseVendor() {
return UnknownDatabaseVendor.INSTANCE;
}
});
sqlTracer.setRawSql(sql);
tx.getTransactionActivity().tracerStarted(sqlTracer);
return sqlTracer;
}
use of com.newrelic.agent.bridge.datastore.DatabaseVendor in project newrelic-java-agent by newrelic.
the class Driver_Weaved method connect.
public Connection connect(String url, Properties props) {
boolean firstInConnectPath = !DatastoreInstanceDetection.shouldDetectConnectionAddress();
try {
DatastoreInstanceDetection.detectConnectionAddress();
Connection connection = Weaver.callOriginal();
DatastoreInstanceDetection.associateAddress(connection);
if (!JdbcHelper.connectionFactoryExists(connection)) {
String detectedUrl = JdbcHelper.getConnectionURL(connection);
if (detectedUrl == null) {
return connection;
}
// Detect correct vendor type and then store new connection factory based on URL
DatabaseVendor vendor = JdbcHelper.getVendor(getClass(), detectedUrl);
JdbcHelper.putConnectionFactory(detectedUrl, new JdbcDriverConnectionFactory(vendor, (Driver) this, url, props));
}
return connection;
} finally {
if (firstInConnectPath) {
DatastoreInstanceDetection.stopDetectingConnectionAddress();
}
}
}
use of com.newrelic.agent.bridge.datastore.DatabaseVendor in project newrelic-java-agent by newrelic.
the class DataSource_Weaved method getConnection.
// This is a leaf tracer because it's common for these methods to delegate to each other and we don't want double
// counts
@Trace(leaf = true)
public Connection getConnection() throws Exception {
boolean firstInConnectPath = !DatastoreInstanceDetection.shouldDetectConnectionAddress();
try {
DatastoreInstanceDetection.detectConnectionAddress();
Connection connection = Weaver.callOriginal();
AgentBridge.getAgent().getTracedMethod().addRollupMetricName(DatastoreMetrics.DATABASE_GET_CONNECTION);
DatastoreInstanceDetection.associateAddress(connection);
if (!JdbcHelper.connectionFactoryExists(connection)) {
String url = JdbcHelper.getConnectionURL(connection);
if (url == null) {
return connection;
}
// Detect correct vendor type and then store new connection factory based on URL
DatabaseVendor vendor = JdbcHelper.getVendor(getClass(), url);
JdbcHelper.putConnectionFactory(url, new JdbcDataSourceConnectionFactory(vendor, (DataSource) this));
}
return connection;
} catch (Exception e) {
AgentBridge.getAgent().getMetricAggregator().incrementCounter(DatastoreMetrics.DATABASE_ERRORS_ALL);
throw e;
} finally {
if (firstInConnectPath) {
DatastoreInstanceDetection.stopDetectingConnectionAddress();
}
}
}
use of com.newrelic.agent.bridge.datastore.DatabaseVendor in project newrelic-java-agent by newrelic.
the class Driver_Instrumentation method connect.
public Connection connect(String url, Properties props) throws SQLException {
boolean firstInConnectPath = !DatastoreInstanceDetection.shouldDetectConnectionAddress();
try {
DatastoreInstanceDetection.detectConnectionAddress();
Connection connection = Weaver.callOriginal();
DatastoreInstanceDetection.associateAddress(connection);
if (!JdbcHelper.connectionFactoryExists(connection)) {
String detectedUrl = JdbcHelper.getConnectionURL(connection);
if (detectedUrl == null) {
return connection;
}
// Detect correct vendor type and then store new connection factory based on URL
DatabaseVendor vendor = JdbcHelper.getVendor(getClass(), detectedUrl);
JdbcHelper.putConnectionFactory(detectedUrl, new JdbcDriverConnectionFactory(vendor, (java.sql.Driver) this, url, props));
}
return connection;
} finally {
if (firstInConnectPath) {
DatastoreInstanceDetection.stopDetectingConnectionAddress();
}
}
}
Aggregations