in aws-xray-recorder-sdk-sql/src/main/java/com/amazonaws/xray/sql/SqlSubsegments.java [87:153]
public static Subsegment forQuery(Connection connection, @Nullable String query) {
DatabaseMetaData metadata;
ConnectionInfo connectionInfo = connMap.get(connection);
String subsegmentName = DEFAULT_DATABASE_NAME;
try {
metadata = connection.getMetaData();
String connUrl = metadata.getURL();
// Parse URL if Oracle
if (connectionInfo == null && connUrl != null && connUrl.contains("jdbc:oracle")) {
connectionInfo = OracleConnectionUrlParser.parseUrl(connUrl, new ConnectionInfo.Builder());
connMap.put(connection, connectionInfo);
} else if (connectionInfo == null) {
connectionInfo = new ConnectionInfo.Builder().build();
}
// Get database name if available; otherwise fallback to default
String database;
if (connectionInfo.getDbName() != null) {
database = connectionInfo.getDbName();
} else if (connection.getCatalog() != null) {
database = connection.getCatalog();
} else {
database = DEFAULT_DATABASE_NAME;
}
// Get database host if available; otherwise omit host
String host = null;
if (connectionInfo.getHost() != null) {
host = connectionInfo.getHost();
} else if (connUrl != null) {
try {
host = new URI(new URI(connUrl).getSchemeSpecificPart()).getHost();
} catch (URISyntaxException e) {
logger.debug("Unable to parse database URI. Falling back to default '" + DEFAULT_DATABASE_NAME
+ "' for subsegment name.", e);
}
}
// Fully formed subsegment name is of form "dbName@host"
subsegmentName = database + (host != null ? "@" + host : "");
} catch (SQLException e) {
logger.debug("Encountered exception while retrieving metadata for SQL subsegment "
+ ", starting blank subsegment instead");
return AWSXRay.beginSubsegment(subsegmentName);
}
Subsegment subsegment = AWSXRay.beginSubsegment(subsegmentName);
subsegment.setNamespace(Namespace.REMOTE.toString());
try {
putSqlIfNotNull(subsegment, URL, connectionInfo.getSanitizedUrl() != null ?
connectionInfo.getSanitizedUrl() : metadata.getURL());
putSqlIfNotNull(subsegment, USER, connectionInfo.getUser() != null ?
connectionInfo.getUser() : metadata.getUserName());
putSqlIfNotNull(subsegment, DRIVER_VERSION, metadata.getDriverVersion());
putSqlIfNotNull(subsegment, DATABASE_TYPE, metadata.getDatabaseProductName());
putSqlIfNotNull(subsegment, DATABASE_VERSION, metadata.getDatabaseProductVersion());
} catch (SQLException e) {
logger.debug("Encountered exception while populating SQL subsegment metadata", e);
}
putSqlIfNotNull(subsegment, SANITIZED_QUERY, query);
return subsegment;
}