Skip to content

Instantly share code, notes, and snippets.

@ivantopo
Created March 1, 2018 20:23
Show Gist options
  • Save ivantopo/78a7ca2964d765c52ce531f31deb1ab9 to your computer and use it in GitHub Desktop.
Save ivantopo/78a7ca2964d765c52ce531f31deb1ab9 to your computer and use it in GitHub Desktop.
Automatically starting the Kamon system metrics module on Play Applications
play.modules.enabled += "modules.SystemMetricsModule"
// Goes into app/modules/SystemMetricsModule.scala
package modules
import javax.inject.{Inject, Singleton}
import kamon.system.SystemMetrics
import play.api.{Configuration, Environment, Logger}
import play.api.inject.{ApplicationLifecycle, Binding, Module}
import scala.concurrent.Future
class SystemMetricsModule extends Module {
def bindings(environment: Environment, configuration: Configuration): Seq[Binding[SystemMetricsModule.KamonSystemMetricsLoader]] = {
Seq(bind[SystemMetricsModule.KamonSystemMetricsLoader].toSelf.eagerly())
}
}
object SystemMetricsModule {
@Singleton
class KamonSystemMetricsLoader @Inject() (lifecycle: ApplicationLifecycle, environment: Environment, configuration: Configuration) {
Logger(classOf[KamonSystemMetricsLoader]).info("Starting the Kamon System Metrics Module")
SystemMetrics.startCollecting()
lifecycle.addStopHook { () ⇒
Future.successful(SystemMetrics.stopCollecting())
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment