aboutsummaryrefslogtreecommitdiff
path: root/kamon-examples/kamon-autoweave-example
diff options
context:
space:
mode:
Diffstat (limited to 'kamon-examples/kamon-autoweave-example')
-rw-r--r--kamon-examples/kamon-autoweave-example/build.sbt62
-rw-r--r--kamon-examples/kamon-autoweave-example/project/build.properties1
-rw-r--r--kamon-examples/kamon-autoweave-example/project/plugins.sbt6
-rw-r--r--kamon-examples/kamon-autoweave-example/src/main/resources/application.conf18
-rw-r--r--kamon-examples/kamon-autoweave-example/src/main/resources/logback.xml11
-rw-r--r--kamon-examples/kamon-autoweave-example/src/main/scala/kamon/autoweave/example/PingPong.scala40
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