@@ -4,39 +4,16 @@ import at.ac.uibk.dps.cirrina.EnvironmentVariables
44import at.ac.uibk.dps.cirrina.PersistentContextProvider
55import at.ac.uibk.dps.cirrina.execution.`object`.Context
66import at.ac.uibk.dps.cirrina.execution.provider.ContextEtcd
7- import at.ac.uibk.dps.cirrina.util.getBuildVersion
87import dagger.Module
98import dagger.Provides
10- import io.micrometer.core.instrument.Clock
11- import io.micrometer.core.instrument.MeterRegistry
12- import io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics
13- import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics
14- import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics
15- import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics
16- import io.micrometer.core.instrument.binder.system.ProcessorMetrics
17- import io.micrometer.core.instrument.composite.CompositeMeterRegistry
18- import io.micrometer.core.instrument.observation.DefaultMeterObservationHandler
19- import io.micrometer.influx.InfluxConfig
20- import io.micrometer.influx.InfluxMeterRegistry
21- import io.micrometer.observation.ObservationHandler
22- import io.micrometer.observation.ObservationRegistry
23- import io.micrometer.tracing.handler.DefaultTracingObservationHandler
24- import io.micrometer.tracing.otel.bridge.OtelBaggageManager
25- import io.micrometer.tracing.otel.bridge.OtelCurrentTraceContext
26- import io.micrometer.tracing.otel.bridge.OtelTracer
27- import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator
28- import io.opentelemetry.context.propagation.ContextPropagators
29- import io.opentelemetry.exporter.zipkin.ZipkinSpanExporter
30- import io.opentelemetry.sdk.OpenTelemetrySdk
31- import io.opentelemetry.sdk.resources.Resource
32- import io.opentelemetry.sdk.trace.SdkTracerProvider
33- import io.opentelemetry.sdk.trace.export.BatchSpanProcessor
34- import io.opentelemetry.semconv.ServiceAttributes
9+ import io.dropwizard.metrics5.CsvReporter
10+ import io.dropwizard.metrics5.MetricRegistry
3511import jakarta.inject.Qualifier
3612import jakarta.inject.Singleton
3713import java.net.URI
38- import java.time.Duration
14+ import java.nio.file.Paths
3915import java.util.UUID
16+ import java.util.concurrent.TimeUnit
4017
4118@Qualifier @Retention(AnnotationRetention .RUNTIME ) annotation class Identifier
4219
@@ -60,92 +37,16 @@ class CirrinaModule {
6037
6138 @Provides
6239 @Singleton
63- fun provideMeterRegistry (): MeterRegistry {
64- val compositeRegistry = CompositeMeterRegistry ()
65-
66- EnvironmentVariables .influxMetricUrl.get()?.let { url ->
67- compositeRegistry.add(createInfluxRegistry(url))
68- }
69-
70- return compositeRegistry.apply {
71- ClassLoaderMetrics ().bindTo(this )
72- JvmMemoryMetrics ().bindTo(this )
73- JvmGcMetrics ().bindTo(this )
74- JvmThreadMetrics ().bindTo(this )
75- ProcessorMetrics ().bindTo(this )
76- }
77- }
78-
79- @Provides
80- @Singleton
81- fun provideObservationRegistry (
82- @Identifier identifier : String ,
83- meterRegistry : MeterRegistry ,
84- ): ObservationRegistry {
85- val observationRegistry = ObservationRegistry .create()
86-
87- val traceUrl = EnvironmentVariables .zipkinTraceUrl.get() ? : return observationRegistry
88-
89- val zipkinExporter = ZipkinSpanExporter .builder().setEndpoint(traceUrl).build()
90-
91- val sdkTracerProvider =
92- SdkTracerProvider .builder()
93- .addSpanProcessor(BatchSpanProcessor .builder(zipkinExporter).build())
94- .setResource(
95- Resource .getDefault()
96- .toBuilder()
97- .put(ServiceAttributes .SERVICE_NAME , identifier)
98- .put(ServiceAttributes .SERVICE_VERSION , getBuildVersion())
99- .build()
100- )
101- .build()
102-
103- val openTelemetry =
104- OpenTelemetrySdk .builder()
105- .setTracerProvider(sdkTracerProvider)
106- .setPropagators(ContextPropagators .create(W3CTraceContextPropagator .getInstance()))
107- .build()
108-
109- val otelTracer = openTelemetry.getTracer(" io.micrometer.tracing" )
110- val otelCurrentTraceContext = OtelCurrentTraceContext ()
111- val baggageManager = OtelBaggageManager (otelCurrentTraceContext, emptyList(), emptyList())
112-
113- val otelTracerBridge = OtelTracer (otelTracer, otelCurrentTraceContext, {}, baggageManager)
114-
115- return observationRegistry.apply {
116- observationConfig()
117- .observationHandler(
118- ObservationHandler .FirstMatchingCompositeObservationHandler (
119- DefaultTracingObservationHandler (otelTracerBridge),
120- DefaultMeterObservationHandler (meterRegistry),
121- )
122- )
40+ fun provideMeterRegistry (): MetricRegistry =
41+ MetricRegistry ().apply {
42+ CsvReporter .forRegistry(this )
43+ .build(Paths .get(EnvironmentVariables .metricsDirectory.get()).toAbsolutePath().toFile())
44+ .start(EnvironmentVariables .metricsPeriod.get(), TimeUnit .SECONDS )
12345 }
124- }
12546
12647 @Provides @Singleton @Identifier fun provideIdentifier (): String = " cirrina.${UUID .randomUUID()} "
12748
12849 @Provides @Singleton @Main fun provideMain (): URI = URI (EnvironmentVariables .mainUri.get())
12950
13051 @Provides @Singleton @Run fun provideRun (): List <String > = EnvironmentVariables .run.get()
131-
132- private fun createInfluxRegistry (url : String ): InfluxMeterRegistry {
133- val config =
134- object : InfluxConfig {
135- override fun step (): Duration =
136- Duration .ofMillis(EnvironmentVariables .influxMetricStep.get())
137-
138- override fun uri (): String = url
139-
140- override fun org (): String = EnvironmentVariables .influxMetricOrg.get()
141-
142- override fun bucket (): String = EnvironmentVariables .influxMetricBucket.get()
143-
144- override fun token (): String = EnvironmentVariables .influxMetricToken.get()
145-
146- override fun get (k : String ): String? = null
147- }
148-
149- return InfluxMeterRegistry (config, Clock .SYSTEM )
150- }
15152}
0 commit comments