This commit is contained in:
@@ -17,11 +17,6 @@ module net.woggioni.rbcs.server {
|
||||
requires io.netty.common;
|
||||
requires io.netty.codec;
|
||||
requires io.netty.codec.haproxy;
|
||||
requires static io.opentelemetry.api;
|
||||
requires static io.opentelemetry.instrumentation.netty_4_1;
|
||||
requires static io.opentelemetry.sdk.autoconfigure;
|
||||
requires static io.opentelemetry.instrumentation.logback_appender_1_0;
|
||||
requires static io.opentelemetry.extension.trace.propagation;
|
||||
requires org.slf4j;
|
||||
|
||||
exports net.woggioni.rbcs.server;
|
||||
@@ -31,5 +26,6 @@ module net.woggioni.rbcs.server {
|
||||
|
||||
|
||||
uses CacheProvider;
|
||||
uses net.woggioni.rbcs.api.TelemetryController;
|
||||
provides CacheProvider with FileSystemCacheProvider, InMemoryCacheProvider;
|
||||
}
|
||||
@@ -26,12 +26,14 @@ import io.netty.util.AttributeKey
|
||||
import io.netty.util.concurrent.EventExecutorGroup
|
||||
import net.woggioni.rbcs.api.AsyncCloseable
|
||||
import net.woggioni.rbcs.api.Configuration
|
||||
import net.woggioni.rbcs.api.TelemetryController
|
||||
import net.woggioni.rbcs.api.exception.ConfigurationException
|
||||
import net.woggioni.rbcs.common.*
|
||||
import net.woggioni.rbcs.common.PasswordSecurity.decodePasswordHash
|
||||
import net.woggioni.rbcs.common.PasswordSecurity.hashPassword
|
||||
import net.woggioni.rbcs.common.RBCS.getTrustManager
|
||||
import net.woggioni.rbcs.common.RBCS.loadKeystore
|
||||
import net.woggioni.rbcs.common.RBCS.loadService
|
||||
import net.woggioni.rbcs.common.RBCS.toUrl
|
||||
import net.woggioni.rbcs.server.auth.AbstractNettyHttpAuthenticator
|
||||
import net.woggioni.rbcs.server.auth.Authorizer
|
||||
@@ -43,7 +45,6 @@ import net.woggioni.rbcs.server.handler.MaxRequestSizeHandler
|
||||
import net.woggioni.rbcs.server.handler.ProxyProtocolHandler
|
||||
import net.woggioni.rbcs.server.handler.ReadTriggerDuplexHandler
|
||||
import net.woggioni.rbcs.server.handler.ServerHandler
|
||||
import net.woggioni.rbcs.server.otel.OtelSdkIntegration
|
||||
import net.woggioni.rbcs.server.throttling.BucketManager
|
||||
import net.woggioni.rbcs.server.throttling.ThrottlingHandler
|
||||
import java.io.OutputStream
|
||||
@@ -415,7 +416,10 @@ class RemoteBuildCacheServer(private val cfg: Configuration) {
|
||||
}
|
||||
pipeline.addLast(HttpServerCodec(httpDecoderConfig))
|
||||
if(cfg.isEnableTelemetry) {
|
||||
OtelSdkIntegration.createHandler().let { pipeline.addLast(it) }
|
||||
loadService(TelemetryController::class.java)
|
||||
.firstOrNull()
|
||||
?.createHandler()
|
||||
?.let { pipeline.addLast(it) }
|
||||
}
|
||||
pipeline.addLast(ReadTriggerDuplexHandler.NAME, ReadTriggerDuplexHandler())
|
||||
pipeline.addLast(MaxRequestSizeHandler.NAME, MaxRequestSizeHandler(cfg.connection.maxRequestSize))
|
||||
@@ -511,9 +515,6 @@ class RemoteBuildCacheServer(private val cfg: Configuration) {
|
||||
}
|
||||
|
||||
fun run(): ServerHandle {
|
||||
if(cfg.isEnableTelemetry) {
|
||||
OtelSdkIntegration.initialize()
|
||||
}
|
||||
// Create the multithreaded event loops for the server
|
||||
val bossGroup = MultiThreadIoEventLoopGroup(1, NioIoHandler.newFactory())
|
||||
val channelFactory = ChannelFactory<SocketChannel> { NioSocketChannel() }
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
package net.woggioni.rbcs.server.otel
|
||||
|
||||
import io.netty.channel.ChannelHandler
|
||||
import io.opentelemetry.api.GlobalOpenTelemetry
|
||||
import io.opentelemetry.instrumentation.netty.v4_1.NettyServerTelemetry
|
||||
import net.woggioni.rbcs.common.createLogger
|
||||
import net.woggioni.rbcs.common.info
|
||||
|
||||
object OtelSdkIntegration {
|
||||
|
||||
private val log = createLogger<OtelSdkIntegration>()
|
||||
|
||||
private val appenderAvailable: Boolean by lazy {
|
||||
runCatching {
|
||||
Class.forName("io.opentelemetry.instrumentation.logback.appender.v1_0.OpenTelemetryAppender")
|
||||
}.fold(
|
||||
onSuccess = { true },
|
||||
onFailure = {
|
||||
log.info { "OpenTelemetry logback appender not on classpath" }
|
||||
false
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
fun initialize() {
|
||||
log.info { "Initializing OpenTelemetry SDK with auto-configuration" }
|
||||
|
||||
val sdk = io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk.builder()
|
||||
.setResultAsGlobal()
|
||||
.build()
|
||||
.openTelemetrySdk
|
||||
|
||||
if (appenderAvailable) {
|
||||
runCatching {
|
||||
val clazz = Class.forName("io.opentelemetry.instrumentation.logback.appender.v1_0.OpenTelemetryAppender")
|
||||
clazz.getMethod("install", Class.forName("io.opentelemetry.api.OpenTelemetry"))
|
||||
.invoke(null, sdk)
|
||||
log.info { "OpenTelemetry logback appender installed" }
|
||||
}.onFailure { ex ->
|
||||
val msg = ex.localizedMessage ?: ex.javaClass.name
|
||||
log.info { "Failed to install OpenTelemetry logback appender: $msg" }
|
||||
}
|
||||
}
|
||||
|
||||
log.info { "OpenTelemetry SDK initialized successfully" }
|
||||
}
|
||||
|
||||
fun createHandler(): ChannelHandler {
|
||||
return NettyServerTelemetry.create(GlobalOpenTelemetry.get()).createCombinedHandler()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user