diff --git a/build.sbt b/build.sbt index 4274e03b..05d05d2a 100644 --- a/build.sbt +++ b/build.sbt @@ -44,7 +44,9 @@ lazy val commonSettings = Seq( "com.github.mauricio" %% "postgresql-async" % "0.2.21", "com.github.t3hnar" %% "scala-bcrypt" % "3.1", "org.ini4j" % "ini4j" % "0.5.4", - "org.scala-graph" %% "graph-core" % "1.12.5" + "org.scala-graph" %% "graph-core" % "1.12.5", + "io.kamon" %% "kamon-bundle" % "2.1.0", + "io.kamon" %% "kamon-apm-reporter" % "2.1.0" ) ) diff --git a/config/worldserver.ini.dist b/config/worldserver.ini.dist index deab1b9a..0fd1a372 100644 --- a/config/worldserver.ini.dist +++ b/config/worldserver.ini.dist @@ -218,3 +218,17 @@ NetSim.ReorderTime = 150 milliseconds # ################################################################################################### + + +[kamon] + +# Kamon +# +# Active (boolean) +# Description: Enables reporting of metrics to Kamon.io +# Important: Ensure the API key is set in application.conf in the same +# folder as PsLogin.scala +# Default: no - (Disabled) +# yes - (Enabled) + +Active = no diff --git a/project/plugins.sbt b/project/plugins.sbt index 6a1b134b..a15c66f7 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -2,5 +2,6 @@ logLevel := Level.Warn addSbtPlugin("org.xerial.sbt" % "sbt-pack" % "0.12") addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.6.1") +addSbtPlugin("io.kamon" % "sbt-kanela-runner" % "2.0.6") // https://github.com/sbt/sbt-unidoc //addSbtPlugin("com.eed3si9n" % "sbt-unidoc" % "0.4.2") diff --git a/pslogin/src/main/scala/PsLogin.scala b/pslogin/src/main/scala/PsLogin.scala index 459e0801..b9e1ea90 100644 --- a/pslogin/src/main/scala/PsLogin.scala +++ b/pslogin/src/main/scala/PsLogin.scala @@ -28,6 +28,8 @@ import scala.collection.JavaConverters._ import scala.concurrent.Await import scala.concurrent.duration._ +import kamon.Kamon + object PsLogin { private val logger = org.log4s.getLogger @@ -221,6 +223,15 @@ object PsLogin { "akka.logging-filter" -> "akka.event.slf4j.Slf4jLoggingFilter" ).asJava + WorldConfig.Get[Boolean]("kamon.Active") match { + case true => + logger.info("Starting Kamon") + + Kamon.init() + case _ => ; + } + + logger.info("Starting actor subsystems") /** Start up the main actor system. This "system" is the home for all actors running on this server */ diff --git a/pslogin/src/main/scala/WorldConfig.scala b/pslogin/src/main/scala/WorldConfig.scala index 82c09ecd..089ddca3 100644 --- a/pslogin/src/main/scala/WorldConfig.scala +++ b/pslogin/src/main/scala/WorldConfig.scala @@ -37,6 +37,9 @@ object WorldConfig extends ConfigParser { ConfigEntryTime ("NetSim.Delay", 150 milliseconds, Constraints.min(0 seconds), Constraints.max(2 seconds)), ConfigEntryFloat("NetSim.ReorderChance", 0.005f, Constraints.min(0.0f), Constraints.max(1.0f)), ConfigEntryTime ("NetSim.ReorderTime", 150 milliseconds, Constraints.min(0 seconds), Constraints.max(2 seconds)) + ), + ConfigSection("kamon", + ConfigEntryBool("Active", false) ) ) diff --git a/pslogin/src/main/scala/application.conf b/pslogin/src/main/scala/application.conf new file mode 100644 index 00000000..60c062f3 --- /dev/null +++ b/pslogin/src/main/scala/application.conf @@ -0,0 +1,4 @@ +kamon { + environment.service = "PSForever" + apm.api-key = "" +}