nwaku/waku/waku_core/time.nim

51 lines
1.4 KiB
Nim

{.push raises: [].}
import std/times, metrics
type Timestamp* = int64 # A nanosecond precision timestamp
proc getNanosecondTime*(timeInSeconds: int64): Timestamp =
let ns = Timestamp(timeInSeconds * int64(1_000_000_000))
return ns
proc getNanosecondTime*(timeInSeconds: float64): Timestamp =
let ns = Timestamp(timeInSeconds * float64(1_000_000_000))
return ns
proc nowInUnixFloat(): float =
return getTime().toUnixFloat()
proc getNowInNanosecondTime*(): Timestamp =
return getNanosecondTime(nowInUnixFloat())
template nanosecondTime*(
collector: Summary | Histogram | typedesc[IgnoredCollector], body: untyped
) =
when defined(metrics):
let start = nowInUnixFloat()
body
collector.observe(nowInUnixFloat() - start)
else:
body
template nanosecondTime*(collector: Gauge, body: untyped) =
when defined(metrics):
let start = nowInUnixFloat()
body
metrics.set(collector, nowInUnixFloat() - start)
else:
body
# Unused yet. Kept for future use in Waku Sync.
#[ proc timestampInSeconds*(time: Timestamp): Timestamp =
let timeStr = $time
var timestamp: Timestamp = time
if timeStr.len() > 16:
timestamp = Timestamp(time div Timestamp(1_000_000_000))
elif timeStr.len() < 16 and timeStr.len() > 13:
timestamp = Timestamp(time div Timestamp(1_000_000))
elif timeStr.len() > 10:
timestamp = Timestamp(time div Timestamp(1000))
return timestamp ]#