diff options
author | Diego <diegolparra@gmail.com> | 2015-11-25 00:28:31 -0300 |
---|---|---|
committer | Diego <diegolparra@gmail.com> | 2015-11-25 00:28:31 -0300 |
commit | a49f4138630a459ca7bf7309f114cdfcbbda2598 (patch) | |
tree | 232ddb7c57b354c032d22379763d0100917aba37 | |
parent | 5a26b2a6d14e97198c2a5251415493fb250330fc (diff) | |
download | Kamon-a49f4138630a459ca7bf7309f114cdfcbbda2598.tar.gz Kamon-a49f4138630a459ca7bf7309f114cdfcbbda2598.tar.bz2 Kamon-a49f4138630a459ca7bf7309f114cdfcbbda2598.zip |
! core: Decoupling basic apis from reporters in order to improve Kamon tooling for tests
13 files changed, 79 insertions, 40 deletions
diff --git a/kamon-akka-remote/src/main/scala/kamon/akka/instrumentation/RemotingInstrumentation.scala b/kamon-akka-remote/src/main/scala/kamon/akka/instrumentation/RemotingInstrumentation.scala index 7564cfd0..a0940c10 100644 --- a/kamon-akka-remote/src/main/scala/kamon/akka/instrumentation/RemotingInstrumentation.scala +++ b/kamon-akka-remote/src/main/scala/kamon/akka/instrumentation/RemotingInstrumentation.scala @@ -1,12 +1,12 @@ package akka.kamon.instrumentation import akka.actor.{ ActorRef, Address } -import akka.remote.instrumentation.TraceContextAwareWireFormats.{ TraceContextAwareRemoteEnvelope, RemoteTraceContext, AckAndTraceContextAwareEnvelopeContainer } -import akka.remote.{ RemoteActorRefProvider, Ack, SeqNo } import akka.remote.WireFormats._ +import akka.remote.instrumentation.TraceContextAwareWireFormats.{ AckAndTraceContextAwareEnvelopeContainer, RemoteTraceContext, TraceContextAwareRemoteEnvelope } +import akka.remote.{ Ack, RemoteActorRefProvider, SeqNo } import akka.util.ByteString import kamon.Kamon -import kamon.trace.{ Tracer, TraceContext } +import kamon.trace.Tracer import kamon.util.MilliTimestamp import org.aspectj.lang.ProceedingJoinPoint import org.aspectj.lang.annotation._ @@ -71,7 +71,7 @@ class RemotingInstrumentation { .setSystem(system) .setProtocol(protocol) .build() - case _ ⇒ throw new IllegalArgumentException(s"Address [${address}] could not be serialized: host or port missing.") + case _ ⇒ throw new IllegalArgumentException(s"Address [$address] could not be serialized: host or port missing.") } @Pointcut("execution(* akka.remote.transport.AkkaPduProtobufCodec$.decodeMessage(..)) && args(bs, provider, localAddress)") @@ -89,7 +89,7 @@ class RemotingInstrumentation { val ctx = tracer.newContext( remoteTraceContext.getTraceName, Option(remoteTraceContext.getTraceToken), - new MilliTimestamp(remoteTraceContext.getStartMilliTime()).toRelativeNanoTimestamp, + new MilliTimestamp(remoteTraceContext.getStartMilliTime).toRelativeNanoTimestamp, remoteTraceContext.getIsOpen, isLocal = false) diff --git a/kamon-akka/src/main/scala/kamon/akka/instrumentation/AskPatternInstrumentation.scala b/kamon-akka/src/main/scala/kamon/akka/instrumentation/AskPatternInstrumentation.scala index 64012163..4cc6ee93 100644 --- a/kamon-akka/src/main/scala/kamon/akka/instrumentation/AskPatternInstrumentation.scala +++ b/kamon-akka/src/main/scala/kamon/akka/instrumentation/AskPatternInstrumentation.scala @@ -23,16 +23,16 @@ import akka.actor.{ InternalActorRef, ActorRef } import akka.pattern.AskTimeoutException import kamon.trace.Tracer import kamon.util.SameThreadExecutionContext +import kamon.util.logger.LazyLogger import org.aspectj.lang.ProceedingJoinPoint import org.aspectj.lang.annotation._ import org.aspectj.lang.reflect.SourceLocation -import org.slf4j.LoggerFactory import scala.concurrent.Future import scala.compat.Platform.EOL @Aspect class AskPatternInstrumentation { - private val log = LoggerFactory.getLogger(getClass) + private val log = LazyLogger(getClass) import AskPatternInstrumentation._ diff --git a/kamon-annotation/src/main/resources/reference.conf b/kamon-annotation/src/main/resources/reference.conf index b7680022..ccc57afe 100644 --- a/kamon-annotation/src/main/resources/reference.conf +++ b/kamon-annotation/src/main/resources/reference.conf @@ -13,7 +13,7 @@ kamon { kamon-annotation { auto-start = yes requires-aspectj = yes - extension-id = "kamon.annotation.Annotation" + extension-id = "kamon.annotation.AnnotationExtension" } } } diff --git a/kamon-annotation/src/main/scala/kamon/annotation/Annotation.scala b/kamon-annotation/src/main/scala/kamon/annotation/AnnotationExtension.scala index 4a1eed94..21774865 100644 --- a/kamon-annotation/src/main/scala/kamon/annotation/Annotation.scala +++ b/kamon-annotation/src/main/scala/kamon/annotation/AnnotationExtension.scala @@ -15,13 +15,11 @@ package kamon.annotation -import akka.actor.{ ExtendedActorSystem, Extension, ExtensionId, ExtensionIdProvider } -import akka.event.Logging import kamon.Kamon -import org.slf4j.LoggerFactory +import kamon.util.logger.LazyLogger object AnnotationExtension { - val log = LoggerFactory.getLogger("kamon.annotation.Annotation") + val log = LazyLogger("kamon.annotation.Annotation") val config = Kamon.config.getConfig("kamon.annotation") val arraySize = config.getInt("instruments-array-size") diff --git a/kamon-annotation/src/main/scala/kamon/annotation/instrumentation/AnnotationInstrumentation.scala b/kamon-annotation/src/main/scala/kamon/annotation/instrumentation/AnnotationInstrumentation.scala index e5d1aff9..e82c5725 100644 --- a/kamon-annotation/src/main/scala/kamon/annotation/instrumentation/AnnotationInstrumentation.scala +++ b/kamon-annotation/src/main/scala/kamon/annotation/instrumentation/AnnotationInstrumentation.scala @@ -16,13 +16,12 @@ package kamon.annotation.instrumentation -import kamon.Kamon +import java.util.concurrent.atomic.AtomicReferenceArray import kamon.annotation._ import kamon.metric.instrument -import kamon.metric.instrument.{ MinMaxCounter, Counter } +import kamon.metric.instrument.{ Counter, MinMaxCounter } import org.aspectj.lang.annotation._ import org.aspectj.lang.{ JoinPoint, ProceedingJoinPoint } -import java.util.concurrent.atomic.AtomicReferenceArray @Aspect class AnnotationInstrumentation extends BaseAnnotationInstrumentation { diff --git a/kamon-core/src/main/scala/kamon/Kamon.scala b/kamon-core/src/main/scala/kamon/Kamon.scala index 54050c18..e6b93459 100644 --- a/kamon-core/src/main/scala/kamon/Kamon.scala +++ b/kamon-core/src/main/scala/kamon/Kamon.scala @@ -1,5 +1,5 @@ /* ========================================================================================= - * Copyright © 2013-2014 the kamon project <http://kamon.io/> + * Copyright © 2013-2015 the kamon project <http://kamon.io/> * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of the License at @@ -19,10 +19,10 @@ import _root_.akka.actor._ import com.typesafe.config.{ Config, ConfigFactory } import kamon.metric._ import kamon.trace.TracerModuleImpl -import org.slf4j.LoggerFactory +import kamon.util.logger.LazyLogger object Kamon { - private val log = LoggerFactory.getLogger(getClass) + private val log = LazyLogger(getClass) trait Extension extends actor.Extension @@ -32,12 +32,13 @@ object Kamon { private lazy val _system = { val internalConfig = config.getConfig("kamon.internal-config") + val patchedConfig = config .withoutPath("akka") .withoutPath("spray") .withFallback(internalConfig) - log.info("Initializing KAMON DUUUDEEE") + log.info("Initializing Kamon...") ActorSystem("kamon", patchedConfig) } @@ -52,14 +53,9 @@ object Kamon { def shutdown(): Unit = { // TODO: Define what a proper shutdown should be like. + _system.shutdown() } - /* def apply[T <: Kamon.Extension](key: ExtensionId[T]): T = - key(_system) - - def extension[T <: Kamon.Extension](key: ExtensionId[T]): T = - apply(key)*/ - private def resolveConfiguration: Config = { val defaultConfig = ConfigFactory.load() diff --git a/kamon-core/src/main/scala/kamon/ModuleLoader.scala b/kamon-core/src/main/scala/kamon/ModuleLoader.scala index f240f6ce..a89af19e 100644 --- a/kamon-core/src/main/scala/kamon/ModuleLoader.scala +++ b/kamon-core/src/main/scala/kamon/ModuleLoader.scala @@ -18,10 +18,9 @@ package kamon import _root_.akka.actor import _root_.akka.actor._ -import _root_.akka.event.Logging +import kamon.util.logger.LazyLogger import org.aspectj.lang.ProceedingJoinPoint -import org.aspectj.lang.annotation.{ Around, Pointcut, Aspect } -import org.slf4j.LoggerFactory +import org.aspectj.lang.annotation.{Around, Aspect, Pointcut} private[kamon] object ModuleLoader extends ExtensionId[ModuleLoaderExtension] with ExtensionIdProvider { def lookup(): ExtensionId[_ <: actor.Extension] = ModuleLoader @@ -29,7 +28,7 @@ private[kamon] object ModuleLoader extends ExtensionId[ModuleLoaderExtension] wi } private[kamon] class ModuleLoaderExtension(system: ExtendedActorSystem) extends Kamon.Extension { - val log = LoggerFactory.getLogger(getClass) + val log = LazyLogger(getClass) val settings = ModuleLoaderSettings(system) if (settings.modulesRequiringAspectJ.nonEmpty && !isAspectJPresent && settings.showAspectJMissingWarning) @@ -42,7 +41,7 @@ private[kamon] class ModuleLoaderExtension(system: ExtendedActorSystem) extends system.dynamicAccess.getObjectFor[ExtensionId[Kamon.Extension]](extensionClass).map { moduleID ⇒ log.debug(s"Auto starting the [$name] module.") moduleID.get(system) - + } recover { case th: Throwable ⇒ log.error(s"Failed to auto start the [$name] module.", th) } diff --git a/kamon-core/src/main/scala/kamon/util/SameThreadExecutionContext.scala b/kamon-core/src/main/scala/kamon/util/SameThreadExecutionContext.scala index 2aae526f..5fb0d066 100644 --- a/kamon-core/src/main/scala/kamon/util/SameThreadExecutionContext.scala +++ b/kamon-core/src/main/scala/kamon/util/SameThreadExecutionContext.scala @@ -16,14 +16,14 @@ package kamon.util +import kamon.util.logger.LazyLogger import scala.concurrent.ExecutionContext -import org.slf4j.LoggerFactory /** * For small code blocks that don't need to be run on a separate thread. */ object SameThreadExecutionContext extends ExecutionContext { - val logger = LoggerFactory.getLogger("SameThreadExecutionContext") + val logger = LazyLogger("SameThreadExecutionContext") override def execute(runnable: Runnable): Unit = runnable.run override def reportFailure(t: Throwable): Unit = logger.error(t.getMessage, t) diff --git a/kamon-core/src/main/scala/kamon/util/logger/LazyLogger.scala b/kamon-core/src/main/scala/kamon/util/logger/LazyLogger.scala new file mode 100644 index 00000000..c70c316d --- /dev/null +++ b/kamon-core/src/main/scala/kamon/util/logger/LazyLogger.scala @@ -0,0 +1,49 @@ +/* ========================================================================================= + * Copyright © 2013-2015 the kamon project <http://kamon.io/> + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions + * and limitations under the License. + * ========================================================================================= + */ + +package kamon.util.logger + +import org.slf4j.{ Logger ⇒ SLF4JLogger } + +class LazyLogger(val logger: SLF4JLogger) { + + @inline final def isTraceEnabled = logger.isTraceEnabled + @inline final def trace(msg: ⇒ String): Unit = if (isTraceEnabled) logger.trace(msg.toString) + @inline final def trace(msg: ⇒ String, t: ⇒ Throwable): Unit = if (isTraceEnabled) logger.trace(msg, t) + + @inline final def isDebugEnabled = logger.isDebugEnabled + @inline final def debug(msg: ⇒ String): Unit = if (isDebugEnabled) logger.debug(msg.toString) + @inline final def debug(msg: ⇒ String, t: ⇒ Throwable): Unit = if (isDebugEnabled) logger.debug(msg, t) + + @inline final def isErrorEnabled = logger.isErrorEnabled + @inline final def error(msg: ⇒ String): Unit = if (isErrorEnabled) logger.error(msg.toString) + @inline final def error(msg: ⇒ String, t: ⇒ Throwable): Unit = if (isErrorEnabled) logger.error(msg, t) + + @inline final def isInfoEnabled = logger.isInfoEnabled + @inline final def info(msg: ⇒ String): Unit = if (isInfoEnabled) logger.info(msg.toString) + @inline final def info(msg: ⇒ String, t: ⇒ Throwable): Unit = if (isInfoEnabled) logger.info(msg, t) + + @inline final def isWarnEnabled = logger.isWarnEnabled + @inline final def warn(msg: ⇒ String): Unit = if (isWarnEnabled) logger.warn(msg.toString) + @inline final def warn(msg: ⇒ String, t: ⇒ Throwable): Unit = if (isWarnEnabled) logger.warn(msg, t) +} + +object LazyLogger { + import scala.reflect.{ classTag, ClassTag } + + def apply(name: String): LazyLogger = new LazyLogger(org.slf4j.LoggerFactory.getLogger(name)) + def apply(cls: Class[_]): LazyLogger = apply(cls.getName) + def apply[C: ClassTag](): LazyLogger = apply(classTag[C].runtimeClass.getName) +}
\ No newline at end of file diff --git a/kamon-jmx/src/main/scala/kamon/jmx/JMXReporterActor.scala b/kamon-jmx/src/main/scala/kamon/jmx/JMXReporterActor.scala index 110943f9..00a8668e 100644 --- a/kamon-jmx/src/main/scala/kamon/jmx/JMXReporterActor.scala +++ b/kamon-jmx/src/main/scala/kamon/jmx/JMXReporterActor.scala @@ -22,8 +22,7 @@ import javax.management._ import akka.actor.{Actor, Props} import kamon.metric.SubscriptionsDispatcher.TickMetricSnapshot import kamon.metric.instrument.{Counter, Histogram, InstrumentSnapshot} -import kamon.metric.{Entity, EntitySnapshot} -import org.slf4j.LoggerFactory +import kamon.util.logger.LazyLogger import scala.collection.concurrent.TrieMap @@ -126,7 +125,7 @@ private object MBeanManager { private val registeredMBeans = TrieMap.empty[String, AbstractMetricMBean[_]] - private val log = LoggerFactory.getLogger(getClass) + private val log = LazyLogger(getClass) private[jmx] def createOrUpdateMBean[M <: AbstractMetricMBean[T], T <: InstrumentSnapshot](group: String, name: String, snapshot: T)(implicit buildMetricMBean: (T, ObjectName) ⇒ M): Unit = { registeredMBeans.get(name) match { diff --git a/kamon-play-2.4.x/src/main/scala/kamon/play/Play.scala b/kamon-play-2.4.x/src/main/scala/kamon/play/Play.scala index e0fdb8ff..13c98240 100644 --- a/kamon-play-2.4.x/src/main/scala/kamon/play/Play.scala +++ b/kamon-play-2.4.x/src/main/scala/kamon/play/Play.scala @@ -19,14 +19,14 @@ package kamon.play import akka.actor._ import kamon.Kamon import kamon.util.http.HttpServerMetrics -import org.slf4j.LoggerFactory +import kamon.util.logger.LazyLogger import play.api.libs.ws.WSRequest import play.api.mvc.RequestHeader object PlayExtension { val SegmentLibraryName = "WS-client" - val log = LoggerFactory.getLogger("kamon.play.PlayExtension") + val log = LazyLogger("kamon.play.PlayExtension") private val config = Kamon.config.getConfig("kamon.play") private val dynamic = new ReflectiveDynamicAccess(getClass.getClassLoader) diff --git a/kamon-spray/src/main/scala/kamon/spray/SprayExtension.scala b/kamon-spray/src/main/scala/kamon/spray/SprayExtension.scala index ffde0315..1eac2b6c 100644 --- a/kamon-spray/src/main/scala/kamon/spray/SprayExtension.scala +++ b/kamon-spray/src/main/scala/kamon/spray/SprayExtension.scala @@ -19,12 +19,12 @@ package kamon.spray import kamon.Kamon import kamon.metric.Entity import kamon.util.http.HttpServerMetrics -import org.slf4j.LoggerFactory +import kamon.util.logger.LazyLogger import spray.http.HttpHeaders.Host import spray.http.HttpRequest object SprayExtension { - val log = LoggerFactory.getLogger("kamon.spray.SprayExtension") + val log = LazyLogger("kamon.spray.SprayExtension") val settings = SprayExtensionSettings(Kamon.config) val SegmentLibraryName = "spray-client" diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 857c57d4..47f86c6c 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -28,7 +28,6 @@ object Dependencies { val slf4jVersion = "1.7.7" val play23Version = "2.3.10" val play24Version = "2.4.3" - val sigarVersion = "1.6.5.132" val sprayJson = "io.spray" %% "spray-json" % "1.3.1" val sprayJsonLenses = "net.virtual-void" %% "json-lenses" % "0.6.0" |