From 7bfc8d29253316289dba6d791126a6d95a0628fb Mon Sep 17 00:00:00 2001 From: Diego Date: Wed, 14 May 2014 00:09:46 -0300 Subject: ! datadog: first functional implementation of DatadogMetricsSender --- .../scala/kamon/datadog/DatadogMetricsSender.scala | 39 ++++++++++------------ 1 file changed, 17 insertions(+), 22 deletions(-) (limited to 'kamon-datadog/src/main') diff --git a/kamon-datadog/src/main/scala/kamon/datadog/DatadogMetricsSender.scala b/kamon-datadog/src/main/scala/kamon/datadog/DatadogMetricsSender.scala index 50911093..eb19ae81 100644 --- a/kamon-datadog/src/main/scala/kamon/datadog/DatadogMetricsSender.scala +++ b/kamon-datadog/src/main/scala/kamon/datadog/DatadogMetricsSender.scala @@ -62,10 +62,16 @@ class DatadogMetricsSender(remote: InetSocketAddress, maxPacketSizeInBytes: Long dataBuilder.flush() } - def encodeMeasurement(measurement: Measurement, instrumentType: InstrumentType): String = { - def dataDogDMetricFormat(value: String, metricType: String, samplingRate: Double = 1D): String = - value + "|" + metricType + (if (samplingRate != 1D) "|@" + samplingRateFormat.format(samplingRate) else "") + + def processTags(tags: Seq[String]): String = { + if (tags.isEmpty) "" else { + tags.foldLeft(new StringBuilder("|#")) { (sb, s) ⇒ if (sb.length > 2) sb ++= "," else sb ++= s }.toString() + } + } + + def dataDogDMetricFormat(value: String, metricType: String, samplingRate: Double = 1D, tags: Seq[String] = Nil): String = + value + "|" + metricType + (if (samplingRate != 1D) "|@" + samplingRateFormat.format(samplingRate) else "" + processTags(tags)) instrumentType match { case Histogram ⇒ dataDogDMetricFormat(measurement.value.toString, "ms", (1D / measurement.count)) @@ -91,26 +97,15 @@ class MetricDataPacketBuilder(maxPacketSizeInBytes: Long, udpSender: ActorRef, r var buffer = new StringBuilder() def appendMeasurement(key: String, measurementData: String): Unit = { - if (key == lastKey) { - val dataWithoutKey = measurementSeparator + measurementData - if (fitsOnBuffer(dataWithoutKey)) - buffer.append(dataWithoutKey) - else { - flushToUDP(buffer.toString()) - buffer.clear() - buffer.append(key).append(dataWithoutKey) - } + val data = key + measurementSeparator + measurementData + + if (fitsOnBuffer(metricSeparator + data)) { + val mSeparator = if (buffer.length > 0) metricSeparator else "" + buffer.append(mSeparator).append(data) } else { - lastKey = key - val dataWithoutSeparator = key + measurementSeparator + measurementData - if (fitsOnBuffer(metricSeparator + dataWithoutSeparator)) { - val mSeparator = if (buffer.length > 0) metricSeparator else "" - buffer.append(mSeparator).append(dataWithoutSeparator) - } else { - flushToUDP(buffer.toString()) - buffer.clear() - buffer.append(dataWithoutSeparator) - } + flushToUDP(buffer.toString()) + buffer.clear() + buffer.append(data) } } -- cgit v1.2.3