diff options
Diffstat (limited to 'kamon-statsd/src/main/scala/kamon/statsd/StatsDMetricsSender.scala')
-rw-r--r-- | kamon-statsd/src/main/scala/kamon/statsd/StatsDMetricsSender.scala | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/kamon-statsd/src/main/scala/kamon/statsd/StatsDMetricsSender.scala b/kamon-statsd/src/main/scala/kamon/statsd/StatsDMetricsSender.scala index b14e6022..cfc228d3 100644 --- a/kamon-statsd/src/main/scala/kamon/statsd/StatsDMetricsSender.scala +++ b/kamon-statsd/src/main/scala/kamon/statsd/StatsDMetricsSender.scala @@ -28,7 +28,6 @@ class StatsDMetricsSender extends Actor with ActorLogging { val statsDExtension = Kamon(StatsD) val remote = new InetSocketAddress(statsDExtension.hostname, statsDExtension.port) - val maxPacketSize = 1024 IO(Udp) ! Udp.SimpleSender @@ -38,24 +37,23 @@ class StatsDMetricsSender extends Actor with ActorLogging { } def ready(udpSender: ActorRef): Receive = { - case StatsD.MetricBatch(metrics) ⇒ writeDown(metrics, ByteString.empty, udpSender) + case StatsD.MetricBatch(metrics) ⇒ sendMetricsToRemote(metrics, ByteString.empty, udpSender) } + @tailrec final def sendMetricsToRemote(metrics: Iterable[StatsD.Metric], buffer: ByteString, udpSender: ActorRef): Unit = { + def flushToRemote(data: ByteString, udpSender: ActorRef): Unit = udpSender ! Udp.Send(data, remote) - def flushToRemote(data: ByteString, udpSender: ActorRef): Unit = udpSender ! Udp.Send(data, remote) - - @tailrec final def writeDown(metrics: Iterable[StatsD.Metric], buffer: ByteString, udpSender: ActorRef): Unit = { - if(metrics.isEmpty) + if (metrics.isEmpty) flushToRemote(buffer, udpSender) else { - val headData = metrics.head.toByteString - if(buffer.size + headData.size > maxPacketSize) { + val headMetricData = metrics.head.toByteString(includeTrailingNewline = true) + + if (buffer.size + headMetricData.size > statsDExtension.maxPacketSize) { flushToRemote(buffer, udpSender) - writeDown(metrics.tail, headData, udpSender) + sendMetricsToRemote(metrics.tail, headMetricData, udpSender) } else { - writeDown(metrics.tail, buffer ++ headData, udpSender) + sendMetricsToRemote(metrics.tail, buffer ++ headMetricData, udpSender) } - } } } |