diff --git a/http4k_postgres/src/main/kotlin/com/envylabs/cautiousengine/App.kt b/http4k_postgres/src/main/kotlin/com/envylabs/cautiousengine/App.kt index 5effd27..a98029c 100644 --- a/http4k_postgres/src/main/kotlin/com/envylabs/cautiousengine/App.kt +++ b/http4k_postgres/src/main/kotlin/com/envylabs/cautiousengine/App.kt @@ -1,9 +1,8 @@ package com.envylabs.cautiousengine +import com.envylabs.cautiousengine.config.PrometheusConfig import com.envylabs.cautiousengine.handlers.AddressesHandler import com.envylabs.cautiousengine.services.faker.AddressServiceImpl -import io.micrometer.prometheus.PrometheusConfig -import io.micrometer.prometheus.PrometheusMeterRegistry import org.http4k.core.HttpHandler import org.http4k.core.Method import org.http4k.core.Response @@ -30,7 +29,7 @@ class App { val addressesHandler = AddressesHandler(addressService = addressService) return routes( - "/actuator/metrics" bind Method.GET to { Response(Status.OK).body(meterRegistry.scrape()) }, + "/metrics" bind Method.GET to { Response(Status.OK).body(meterRegistry.scrape()) }, "/addresses" bind routes( "/" bind Method.GET to addressesHandler.index(), "/{id}" bind routes( @@ -41,4 +40,4 @@ class App { } } -val meterRegistry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT) +val meterRegistry = PrometheusConfig.meterRegistry() diff --git a/http4k_postgres/src/main/kotlin/com/envylabs/cautiousengine/config/PrometheusConfig.kt b/http4k_postgres/src/main/kotlin/com/envylabs/cautiousengine/config/PrometheusConfig.kt new file mode 100644 index 0000000..917e714 --- /dev/null +++ b/http4k_postgres/src/main/kotlin/com/envylabs/cautiousengine/config/PrometheusConfig.kt @@ -0,0 +1,31 @@ +package com.envylabs.cautiousengine.config + +import io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics +import io.micrometer.core.instrument.binder.jvm.DiskSpaceMetrics +import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics +import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics +import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics +import io.micrometer.core.instrument.binder.system.ProcessorMetrics +import io.micrometer.core.instrument.binder.system.UptimeMetrics +import io.micrometer.prometheus.PrometheusConfig +import io.micrometer.prometheus.PrometheusMeterRegistry +import java.io.File + +object PrometheusConfig { + + fun meterRegistry(): PrometheusMeterRegistry { + val registry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT).apply { + config().commonTags("application", "cautious-engine_http4k_postgres") + } + + ClassLoaderMetrics().bindTo(registry) + JvmMemoryMetrics().bindTo(registry) + JvmGcMetrics().bindTo(registry) + JvmThreadMetrics().bindTo(registry) + UptimeMetrics().bindTo(registry) + ProcessorMetrics().bindTo(registry) + DiskSpaceMetrics(File(System.getProperty("user.dir"))).bindTo(registry) + + return registry + } +} diff --git a/jooby_postgres/build.gradle.kts b/jooby_postgres/build.gradle.kts index 8b2cd1b..357595b 100644 --- a/jooby_postgres/build.gradle.kts +++ b/jooby_postgres/build.gradle.kts @@ -10,6 +10,7 @@ val jacksonVersion: String by project val javaFakerVersion: String by project val joobyVersion: String by project val kotlinVersion: String by project +val micrometerVersion: String by project group = "com.envylabs.cautiousengine" version = "1.0-SNAPSHOT" @@ -36,4 +37,8 @@ dependencies { // JavaFaker for random data implementation("com.github.javafaker:javafaker:$javaFakerVersion") + + // Instrumentation with Micrometer + implementation("io.micrometer:micrometer-core:$micrometerVersion") + implementation("io.micrometer:micrometer-registry-prometheus:$micrometerVersion") } diff --git a/jooby_postgres/gradle.properties b/jooby_postgres/gradle.properties index 86d57b9..afb865e 100644 --- a/jooby_postgres/gradle.properties +++ b/jooby_postgres/gradle.properties @@ -4,3 +4,4 @@ jacksonVersion=2.12.0 javaFakerVersion=1.0.2 joobyVersion=2.9.5 kotlinVersion=1.4.21 +micrometerVersion=1.6.4 diff --git a/jooby_postgres/src/main/kotlin/com/envylabs/cautiousengine/App.kt b/jooby_postgres/src/main/kotlin/com/envylabs/cautiousengine/App.kt index ce7b586..df99ac6 100644 --- a/jooby_postgres/src/main/kotlin/com/envylabs/cautiousengine/App.kt +++ b/jooby_postgres/src/main/kotlin/com/envylabs/cautiousengine/App.kt @@ -1,6 +1,7 @@ package com.envylabs.cautiousengine import com.envylabs.cautiousengine.config.JacksonConfig +import com.envylabs.cautiousengine.config.PrometheusConfig import com.envylabs.cautiousengine.controllers.AddressesController import com.envylabs.cautiousengine.services.faker.AddressServiceImpl import io.jooby.Kooby @@ -8,15 +9,16 @@ import io.jooby.json.JacksonModule import io.jooby.runApp class App : Kooby({ - install(JacksonModule(JacksonConfig().objectMapper())) + val meterRegistry = PrometheusConfig.meterRegistry() + // TODO: move to factories - val addressService = AddressServiceImpl() - val addressesController = AddressesController(addressService = addressService) + val addressesController = AddressesController(addressService = AddressServiceImpl()) coroutine { get("/health_check") { AppStatus() } + get("/metrics") { meterRegistry.scrape() } get("/addresses") { addressesController.index() } get("/addresses/{id}") { addressesController.show(ctx) } } diff --git a/jooby_postgres/src/main/kotlin/com/envylabs/cautiousengine/config/PrometheusConfig.kt b/jooby_postgres/src/main/kotlin/com/envylabs/cautiousengine/config/PrometheusConfig.kt new file mode 100644 index 0000000..627dac8 --- /dev/null +++ b/jooby_postgres/src/main/kotlin/com/envylabs/cautiousengine/config/PrometheusConfig.kt @@ -0,0 +1,31 @@ +package com.envylabs.cautiousengine.config + +import io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics +import io.micrometer.core.instrument.binder.jvm.DiskSpaceMetrics +import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics +import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics +import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics +import io.micrometer.core.instrument.binder.system.ProcessorMetrics +import io.micrometer.core.instrument.binder.system.UptimeMetrics +import io.micrometer.prometheus.PrometheusConfig +import io.micrometer.prometheus.PrometheusMeterRegistry +import java.io.File + +object PrometheusConfig { + + fun meterRegistry(): PrometheusMeterRegistry { + val registry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT).apply { + config().commonTags("application", "cautious-engine_jooby_postgres") + } + + ClassLoaderMetrics().bindTo(registry) + JvmMemoryMetrics().bindTo(registry) + JvmGcMetrics().bindTo(registry) + JvmThreadMetrics().bindTo(registry) + UptimeMetrics().bindTo(registry) + ProcessorMetrics().bindTo(registry) + DiskSpaceMetrics(File(System.getProperty("user.dir"))).bindTo(registry) + + return registry + } +}