Skip to content

Commit d32bf5d

Browse files
authored
feat: adding cpu and memory collection (#115)
1 parent e38befb commit d32bf5d

File tree

6 files changed

+43
-15
lines changed

6 files changed

+43
-15
lines changed

build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,9 @@ dependencies {
4343
implementation("io.netty:netty-common:4.1.121.Final")
4444

4545
implementation("io.github.microutils:kotlin-logging:3.0.5")
46+
implementation("io.micrometer:micrometer-core:1.16.4")
4647
implementation("org.slf4j:slf4j-jdk14:2.0.12")
47-
implementation("io.dropwizard.metrics5:metrics-core:5.0.6")
48+
implementation("io.dropwizard.metrics:metrics-core:4.2.38")
4849

4950
implementation("org.pkl-lang:pkl-config-java:0.30.2")
5051
implementation("org.pkl-lang:pkl-codegen-java:0.30.2")

src/main/kotlin/at/ac/uibk/dps/cirrina/Runtime.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ import at.ac.uibk.dps.cirrina.execution.service.ServiceImplementation
1313
import at.ac.uibk.dps.cirrina.execution.service.ServiceImplementationSelector
1414
import at.ac.uibk.dps.cirrina.io.CsmParser
1515
import at.ac.uibk.dps.cirrina.spec.Csml as CsmlSpec
16-
import io.dropwizard.metrics5.MetricRegistry
17-
import io.dropwizard.metrics5.Timer
16+
import com.codahale.metrics.MetricRegistry
17+
import com.codahale.metrics.Timer
1818
import jakarta.inject.Inject
1919
import java.net.URI
2020
import kotlin.time.measureTime

src/main/kotlin/at/ac/uibk/dps/cirrina/di/CirrinaComponent.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,13 @@ import at.ac.uibk.dps.cirrina.cirrina.di.CirrinaModule
55
import at.ac.uibk.dps.cirrina.cirrina.di.Identifier
66
import at.ac.uibk.dps.cirrina.execution.`object`.Context
77
import dagger.Component
8-
import io.dropwizard.metrics5.MetricRegistry
98
import jakarta.inject.Singleton
109

1110
@Singleton
1211
@Component(modules = [CirrinaModule::class])
1312
interface CirrinaComponent {
1413
fun persistentContext(): Context?
1514

16-
fun metricRegistry(): MetricRegistry
17-
1815
fun runtime(): Runtime
1916

2017
@Identifier fun identifier(): String

src/main/kotlin/at/ac/uibk/dps/cirrina/di/CirrinaModule.kt

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,17 @@ import at.ac.uibk.dps.cirrina.EnvironmentVariables
44
import at.ac.uibk.dps.cirrina.PersistentContextProvider
55
import at.ac.uibk.dps.cirrina.execution.`object`.Context
66
import at.ac.uibk.dps.cirrina.execution.provider.ContextEtcd
7+
import com.codahale.metrics.CsvReporter
8+
import com.codahale.metrics.MetricRegistry
79
import dagger.Module
810
import dagger.Provides
9-
import io.dropwizard.metrics5.CsvReporter
10-
import io.dropwizard.metrics5.MetricRegistry
11+
import io.micrometer.core.instrument.Clock
12+
import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics
13+
import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics
14+
import io.micrometer.core.instrument.binder.system.ProcessorMetrics
15+
import io.micrometer.core.instrument.dropwizard.DropwizardConfig
16+
import io.micrometer.core.instrument.dropwizard.DropwizardMeterRegistry
17+
import io.micrometer.core.instrument.util.HierarchicalNameMapper
1118
import jakarta.inject.Qualifier
1219
import jakarta.inject.Singleton
1320
import java.net.URI
@@ -31,7 +38,6 @@ class CirrinaModule {
3138
when (EnvironmentVariables.contextProvider.get()) {
3239
PersistentContextProvider.ETCD -> {
3340
val url = EnvironmentVariables.etcdContextUrl.get() ?: return null
34-
3541
ContextEtcd(listOf(url))
3642
}
3743
}
@@ -46,6 +52,25 @@ class CirrinaModule {
4652
CsvReporter.forRegistry(this)
4753
.build(path.toFile())
4854
.start(EnvironmentVariables.metricsPeriod.get(), TimeUnit.SECONDS)
55+
56+
object :
57+
DropwizardMeterRegistry(
58+
object : DropwizardConfig {
59+
override fun get(key: String): String? = null
60+
61+
override fun prefix(): String = ""
62+
},
63+
this,
64+
HierarchicalNameMapper.DEFAULT,
65+
Clock.SYSTEM,
66+
) {
67+
override fun nullGaugeValue(): Double = Double.NaN
68+
}
69+
.apply {
70+
ProcessorMetrics().bindTo(this)
71+
JvmMemoryMetrics().bindTo(this)
72+
JvmGcMetrics().bindTo(this)
73+
}
4974
}
5075

5176
@Provides @Singleton @Identifier fun provideIdentifier(): String = "cirrina.${UUID.randomUUID()}"

src/main/kotlin/at/ac/uibk/dps/cirrina/execution/object/ActionCommand.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ package at.ac.uibk.dps.cirrina.execution.`object`
22

33
import at.ac.uibk.dps.cirrina.csm.Csml.EventChannel
44
import at.ac.uibk.dps.cirrina.execution.service.ServiceImplementationSelector
5-
import io.dropwizard.metrics5.MetricName
6-
import io.dropwizard.metrics5.MetricRegistry
5+
import com.codahale.metrics.MetricRegistry
76
import kotlinx.coroutines.CoroutineScope
87
import kotlinx.coroutines.launch
98
import mu.KotlinLogging
@@ -91,9 +90,15 @@ class ActionExecutor(
9190

9291
private fun executeCtr(action: CtrAction, scope: Scope): List<Action> {
9392
val tags =
94-
action.tag.entries.associate { (key, value) -> key to value.execute(scope.extent).toString() }
93+
action.tag.entries.joinToString(".") { (key, value) -> "$key=${value.execute(scope.extent)}" }
94+
95+
val name =
96+
if (tags.isEmpty()) {
97+
action.counter
98+
} else {
99+
"${action.counter}.$tags"
100+
}
95101

96-
val name = MetricName.build(action.counter).tagged(tags)
97102
metricRegistry.counter(name).inc(action.by)
98103

99104
return emptyList()

src/test/kotlin/at/ac/uibk/dps/cirrina/di/TestModule.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ import at.ac.uibk.dps.cirrina.cirrina.di.Identifier
44
import at.ac.uibk.dps.cirrina.cirrina.di.Main
55
import at.ac.uibk.dps.cirrina.cirrina.di.Run
66
import at.ac.uibk.dps.cirrina.execution.`object`.Context
7+
import com.codahale.metrics.CsvReporter
8+
import com.codahale.metrics.MetricRegistry
79
import dagger.Module
810
import dagger.Provides
9-
import io.dropwizard.metrics5.CsvReporter
10-
import io.dropwizard.metrics5.MetricRegistry
1111
import jakarta.inject.Singleton
1212
import java.io.File
1313
import java.net.URI

0 commit comments

Comments
 (0)