package kamon.standalone
import akka.actor.ActorSystem
import com.typesafe.config.Config
import kamon.Kamon
import kamon.metric.UserMetrics
import kamon.metric.instrument.{ Gauge, MinMaxCounter, Counter, Histogram }
import scala.concurrent.duration.FiniteDuration
trait KamonStandalone {
private[kamon] def system: ActorSystem
def registerHistogram(name: String, precision: Histogram.Precision, highestTrackableValue: Long): Histogram =
Kamon(UserMetrics)(system).registerHistogram(name, precision, highestTrackableValue)
def registerHistogram(name: String): Histogram =
Kamon(UserMetrics)(system).registerHistogram(name)
def registerCounter(name: String): Counter =
Kamon(UserMetrics)(system).registerCounter(name)
def registerMinMaxCounter(name: String, precision: Histogram.Precision, highestTrackableValue: Long,
refreshInterval: FiniteDuration): MinMaxCounter =
Kamon(UserMetrics)(system).registerMinMaxCounter(name, precision, highestTrackableValue, refreshInterval)
def registerMinMaxCounter(name: String): MinMaxCounter =
Kamon(UserMetrics)(system).registerMinMaxCounter(name)
def registerGauge(name: String)(currentValueCollector: Gauge.CurrentValueCollector): Gauge =
Kamon(UserMetrics)(system).registerGauge(name)(currentValueCollector)
def registerGauge(name: String, precision: Histogram.Precision, highestTrackableValue: Long,
refreshInterval: FiniteDuration)(currentValueCollector: Gauge.CurrentValueCollector): Gauge =
Kamon(UserMetrics)(system).registerGauge(name, precision, highestTrackableValue, refreshInterval)(currentValueCollector)
def removeHistogram(name: String): Unit =
Kamon(UserMetrics)(system).removeHistogram(name)
def removeCounter(name: String): Unit =
Kamon(UserMetrics)(system).removeCounter(name)
def removeMinMaxCounter(name: String): Unit =
Kamon(UserMetrics)(system).removeMinMaxCounter(name)
def removeGauge(name: String): Unit =
Kamon(UserMetrics)(system).removeGauge(name)
}
object KamonStandalone {
def buildFromConfig(config: Config): KamonStandalone = buildFromConfig(config, "kamon-standalone")
def buildFromConfig(config: Config, actorSystemName: String): KamonStandalone = new KamonStandalone {
val system: ActorSystem = ActorSystem(actorSystemName, config)
}
}
object EmbeddedKamonStandalone extends KamonStandalone {
private[kamon] lazy val system = ActorSystem("kamon-standalone")
}