Skip to content

Commit

Permalink
dedup
Browse files Browse the repository at this point in the history
  • Loading branch information
hughsimpson committed Aug 4, 2023
1 parent 56a9bee commit 08898e1
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 54 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package kamon.otel

import com.typesafe.config.Config
import io.opentelemetry.sdk.resources.Resource
import kamon.Kamon
import kamon.status.Status
import kamon.tag.Tag
import org.slf4j.LoggerFactory

import java.net.URL
Expand Down Expand Up @@ -68,4 +72,30 @@ object OpenTelemetryConfiguration {
OpenTelemetryConfiguration(protocol, url, compression, headers, timeout)
}

private val kamonSettings: Status.Settings = Kamon.status().settings()
/**
* Builds the resource information added as resource labels to the exported metrics/traces
*
* @return
*/
def buildResource(attributes: Map[String, String]): Resource = {
val env = Kamon.environment
val builder = Resource.builder()
.put("host.name", kamonSettings.environment.host)
.put("service.instance.id", kamonSettings.environment.instance)
.put("service.name", env.service)
.put("telemetry.sdk.name", "kamon")
.put("telemetry.sdk.language", "scala")
.put("telemetry.sdk.version", kamonSettings.version)

attributes.foreach { case (k, v) => builder.put(k, v) }
//add all kamon.environment.tags as KeyValues to the Resource object
env.tags.iterator().foreach {
case t: Tag.String => builder.put(t.key, t.value)
case t: Tag.Boolean => builder.put(t.key, t.value)
case t: Tag.Long => builder.put(t.key, t.value)
}

builder.build()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ class OpenTelemetryMetricsReporter(metricsServiceFactory: Config => MetricsServi
decoded.failed.foreach(t => throw new IllegalArgumentException(s"value for attribute ${k.trim} is not a url-encoded string", t))
k.trim -> decoded.get
}.toMap
val resource: Resource = buildResource(attributes)
val resource: Resource = OpenTelemetryConfiguration.buildResource(attributes)
this.metricsConverterFunc = MetricsConverter.convert(resource, kamonSettings.version)

this.metricsService = Option(metricsServiceFactory.apply(newConfig))
Expand All @@ -93,29 +93,4 @@ class OpenTelemetryMetricsReporter(metricsServiceFactory: Config => MetricsServi
this.metricsService = None
}

/**
* Builds the resource information added as resource labels to the exported metrics
*
* @return
*/
private def buildResource(attributes: Map[String, String]): Resource = {
val env = Kamon.environment
val builder = Resource.builder()
.put("host.name", kamonSettings.environment.host)
.put("service.instance.id", kamonSettings.environment.instance)
.put("service.name", env.service)
.put("telemetry.sdk.name", "kamon")
.put("telemetry.sdk.language", "scala")
.put("telemetry.sdk.version", kamonSettings.version)

attributes.foreach { case (k, v) => builder.put(k, v) }
//add all kamon.environment.tags as KeyValues to the Resource object
env.tags.iterator().foreach {
case t: Tag.String => builder.put(t.key, t.value)
case t: Tag.Boolean => builder.put(t.key, t.value)
case t: Tag.Long => builder.put(t.key, t.value)
}

builder.build()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,8 @@ object OpenTelemetryTraceReporter {
import OpenTelemetryTraceReporter._

/**
* Converts internal finished Kamon spans to OpenTelemetry format and sends to a configured OpenTelemetry endpoint using gRPC or REST.
*/
* Converts internal finished Kamon spans to OpenTelemetry format and sends to a configured OpenTelemetry endpoint using gRPC or REST.
*/
class OpenTelemetryTraceReporter(traceServiceFactory: Config => TraceService)(implicit ec: ExecutionContext) extends SpanReporter {
private var traceService: Option[TraceService] = None
private var spanConverterFunc: Seq[Span.Finished] => JCollection[SpanData] = (_ => new util.ArrayList[SpanData](0))
Expand Down Expand Up @@ -81,7 +81,7 @@ class OpenTelemetryTraceReporter(traceServiceFactory: Config => TraceService)(im
decoded.failed.foreach(t => throw new IllegalArgumentException(s"value for attribute ${k.trim} is not a url-encoded string", t))
k.trim -> decoded.get
}.toMap
val resource: Resource = buildResource(attributes)
val resource: Resource = OpenTelemetryConfiguration.buildResource(attributes)
this.spanConverterFunc = SpanConverter.convert(newConfig.getBoolean("kamon.otel.trace.include-error-event"), resource, kamonSettings.version)

this.traceService = Option(traceServiceFactory.apply(newConfig))
Expand All @@ -93,29 +93,4 @@ class OpenTelemetryTraceReporter(traceServiceFactory: Config => TraceService)(im
this.traceService = None
}

/**
* Builds the resource information added as resource labels to the exported traces
*
* @return
*/
private def buildResource(attributes: Map[String, String]): Resource = {
val env = Kamon.environment
val builder = Resource.builder()
.put("host.name", kamonSettings.environment.host)
.put("service.instance.id", kamonSettings.environment.instance)
.put("service.name", env.service)
.put("telemetry.sdk.name", "kamon")
.put("telemetry.sdk.language", "scala")
.put("telemetry.sdk.version", kamonSettings.version)

attributes.foreach { case (k, v) => builder.put(k, v) }
//add all kamon.environment.tags as KeyValues to the Resource object
env.tags.iterator().foreach {
case t: Tag.String => builder.put(t.key, t.value)
case t: Tag.Boolean => builder.put(t.key, t.value)
case t: Tag.Long => builder.put(t.key, t.value)
}

builder.build()
}
}

0 comments on commit 08898e1

Please sign in to comment.