diff options
author | Ivan Topolnjak <ivantopo@gmail.com> | 2017-12-18 12:50:41 +0100 |
---|---|---|
committer | Ivan Topolnjak <ivantopo@gmail.com> | 2017-12-18 13:27:37 +0100 |
commit | a97c7dac0748732700d3a98ee44bd2fdf847ffbc (patch) | |
tree | 7e90436c56d59aea5c201d00614a1505ca88762b /kamon-core/src/main/scala/kamon/util/Clock.scala | |
parent | 72537e7a94d90131f8945cd78b6299e97e4cd027 (diff) | |
download | Kamon-a97c7dac0748732700d3a98ee44bd2fdf847ffbc.tar.gz Kamon-a97c7dac0748732700d3a98ee44bd2fdf847ffbc.tar.bz2 Kamon-a97c7dac0748732700d3a98ee44bd2fdf847ffbc.zip |
move alignment and duration utilities to the companion object
Diffstat (limited to 'kamon-core/src/main/scala/kamon/util/Clock.scala')
-rw-r--r-- | kamon-core/src/main/scala/kamon/util/Clock.scala | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/kamon-core/src/main/scala/kamon/util/Clock.scala b/kamon-core/src/main/scala/kamon/util/Clock.scala index 48a88968..8c00ecc6 100644 --- a/kamon-core/src/main/scala/kamon/util/Clock.scala +++ b/kamon-core/src/main/scala/kamon/util/Clock.scala @@ -15,17 +15,17 @@ package kamon.util -import java.time.{Instant, ZoneId, Clock => JavaClock} +import java.time.{Duration, Instant, ZoneId, Clock => JavaClock} abstract class Clock extends JavaClock { def nanos(): Long - def nanosBetween(left: Instant, right: Instant): Long def toInstant(nanos: Long): Instant } object Clock { private val MillisInSecond = 1000L + private val NanosInMicro = 1000L private val MicrosInSecond = 1000000L private val NanosInSecond = 1000000000L @@ -74,16 +74,28 @@ object Clock { override def instant(): Instant = toInstant(System.nanoTime()) - override def nanosBetween(left: Instant, right: Instant): Long = { - val secsDiff = Math.subtractExact(right.getEpochSecond, left.getEpochSecond) - val totalNanos = Math.multiplyExact(secsDiff, NanosInSecond) - return Math.addExact(totalNanos, right.getNano - left.getNano) - } - override def withZone(zone: ZoneId): JavaClock = systemClock.withZone(zone) override def getZone: ZoneId = systemClock.getZone() } + + def nanosBetween(left: Instant, right: Instant): Long = { + val secsDiff = Math.subtractExact(right.getEpochSecond, left.getEpochSecond) + val totalNanos = Math.multiplyExact(secsDiff, NanosInSecond) + return Math.addExact(totalNanos, right.getNano - left.getNano) + } + + def toEpochMicros(instant: Instant): Long = { + Math.multiplyExact(instant.getEpochSecond, MicrosInSecond) + Math.floorDiv(instant.getNano, NanosInMicro) + } + + def nextTick(from: Instant, expectedDuration: Duration): Instant = { + val fromMillis = from.toEpochMilli() + val intervalCount = Math.floorDiv(fromMillis, expectedDuration.toMillis) + val nextTickMillis = expectedDuration.toMillis * (intervalCount + 1) + + Instant.ofEpochMilli(nextTickMillis) + } }
\ No newline at end of file |