diff --git a/gradle.properties b/gradle.properties index 2eecb93..fe72a85 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ groupId=ru.tinkoff.kora -koraVersion=1.1.1 +koraVersion=1.1.2 ##### GRADLE ##### diff --git a/kora-java-cache-caffeine/src/main/java/ru/tinkoff/kora/example/cache/caffeine/CompositeCache.java b/kora-java-cache-caffeine/src/main/java/ru/tinkoff/kora/example/cache/caffeine/CompositeCache.java new file mode 100644 index 0000000..8a2bde0 --- /dev/null +++ b/kora-java-cache-caffeine/src/main/java/ru/tinkoff/kora/example/cache/caffeine/CompositeCache.java @@ -0,0 +1,10 @@ +package ru.tinkoff.kora.example.cache.caffeine; + +import ru.tinkoff.kora.cache.annotation.Cache; +import ru.tinkoff.kora.cache.caffeine.CaffeineCache; + +@Cache("my-cache") +public interface CompositeCache extends CaffeineCache { + + record Key(String userId, String traceId) { } +} diff --git a/kora-java-cache-caffeine/src/main/java/ru/tinkoff/kora/example/cache/caffeine/CompositeService.java b/kora-java-cache-caffeine/src/main/java/ru/tinkoff/kora/example/cache/caffeine/CompositeService.java new file mode 100644 index 0000000..560ea92 --- /dev/null +++ b/kora-java-cache-caffeine/src/main/java/ru/tinkoff/kora/example/cache/caffeine/CompositeService.java @@ -0,0 +1,51 @@ +package ru.tinkoff.kora.example.cache.caffeine; + +import jakarta.annotation.Nonnull; +import ru.tinkoff.kora.cache.CacheKeyMapper; +import ru.tinkoff.kora.cache.annotation.CacheInvalidate; +import ru.tinkoff.kora.cache.annotation.CachePut; +import ru.tinkoff.kora.cache.annotation.Cacheable; +import ru.tinkoff.kora.common.Component; +import ru.tinkoff.kora.common.Mapping; +import ru.tinkoff.kora.common.annotation.Root; + +import java.math.BigDecimal; +import java.util.concurrent.ThreadLocalRandom; + +@Root +@Component +public class CompositeService { + + public record UserContext(String userId, String traceId) {} + + public static final class UserContextMapping implements CacheKeyMapper { + + @Nonnull + @Override + public CompositeCache.Key map(UserContext arg) { + return new CompositeCache.Key(arg.userId(), arg.traceId()); + } + } + + @Mapping(UserContextMapping.class) + @Cacheable(CompositeCache.class) + public Long getMapping(UserContext context) { + return ThreadLocalRandom.current().nextLong(0, 100_000_000L); + } + + @Cacheable(CompositeCache.class) + public Long get(String id, String traceId) { + return ThreadLocalRandom.current().nextLong(0, 100_000_000L); + } + + @CachePut(value = CompositeCache.class, parameters = { "id", "traceId" }) + public Long put(BigDecimal arg2, String arg3, String id, String traceId) { + return ThreadLocalRandom.current().nextLong(0, 100_000_000L); + } + + @CacheInvalidate(CompositeCache.class) + public void delete(String id, String traceId) {} + + @CacheInvalidate(value = CompositeCache.class, invalidateAll = true) + public void deleteAll() {} +} diff --git a/kora-java-cache-caffeine/src/main/java/ru/tinkoff/kora/example/cache/caffeine/MyCache.java b/kora-java-cache-caffeine/src/main/java/ru/tinkoff/kora/example/cache/caffeine/SimpleCache.java similarity index 71% rename from kora-java-cache-caffeine/src/main/java/ru/tinkoff/kora/example/cache/caffeine/MyCache.java rename to kora-java-cache-caffeine/src/main/java/ru/tinkoff/kora/example/cache/caffeine/SimpleCache.java index 1ad4500..e23b6d2 100644 --- a/kora-java-cache-caffeine/src/main/java/ru/tinkoff/kora/example/cache/caffeine/MyCache.java +++ b/kora-java-cache-caffeine/src/main/java/ru/tinkoff/kora/example/cache/caffeine/SimpleCache.java @@ -4,6 +4,6 @@ import ru.tinkoff.kora.cache.caffeine.CaffeineCache; @Cache("my-cache") -public interface MyCache extends CaffeineCache { +public interface SimpleCache extends CaffeineCache { } diff --git a/kora-java-cache-caffeine/src/main/java/ru/tinkoff/kora/example/cache/caffeine/CachedService.java b/kora-java-cache-caffeine/src/main/java/ru/tinkoff/kora/example/cache/caffeine/SimpleService.java similarity index 82% rename from kora-java-cache-caffeine/src/main/java/ru/tinkoff/kora/example/cache/caffeine/CachedService.java rename to kora-java-cache-caffeine/src/main/java/ru/tinkoff/kora/example/cache/caffeine/SimpleService.java index 5f57f36..b3c9225 100644 --- a/kora-java-cache-caffeine/src/main/java/ru/tinkoff/kora/example/cache/caffeine/CachedService.java +++ b/kora-java-cache-caffeine/src/main/java/ru/tinkoff/kora/example/cache/caffeine/SimpleService.java @@ -13,7 +13,7 @@ @Root @Component -public class CachedService { +public class SimpleService { public record UserContext(String userId, String traceId) {} @@ -27,24 +27,24 @@ public String map(UserContext arg) { } @Mapping(UserContextMapping.class) - @Cacheable(MyCache.class) + @Cacheable(SimpleCache.class) public Long getMapping(UserContext context) { return ThreadLocalRandom.current().nextLong(0, 100_000_000L); } - @Cacheable(MyCache.class) + @Cacheable(SimpleCache.class) public Long get(String id) { return ThreadLocalRandom.current().nextLong(0, 100_000_000L); } - @CachePut(value = MyCache.class, parameters = { "id" }) + @CachePut(value = SimpleCache.class, parameters = { "id" }) public Long put(BigDecimal arg2, String arg3, String id) { return ThreadLocalRandom.current().nextLong(0, 100_000_000L); } - @CacheInvalidate(MyCache.class) + @CacheInvalidate(SimpleCache.class) public void delete(String id) {} - @CacheInvalidate(value = MyCache.class, invalidateAll = true) + @CacheInvalidate(value = SimpleCache.class, invalidateAll = true) public void deleteAll() {} } diff --git a/kora-java-cache-caffeine/src/test/java/ru/tinkoff/kora/example/cache/caffeine/CaffeineCompositeServiceTests.java b/kora-java-cache-caffeine/src/test/java/ru/tinkoff/kora/example/cache/caffeine/CaffeineCompositeServiceTests.java new file mode 100644 index 0000000..e511448 --- /dev/null +++ b/kora-java-cache-caffeine/src/test/java/ru/tinkoff/kora/example/cache/caffeine/CaffeineCompositeServiceTests.java @@ -0,0 +1,95 @@ +package ru.tinkoff.kora.example.cache.caffeine; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import ru.tinkoff.kora.test.extension.junit5.KoraAppTest; +import ru.tinkoff.kora.test.extension.junit5.TestComponent; + +import java.math.BigDecimal; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; + +@KoraAppTest(Application.class) +class CaffeineCompositeServiceTests { + + @TestComponent + private CompositeService service; + @TestComponent + private CompositeCache cache; + + @BeforeEach + void cleanup() { + cache.invalidateAll(); + } + + @Test + void get() { + // when + var origin = service.get("1", "1"); + + // then + var cached = service.get("1", "1"); + assertEquals(origin, cached); + } + + @Test + void getMapping() { + // given + var context = new CompositeService.UserContext("1", "2"); + + // when + var origin = service.getMapping(context); + + // then + var cached = service.getMapping(context); + assertEquals(origin, cached); + } + + @Test + void put() { + // when + var origin = service.put(BigDecimal.ONE, "12345", "1", "1"); + + // then + var cached = service.get("1", "1"); + assertEquals(origin, cached); + } + + @Test + void delete() { + // given + var origin = service.put(BigDecimal.ONE, "12345", "1", "1"); + var cached1 = service.get("1", "1"); + assertEquals(origin, cached1); + + // when + service.delete("1", "1"); + + // then + var newValue = service.get("1", "1"); + assertNotEquals(origin, newValue); + } + + @Test + void deleteAll() { + // given + var origin1 = service.put(BigDecimal.ONE, "12345", "1", "1"); + var cached1 = service.get("1", "1"); + assertEquals(origin1, cached1); + + var origin2 = service.put(BigDecimal.ONE, "12345", "2", "2"); + var cached2 = service.get("2", "2"); + assertEquals(origin2, cached2); + + // when + service.deleteAll(); + + // then + var newValue1 = service.get("1", "1"); + assertNotEquals(origin1, newValue1); + + var newValue2 = service.get("2", "2"); + assertNotEquals(origin2, newValue2); + } +} diff --git a/kora-java-cache-caffeine/src/test/java/ru/tinkoff/kora/example/cache/caffeine/CaffeineCachedServiceTests.java b/kora-java-cache-caffeine/src/test/java/ru/tinkoff/kora/example/cache/caffeine/CaffeineSimpleServiceTests.java similarity index 92% rename from kora-java-cache-caffeine/src/test/java/ru/tinkoff/kora/example/cache/caffeine/CaffeineCachedServiceTests.java rename to kora-java-cache-caffeine/src/test/java/ru/tinkoff/kora/example/cache/caffeine/CaffeineSimpleServiceTests.java index 436439f..068d7f7 100644 --- a/kora-java-cache-caffeine/src/test/java/ru/tinkoff/kora/example/cache/caffeine/CaffeineCachedServiceTests.java +++ b/kora-java-cache-caffeine/src/test/java/ru/tinkoff/kora/example/cache/caffeine/CaffeineSimpleServiceTests.java @@ -10,12 +10,12 @@ import ru.tinkoff.kora.test.extension.junit5.TestComponent; @KoraAppTest(Application.class) -class CaffeineCachedServiceTests { +class CaffeineSimpleServiceTests { @TestComponent - private CachedService service; + private SimpleService service; @TestComponent - private MyCache cache; + private SimpleCache cache; @BeforeEach void cleanup() { @@ -35,7 +35,7 @@ void get() { @Test void getMapping() { // given - var context = new CachedService.UserContext("1", "2"); + var context = new SimpleService.UserContext("1", "2"); // when var origin = service.getMapping(context); diff --git a/kora-java-cache-redis/src/main/java/ru/tinkoff/kora/example/cache/caffeine/Application.java b/kora-java-cache-redis/src/main/java/ru/tinkoff/kora/example/cache/redis/Application.java similarity index 90% rename from kora-java-cache-redis/src/main/java/ru/tinkoff/kora/example/cache/caffeine/Application.java rename to kora-java-cache-redis/src/main/java/ru/tinkoff/kora/example/cache/redis/Application.java index af52fd5..d3f21a9 100644 --- a/kora-java-cache-redis/src/main/java/ru/tinkoff/kora/example/cache/caffeine/Application.java +++ b/kora-java-cache-redis/src/main/java/ru/tinkoff/kora/example/cache/redis/Application.java @@ -1,4 +1,4 @@ -package ru.tinkoff.kora.example.cache.caffeine; +package ru.tinkoff.kora.example.cache.redis; import ru.tinkoff.kora.application.graph.KoraApplication; import ru.tinkoff.kora.cache.redis.RedisCacheModule; diff --git a/kora-java-cache-redis/src/main/java/ru/tinkoff/kora/example/cache/redis/CompositeCache.java b/kora-java-cache-redis/src/main/java/ru/tinkoff/kora/example/cache/redis/CompositeCache.java new file mode 100644 index 0000000..18a9371 --- /dev/null +++ b/kora-java-cache-redis/src/main/java/ru/tinkoff/kora/example/cache/redis/CompositeCache.java @@ -0,0 +1,10 @@ +package ru.tinkoff.kora.example.cache.redis; + +import ru.tinkoff.kora.cache.annotation.Cache; +import ru.tinkoff.kora.cache.redis.RedisCache; + +@Cache("my-cache") +public interface CompositeCache extends RedisCache { + + record Key(String userId, String traceId) { } +} diff --git a/kora-java-cache-redis/src/main/java/ru/tinkoff/kora/example/cache/redis/CompositeService.java b/kora-java-cache-redis/src/main/java/ru/tinkoff/kora/example/cache/redis/CompositeService.java new file mode 100644 index 0000000..2af071d --- /dev/null +++ b/kora-java-cache-redis/src/main/java/ru/tinkoff/kora/example/cache/redis/CompositeService.java @@ -0,0 +1,51 @@ +package ru.tinkoff.kora.example.cache.redis; + +import jakarta.annotation.Nonnull; +import ru.tinkoff.kora.cache.CacheKeyMapper; +import ru.tinkoff.kora.cache.annotation.CacheInvalidate; +import ru.tinkoff.kora.cache.annotation.CachePut; +import ru.tinkoff.kora.cache.annotation.Cacheable; +import ru.tinkoff.kora.common.Component; +import ru.tinkoff.kora.common.Mapping; +import ru.tinkoff.kora.common.annotation.Root; + +import java.math.BigDecimal; +import java.util.concurrent.ThreadLocalRandom; + +@Root +@Component +public class CompositeService { + + public record UserContext(String userId, String traceId) {} + + public static final class UserContextMapping implements CacheKeyMapper { + + @Nonnull + @Override + public CompositeCache.Key map(UserContext arg) { + return new CompositeCache.Key(arg.userId(), arg.traceId()); + } + } + + @Mapping(UserContextMapping.class) + @Cacheable(CompositeCache.class) + public Long getMapping(UserContext context) { + return ThreadLocalRandom.current().nextLong(0, 100_000_000L); + } + + @Cacheable(CompositeCache.class) + public Long get(String id, String traceId) { + return ThreadLocalRandom.current().nextLong(0, 100_000_000L); + } + + @CachePut(value = CompositeCache.class, parameters = { "id", "traceId" }) + public Long put(BigDecimal arg2, String arg3, String id, String traceId) { + return ThreadLocalRandom.current().nextLong(0, 100_000_000L); + } + + @CacheInvalidate(CompositeCache.class) + public void delete(String id, String traceId) {} + + @CacheInvalidate(value = CompositeCache.class, invalidateAll = true) + public void deleteAll() {} +} diff --git a/kora-java-cache-redis/src/main/java/ru/tinkoff/kora/example/cache/caffeine/MyCache.java b/kora-java-cache-redis/src/main/java/ru/tinkoff/kora/example/cache/redis/SimpleCache.java similarity index 51% rename from kora-java-cache-redis/src/main/java/ru/tinkoff/kora/example/cache/caffeine/MyCache.java rename to kora-java-cache-redis/src/main/java/ru/tinkoff/kora/example/cache/redis/SimpleCache.java index 7dfa415..d89ebb4 100644 --- a/kora-java-cache-redis/src/main/java/ru/tinkoff/kora/example/cache/caffeine/MyCache.java +++ b/kora-java-cache-redis/src/main/java/ru/tinkoff/kora/example/cache/redis/SimpleCache.java @@ -1,9 +1,9 @@ -package ru.tinkoff.kora.example.cache.caffeine; +package ru.tinkoff.kora.example.cache.redis; import ru.tinkoff.kora.cache.annotation.Cache; import ru.tinkoff.kora.cache.redis.RedisCache; @Cache("my-cache") -public interface MyCache extends RedisCache { +public interface SimpleCache extends RedisCache { } diff --git a/kora-java-cache-redis/src/main/java/ru/tinkoff/kora/example/cache/caffeine/CachedService.java b/kora-java-cache-redis/src/main/java/ru/tinkoff/kora/example/cache/redis/SimpleService.java similarity index 70% rename from kora-java-cache-redis/src/main/java/ru/tinkoff/kora/example/cache/caffeine/CachedService.java rename to kora-java-cache-redis/src/main/java/ru/tinkoff/kora/example/cache/redis/SimpleService.java index b608a03..77d62d0 100644 --- a/kora-java-cache-redis/src/main/java/ru/tinkoff/kora/example/cache/caffeine/CachedService.java +++ b/kora-java-cache-redis/src/main/java/ru/tinkoff/kora/example/cache/redis/SimpleService.java @@ -1,4 +1,4 @@ -package ru.tinkoff.kora.example.cache.caffeine; +package ru.tinkoff.kora.example.cache.redis; import java.math.BigDecimal; import java.util.concurrent.ThreadLocalRandom; @@ -10,21 +10,21 @@ @Root @Component -public class CachedService { +public class SimpleService { - @Cacheable(MyCache.class) + @Cacheable(SimpleCache.class) public Long get(String id) { return ThreadLocalRandom.current().nextLong(0, 100_000_000L); } - @CachePut(value = MyCache.class, parameters = { "id" }) + @CachePut(value = SimpleCache.class, parameters = { "id" }) public Long put(BigDecimal arg2, String arg3, String id) { return ThreadLocalRandom.current().nextLong(0, 100_000_000L); } - @CacheInvalidate(MyCache.class) + @CacheInvalidate(SimpleCache.class) public void delete(String id) {} - @CacheInvalidate(value = MyCache.class, invalidateAll = true) + @CacheInvalidate(value = SimpleCache.class, invalidateAll = true) public void deleteAll() {} } diff --git a/kora-java-cache-redis/src/test/java/ru/tinkoff/kora/example/cache/redis/RedisCompositeServiceTests.java b/kora-java-cache-redis/src/test/java/ru/tinkoff/kora/example/cache/redis/RedisCompositeServiceTests.java new file mode 100644 index 0000000..9ba2c6a --- /dev/null +++ b/kora-java-cache-redis/src/test/java/ru/tinkoff/kora/example/cache/redis/RedisCompositeServiceTests.java @@ -0,0 +1,116 @@ +package ru.tinkoff.kora.example.cache.redis; + +import io.goodforgod.testcontainers.extensions.ContainerMode; +import io.goodforgod.testcontainers.extensions.redis.ConnectionRedis; +import io.goodforgod.testcontainers.extensions.redis.RedisConnection; +import io.goodforgod.testcontainers.extensions.redis.TestcontainersRedis; +import org.jetbrains.annotations.NotNull; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import ru.tinkoff.kora.test.extension.junit5.KoraAppTest; +import ru.tinkoff.kora.test.extension.junit5.KoraAppTestConfigModifier; +import ru.tinkoff.kora.test.extension.junit5.KoraConfigModification; +import ru.tinkoff.kora.test.extension.junit5.TestComponent; + +import java.math.BigDecimal; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; + +@TestcontainersRedis(mode = ContainerMode.PER_RUN) +@KoraAppTest(Application.class) +class RedisCompositeServiceTests implements KoraAppTestConfigModifier { + + @ConnectionRedis + private RedisConnection connection; + + @TestComponent + private CompositeService service; + @TestComponent + private CompositeCache cache; + + @NotNull + @Override + public KoraConfigModification config() { + return KoraConfigModification + .ofSystemProperty("REDIS_URL", connection.params().uri().toString()) + .withSystemProperty("REDIS_USER", connection.params().username()) + .withSystemProperty("REDIS_PASS", connection.params().password()); + } + + @BeforeEach + void cleanup() throws InterruptedException { + Thread.sleep(150); + cache.invalidateAll(); + } + + @Test + void get() { + // when + var origin = service.get("1", "1"); + + // then + var cached = service.get("1", "1"); + assertEquals(origin, cached); + } + + @Test + void getMapping() { + // given + var context = new CompositeService.UserContext("1", "2"); + + // when + var origin = service.getMapping(context); + + // then + var cached = service.getMapping(context); + assertEquals(origin, cached); + } + + @Test + void put() { + // when + var origin = service.put(BigDecimal.ONE, "12345", "1", "1"); + + // then + var cached = service.get("1", "1"); + assertEquals(origin, cached); + } + + @Test + void delete() { + // given + var origin = service.put(BigDecimal.ONE, "12345", "1", "1"); + var cached1 = service.get("1", "1"); + assertEquals(origin, cached1); + + // when + service.delete("1", "1"); + + // then + var newValue = service.get("1", "1"); + assertNotEquals(origin, newValue); + } + + @Test + void deleteAll() { + // given + var origin1 = service.put(BigDecimal.ONE, "12345", "1", "1"); + var cached1 = service.get("1", "1"); + assertEquals(origin1, cached1); + + var origin2 = service.put(BigDecimal.ONE, "12345", "2", "2"); + var cached2 = service.get("2", "2"); + assertEquals(origin2, cached2); + + // when + service.deleteAll(); + + // then + var newValue1 = service.get("1", "1"); + assertNotEquals(origin1, newValue1); + + var newValue2 = service.get("2", "2"); + assertNotEquals(origin2, newValue2); + } +} diff --git a/kora-java-cache-redis/src/test/java/ru/tinkoff/kora/example/cache/caffeine/RedisCachedServiceTests.java b/kora-java-cache-redis/src/test/java/ru/tinkoff/kora/example/cache/redis/RedisSimpleServiceTests.java similarity index 89% rename from kora-java-cache-redis/src/test/java/ru/tinkoff/kora/example/cache/caffeine/RedisCachedServiceTests.java rename to kora-java-cache-redis/src/test/java/ru/tinkoff/kora/example/cache/redis/RedisSimpleServiceTests.java index 91e6a8b..dbf255f 100644 --- a/kora-java-cache-redis/src/test/java/ru/tinkoff/kora/example/cache/caffeine/RedisCachedServiceTests.java +++ b/kora-java-cache-redis/src/test/java/ru/tinkoff/kora/example/cache/redis/RedisSimpleServiceTests.java @@ -1,4 +1,4 @@ -package ru.tinkoff.kora.example.cache.caffeine; +package ru.tinkoff.kora.example.cache.redis; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; @@ -11,6 +11,9 @@ import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import ru.tinkoff.kora.example.cache.redis.Application; +import ru.tinkoff.kora.example.cache.redis.SimpleCache; +import ru.tinkoff.kora.example.cache.redis.SimpleService; import ru.tinkoff.kora.test.extension.junit5.KoraAppTest; import ru.tinkoff.kora.test.extension.junit5.KoraAppTestConfigModifier; import ru.tinkoff.kora.test.extension.junit5.KoraConfigModification; @@ -18,15 +21,15 @@ @TestcontainersRedis(mode = ContainerMode.PER_RUN) @KoraAppTest(Application.class) -class RedisCachedServiceTests implements KoraAppTestConfigModifier { +class RedisSimpleServiceTests implements KoraAppTestConfigModifier { @ConnectionRedis private RedisConnection connection; @TestComponent - private CachedService service; + private SimpleService service; @TestComponent - private MyCache cache; + private SimpleCache cache; @NotNull @Override diff --git a/kora-java-crud/src/main/resources/application.conf b/kora-java-crud/src/main/resources/application.conf index 08f5f45..23c5df2 100644 --- a/kora-java-crud/src/main/resources/application.conf +++ b/kora-java-crud/src/main/resources/application.conf @@ -1,6 +1,7 @@ httpServer { publicApiHttpPort = 8080 privateApiHttpPort = 8085 + telemetry.logging.enabled = true } @@ -11,6 +12,7 @@ db { maxPoolSize = 10 poolName = "kora" initializationFailTimeout = "10s" + telemetry.logging.enabled = true } diff --git a/kora-java-database-cassandra/src/main/resources/application.conf b/kora-java-database-cassandra/src/main/resources/application.conf index 1438826..57a1629 100644 --- a/kora-java-database-cassandra/src/main/resources/application.conf +++ b/kora-java-database-cassandra/src/main/resources/application.conf @@ -11,6 +11,7 @@ cassandra { timeout = 5s } } + telemetry.logging.enabled = true } diff --git a/kora-java-database-jdbc/src/main/resources/application.conf b/kora-java-database-jdbc/src/main/resources/application.conf index b367d0e..eaba614 100644 --- a/kora-java-database-jdbc/src/main/resources/application.conf +++ b/kora-java-database-jdbc/src/main/resources/application.conf @@ -4,6 +4,7 @@ db { password = ${POSTGRES_PASS} maxPoolSize = 10 poolName = "kora" + telemetry.logging.enabled = true } diff --git a/kora-java-database-r2dbc/src/main/resources/application.conf b/kora-java-database-r2dbc/src/main/resources/application.conf index e1e3829..0cc6780 100644 --- a/kora-java-database-r2dbc/src/main/resources/application.conf +++ b/kora-java-database-r2dbc/src/main/resources/application.conf @@ -4,6 +4,7 @@ db { password = ${POSTGRES_PASS} maxPoolSize = 10 poolName = "kora" + telemetry.logging.enabled = true } diff --git a/kora-java-database-vertx/src/main/resources/application.conf b/kora-java-database-vertx/src/main/resources/application.conf index 861ab14..a74e4b4 100644 --- a/kora-java-database-vertx/src/main/resources/application.conf +++ b/kora-java-database-vertx/src/main/resources/application.conf @@ -4,6 +4,7 @@ db { password = ${POSTGRES_PASS} maxPoolSize = 10 poolName = "kora" + telemetry.logging.enabled = true } diff --git a/kora-java-graalvm-crud-cassandra/src/main/resources/application.conf b/kora-java-graalvm-crud-cassandra/src/main/resources/application.conf index 1c2e776..5ed9d5a 100644 --- a/kora-java-graalvm-crud-cassandra/src/main/resources/application.conf +++ b/kora-java-graalvm-crud-cassandra/src/main/resources/application.conf @@ -1,6 +1,7 @@ httpServer { publicApiHttpPort = 8080 privateApiHttpPort = 8085 + telemetry.logging.enabled = true } @@ -17,6 +18,7 @@ cassandra { timeout = 5s } } + telemetry.logging.enabled = true } pet-cache { diff --git a/kora-java-graalvm-crud-jdbc/src/main/resources/application.conf b/kora-java-graalvm-crud-jdbc/src/main/resources/application.conf index b36f0c4..445ab45 100644 --- a/kora-java-graalvm-crud-jdbc/src/main/resources/application.conf +++ b/kora-java-graalvm-crud-jdbc/src/main/resources/application.conf @@ -1,6 +1,7 @@ httpServer { publicApiHttpPort = 8080 privateApiHttpPort = 8085 + telemetry.logging.enabled = true } @@ -11,6 +12,7 @@ db { maxPoolSize = 10 poolName = "kora" initializationFailTimeout = "10s" + telemetry.logging.enabled = true } diff --git a/kora-java-graalvm-crud-r2dbc/src/main/resources/application.conf b/kora-java-graalvm-crud-r2dbc/src/main/resources/application.conf index 269f7c1..488e642 100644 --- a/kora-java-graalvm-crud-r2dbc/src/main/resources/application.conf +++ b/kora-java-graalvm-crud-r2dbc/src/main/resources/application.conf @@ -1,6 +1,7 @@ httpServer { publicApiHttpPort = 8080 privateApiHttpPort = 8085 + telemetry.logging.enabled = true } @@ -11,6 +12,7 @@ db { maxPoolSize = 10 poolName = "kora" initializationFailTimeout = "10s" + telemetry.logging.enabled = true } diff --git a/kora-java-graalvm-crud-vertx/src/main/resources/application.conf b/kora-java-graalvm-crud-vertx/src/main/resources/application.conf index e13d1a3..b81594f 100644 --- a/kora-java-graalvm-crud-vertx/src/main/resources/application.conf +++ b/kora-java-graalvm-crud-vertx/src/main/resources/application.conf @@ -1,6 +1,7 @@ httpServer { publicApiHttpPort = 8080 privateApiHttpPort = 8085 + telemetry.logging.enabled = true } @@ -11,6 +12,7 @@ db { maxPoolSize = 10 poolName = "kora" initializationFailTimeout = "10s" + telemetry.logging.enabled = true } diff --git a/kora-java-graalvm-kafka/src/main/resources/application.yaml b/kora-java-graalvm-kafka/src/main/resources/application.yaml index 528539f..b73cee6 100644 --- a/kora-java-graalvm-kafka/src/main/resources/application.yaml +++ b/kora-java-graalvm-kafka/src/main/resources/application.yaml @@ -5,6 +5,7 @@ kafka: driverProperties: bootstrap: servers: ${KAFKA_BOOTSTRAP} + telemetry.logging.enabled: true listener: user: pollTimeout: 250ms @@ -14,6 +15,7 @@ kafka: group.id: "users-gi" auto.offset.reset: "latest" enable.auto.commit: true + telemetry.logging.enabled: true logging: diff --git a/kora-java-grpc-client/src/main/resources/application.conf b/kora-java-grpc-client/src/main/resources/application.conf index 1beb554..4c0867b 100644 --- a/kora-java-grpc-client/src/main/resources/application.conf +++ b/kora-java-grpc-client/src/main/resources/application.conf @@ -1,6 +1,7 @@ grpcClient { UserService { url = ${GRPC_URL} + telemetry.logging.enabled = true } } @@ -10,3 +11,4 @@ logging.level { "ru.tinkoff.kora": "INFO" "ru.tinkoff.kora.example": "INFO" } + diff --git a/kora-java-grpc-server/src/main/resources/application.conf b/kora-java-grpc-server/src/main/resources/application.conf index e502497..d1ec41b 100644 --- a/kora-java-grpc-server/src/main/resources/application.conf +++ b/kora-java-grpc-server/src/main/resources/application.conf @@ -1,5 +1,6 @@ grpcServer { port = ${GRPC_PORT} + telemetry.logging.enabled = true } diff --git a/kora-java-helloworld/src/main/resources/application.conf b/kora-java-helloworld/src/main/resources/application.conf index 2828793..99f9c45 100644 --- a/kora-java-helloworld/src/main/resources/application.conf +++ b/kora-java-helloworld/src/main/resources/application.conf @@ -9,3 +9,5 @@ logging.level { "ru.tinkoff.kora": "INFO" "ru.tinkoff.kora.example": "INFO" } + +httpServer.telemetry.logging.enabled = true \ No newline at end of file diff --git a/kora-java-http-client/src/main/resources/application.conf b/kora-java-http-client/src/main/resources/application.conf index e2853bc..d47c97b 100644 --- a/kora-java-http-client/src/main/resources/application.conf +++ b/kora-java-http-client/src/main/resources/application.conf @@ -4,6 +4,7 @@ httpClient.default { getValuesConfig { requestTimeout = 20s } + telemetry.logging.enabled = true } @@ -12,3 +13,4 @@ logging.level { "ru.tinkoff.kora": "INFO" "ru.tinkoff.kora.example": "INFO" } + diff --git a/kora-java-http-server/src/main/resources/application.conf b/kora-java-http-server/src/main/resources/application.conf index 2828793..dc3f3c5 100644 --- a/kora-java-http-server/src/main/resources/application.conf +++ b/kora-java-http-server/src/main/resources/application.conf @@ -1,6 +1,7 @@ httpServer { publicApiHttpPort = 8080 privateApiHttpPort = 8085 + telemetry.logging.enabled = true } @@ -9,3 +10,4 @@ logging.level { "ru.tinkoff.kora": "INFO" "ru.tinkoff.kora.example": "INFO" } + diff --git a/kora-java-kafka/src/main/resources/application.conf b/kora-java-kafka/src/main/resources/application.conf index 2710c0d..b958f09 100644 --- a/kora-java-kafka/src/main/resources/application.conf +++ b/kora-java-kafka/src/main/resources/application.conf @@ -7,10 +7,12 @@ kafka { driverProperties { "bootstrap.servers": ${KAFKA_BOOTSTRAP} } + telemetry.logging.enabled = true } my-transactional { idPrefix: "my-transaction" maxPoolSize: 10 + telemetry.logging.enabled = true } } consumer { @@ -23,6 +25,7 @@ kafka { "auto.offset.reset" = "latest" "enable.auto.commit" = true } + telemetry.logging.enabled = true } } } @@ -33,3 +36,4 @@ logging.level { "ru.tinkoff.kora": "INFO" "ru.tinkoff.kora.example": "INFO" } + diff --git a/kora-java-openapi-generator-http-client/build.gradle b/kora-java-openapi-generator-http-client/build.gradle index 82a21fa..5dda239 100644 --- a/kora-java-openapi-generator-http-client/build.gradle +++ b/kora-java-openapi-generator-http-client/build.gradle @@ -58,8 +58,8 @@ openApiGenerate { modelPackage = "ru.tinkoff.kora.example.openapi.petV2.model" invokerPackage = "ru.tinkoff.kora.example.openapi.petV2.invoker" configOptions = [ - mode : "java-client", // так же есть reactive_client вариация HTTP Server'а - clientConfigPrefix: "httpClient.petV2" + mode : "java-client", + clientConfigPrefix: "httpClient.petV2", ] } @@ -73,8 +73,10 @@ tasks.register('openApiGeneratePetV3', GenerateTask) { modelPackage = "ru.tinkoff.kora.example.openapi.petV3.model" invokerPackage = "ru.tinkoff.kora.example.openapi.petV3.invoker" configOptions = [ - mode : "java-reactive-client", // так же есть java_client вариация HTTP Server'а - clientConfigPrefix: "httpClient.petV3" + mode : "java-reactive-client", + clientConfigPrefix : "httpClient.petV3", + securityConfigPrefix: "openapiAuth", + primaryAuth : "apiKeyAuth", ] } diff --git a/kora-java-openapi-generator-http-client/src/main/resources/application.conf b/kora-java-openapi-generator-http-client/src/main/resources/application.conf index 5c8424e..3707f77 100644 --- a/kora-java-openapi-generator-http-client/src/main/resources/application.conf +++ b/kora-java-openapi-generator-http-client/src/main/resources/application.conf @@ -4,6 +4,7 @@ httpClient.petV2.PetApi { getValuesConfig { requestTimeout = 20s } + telemetry.logging.enabled = true } httpClient.petV3.PetApi { @@ -12,10 +13,14 @@ httpClient.petV3.PetApi { getValuesConfig { requestTimeout = 20s } + telemetry.logging.enabled = true } +openapiAuth.apiKeyAuth = "MyAuthApiKey" + logging.level { "root": "WARN" "ru.tinkoff.kora": "INFO" "ru.tinkoff.kora.example": "INFO" } + diff --git a/kora-java-openapi-generator-http-client/src/main/resources/openapi/petstoreV3.yaml b/kora-java-openapi-generator-http-client/src/main/resources/openapi/petstoreV3.yaml index d4e1511..8534c38 100644 --- a/kora-java-openapi-generator-http-client/src/main/resources/openapi/petstoreV3.yaml +++ b/kora-java-openapi-generator-http-client/src/main/resources/openapi/petstoreV3.yaml @@ -293,3 +293,31 @@ components: application/json: schema: $ref: '#/components/schemas/Pet' + securitySchemes: + bearerAuth: + type: http + scheme: bearer + bearerFormat: JWT + apiKeyAuth: + type: apiKey + in: header + name: X-API-KEY + basicAuth: + type: http + scheme: basic + oAuth: + type: oauth2 + description: This API uses OAuth 2 with the implicit grant flow. [More info](https://api.example.com/docs/auth) + flows: + implicit: + authorizationUrl: https://api.example.com/oauth2/authorize + scopes: + read_pets: read your pets + write_pets: modify pets in your account +security: + - bearerAuth: [] + - apiKeyAuth: [] + - basicAuth: [] + - oAuth: + - write_pets + - read_pets diff --git a/kora-java-openapi-generator-http-client/src/test/java/ru/tinkoff/kora/example/openapi/http/client/HttpClientPetV3Tests.java b/kora-java-openapi-generator-http-client/src/test/java/ru/tinkoff/kora/example/openapi/http/client/HttpClientPetV3Tests.java index 7eb0e9d..7ca016a 100644 --- a/kora-java-openapi-generator-http-client/src/test/java/ru/tinkoff/kora/example/openapi/http/client/HttpClientPetV3Tests.java +++ b/kora-java-openapi-generator-http-client/src/test/java/ru/tinkoff/kora/example/openapi/http/client/HttpClientPetV3Tests.java @@ -1,15 +1,9 @@ package ru.tinkoff.kora.example.openapi.http.client; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.fail; -import static org.mockserver.model.HttpRequest.request; -import static org.mockserver.model.HttpResponse.response; - import io.goodforgod.testcontainers.extensions.ContainerMode; import io.goodforgod.testcontainers.extensions.mockserver.ConnectionMockServer; import io.goodforgod.testcontainers.extensions.mockserver.MockServerConnection; import io.goodforgod.testcontainers.extensions.mockserver.TestcontainersMockServer; -import java.util.List; import org.jetbrains.annotations.NotNull; import org.json.JSONArray; import org.json.JSONObject; @@ -25,6 +19,13 @@ import ru.tinkoff.kora.test.extension.junit5.KoraConfigModification; import ru.tinkoff.kora.test.extension.junit5.TestComponent; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.fail; +import static org.mockserver.model.HttpRequest.request; +import static org.mockserver.model.HttpResponse.response; + @TestcontainersMockServer(mode = ContainerMode.PER_RUN) @KoraAppTest(Application.class) class HttpClientPetV3Tests implements KoraAppTestConfigModifier { @@ -60,9 +61,10 @@ void getRequestSuccess() { .put("tags", tags); mockserverConnection.client().when(request() - .withMethod("GET") - .withPath("/v3/pet/{id}") - .withPathParameter("id", String.valueOf(responseBody.getLong("id")))) + .withMethod("GET") + .withPath("/v3/pet/{id}") + .withHeader("X-API-KEY", "MyAuthApiKey") + .withPathParameter("id", String.valueOf(responseBody.getLong("id")))) .respond(response() .withBody(responseBody.toString())); @@ -95,9 +97,10 @@ void postRequestSuccess() { .put("tags", tags); mockserverConnection.client().when(request() - .withMethod("POST") - .withPath("/v3/pet") - .withBody(new JsonBody(requestBody.toString()))) + .withMethod("POST") + .withPath("/v3/pet") + .withHeader("X-API-KEY", "MyAuthApiKey") + .withBody(new JsonBody(requestBody.toString()))) .respond(response() .withBody(new JsonBody(requestBody.toString()))); diff --git a/kora-java-openapi-generator-http-server/src/main/resources/application.conf b/kora-java-openapi-generator-http-server/src/main/resources/application.conf index 2828793..84651c0 100644 --- a/kora-java-openapi-generator-http-server/src/main/resources/application.conf +++ b/kora-java-openapi-generator-http-server/src/main/resources/application.conf @@ -1,6 +1,7 @@ httpServer { publicApiHttpPort = 8080 privateApiHttpPort = 8085 + telemetry.logging.enabled = true } diff --git a/kora-java-scheduling-jdk/src/main/resources/application.conf b/kora-java-scheduling-jdk/src/main/resources/application.conf index 81c4c93..3fc8954 100644 --- a/kora-java-scheduling-jdk/src/main/resources/application.conf +++ b/kora-java-scheduling-jdk/src/main/resources/application.conf @@ -7,6 +7,7 @@ scheduling { period = 5ms } } + telemetry.logging.enabled = true } diff --git a/kora-java-scheduling-quartz/src/main/resources/application.conf b/kora-java-scheduling-quartz/src/main/resources/application.conf index 34f234d..52809e8 100644 --- a/kora-java-scheduling-quartz/src/main/resources/application.conf +++ b/kora-java-scheduling-quartz/src/main/resources/application.conf @@ -8,6 +8,7 @@ scheduling { cron = "* * * ? * * *" } } + telemetry.logging.enabled = true } diff --git a/kora-java-soap-client/src/main/resources/application.conf b/kora-java-soap-client/src/main/resources/application.conf index 0148bf6..8385dc4 100644 --- a/kora-java-soap-client/src/main/resources/application.conf +++ b/kora-java-soap-client/src/main/resources/application.conf @@ -1,6 +1,7 @@ soapClient.SimpleService { url = ${SOAP_CLIENT_URL} timeout = 30s + telemetry.logging.enabled = true } httpClient.default { diff --git a/kora-java-telemetry/src/main/resources/application.conf b/kora-java-telemetry/src/main/resources/application.conf index 34892f1..027d43c 100644 --- a/kora-java-telemetry/src/main/resources/application.conf +++ b/kora-java-telemetry/src/main/resources/application.conf @@ -3,6 +3,7 @@ httpServer { privateApiHttpPort = 8085 privateApiHttpLivenessPath = "/liveness" privateApiHttpReadinessPath = "/readiness" + telemetry.logging.enabled = true } tracing { diff --git a/kora-kotlin-crud/src/main/resources/application.conf b/kora-kotlin-crud/src/main/resources/application.conf index 08f5f45..23c5df2 100644 --- a/kora-kotlin-crud/src/main/resources/application.conf +++ b/kora-kotlin-crud/src/main/resources/application.conf @@ -1,6 +1,7 @@ httpServer { publicApiHttpPort = 8080 privateApiHttpPort = 8085 + telemetry.logging.enabled = true } @@ -11,6 +12,7 @@ db { maxPoolSize = 10 poolName = "kora" initializationFailTimeout = "10s" + telemetry.logging.enabled = true } diff --git a/kora-kotlin-helloworld/src/main/resources/application.conf b/kora-kotlin-helloworld/src/main/resources/application.conf index 2828793..84651c0 100644 --- a/kora-kotlin-helloworld/src/main/resources/application.conf +++ b/kora-kotlin-helloworld/src/main/resources/application.conf @@ -1,6 +1,7 @@ httpServer { publicApiHttpPort = 8080 privateApiHttpPort = 8085 + telemetry.logging.enabled = true }