Skip to content

Commit c8e2ca4

Browse files
committed
Nanosecond precision timestamps
1 parent c590560 commit c8e2ca4

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

fluent/event.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,6 @@ def __init__(self, label, data, **kwargs):
1010
assert isinstance(data, dict), 'data must be a dict'
1111
sender_ = kwargs.get('sender', sender.get_global_sender())
1212
timestamp = kwargs.get('time', int(time.time()))
13+
if isinstance(timestamp, float):
14+
timestamp = sender.EventTime(timestamp)
1315
sender_.emit_with_time(label, timestamp, data)

fluent/sender.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# -*- coding: utf-8 -*-
22

33
from __future__ import print_function
4+
import struct
45
import socket
56
import threading
67
import time
@@ -30,6 +31,14 @@ def get_global_sender():
3031
def close():
3132
get_global_sender().close()
3233

34+
35+
class EventTime(msgpack.ExtType):
36+
def __new__(cls, timestamp):
37+
seconds = int(timestamp)
38+
nanoseconds = int(timestamp % 1 * 10 ** 9)
39+
return super(EventTime, cls).__new__(cls, code=0, data=struct.pack(">II", seconds, nanoseconds))
40+
41+
3342
class FluentSender(object):
3443
def __init__(self,
3544
tag,
@@ -61,7 +70,7 @@ def __init__(self,
6170
self._close()
6271

6372
def emit(self, label, data):
64-
cur_time = int(time.time())
73+
cur_time = EventTime(time.time())
6574
return self.emit_with_time(label, cur_time, data)
6675

6776
def emit_with_time(self, label, timestamp, data):

0 commit comments

Comments
 (0)