aboutsummaryrefslogtreecommitdiff
path: root/kamon-statsd/src/main/scala/kamon/statsd/Statsd.scala
diff options
context:
space:
mode:
authorIvan Topolnak <itopolnak@despegar.com>2014-04-03 18:41:39 -0300
committerIvan Topolnak <itopolnak@despegar.com>2014-04-03 18:41:39 -0300
commit1d267614d6718e61d6791f293a6451e378181935 (patch)
tree54db0e3aaea8c7766c1a1b18e7b855500d3271eb /kamon-statsd/src/main/scala/kamon/statsd/Statsd.scala
parent0819320d7f20c78ad096c21c6aedb3536758792b (diff)
downloadKamon-1d267614d6718e61d6791f293a6451e378181935.tar.gz
Kamon-1d267614d6718e61d6791f293a6451e378181935.tar.bz2
Kamon-1d267614d6718e61d6791f293a6451e378181935.zip
+ statsd: first working implementation with processing-time and time-in-mailbox metrics for actors
Diffstat (limited to 'kamon-statsd/src/main/scala/kamon/statsd/Statsd.scala')
-rw-r--r--kamon-statsd/src/main/scala/kamon/statsd/Statsd.scala39
1 files changed, 27 insertions, 12 deletions
diff --git a/kamon-statsd/src/main/scala/kamon/statsd/Statsd.scala b/kamon-statsd/src/main/scala/kamon/statsd/Statsd.scala
index a7cba371..0ded1394 100644
--- a/kamon-statsd/src/main/scala/kamon/statsd/Statsd.scala
+++ b/kamon-statsd/src/main/scala/kamon/statsd/Statsd.scala
@@ -22,15 +22,21 @@ import kamon.metrics._
import scala.concurrent.duration._
import scala.collection.JavaConverters._
import akka.util.ByteString
+import com.typesafe.config.Config
+import java.lang.management.ManagementFactory
object StatsD extends ExtensionId[StatsDExtension] with ExtensionIdProvider {
override def lookup(): ExtensionId[_ <: Extension] = StatsD
override def createExtension(system: ExtendedActorSystem): StatsDExtension = new StatsDExtension(system)
+ trait MetricKeyGenerator {
+ def generateKey(groupIdentity: MetricGroupIdentity, metricIdentity: MetricIdentity): String
+ }
+
sealed trait Metric {
def key: String
- def value: Long
+ def value: Double
def suffix: String
def samplingRate: Double
@@ -47,34 +53,34 @@ object StatsD extends ExtensionId[StatsDExtension] with ExtensionIdProvider {
ByteString(s"$key:$value|$suffix|@$samplingRate")
}
- case class Counter(key: String, value: Long = 1, samplingRate: Double = 1.0) extends Metric {
+ case class Counter(key: String, value: Double = 1D, samplingRate: Double = 1.0) extends Metric {
val suffix: String = "c"
}
- case class Timing(key: String, value: Long, samplingRate: Double = 1.0) extends Metric {
+ case class Timing(key: String, value: Double, samplingRate: Double = 1.0) extends Metric {
val suffix: String = "ms"
}
- case class Gauge(key: String, value: Long, samplingRate: Double = 1.0) extends Metric {
+ case class Gauge(key: String, value: Double, samplingRate: Double = 1.0) extends Metric {
val suffix: String = "g"
}
- case class MetricBatch(metrics: Vector[Metric])
+ case class MetricBatch(metrics: Iterable[Metric])
}
-class StatsDExtension(private val system: ExtendedActorSystem) extends Kamon.Extension {
- private val config = system.settings.config.getConfig("kamon.statsd")
+class StatsDExtension(system: ExtendedActorSystem) extends Kamon.Extension {
+ private val statsDConfig = system.settings.config.getConfig("kamon.statsd")
- val hostname = config.getString("hostname")
- val port = config.getInt("port")
- val prefix = config.getString("prefix")
- val flushInterval = config.getMilliseconds("flush-interval")
+ val hostname = statsDConfig.getString("hostname")
+ val port = statsDConfig.getInt("port")
+ val flushInterval = statsDConfig.getMilliseconds("flush-interval")
+ val maxPacketSize = statsDConfig.getInt("max-packet-size")
val tickInterval = system.settings.config.getMilliseconds("kamon.metrics.tick-interval")
val statsDMetricsListener = buildMetricsListener(tickInterval, flushInterval)
- val includedActors = config.getStringList("includes.actor").asScala
+ val includedActors = statsDConfig.getStringList("includes.actor").asScala
for(actorPathPattern <- includedActors) {
Kamon(Metrics)(system).subscribe(ActorMetrics, actorPathPattern, statsDMetricsListener, permanently = true)
}
@@ -93,3 +99,12 @@ class StatsDExtension(private val system: ExtendedActorSystem) extends Kamon.Ext
}
}
+
+class SimpleMetricKeyGenerator(config: Config) extends StatsD.MetricKeyGenerator {
+ val application = config.getString("kamon.statsd.simple-metric-key-generator.application")
+ val localhostName = ManagementFactory.getRuntimeMXBean.getName.split('@')(1)
+
+ def generateKey(groupIdentity: MetricGroupIdentity, metricIdentity: MetricIdentity): String =
+ application + "." + localhostName + "." + groupIdentity.category.name + "." + groupIdentity.name + "." + metricIdentity.name
+}
+