Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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(
Expand All @@ -41,4 +40,4 @@ class App {
}
}

val meterRegistry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT)
val meterRegistry = PrometheusConfig.meterRegistry()
Original file line number Diff line number Diff line change
@@ -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
}
}
5 changes: 5 additions & 0 deletions jooby_postgres/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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")
}
1 change: 1 addition & 0 deletions jooby_postgres/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ jacksonVersion=2.12.0
javaFakerVersion=1.0.2
joobyVersion=2.9.5
kotlinVersion=1.4.21
micrometerVersion=1.6.4
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
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
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) }
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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
}
}