diff options
Diffstat (limited to 'kamon-examples/kamon-autoweave-example')
6 files changed, 138 insertions, 0 deletions
diff --git a/kamon-examples/kamon-autoweave-example/build.sbt b/kamon-examples/kamon-autoweave-example/build.sbt new file mode 100644 index 00000000..ce36f064 --- /dev/null +++ b/kamon-examples/kamon-autoweave-example/build.sbt @@ -0,0 +1,62 @@ + +name := "kamon-autoweave-example" + +scalaVersion := "2.11.8" + +libraryDependencies += "org.aspectj" % "aspectjweaver" % "1.8.9" + +libraryDependencies += "com.typesafe.akka" %% "akka-actor" % "2.4.5" + +libraryDependencies += "com.typesafe.akka" %% "akka-testkit" % "2.4.5" % "test" + +libraryDependencies += "com.typesafe.akka" %% "akka-slf4j" % "2.4.11" + +libraryDependencies += "io.kamon" %% "kamon-core" % "0.6.3" + +libraryDependencies += "io.kamon" %% "kamon-autoweave" % "0.6.3" + +libraryDependencies += "io.kamon" %% "kamon-akka" % "0.6.3" + +libraryDependencies += "io.kamon" %% "kamon-log-reporter" % "0.6.3" + +libraryDependencies += "org.slf4j" % "slf4j-api" % "1.7.16" + +libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.1.7" + +fork in run := true + +// Create a new MergeStrategy for aop.xml files +val aopMerge = new sbtassembly.MergeStrategy { + val name = "aopMerge" + import scala.xml._ + import scala.xml.dtd._ + + def apply(tempDir: File, path: String, files: Seq[File]): Either[String, Seq[(File, String)]] = { + val dt = DocType("aspectj", PublicID("-//AspectJ//DTD//EN", "http://www.eclipse.org/aspectj/dtd/aspectj.dtd"), Nil) + val file = MergeStrategy.createMergeTarget(tempDir, path) + val xmls: Seq[Elem] = files.map(XML.loadFile) + val aspectsChildren: Seq[Node] = xmls.flatMap(_ \\ "aspectj" \ "aspects" \ "_") + val weaverChildren: Seq[Node] = xmls.flatMap(_ \\ "aspectj" \ "weaver" \ "_") + val options: String = xmls.map(x => (x \\ "aspectj" \ "weaver" \ "@options").text).mkString(" ").trim + val weaverAttr = if (options.isEmpty) Null else new UnprefixedAttribute("options", options, Null) + val aspects = new Elem(null, "aspects", Null, TopScope, false, aspectsChildren: _*) + val weaver = new Elem(null, "weaver", weaverAttr, TopScope, false, weaverChildren: _*) + val aspectj = new Elem(null, "aspectj", Null, TopScope, false, aspects, weaver) + XML.save(file.toString, aspectj, "UTF-8", xmlDecl = false, dt) + IO.append(file, IO.Newline.getBytes(IO.defaultCharset)) + Right(Seq(file -> path)) + } +} + +assemblyMergeStrategy in assembly := { + case m if m.toLowerCase.endsWith("manifest.mf") => MergeStrategy.discard + case m if m.toLowerCase.matches("meta-inf.*\\.sf$") => MergeStrategy.discard + case m if m.toLowerCase.matches("meta-inf.*\\.properties") => MergeStrategy.discard + case PathList("META-INF", "aop.xml") => aopMerge + case PathList(ps @ _*) if ps.last endsWith ".txt.1" => MergeStrategy.first + case "reference.conf" => MergeStrategy.concat + case "application.conf" => MergeStrategy.concat + case x => + val oldStrategy = (assemblyMergeStrategy in assembly).value + oldStrategy(x) +} diff --git a/kamon-examples/kamon-autoweave-example/project/build.properties b/kamon-examples/kamon-autoweave-example/project/build.properties new file mode 100644 index 00000000..a6e117b6 --- /dev/null +++ b/kamon-examples/kamon-autoweave-example/project/build.properties @@ -0,0 +1 @@ +sbt.version=0.13.8 diff --git a/kamon-examples/kamon-autoweave-example/project/plugins.sbt b/kamon-examples/kamon-autoweave-example/project/plugins.sbt new file mode 100644 index 00000000..28ab3a86 --- /dev/null +++ b/kamon-examples/kamon-autoweave-example/project/plugins.sbt @@ -0,0 +1,6 @@ +// Comment to get more information during initialization +logLevel := Level.Warn + +resolvers += "Kamon Repository Snapshots" at "http://snapshots.kamon.io" + +addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.3") diff --git a/kamon-examples/kamon-autoweave-example/src/main/resources/application.conf b/kamon-examples/kamon-autoweave-example/src/main/resources/application.conf new file mode 100644 index 00000000..51732890 --- /dev/null +++ b/kamon-examples/kamon-autoweave-example/src/main/resources/application.conf @@ -0,0 +1,18 @@ +kamon { + + trace { + level = simple-trace + } + + metric { + filters { + trace.includes = [ "**" ] + akka-actor.includes = [ "**" ] + akka-dispatcher.includes = [ "**" ] + } + } + + modules { + kamon-log-reporter.auto-start = yes + } +}
\ No newline at end of file diff --git a/kamon-examples/kamon-autoweave-example/src/main/resources/logback.xml b/kamon-examples/kamon-autoweave-example/src/main/resources/logback.xml new file mode 100644 index 00000000..56f7f131 --- /dev/null +++ b/kamon-examples/kamon-autoweave-example/src/main/resources/logback.xml @@ -0,0 +1,11 @@ +<configuration scan="true"> + <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> + <encoder> + <pattern>%date{HH:mm:ss.SSS} %-5level [%X{akkaSource}] [%thread] %logger{55} - %msg%n</pattern> + </encoder> + </appender> + + <root level="debug"> + <appender-ref ref="STDOUT" /> + </root> +</configuration>
\ No newline at end of file diff --git a/kamon-examples/kamon-autoweave-example/src/main/scala/kamon/autoweave/example/PingPong.scala b/kamon-examples/kamon-autoweave-example/src/main/scala/kamon/autoweave/example/PingPong.scala new file mode 100644 index 00000000..6457222d --- /dev/null +++ b/kamon-examples/kamon-autoweave-example/src/main/scala/kamon/autoweave/example/PingPong.scala @@ -0,0 +1,40 @@ +/* + * ========================================================================================= + * 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.autoweave.example + +import akka.actor._ +import kamon.Kamon + +object PingPong extends App { + Kamon.start() + + val system = ActorSystem() + + val pinger = system.actorOf(Props(new Actor { + def receive: Actor.Receive = { case "pong" ⇒ sender ! "ping" } + }), "pinger") + + val ponger = system.actorOf(Props(new Actor { + def receive: Actor.Receive = { case "ping" ⇒ sender ! "pong" } + }), "ponger") + + pinger.tell("pong", ponger) +} + +//sbt run +//or +//sbt assembly && java -jar target/scala-2.11/kamon-autoweave-example-assembly-0.1-SNAPSHOT.jar |