Advertisement
Guest User

Untitled

a guest
Mar 18th, 2015
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.78 KB | None | 0 0
  1. package com.ctilogic.cvd.sample
  2.  
  3. import akka.actor.{ActorSystem, Props, Actor}
  4. import akka.pattern.ask
  5. import akka.util.Timeout
  6. import com.typesafe.config.ConfigFactory
  7. import java.util.UUID
  8. import scala.concurrent.ExecutionContext.Implicits.global
  9. import scala.concurrent.duration._
  10. import scala.util.Random
  11.  
  12. import com.github.levkhomich.akka.tracing.{TracingActorLogging, ActorTracing, TracingSupport}
  13.  
  14. final case class InternalMessage(str: String, int: Integer) extends TracingSupport
  15.  
  16. class BasicHandler extends Actor
  17. // mix to add tracing support
  18. with ActorTracing
  19. // mix to add trace logging support (and add trace logger to typesafe config)
  20. with TracingActorLogging {
  21.  
  22.     override def receive: Receive = {
  23.         case msg @ InternalMessage(str, int) =>
  24.             // sample message
  25.             trace.sample(msg, "basics")
  26.  
  27.             // annotate trace using different methods
  28.             trace.record(msg, "Start processing")
  29.             trace.recordKeyValue(msg, "longAnswer", Random.nextLong())
  30.  
  31.             // log to trace
  32.             log.debug("request: " + msg)
  33.  
  34.             try {
  35.                 // do something heavy
  36.                 Thread.sleep(Random.nextInt(200))
  37.                 val result = InternalMessage(str.reverse, -int)
  38.  
  39.                 // mark response
  40.                 sender ! result.asResponseTo(msg)
  41.             } catch {
  42.                 case e: Exception =>
  43.                     // record stack trace
  44.                     trace.record(msg, e)
  45.             }
  46.     }
  47. }
  48.  
  49. // create actor system and send messages every second
  50. object TracingBasics extends App {
  51.     implicit val askTimeout: Timeout = 500.milliseconds
  52.     val system = ActorSystem.create("TracingBasics", ConfigFactory.load("host-dev"))
  53.     val handler = system.actorOf(Props[BasicHandler])
  54.     system.scheduler.schedule(3.seconds, 1.second) {
  55.         val msg = InternalMessage(UUID.randomUUID.toString, Random.nextInt())
  56.         println("Received " + msg)
  57.         handler ? msg
  58.     }
  59.     system.awaitTermination()
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement