diff --git a/database/database-cassandra/src/main/java/ru/tinkoff/kora/database/cassandra/CassandraConfig.java b/database/database-cassandra/src/main/java/ru/tinkoff/kora/database/cassandra/CassandraConfig.java index 73fedb708..a07eac634 100644 --- a/database/database-cassandra/src/main/java/ru/tinkoff/kora/database/cassandra/CassandraConfig.java +++ b/database/database-cassandra/src/main/java/ru/tinkoff/kora/database/cassandra/CassandraConfig.java @@ -4,6 +4,7 @@ import com.datastax.oss.driver.api.core.metrics.DefaultSessionMetric; import jakarta.annotation.Nullable; import ru.tinkoff.kora.config.common.annotation.ConfigValueExtractor; +import ru.tinkoff.kora.database.common.telemetry.DatabaseTelemetryConfig; import ru.tinkoff.kora.telemetry.common.TelemetryConfig; import java.time.Duration; @@ -33,7 +34,7 @@ public interface CassandraConfig { @Nullable CassandraCredentials auth(); - TelemetryConfig telemetry(); + DatabaseTelemetryConfig telemetry(); @ConfigValueExtractor interface CassandraCredentials { diff --git a/database/database-cassandra/src/main/java/ru/tinkoff/kora/database/cassandra/CassandraDatabase.java b/database/database-cassandra/src/main/java/ru/tinkoff/kora/database/cassandra/CassandraDatabase.java index 0fb8ab4de..86620f04e 100644 --- a/database/database-cassandra/src/main/java/ru/tinkoff/kora/database/cassandra/CassandraDatabase.java +++ b/database/database-cassandra/src/main/java/ru/tinkoff/kora/database/cassandra/CassandraDatabase.java @@ -35,7 +35,8 @@ public CassandraDatabase(CassandraConfig config, @Nullable CassandraConfigurer c Objects.requireNonNullElse(config.basic().sessionName(), "cassandra"), "cassandra", "cassandra", - Optional.ofNullable(config.auth()).map(CassandraConfig.CassandraCredentials::login).orElse("anonymous") + Optional.ofNullable(config.auth()).map(CassandraConfig.CassandraCredentials::login).orElse("anonymous"), + config.basic().contactPoints().stream().findFirst().orElse(null) ), DataBaseTelemetryFactory.EMPTY); } diff --git a/database/database-cassandra/src/test/java/ru/tinkoff/kora/database/cassandra/CassandraDatabaseTest.java b/database/database-cassandra/src/test/java/ru/tinkoff/kora/database/cassandra/CassandraDatabaseTest.java index 88af290f9..f9bcc6d54 100644 --- a/database/database-cassandra/src/test/java/ru/tinkoff/kora/database/cassandra/CassandraDatabaseTest.java +++ b/database/database-cassandra/src/test/java/ru/tinkoff/kora/database/cassandra/CassandraDatabaseTest.java @@ -1,9 +1,13 @@ package ru.tinkoff.kora.database.cassandra; import org.assertj.core.api.Assertions; +import org.jetbrains.annotations.Nullable; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import ru.tinkoff.kora.database.common.QueryContext; +import ru.tinkoff.kora.database.common.telemetry.$DatabaseTelemetryConfig_ConfigValueExtractor; +import ru.tinkoff.kora.database.common.telemetry.$DatabaseTracingConfig_ConfigValueExtractor; +import ru.tinkoff.kora.database.common.telemetry.DatabaseTracingConfig; import ru.tinkoff.kora.database.common.telemetry.DefaultDataBaseTelemetryFactory; import ru.tinkoff.kora.telemetry.common.$TelemetryConfig_ConfigValueExtractor; import ru.tinkoff.kora.telemetry.common.$TelemetryConfig_LogConfig_ConfigValueExtractor; @@ -56,9 +60,9 @@ private static CassandraDatabase createCassandraDatabase(CassandraParams params) params.username(), params.password() ), - new $TelemetryConfig_ConfigValueExtractor.TelemetryConfig_Impl( + new $DatabaseTelemetryConfig_ConfigValueExtractor.DatabaseTelemetryConfig_Impl( + new $DatabaseTracingConfig_ConfigValueExtractor.DatabaseTracingConfig_Impl(false, false), new $TelemetryConfig_LogConfig_ConfigValueExtractor.LogConfig_Impl(true), - new $TelemetryConfig_TracingConfig_ConfigValueExtractor.TracingConfig_Impl(true), new $TelemetryConfig_MetricsConfig_ConfigValueExtractor.MetricsConfig_Impl(null, null) ) ); diff --git a/database/database-common/build.gradle b/database/database-common/build.gradle index 445cac43d..b3d2ee2cf 100644 --- a/database/database-common/build.gradle +++ b/database/database-common/build.gradle @@ -3,6 +3,8 @@ plugins { } dependencies { + annotationProcessor project(":config:config-annotation-processor") + compileOnly libs.jetbrains.annotations api project(":common") diff --git a/database/database-common/src/main/java/ru/tinkoff/kora/database/common/telemetry/DataBaseTelemetryFactory.java b/database/database-common/src/main/java/ru/tinkoff/kora/database/common/telemetry/DataBaseTelemetryFactory.java index 6d79c95a5..c7e2865b4 100644 --- a/database/database-common/src/main/java/ru/tinkoff/kora/database/common/telemetry/DataBaseTelemetryFactory.java +++ b/database/database-common/src/main/java/ru/tinkoff/kora/database/common/telemetry/DataBaseTelemetryFactory.java @@ -6,6 +6,7 @@ import ru.tinkoff.kora.telemetry.common.TelemetryConfig; public interface DataBaseTelemetryFactory { + DataBaseTelemetry.DataBaseTelemetryContext EMPTY_CTX = exception -> {}; DataBaseTelemetry EMPTY = new DataBaseTelemetry() { @Nullable @@ -20,5 +21,12 @@ public DataBaseTelemetryContext createContext(Context context, QueryContext quer } }; - DataBaseTelemetry get(TelemetryConfig config, String name, String driverType, String dbType, String username); + @Deprecated + default DataBaseTelemetry get(TelemetryConfig config, String name, String driverType, String dbType, String username) { + return EMPTY; + } + + default DataBaseTelemetry get(TelemetryConfig config, String name, String driverType, String dbType, String username, @Nullable String connectionString) { + return get(config, name, driverType, dbType, username); + } } diff --git a/database/database-common/src/main/java/ru/tinkoff/kora/database/common/telemetry/DatabaseTelemetryConfig.java b/database/database-common/src/main/java/ru/tinkoff/kora/database/common/telemetry/DatabaseTelemetryConfig.java new file mode 100644 index 000000000..f1f70793c --- /dev/null +++ b/database/database-common/src/main/java/ru/tinkoff/kora/database/common/telemetry/DatabaseTelemetryConfig.java @@ -0,0 +1,11 @@ +package ru.tinkoff.kora.database.common.telemetry; + +import ru.tinkoff.kora.config.common.annotation.ConfigValueExtractor; +import ru.tinkoff.kora.telemetry.common.TelemetryConfig; + +@ConfigValueExtractor +public interface DatabaseTelemetryConfig extends TelemetryConfig { + + @Override + DatabaseTracingConfig tracing(); +} diff --git a/database/database-common/src/main/java/ru/tinkoff/kora/database/common/telemetry/DatabaseTracingConfig.java b/database/database-common/src/main/java/ru/tinkoff/kora/database/common/telemetry/DatabaseTracingConfig.java new file mode 100644 index 000000000..e11b3e6ab --- /dev/null +++ b/database/database-common/src/main/java/ru/tinkoff/kora/database/common/telemetry/DatabaseTracingConfig.java @@ -0,0 +1,12 @@ +package ru.tinkoff.kora.database.common.telemetry; + +import ru.tinkoff.kora.config.common.annotation.ConfigValueExtractor; +import ru.tinkoff.kora.telemetry.common.TelemetryConfig; + +@ConfigValueExtractor +public interface DatabaseTracingConfig extends TelemetryConfig.TracingConfig { + + default boolean traceConnectionURI() { + return false; + } +} diff --git a/database/database-common/src/main/java/ru/tinkoff/kora/database/common/telemetry/DefaultDataBaseTelemetryFactory.java b/database/database-common/src/main/java/ru/tinkoff/kora/database/common/telemetry/DefaultDataBaseTelemetryFactory.java index c5f83c434..ab11c48b2 100644 --- a/database/database-common/src/main/java/ru/tinkoff/kora/database/common/telemetry/DefaultDataBaseTelemetryFactory.java +++ b/database/database-common/src/main/java/ru/tinkoff/kora/database/common/telemetry/DefaultDataBaseTelemetryFactory.java @@ -11,7 +11,9 @@ public class DefaultDataBaseTelemetryFactory implements DataBaseTelemetryFactory @Nullable private final DataBaseTracerFactory tracingFactory; - public DefaultDataBaseTelemetryFactory(@Nullable DataBaseLoggerFactory loggerFactory, @Nullable DataBaseMetricWriterFactory metricWriterFactory, @Nullable DataBaseTracerFactory tracingFactory) { + public DefaultDataBaseTelemetryFactory(@Nullable DataBaseLoggerFactory loggerFactory, + @Nullable DataBaseMetricWriterFactory metricWriterFactory, + @Nullable DataBaseTracerFactory tracingFactory) { this.loggerFactory = loggerFactory; this.metricWriterFactory = metricWriterFactory; this.tracingFactory = tracingFactory; @@ -19,9 +21,14 @@ public DefaultDataBaseTelemetryFactory(@Nullable DataBaseLoggerFactory loggerFac @Override public DataBaseTelemetry get(TelemetryConfig config, String name, String driverType, String dbType, String username) { + return this.get(config, name, driverType, dbType, username, null); + } + + @Override + public DataBaseTelemetry get(TelemetryConfig config, String name, String driverType, String dbType, String username, @Nullable String connectionString) { var logger = this.loggerFactory == null ? null : this.loggerFactory.get(config.logging(), name); var metricWriter = this.metricWriterFactory == null ? null : this.metricWriterFactory.get(config.metrics(), name); - var tracingFactory = this.tracingFactory == null ? null : this.tracingFactory.get(config.tracing(), dbType, null, username); + var tracingFactory = this.tracingFactory == null ? null : this.tracingFactory.get(config.tracing(), dbType, connectionString, username); if (logger == null && metricWriter == null && tracingFactory == null) { return EMPTY; } diff --git a/database/database-flyway/src/test/java/ru/tinkoff/kora/database/flyway/FlywayJdbcDatabaseInterceptorTest.java b/database/database-flyway/src/test/java/ru/tinkoff/kora/database/flyway/FlywayJdbcDatabaseInterceptorTest.java index c5b1f0c35..efd172098 100644 --- a/database/database-flyway/src/test/java/ru/tinkoff/kora/database/flyway/FlywayJdbcDatabaseInterceptorTest.java +++ b/database/database-flyway/src/test/java/ru/tinkoff/kora/database/flyway/FlywayJdbcDatabaseInterceptorTest.java @@ -3,6 +3,8 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import ru.tinkoff.kora.database.common.telemetry.$DatabaseTelemetryConfig_ConfigValueExtractor; +import ru.tinkoff.kora.database.common.telemetry.$DatabaseTracingConfig_ConfigValueExtractor; import ru.tinkoff.kora.database.common.telemetry.DefaultDataBaseTelemetryFactory; import ru.tinkoff.kora.database.jdbc.$JdbcDatabaseConfig_ConfigValueExtractor; import ru.tinkoff.kora.database.jdbc.JdbcDatabase; @@ -39,9 +41,9 @@ public void testFlywayInterceptor(PostgresParams params) throws SQLException { Duration.ofMillis(1000L), false, new Properties(), - new $TelemetryConfig_ConfigValueExtractor.TelemetryConfig_Impl( + new $DatabaseTelemetryConfig_ConfigValueExtractor.DatabaseTelemetryConfig_Impl( + new $DatabaseTracingConfig_ConfigValueExtractor.DatabaseTracingConfig_Impl(false, false), new $TelemetryConfig_LogConfig_ConfigValueExtractor.LogConfig_Impl(true), - new $TelemetryConfig_TracingConfig_ConfigValueExtractor.TracingConfig_Impl(true), new $TelemetryConfig_MetricsConfig_ConfigValueExtractor.MetricsConfig_Impl(null, null) ) ); diff --git a/database/database-jdbc/src/main/java/ru/tinkoff/kora/database/jdbc/JdbcDatabase.java b/database/database-jdbc/src/main/java/ru/tinkoff/kora/database/jdbc/JdbcDatabase.java index 1b202bae7..8713acaf5 100644 --- a/database/database-jdbc/src/main/java/ru/tinkoff/kora/database/jdbc/JdbcDatabase.java +++ b/database/database-jdbc/src/main/java/ru/tinkoff/kora/database/jdbc/JdbcDatabase.java @@ -64,7 +64,8 @@ private static DataBaseTelemetry getTelemetry(JdbcDatabaseConfig config, DataBas config.poolName(), "jdbc", jdbcDatabase, - config.username() + config.username(), + jdbcUrl ); return Objects.requireNonNullElse(telemetry, DataBaseTelemetryFactory.EMPTY); } diff --git a/database/database-jdbc/src/main/java/ru/tinkoff/kora/database/jdbc/JdbcDatabaseConfig.java b/database/database-jdbc/src/main/java/ru/tinkoff/kora/database/jdbc/JdbcDatabaseConfig.java index 9d31523a8..b3da5786b 100644 --- a/database/database-jdbc/src/main/java/ru/tinkoff/kora/database/jdbc/JdbcDatabaseConfig.java +++ b/database/database-jdbc/src/main/java/ru/tinkoff/kora/database/jdbc/JdbcDatabaseConfig.java @@ -3,6 +3,7 @@ import com.zaxxer.hikari.HikariConfig; import jakarta.annotation.Nullable; import ru.tinkoff.kora.config.common.annotation.ConfigValueExtractor; +import ru.tinkoff.kora.database.common.telemetry.DatabaseTelemetryConfig; import ru.tinkoff.kora.telemetry.common.TelemetryConfig; import java.time.Duration; @@ -67,7 +68,7 @@ default Properties dsProperties() { return new Properties(); } - TelemetryConfig telemetry(); + DatabaseTelemetryConfig telemetry(); static HikariConfig toHikariConfig(JdbcDatabaseConfig config) { var hikariConfig = new HikariConfig(); diff --git a/database/database-jdbc/src/test/java/ru/tinkoff/kora/database/jdbc/JdbcDatabaseTest.java b/database/database-jdbc/src/test/java/ru/tinkoff/kora/database/jdbc/JdbcDatabaseTest.java index 1360847de..764e2fa90 100644 --- a/database/database-jdbc/src/test/java/ru/tinkoff/kora/database/jdbc/JdbcDatabaseTest.java +++ b/database/database-jdbc/src/test/java/ru/tinkoff/kora/database/jdbc/JdbcDatabaseTest.java @@ -6,10 +6,16 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.slf4j.LoggerFactory; +import ru.tinkoff.kora.database.common.telemetry.$DatabaseTelemetryConfig_ConfigValueExtractor; +import ru.tinkoff.kora.database.common.telemetry.$DatabaseTelemetryConfig_ConfigValueExtractor.DatabaseTelemetryConfig_Impl; +import ru.tinkoff.kora.database.common.telemetry.$DatabaseTracingConfig_ConfigValueExtractor; +import ru.tinkoff.kora.database.common.telemetry.$DatabaseTracingConfig_ConfigValueExtractor.DatabaseTracingConfig_Impl; import ru.tinkoff.kora.database.common.telemetry.DefaultDataBaseTelemetryFactory; import ru.tinkoff.kora.telemetry.common.$TelemetryConfig_ConfigValueExtractor; import ru.tinkoff.kora.telemetry.common.$TelemetryConfig_LogConfig_ConfigValueExtractor; +import ru.tinkoff.kora.telemetry.common.$TelemetryConfig_LogConfig_ConfigValueExtractor.LogConfig_Impl; import ru.tinkoff.kora.telemetry.common.$TelemetryConfig_MetricsConfig_ConfigValueExtractor; +import ru.tinkoff.kora.telemetry.common.$TelemetryConfig_MetricsConfig_ConfigValueExtractor.MetricsConfig_Impl; import ru.tinkoff.kora.telemetry.common.$TelemetryConfig_TracingConfig_ConfigValueExtractor; import ru.tinkoff.kora.test.postgres.PostgresParams; import ru.tinkoff.kora.test.postgres.PostgresTestContainer; @@ -50,10 +56,10 @@ private static void withDb(PostgresParams params, Consumer consume Duration.ofMillis(1000L), false, new Properties(), - new $TelemetryConfig_ConfigValueExtractor.TelemetryConfig_Impl( - new $TelemetryConfig_LogConfig_ConfigValueExtractor.LogConfig_Impl(true), - new $TelemetryConfig_TracingConfig_ConfigValueExtractor.TracingConfig_Impl(true), - new $TelemetryConfig_MetricsConfig_ConfigValueExtractor.MetricsConfig_Impl(null, null) + new DatabaseTelemetryConfig_Impl( + new DatabaseTracingConfig_Impl(true, false), + new LogConfig_Impl(true), + new MetricsConfig_Impl(null, null) ) ); var db = new JdbcDatabase(config, new DefaultDataBaseTelemetryFactory(null, null, null)); diff --git a/database/database-jdbc/src/test/kotlin/ru/tinkoff/kora/database/jdbc/SuspendJdbcDatabaseTest.kt b/database/database-jdbc/src/test/kotlin/ru/tinkoff/kora/database/jdbc/SuspendJdbcDatabaseTest.kt index 77a5c91b9..8c0c72f08 100644 --- a/database/database-jdbc/src/test/kotlin/ru/tinkoff/kora/database/jdbc/SuspendJdbcDatabaseTest.kt +++ b/database/database-jdbc/src/test/kotlin/ru/tinkoff/kora/database/jdbc/SuspendJdbcDatabaseTest.kt @@ -9,6 +9,10 @@ import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith import org.slf4j.LoggerFactory import ru.tinkoff.kora.common.Context +import ru.tinkoff.kora.database.common.telemetry.`$DatabaseTelemetryConfig_ConfigValueExtractor` +import ru.tinkoff.kora.database.common.telemetry.`$DatabaseTelemetryConfig_ConfigValueExtractor`.DatabaseTelemetryConfig_Impl +import ru.tinkoff.kora.database.common.telemetry.`$DatabaseTracingConfig_ConfigValueExtractor` +import ru.tinkoff.kora.database.common.telemetry.`$DatabaseTracingConfig_ConfigValueExtractor`.DatabaseTracingConfig_Impl import ru.tinkoff.kora.database.common.telemetry.DefaultDataBaseTelemetryFactory import ru.tinkoff.kora.database.jdbc.`$JdbcDatabaseConfig_ConfigValueExtractor`.* import ru.tinkoff.kora.database.jdbc.JdbcHelper.SqlRunnable @@ -161,9 +165,9 @@ internal class SuspendJdbcDatabaseTest { Duration.ofMillis(1000L), false, Properties(), - TelemetryConfig_Impl( + DatabaseTelemetryConfig_Impl( + DatabaseTracingConfig_Impl(true, false), LogConfig_Impl(true), - TracingConfig_Impl(true), MetricsConfig_Impl(null, null) ) ) diff --git a/database/database-liquibase/src/test/java/ru.tinkoff.kora.database.liquibase/LiquibaseJdbcDatabaseInterceptorTest.java b/database/database-liquibase/src/test/java/ru.tinkoff.kora.database.liquibase/LiquibaseJdbcDatabaseInterceptorTest.java index fc3dcfb1a..75c8f8c07 100644 --- a/database/database-liquibase/src/test/java/ru.tinkoff.kora.database.liquibase/LiquibaseJdbcDatabaseInterceptorTest.java +++ b/database/database-liquibase/src/test/java/ru.tinkoff.kora.database.liquibase/LiquibaseJdbcDatabaseInterceptorTest.java @@ -3,6 +3,8 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import ru.tinkoff.kora.database.common.telemetry.$DatabaseTelemetryConfig_ConfigValueExtractor; +import ru.tinkoff.kora.database.common.telemetry.$DatabaseTracingConfig_ConfigValueExtractor; import ru.tinkoff.kora.database.common.telemetry.DefaultDataBaseTelemetryFactory; import ru.tinkoff.kora.database.jdbc.$JdbcDatabaseConfig_ConfigValueExtractor; import ru.tinkoff.kora.database.jdbc.JdbcDatabase; @@ -39,9 +41,9 @@ public void testLiquibaseInterceptor(PostgresParams params) throws SQLException Duration.ofMillis(1000L), false, new Properties(), - new $TelemetryConfig_ConfigValueExtractor.TelemetryConfig_Impl( + new $DatabaseTelemetryConfig_ConfigValueExtractor.DatabaseTelemetryConfig_Impl( + new $DatabaseTracingConfig_ConfigValueExtractor.DatabaseTracingConfig_Impl(false, false), new $TelemetryConfig_LogConfig_ConfigValueExtractor.LogConfig_Impl(true), - new $TelemetryConfig_TracingConfig_ConfigValueExtractor.TracingConfig_Impl(true), new $TelemetryConfig_MetricsConfig_ConfigValueExtractor.MetricsConfig_Impl(null, null) ) ); diff --git a/database/database-r2dbc/src/main/java/ru/tinkoff/kora/database/r2dbc/R2dbcDatabase.java b/database/database-r2dbc/src/main/java/ru/tinkoff/kora/database/r2dbc/R2dbcDatabase.java index f5fe8ff0a..9003e0524 100644 --- a/database/database-r2dbc/src/main/java/ru/tinkoff/kora/database/r2dbc/R2dbcDatabase.java +++ b/database/database-r2dbc/src/main/java/ru/tinkoff/kora/database/r2dbc/R2dbcDatabase.java @@ -52,7 +52,8 @@ public R2dbcDatabase(R2dbcDatabaseConfig config, List options() { return Map.of(); } - TelemetryConfig telemetry(); + DatabaseTelemetryConfig telemetry(); } diff --git a/database/database-r2dbc/src/test/java/ru/tinkoff/kora/database/r2dbc/R2dbcDatabaseTest.java b/database/database-r2dbc/src/test/java/ru/tinkoff/kora/database/r2dbc/R2dbcDatabaseTest.java index 136e0a6c9..0eaec0830 100644 --- a/database/database-r2dbc/src/test/java/ru/tinkoff/kora/database/r2dbc/R2dbcDatabaseTest.java +++ b/database/database-r2dbc/src/test/java/ru/tinkoff/kora/database/r2dbc/R2dbcDatabaseTest.java @@ -5,10 +5,16 @@ import org.junit.jupiter.api.extension.ExtendWith; import reactor.test.StepVerifier; import ru.tinkoff.kora.database.common.QueryContext; +import ru.tinkoff.kora.database.common.telemetry.$DatabaseTelemetryConfig_ConfigValueExtractor; +import ru.tinkoff.kora.database.common.telemetry.$DatabaseTelemetryConfig_ConfigValueExtractor.DatabaseTelemetryConfig_Impl; +import ru.tinkoff.kora.database.common.telemetry.$DatabaseTracingConfig_ConfigValueExtractor; +import ru.tinkoff.kora.database.common.telemetry.$DatabaseTracingConfig_ConfigValueExtractor.DatabaseTracingConfig_Impl; import ru.tinkoff.kora.database.common.telemetry.DefaultDataBaseTelemetryFactory; import ru.tinkoff.kora.telemetry.common.$TelemetryConfig_ConfigValueExtractor; import ru.tinkoff.kora.telemetry.common.$TelemetryConfig_LogConfig_ConfigValueExtractor; +import ru.tinkoff.kora.telemetry.common.$TelemetryConfig_LogConfig_ConfigValueExtractor.LogConfig_Impl; import ru.tinkoff.kora.telemetry.common.$TelemetryConfig_MetricsConfig_ConfigValueExtractor; +import ru.tinkoff.kora.telemetry.common.$TelemetryConfig_MetricsConfig_ConfigValueExtractor.MetricsConfig_Impl; import ru.tinkoff.kora.telemetry.common.$TelemetryConfig_TracingConfig_ConfigValueExtractor; import ru.tinkoff.kora.test.postgres.PostgresParams; import ru.tinkoff.kora.test.postgres.PostgresTestContainer; @@ -41,10 +47,10 @@ private static void withDb(PostgresParams params, Consumer consum 0, false, Collections.emptyMap(), - new $TelemetryConfig_ConfigValueExtractor.TelemetryConfig_Impl( - new $TelemetryConfig_LogConfig_ConfigValueExtractor.LogConfig_Impl(true), - new $TelemetryConfig_TracingConfig_ConfigValueExtractor.TracingConfig_Impl(true), - new $TelemetryConfig_MetricsConfig_ConfigValueExtractor.MetricsConfig_Impl(null, null) + new DatabaseTelemetryConfig_Impl( + new DatabaseTracingConfig_Impl(true, false), + new LogConfig_Impl(true), + new MetricsConfig_Impl(null, null) ) ); var db = new R2dbcDatabase(config, List.of(), new DefaultDataBaseTelemetryFactory(null, null, null)); diff --git a/database/database-r2dbc/src/test/kotlin/ru/tinkoff/kora/database/r2dbc/R2dbcDatabaseExtensionTest.kt b/database/database-r2dbc/src/test/kotlin/ru/tinkoff/kora/database/r2dbc/R2dbcDatabaseExtensionTest.kt index b2559c42a..432644700 100644 --- a/database/database-r2dbc/src/test/kotlin/ru/tinkoff/kora/database/r2dbc/R2dbcDatabaseExtensionTest.kt +++ b/database/database-r2dbc/src/test/kotlin/ru/tinkoff/kora/database/r2dbc/R2dbcDatabaseExtensionTest.kt @@ -9,6 +9,9 @@ import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith import org.junit.jupiter.api.fail import ru.tinkoff.kora.common.Context +import ru.tinkoff.kora.database.common.telemetry.`$DatabaseTelemetryConfig_ConfigValueExtractor` +import ru.tinkoff.kora.database.common.telemetry.`$DatabaseTelemetryConfig_ConfigValueExtractor`.DatabaseTelemetryConfig_Impl +import ru.tinkoff.kora.database.common.telemetry.`$DatabaseTracingConfig_ConfigValueExtractor`.DatabaseTracingConfig_Impl import ru.tinkoff.kora.database.common.telemetry.DefaultDataBaseTelemetryFactory import ru.tinkoff.kora.database.r2dbc.`$R2dbcDatabaseConfig_ConfigValueExtractor`.R2dbcDatabaseConfig_Impl import ru.tinkoff.kora.telemetry.common.`$TelemetryConfig_ConfigValueExtractor`.TelemetryConfig_Impl @@ -109,9 +112,9 @@ class R2dbcDatabaseExtensionTest { 0, false, mapOf(), - TelemetryConfig_Impl( + DatabaseTelemetryConfig_Impl( + DatabaseTracingConfig_Impl(true, false), LogConfig_Impl(true), - TracingConfig_Impl(true), MetricsConfig_Impl(null, null) ) ) diff --git a/database/database-symbol-processor/src/test/kotlin/ru/tinkoff/kora/database/symbol/processor/jdbc/JdbcParametersTest.kt b/database/database-symbol-processor/src/test/kotlin/ru/tinkoff/kora/database/symbol/processor/jdbc/JdbcParametersTest.kt index be35ed8ed..38fe4652b 100644 --- a/database/database-symbol-processor/src/test/kotlin/ru/tinkoff/kora/database/symbol/processor/jdbc/JdbcParametersTest.kt +++ b/database/database-symbol-processor/src/test/kotlin/ru/tinkoff/kora/database/symbol/processor/jdbc/JdbcParametersTest.kt @@ -6,12 +6,17 @@ import org.mockito.ArgumentMatchers import org.mockito.Mockito import org.mockito.kotlin.verify import ru.tinkoff.kora.common.Tag +import ru.tinkoff.kora.database.common.telemetry.`$DatabaseTelemetryConfig_ConfigValueExtractor`.DatabaseTelemetryConfig_Impl +import ru.tinkoff.kora.database.common.telemetry.`$DatabaseTracingConfig_ConfigValueExtractor` +import ru.tinkoff.kora.database.common.telemetry.`$DatabaseTracingConfig_ConfigValueExtractor`.DatabaseTracingConfig_Impl import ru.tinkoff.kora.database.jdbc.`$JdbcDatabaseConfig_ConfigValueExtractor`.JdbcDatabaseConfig_Impl import ru.tinkoff.kora.database.jdbc.mapper.parameter.JdbcParameterColumnMapper import ru.tinkoff.kora.database.symbol.processor.entity.TestEntity import ru.tinkoff.kora.telemetry.common.`$TelemetryConfig_ConfigValueExtractor` import ru.tinkoff.kora.telemetry.common.`$TelemetryConfig_LogConfig_ConfigValueExtractor` +import ru.tinkoff.kora.telemetry.common.`$TelemetryConfig_LogConfig_ConfigValueExtractor`.LogConfig_Impl import ru.tinkoff.kora.telemetry.common.`$TelemetryConfig_MetricsConfig_ConfigValueExtractor` +import ru.tinkoff.kora.telemetry.common.`$TelemetryConfig_MetricsConfig_ConfigValueExtractor`.MetricsConfig_Impl import ru.tinkoff.kora.telemetry.common.`$TelemetryConfig_TracingConfig_ConfigValueExtractor` import java.time.Duration import java.util.* @@ -54,10 +59,10 @@ class JdbcParametersTest : AbstractJdbcRepositoryTest() { Duration.ofMillis(1000L), false, Properties(), - `$TelemetryConfig_ConfigValueExtractor`.TelemetryConfig_Impl( - `$TelemetryConfig_LogConfig_ConfigValueExtractor`.LogConfig_Impl(true), - `$TelemetryConfig_TracingConfig_ConfigValueExtractor`.TracingConfig_Impl(true), - `$TelemetryConfig_MetricsConfig_ConfigValueExtractor`.MetricsConfig_Impl(null, null) + DatabaseTelemetryConfig_Impl( + DatabaseTracingConfig_Impl(true, false), + LogConfig_Impl(true), + MetricsConfig_Impl(null, null) ) ) val repository = compileForArgs( diff --git a/database/database-vertx/src/main/java/ru/tinkoff/kora/database/vertx/VertxDatabase.java b/database/database-vertx/src/main/java/ru/tinkoff/kora/database/vertx/VertxDatabase.java index de6b6698d..619c83c4a 100644 --- a/database/database-vertx/src/main/java/ru/tinkoff/kora/database/vertx/VertxDatabase.java +++ b/database/database-vertx/src/main/java/ru/tinkoff/kora/database/vertx/VertxDatabase.java @@ -56,7 +56,12 @@ public VertxDatabase(VertxDatabaseConfig vertxDatabaseConfig, VertxDatabaseConfig.toPgPoolOptions(vertxDatabaseConfig) ); this.telemetry = Objects.requireNonNullElse( - telemetryFactory.get(vertxDatabaseConfig.telemetry(), vertxDatabaseConfig.poolName(), "vertx", "postgres", vertxDatabaseConfig.username()), + telemetryFactory.get(vertxDatabaseConfig.telemetry(), + vertxDatabaseConfig.poolName(), + "vertx", + "postgres", + vertxDatabaseConfig.username(), + vertxDatabaseConfig.connectionUri()), DataBaseTelemetryFactory.EMPTY ); } diff --git a/database/database-vertx/src/main/java/ru/tinkoff/kora/database/vertx/VertxDatabaseConfig.java b/database/database-vertx/src/main/java/ru/tinkoff/kora/database/vertx/VertxDatabaseConfig.java index f66fd0ec9..8322ab759 100644 --- a/database/database-vertx/src/main/java/ru/tinkoff/kora/database/vertx/VertxDatabaseConfig.java +++ b/database/database-vertx/src/main/java/ru/tinkoff/kora/database/vertx/VertxDatabaseConfig.java @@ -4,6 +4,7 @@ import io.vertx.sqlclient.SqlConnectOptions; import jakarta.annotation.Nullable; import ru.tinkoff.kora.config.common.annotation.ConfigValueExtractor; +import ru.tinkoff.kora.database.common.telemetry.DatabaseTelemetryConfig; import ru.tinkoff.kora.telemetry.common.TelemetryConfig; import java.time.Duration; @@ -74,5 +75,5 @@ static PoolOptions toPgPoolOptions(VertxDatabaseConfig config) { .setMaxSize(config.maxPoolSize()); } - TelemetryConfig telemetry(); + DatabaseTelemetryConfig telemetry(); } diff --git a/database/database-vertx/src/test/java/ru/tinkoff/kora/database/vertx/VertxConnectionFactoryTest.java b/database/database-vertx/src/test/java/ru/tinkoff/kora/database/vertx/VertxConnectionFactoryTest.java index c53bf12c5..f1fd2a68c 100644 --- a/database/database-vertx/src/test/java/ru/tinkoff/kora/database/vertx/VertxConnectionFactoryTest.java +++ b/database/database-vertx/src/test/java/ru/tinkoff/kora/database/vertx/VertxConnectionFactoryTest.java @@ -13,6 +13,8 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import ru.tinkoff.kora.database.common.QueryContext; +import ru.tinkoff.kora.database.common.telemetry.$DatabaseTelemetryConfig_ConfigValueExtractor; +import ru.tinkoff.kora.database.common.telemetry.$DatabaseTracingConfig_ConfigValueExtractor; import ru.tinkoff.kora.database.common.telemetry.DefaultDataBaseTelemetryFactory; import ru.tinkoff.kora.netty.common.NettyChannelFactory; import ru.tinkoff.kora.telemetry.common.$TelemetryConfig_ConfigValueExtractor; @@ -71,9 +73,9 @@ private static void withDb(PostgresParams params, Consumer consum true, false, Duration.ofMillis(1000), - new $TelemetryConfig_ConfigValueExtractor.TelemetryConfig_Impl( + new $DatabaseTelemetryConfig_ConfigValueExtractor.DatabaseTelemetryConfig_Impl( + new $DatabaseTracingConfig_ConfigValueExtractor.DatabaseTracingConfig_Impl(false, false), new $TelemetryConfig_LogConfig_ConfigValueExtractor.LogConfig_Impl(true), - new $TelemetryConfig_TracingConfig_ConfigValueExtractor.TracingConfig_Impl(true), new $TelemetryConfig_MetricsConfig_ConfigValueExtractor.MetricsConfig_Impl(null, null) ) ); diff --git a/experimental/camunda-engine-bpmn/src/test/java/ru/tinkoff/kora/camunda/engine/bpmn/KoraProcessEngineTests.java b/experimental/camunda-engine-bpmn/src/test/java/ru/tinkoff/kora/camunda/engine/bpmn/KoraProcessEngineTests.java index 5ad131ee4..1e8f5bfdc 100644 --- a/experimental/camunda-engine-bpmn/src/test/java/ru/tinkoff/kora/camunda/engine/bpmn/KoraProcessEngineTests.java +++ b/experimental/camunda-engine-bpmn/src/test/java/ru/tinkoff/kora/camunda/engine/bpmn/KoraProcessEngineTests.java @@ -7,10 +7,15 @@ import ru.tinkoff.kora.application.graph.All; import ru.tinkoff.kora.camunda.engine.bpmn.transaction.CamundaTransactionManager; import ru.tinkoff.kora.camunda.engine.bpmn.transaction.JdbcCamundaTransactionManager; +import ru.tinkoff.kora.database.common.telemetry.$DatabaseTelemetryConfig_ConfigValueExtractor; +import ru.tinkoff.kora.database.common.telemetry.$DatabaseTracingConfig_ConfigValueExtractor; import ru.tinkoff.kora.database.common.telemetry.DefaultDataBaseTelemetryFactory; import ru.tinkoff.kora.database.jdbc.$JdbcDatabaseConfig_ConfigValueExtractor; import ru.tinkoff.kora.database.jdbc.JdbcDatabase; -import ru.tinkoff.kora.telemetry.common.*; +import ru.tinkoff.kora.telemetry.common.$TelemetryConfig_LogConfig_ConfigValueExtractor; +import ru.tinkoff.kora.telemetry.common.$TelemetryConfig_MetricsConfig_ConfigValueExtractor; +import ru.tinkoff.kora.telemetry.common.$TelemetryConfig_TracingConfig_ConfigValueExtractor; +import ru.tinkoff.kora.telemetry.common.TelemetryConfig; import ru.tinkoff.kora.test.postgres.PostgresParams; import ru.tinkoff.kora.test.postgres.PostgresTestContainer; @@ -171,9 +176,9 @@ private static void withDatabase(PostgresParams params, Consumer c Duration.ofMillis(5000L), false, new Properties(), - new $TelemetryConfig_ConfigValueExtractor.TelemetryConfig_Impl( + new $DatabaseTelemetryConfig_ConfigValueExtractor.DatabaseTelemetryConfig_Impl( + new $DatabaseTracingConfig_ConfigValueExtractor.DatabaseTracingConfig_Impl(true, true), new $TelemetryConfig_LogConfig_ConfigValueExtractor.LogConfig_Impl(true), - new $TelemetryConfig_TracingConfig_ConfigValueExtractor.TracingConfig_Impl(true), new $TelemetryConfig_MetricsConfig_ConfigValueExtractor.MetricsConfig_Impl(true, TelemetryConfig.MetricsConfig.DEFAULT_SLO) ) ); diff --git a/opentelemetry/opentelemetry-module/src/main/java/ru/tinkoff/kora/opentelemetry/module/db/OpentelemetryDataBaseTracer.java b/opentelemetry/opentelemetry-module/src/main/java/ru/tinkoff/kora/opentelemetry/module/db/OpentelemetryDataBaseTracer.java index e0c41b6c8..119a46c71 100644 --- a/opentelemetry/opentelemetry-module/src/main/java/ru/tinkoff/kora/opentelemetry/module/db/OpentelemetryDataBaseTracer.java +++ b/opentelemetry/opentelemetry-module/src/main/java/ru/tinkoff/kora/opentelemetry/module/db/OpentelemetryDataBaseTracer.java @@ -3,6 +3,7 @@ import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.api.trace.StatusCode; import io.opentelemetry.api.trace.Tracer; +import io.opentelemetry.semconv.ServerAttributes; import io.opentelemetry.semconv.incubating.DbIncubatingAttributes; import jakarta.annotation.Nullable; import ru.tinkoff.kora.common.Context; @@ -10,18 +11,61 @@ import ru.tinkoff.kora.database.common.telemetry.DataBaseTracer; import ru.tinkoff.kora.opentelemetry.common.OpentelemetryContext; +import java.net.URI; + public final class OpentelemetryDataBaseTracer implements DataBaseTracer { + private final Tracer tracer; private final String dbSystem; @Nullable private final String connectionString; + private final String host; + private final int port; private final String user; public OpentelemetryDataBaseTracer(Tracer tracer, String dbType, @Nullable String connectionString, String user) { + this(tracer, dbType, connectionString, user, false); + } + + public OpentelemetryDataBaseTracer(Tracer tracer, String dbType, @Nullable String connectionString, String user, boolean addConnectionURI) { this.tracer = tracer; this.dbSystem = toDbSystem(dbType); - this.connectionString = connectionString; this.user = user; + + String host = null; + int port = -1; + String resultConnectionString = null; + if (addConnectionURI) { + resultConnectionString = connectionString; + } + if (addConnectionURI && connectionString != null) { + try { + URI originalUri = URI.create(connectionString); + + // Construct a new URI without the query component + URI uriWithoutParams = new URI( + originalUri.getScheme(), + originalUri.getUserInfo(), + originalUri.getHost(), + originalUri.getPort(), + originalUri.getPath(), + null, + originalUri.getFragment() + ); + + host = originalUri.getHost(); + port = originalUri.getPort(); + resultConnectionString = uriWithoutParams.toString(); + } catch (Exception e) { + // ignore + host = null; + port = -1; + } + } + + this.host = host; + this.port = port; + this.connectionString = resultConnectionString; } private static String toDbSystem(String type) { @@ -54,13 +98,21 @@ public DataBaseSpan createQuerySpan(Context ctx, QueryContext queryContext) { var builder = this.tracer.spanBuilder(queryContext.operation()) .setSpanKind(SpanKind.CLIENT) .setParent(otctx.getContext()) - .setAttribute(DbIncubatingAttributes.DB_SYSTEM, this.dbSystem) + .setAttribute(DbIncubatingAttributes.DB_SYSTEM_NAME, this.dbSystem) .setAttribute(DbIncubatingAttributes.DB_USER, this.user) - .setAttribute(DbIncubatingAttributes.DB_STATEMENT, queryContext.queryId()); + .setAttribute(DbIncubatingAttributes.DB_STATEMENT, queryContext.queryId()) + .setAttribute(DbIncubatingAttributes.DB_QUERY_TEXT, queryContext.queryId()); + if (this.connectionString != null) { - @SuppressWarnings("deprecation") var ignore = builder.setAttribute(DbIncubatingAttributes.DB_CONNECTION_STRING, this.connectionString); } + if (this.host != null) { + builder.setAttribute(ServerAttributes.SERVER_ADDRESS, this.host); + } + if (this.port != -1) { + builder.setAttribute(ServerAttributes.SERVER_PORT, this.port); + } + var span = builder.startSpan(); OpentelemetryContext.set(ctx, otctx.add(span)); return (ex) -> { @@ -82,14 +134,21 @@ public DataBaseSpan createCallSpan(QueryContext queryContext) { var builder = this.tracer.spanBuilder(queryContext.operation()) .setSpanKind(SpanKind.CLIENT) .setParent(otctx.getContext()) - .setAttribute(DbIncubatingAttributes.DB_SYSTEM, this.dbSystem) + .setAttribute(DbIncubatingAttributes.DB_SYSTEM_NAME, this.dbSystem) .setAttribute(DbIncubatingAttributes.DB_USER, this.user) - .setAttribute(DbIncubatingAttributes.DB_STATEMENT, queryContext.queryId()); + .setAttribute(DbIncubatingAttributes.DB_STATEMENT, queryContext.queryId()) + .setAttribute(DbIncubatingAttributes.DB_QUERY_TEXT, queryContext.queryId()); if (this.connectionString != null) { - @SuppressWarnings("deprecation") var ignore = builder.setAttribute(DbIncubatingAttributes.DB_CONNECTION_STRING, this.connectionString); } + if (this.host != null) { + builder.setAttribute(ServerAttributes.SERVER_ADDRESS, this.host); + } + if (this.port != -1) { + builder.setAttribute(ServerAttributes.SERVER_PORT, this.port); + } + var span = builder.startSpan(); OpentelemetryContext.set(ctx, otctx.add(span)); return (ex) -> { diff --git a/opentelemetry/opentelemetry-module/src/main/java/ru/tinkoff/kora/opentelemetry/module/db/OpentelemetryDataBaseTracerFactory.java b/opentelemetry/opentelemetry-module/src/main/java/ru/tinkoff/kora/opentelemetry/module/db/OpentelemetryDataBaseTracerFactory.java index 65c945ead..a096258b3 100644 --- a/opentelemetry/opentelemetry-module/src/main/java/ru/tinkoff/kora/opentelemetry/module/db/OpentelemetryDataBaseTracerFactory.java +++ b/opentelemetry/opentelemetry-module/src/main/java/ru/tinkoff/kora/opentelemetry/module/db/OpentelemetryDataBaseTracerFactory.java @@ -4,6 +4,7 @@ import jakarta.annotation.Nullable; import ru.tinkoff.kora.database.common.telemetry.DataBaseTracer; import ru.tinkoff.kora.database.common.telemetry.DataBaseTracerFactory; +import ru.tinkoff.kora.database.common.telemetry.DatabaseTracingConfig; import ru.tinkoff.kora.telemetry.common.TelemetryConfig; import java.util.Objects; @@ -19,7 +20,10 @@ public OpentelemetryDataBaseTracerFactory(Tracer tracer) { @Nullable public DataBaseTracer get(TelemetryConfig.TracingConfig config, String dbType, @Nullable String connectionString, String user) { if (Objects.requireNonNullElse(config.enabled(), true)) { - return new OpentelemetryDataBaseTracer(this.tracer, dbType, connectionString, user); + boolean traceConnection = (config instanceof DatabaseTracingConfig db) + ? db.traceConnectionURI() + : false; + return new OpentelemetryDataBaseTracer(this.tracer, dbType, connectionString, user, traceConnection); } else { return null; }