Skip to content

Commit 4e924db

Browse files
committed
chore: otel fixes
1 parent 78b5baf commit 4e924db

File tree

6 files changed

+48
-13
lines changed

6 files changed

+48
-13
lines changed

README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,21 @@ $ ./gradlew :backend:jvm:run
8383
* OpenTelemetry
8484

8585
```bash
86+
# Install otel-desktop-viewer or Jaeger
8687
$ brew tap CtrlSpice/homebrew-otel-desktop-viewer
8788
$ brew install otel-desktop-viewer
8889
$ otel-desktop-viewer
90+
91+
92+
# or run the Jaeger collector
93+
$ docker run -it --rm \
94+
-e COLLECTOR_OTLP_ENABLED=true \
95+
-p 4317:4317 \
96+
-p 16686:16686 \
97+
jaegertracing/all-in-one
98+
$ open http://localhost:16686
99+
100+
# Run the app
89101
$ docker run -it --rm \
90102
--name jvm \
91103
-p 8080:8080 \

backend/jvm/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,10 @@ jib {
8080
"OTEL_TRACES_EXPORTER" to "logging",
8181
"OTEL_METRICS_EXPORTER" to "logging",
8282
"OTEL_LOGS_EXPORTER" to "logging",
83+
"OTEL_RESOURCE_ATTRIBUTES" to
84+
"service.name=${project.name},service.namespace=${project.group},service.instance.id=localhost:8080",
8385
// "OTEL_EXPORTER_OTLP_PROTOCOL" to "grpc",
8486
// "OTEL_EXPORTER_OTLP_ENDPOINT" to "http://host.docker.internal:4317",
85-
// "OTEL_RESOURCE_ATTRIBUTES" to
86-
// "service.name=${project.name},service.namespace=${project.group},service.instance.id=localhost:8080",
8787
)
8888

8989
args = listOf(project.name, project.version.toString())

backend/jvm/src/main/kotlin/dev/suresh/routes/Service.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dev.suresh.routes
22

33
import dev.suresh.JFR
4+
import dev.suresh.http.MediaApiClient
45
import dev.suresh.lang.FFM
56
import dev.suresh.lang.VThread
67
import dev.suresh.log.RespLogger
@@ -10,6 +11,7 @@ import io.ktor.http.*
1011
import io.ktor.server.application.*
1112
import io.ktor.server.response.*
1213
import io.ktor.server.routing.*
14+
import io.opentelemetry.instrumentation.annotations.WithSpan
1315
import java.io.Writer
1416

1517
private val logger = KotlinLogging.logger {}
@@ -20,8 +22,14 @@ fun Routing.services() {
2022
get("/vthreads") { call.respondLogStream { VThread.virtualThreads() } }
2123

2224
get("/jfr") { call.respondLogStream { JFR.recordingStream() } }
25+
26+
get("/trace") {
27+
call.respond(mapOf("OpenTelemetry" to BuildConfig.otelInstr, "Image Size" to mediaApiCall()))
28+
}
2329
}
2430

31+
@WithSpan suspend fun mediaApiCall() = MediaApiClient().images().size
32+
2533
suspend fun ApplicationCall.respondLogStream(
2634
contentType: ContentType = ContentType.Text.EventStream,
2735
block:

gradle/build-logic/src/main/kotlin/common/MultiPlatformExtns.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ fun KotlinMultiplatformExtension.jvmTarget() {
113113
api(libs.jspecify)
114114
api(libs.password4j)
115115
api(libs.bundles.keystore)
116+
// OpenTelemetry
117+
api(libs.otel.instr.annotations)
118+
api(libs.otel.extension.kotlin)
116119
// https://kotlinlang.org/docs/ksp-multiplatform.html
117120
api(libs.google.auto.annotations)
118121
ksp(libs.ksp.auto.service)

gradle/build-logic/src/main/kotlin/plugins/kotlin.jvm.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,11 @@ dependencies {
245245
implementation(libs.password4j)
246246
implementation(libs.bundles.keystore)
247247
implementation(libs.bundles.ajalt)
248+
249+
// OpenTelemetry
250+
implementation(libs.otel.instr.annotations)
251+
implementation(libs.otel.extension.kotlin)
252+
248253
// Auto-service
249254
ksp(libs.ksp.auto.service)
250255
implementation(libs.google.auto.annotations)

gradle/libs.versions.toml

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ ktfmt = "0.50"
8383
google-javaformat = "1.23.0"
8484
palantir-javaformat = "2.49.0"
8585
google-auto-service = "1.1.1"
86-
google-tink = "1.14.0"
86+
google-tink = "1.14.1"
8787
graalvm = "24.0.2"
8888
jspecify = "1.0.0"
8989
rsocket = "0.16.0"
@@ -150,6 +150,8 @@ twelvemonkeys = "3.10.1"
150150
okapibarcode = "0.4.1"
151151
chasm = "0.7.1"
152152
kfswatch = "1.3.0"
153+
langchain4j = "0.33.0"
154+
jlama = "0.2.1"
153155

154156
# NPM Dependencies
155157
npm-highlightjs = "11.10.0"
@@ -505,17 +507,18 @@ imageio-extns = { module = "com.twelvemonkeys.imageio:ima
505507
okapibarcode = { module = "uk.org.okapibarcode:okapibarcode" , version.ref = "okapibarcode"}
506508

507509
# OpenTelemetry
508-
otel-bom = { module = "io.opentelemetry:opentelemetry-bom" , version.ref = "otel"}
509-
otel-api = { module = "io.opentelemetry:opentelemetry-api" , version.ref = "otel"}
510-
otel-extension-kotlin = { module = "io.opentelemetry:opentelemetry-extension-kotlin" , version.ref = "otel"}
511-
otel-instr-bom = { module = "io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom" , version.ref = "otel-instr"}
512-
otel-instr-javaagent = { module = "io.opentelemetry.javaagent:opentelemetry-javaagent" , version.ref = "otel-instr"}
513-
otel-instr-logback-appender = { module = "io.opentelemetry.instrumentation:opentelemetry-logback-appender-1.0" , version.ref = "otel-instr"}
514-
otel-instr-logback-mdc = { module = "io.opentelemetry.instrumentation:opentelemetry-logback-mdc-1.0" , version.ref = "otel-instr"}
510+
otel-bom = { module = "io.opentelemetry:opentelemetry-bom" , version.ref = "otel"}
511+
otel-api = { module = "io.opentelemetry:opentelemetry-api" , version.ref = "otel"}
512+
otel-extension-kotlin = { module = "io.opentelemetry:opentelemetry-extension-kotlin" , version.ref = "otel"}
513+
514+
otel-instr-bom = { module = "io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom" , version.ref = "otel-instr"}
515+
otel-instr-javaagent = { module = "io.opentelemetry.javaagent:opentelemetry-javaagent" , version.ref = "otel-instr"}
516+
otel-instr-annotations = { module = "io.opentelemetry.instrumentation:opentelemetry-instrumentation-annotations" , version.ref = "otel-instr"}
517+
otel-instr-logback-appender = { module = "io.opentelemetry.instrumentation:opentelemetry-logback-appender-1.0" , version.ref = "otel-instr"}
518+
otel-instr-logback-mdc = { module = "io.opentelemetry.instrumentation:opentelemetry-logback-mdc-1.0" , version.ref = "otel-instr"}
519+
otel-instr-ktor = { module = "io.opentelemetry.instrumentation:opentelemetry-ktor-2.0" , version.ref = "otel-instr"}
520+
otel-instr-micrometer = { module = "io.opentelemetry.instrumentation:opentelemetry-micrometer-1.5" , version.ref = "otel-instr"}
515521
otel-instr-coroutines = { module = "io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-kotlinx-coroutines" , version.ref = "otel-alpha"}
516-
otel-instr-ktor = { module = "io.opentelemetry.instrumentation:opentelemetry-ktor-2.0" , version.ref = "otel-instr"}
517-
otel-instr-micrometer = { module = "io.opentelemetry.instrumentation:opentelemetry-micrometer-1.5" , version.ref = "otel-instr"}
518-
elastic-otel-javaagent = { module = "co.elastic.otel:elastic-otel-javaagent" , version.ref = "elastic-otel"}
519522

520523
# Compose
521524
compose-html-core = { module = "org.jetbrains.compose.html:html-core" , version.ref = "jetbrains-compose" }
@@ -532,6 +535,10 @@ kfswatch = { module = "io.github.irgaly.kfswatch:kfs
532535
# Wasm
533536

534537
# AI/ML
538+
langchain4j = { module = "dev.langchain4j:langchain4j" , version.ref = "langchain4j" }
539+
langchain4j-jlama = { module = "dev.langchain4j:langchain4j-jlama" , version.ref = "langchain4j" }
540+
jlama-core = { module = "com.github.tjake:jlama-core" , version.ref = "jlama" }
541+
jlama-native = { module = "com.github.tjake:jlama-native" , version.ref = "jlama" }
535542

536543
[bundles]
537544
ajalt = ["ajalt-mordant", "ajalt-mordant-coroutines", "ajalt-colormath", "ajalt-clikt"]

0 commit comments

Comments
 (0)