Skip to content

Commit cf38d4e

Browse files
committed
refactor(observability): clean up ZIOpenTelemetry example and update dependencies
1 parent e936d84 commit cf38d4e

4 files changed

Lines changed: 42 additions & 59 deletions

File tree

build.sbt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1188,11 +1188,6 @@ lazy val zioOpenTelemetry: ProjectMatrix = (projectMatrix in file("observability
11881188
name := "tapir-zio-opentelemetry",
11891189
libraryDependencies ++= Seq(
11901190
"dev.zio" %% "zio-opentelemetry" % Versions.zioOpenTelemetry,
1191-
"dev.zio" %% "zio-opentelemetry-zio-logging" % Versions.zioOpenTelemetry,
1192-
"io.opentelemetry.semconv" % "opentelemetry-semconv" % Versions.openTelemetrySemconvVersion,
1193-
"io.opentelemetry" % "opentelemetry-sdk" % Versions.openTelemetry,
1194-
"io.opentelemetry" % "opentelemetry-exporter-otlp" % Versions.openTelemetry,
1195-
"io.opentelemetry" % "opentelemetry-exporter-logging-otlp" % Versions.openTelemetry,
11961191
"dev.zio" %% "zio-test" % Versions.zio % Test,
11971192
"dev.zio" %% "zio-test-sbt" % Versions.zio % Test,
11981193
"io.opentelemetry" % "opentelemetry-sdk-testing" % Versions.openTelemetry % Test

examples/src/main/scala/sttp/tapir/examples/observability/ZIOpenTelemetryExample.scala

Lines changed: 40 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,14 @@
77
//> using dep com.softwaremill.sttp.tapir::tapir-swagger-ui-bundle:1.13.19
88
//> using dep com.softwaremill.sttp.tapir::tapir-zio:1.13.19
99
//> using dep com.softwaremill.sttp.tapir::tapir-zio-opentelemetry:1.13.19
10+
//> using dep io.opentelemetry.semconv:opentelemetry-semconv:1.41.0
11+
//> using dep io.opentelemetry:opentelemetry-sdk:1.62.0
12+
//> using dep io.opentelemetry:opentelemetry-exporter-otlp:1.62.0
13+
//> using dep io.opentelemetry:opentelemetry-exporter-logging-otlp:1.62.0
1014
//> using dep dev.zio::zio-logging:2.5.3
1115
//> using dep dev.zio::zio-logging-slf4j2:2.5.3
1216
//> using dep ch.qos.logback:logback-classic:1.5.32
13-
14-
17+
//> using files ziopentelemetry/
1518
package sttp.tapir.examples.observability
1619

1720
import io.opentelemetry.api.OpenTelemetry
@@ -30,10 +33,6 @@ import sttp.tapir.server.interceptor.cors.CORSInterceptor
3033
import io.opentelemetry.api.common.Attributes
3134
import sttp.tapir.examples.observability.ziopentelemetry.*
3235

33-
34-
35-
36-
3736
/** This example demonstrates how to use ZIO with Tapir and OpenTelemetry for tracing. It sets up a simple HTTP server with a single
3837
* endpoint that returns "Hello, World!" and includes tracing for incoming requests.
3938
*
@@ -42,7 +41,12 @@ import sttp.tapir.examples.observability.ziopentelemetry.*
4241
* To effectively produce traces, you need to set the OTEL_EXPORTER_OTLP_ENDPOINT environment variable to the address of your
4342
* OpenTelemetry.
4443
*/
45-
object ZIOpenTelemetryExample extends ZIOApp with ZIOpenTelemetry("zio-observability-example", Some("1.0.0"), Some("dev")) with Logging with Metrics with Traces {
44+
object ZIOpenTelemetryExample
45+
extends ZIOApp
46+
with ZIOpenTelemetry("zio-observability-example", Some("1.0.0"), Some("dev"))
47+
with Logging
48+
with Metrics
49+
with Traces {
4650

4751
/** The server options for the ZIOOpenTelemetry trait.
4852
*
@@ -55,7 +59,6 @@ object ZIOpenTelemetryExample extends ZIOApp with ZIOpenTelemetry("zio-observabi
5559

5660
override def extraAttributes: Attributes = Attributes.builder().put("stack", "zio").build()
5761

58-
5962
// The main program - start the server on port 8080
6063
val program = for
6164
_ <- Console.printLine("Starting server on http://localhost:8080")
@@ -91,59 +94,52 @@ object ZIOpenTelemetryExample extends ZIOApp with ZIOpenTelemetry("zio-observabi
9194
*/
9295
override def run =
9396
program.provideSome[Environment](
94-
9597
Server.default,
9698

9799
// This layers provides sample custom metric, which will be visible in the OpenTelemetry collector and can be used to verify that the metrics are working.
98-
TickCounter.tickRefLayer,
99-
TickCounter.tickCounterLayer,
100+
TickCounter.tickRefLayer,
101+
TickCounter.tickCounterLayer,
100102
// This layer provides the OpenTelemetry Metrics service.
101103
// Can be used to create custom metrics.
102104
// Note this will be different Meter instance than the one used by the ZIO runtime or Tapir.
103105
otel4zMetrics(resourceName),
104106
// This layer publishes ZIO logs to OpenTelemetry, which will be correlated with traces and metrics.
105107
otel4zLogging(resourceName),
106-
// This layer provides the OpenTelemetry Tracing service,
108+
// This layer provides the OpenTelemetry Tracing service,
107109
// which is used to create spans for incoming requests and other operations.
108-
otel4zTracing(resourceName),
110+
otel4zTracing(resourceName)
109111

110112
// This layer provides the OpenTelemetry Runtime Metrics service, which is used to expose ZIO runtime metrics.
111113
// Scope.default,
112114
// RuntimeMetrics.otel4zRuntimeTelemetry
113115

114-
)
115-
116-
117-
116+
)
118117

119118
/** The server options for the ZIOpenTelemetry trait.
120-
*
121-
* This is the server options that will be used to run the ZIO application, hence provided by bootstrap. It includes the OpenTelemetry
122-
* instance and the ContextStorage.
123-
*/
119+
*
120+
* This is the server options that will be used to run the ZIO application, hence provided by bootstrap. It includes the OpenTelemetry
121+
* instance and the ContextStorage.
122+
*/
124123
private def serverOptions(implicit
125124
otel: OpenTelemetry,
126125
tracing: Tracing
127126
): ZioHttpServerOptions[Any] = ZioHttpServerOptions.customiseInterceptors
128-
.prependInterceptor(
129-
ZIOpenTelemetryTracing(tracing)
130-
)
131-
.appendInterceptor(
132-
CORSInterceptor.default
133-
)
134-
.appendInterceptor(otel4zMetricsInterceptor())
135-
.serverLog(
136-
ZioHttpServerOptions.defaultServerLog[Any]
137-
)
138-
.options
139-
}
140-
141-
142-
143-
/**
144-
* A simple counter that increments every second and is exposed as an OpenTelemetry metric.
145-
*
146-
* This is used to demonstrate how to create custom metrics
127+
.prependInterceptor(
128+
ZIOpenTelemetryTracing(tracing)
129+
)
130+
.appendInterceptor(
131+
CORSInterceptor.default
132+
)
133+
.appendInterceptor(otel4zMetricsInterceptor())
134+
.serverLog(
135+
ZioHttpServerOptions.defaultServerLog[Any]
136+
)
137+
.options
138+
}
139+
140+
/** A simple counter that increments every second and is exposed as an OpenTelemetry metric.
141+
*
142+
* This is used to demonstrate how to create custom metrics
147143
*/
148144
object TickCounter {
149145
val tickRefLayer: ULayer[Ref[Long]] =
@@ -189,16 +185,17 @@ object RuntimeMetrics {
189185
} yield ()
190186
)
191187
}
192-
*/
188+
*/
193189

194190
class ZIOHttpApi(using tracing: Tracing) {
195191

196192
val helloEndpoint: ServerEndpoint[Any, Task] = sttp.tapir.endpoint.get
197193
.in("hello")
198194
.out(stringBody)
199-
.zServerLogic(_ =>
195+
.zServerLogic(_ =>
200196
ZIO.logInfo("Handling /hello request") *>
201-
ZIO.succeed("Hello, World!") @@ tracing.aspects.span("hello-logic"))
197+
ZIO.succeed("Hello, World!") @@ tracing.aspects.span("hello-logic")
198+
)
202199

203200
val endpoints: List[ServerEndpoint[Any, Task]] = List(helloEndpoint)
204201

examples/src/main/scala/sttp/tapir/examples/observability/ziopentelemetry/Providers.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import zio.telemetry.opentelemetry.context.ContextStorage
1414
import sttp.tapir.examples.observability.ziopentelemetry.LoggerProvider
1515
import sttp.tapir.examples.observability.ziopentelemetry.MeterProvider
1616
import sttp.tapir.examples.observability.ziopentelemetry.TracerProvider
17-
import sttp.tapir.examples.observability.ziopentelemetry.ZIOpenTelemetryBase
17+
1818

1919
/** Logging provider for OpenTelemetry.
2020
*

examples/src/main/scala/sttp/tapir/examples/observability/ziopentelemetry/ZIOpenTelemetry.scala

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,12 @@ import io.opentelemetry.api.common.Attributes
1414
import io.opentelemetry.semconv.ServiceAttributes
1515
import io.opentelemetry.semconv.DeploymentAttributes
1616

17-
1817
/** ZIOpenTelemetry is a trait that provides a ZIO layer for OpenTelemetry.
1918
* @param name
2019
*/
21-
trait ZIOpenTelemetry(val resourceName: String, val version: Option[String] = None, val environment: Option[String] = None)
22-
{
20+
trait ZIOpenTelemetry(val resourceName: String, val version: Option[String] = None, val environment: Option[String] = None) {
2321
this: ZIOApp =>
2422

25-
26-
27-
2823
/** Extra attributes to be added to the resource. */
2924
def extraAttributes: Attributes = Attributes.empty
3025

@@ -116,7 +111,3 @@ trait ZIOpenTelemetry(val resourceName: String, val version: Option[String] = No
116111
.live(withZIOMetrics))
117112

118113
}
119-
120-
121-
122-

0 commit comments

Comments
 (0)