Skip to content

Commit dc7c885

Browse files
authored
T-9413 Add configurable timeout (#34)
1 parent 9f766e4 commit dc7c885

File tree

7 files changed

+26
-9
lines changed

7 files changed

+26
-9
lines changed

logtail/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@
55
from .helpers import LogtailContext, DEFAULT_CONTEXT
66
from .formatter import LogtailFormatter
77

8-
__version__ = '0.3.3'
8+
__version__ = '0.3.4'
99

1010
context = DEFAULT_CONTEXT

logtail/handler.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
DEFAULT_RAISE_EXCEPTIONS = False
1717
DEFAULT_DROP_EXTRA_EVENTS = True
1818
DEFAULT_INCLUDE_EXTRA_ATTRIBUTES = True
19+
DEFAULT_TIMEOUT = 30
1920

2021

2122
class LogtailHandler(logging.Handler):
@@ -29,6 +30,7 @@ def __init__(self,
2930
drop_extra_events=DEFAULT_DROP_EXTRA_EVENTS,
3031
include_extra_attributes=DEFAULT_INCLUDE_EXTRA_ATTRIBUTES,
3132
context=DEFAULT_CONTEXT,
33+
timeout=DEFAULT_TIMEOUT,
3234
level=logging.NOTSET):
3335
super(LogtailHandler, self).__init__(level=level)
3436
self.source_token = source_token
@@ -38,7 +40,7 @@ def __init__(self,
3840
self.host = "https://" + host
3941
self.context = context
4042
self.pipe = queue.Queue(maxsize=buffer_capacity)
41-
self.uploader = Uploader(self.source_token, self.host)
43+
self.uploader = Uploader(self.source_token, self.host, timeout)
4244
self.drop_extra_events = drop_extra_events
4345
self.include_extra_attributes = include_extra_attributes
4446
self.buffer_capacity = buffer_capacity

logtail/uploader.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ def __init__(self, exception):
99
self.exception = exception
1010

1111
class Uploader(object):
12-
def __init__(self, source_token, host):
12+
def __init__(self, source_token, host, timeout):
1313
self.source_token = source_token
1414
self.host = host
15+
self.timeout = timeout
1516
self.session = requests.Session()
1617
self.headers = {
1718
'Authorization': 'Bearer %s' % source_token,
@@ -21,6 +22,6 @@ def __init__(self, source_token, host):
2122
def __call__(self, frame):
2223
data = msgpack.packb(frame, use_bin_type=True)
2324
try:
24-
return self.session.post(self.host, data=data, headers=self.headers)
25+
return self.session.post(self.host, data=data, headers=self.headers, timeout=self.timeout)
2526
except requests.RequestException as e:
26-
return Fake500(e)
27+
return Fake500(e)

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from setuptools import setup
44

55

6-
VERSION = '0.3.3'
6+
VERSION = '0.3.4'
77
ROOT_DIR = os.path.dirname(__file__)
88

99
REQUIREMENTS = [

tests/test_flusher.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,11 @@ class TestFlushWorker(unittest.TestCase):
2020
buffer_capacity = 5
2121
flush_interval = 2
2222
check_interval = 0.01
23+
timeout = 0.1
2324

2425
def _setup_worker(self, uploader=None):
2526
pipe = queue.Queue(maxsize=self.buffer_capacity)
26-
uploader = uploader or Uploader(self.source_token, self.host)
27+
uploader = uploader or Uploader(self.source_token, self.host, self.timeout)
2728
fw = FlushWorker(uploader, pipe, self.buffer_capacity, self.flush_interval, self.check_interval)
2829
return pipe, uploader, fw
2930

tests/test_handler.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,16 @@ def test_handler_creates_uploader_from_args(self, MockWorker):
2020
handler = LogtailHandler(source_token=self.source_token, host=self.host)
2121
self.assertEqual(handler.uploader.source_token, self.source_token)
2222
self.assertEqual(handler.uploader.host, "https://" + self.host)
23+
24+
@patch('logtail.handler.FlushWorker')
25+
def test_handler_passes_timeout_to_uploader(self, MockWorker):
26+
# Test default timeout
27+
handler = LogtailHandler(source_token=self.source_token, host=self.host)
28+
self.assertEqual(handler.uploader.timeout, 30)
29+
30+
# Test custom timeout
31+
handler = LogtailHandler(source_token=self.source_token, host=self.host, timeout=10)
32+
self.assertEqual(handler.uploader.timeout, 10)
2333

2434
@patch('logtail.handler.FlushWorker')
2535
def test_handler_creates_pipe_from_args(self, MockWorker):

tests/test_uploader.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@ class TestUploader(unittest.TestCase):
1313
host = 'https://in.logtail.com'
1414
source_token = 'dummy_source_token'
1515
frame = [1, 2, 3]
16+
timeout = 30
1617

1718
@patch('logtail.uploader.requests.Session.post')
1819
def test_call(self, post):
19-
def mock_post(endpoint, data=None, headers=None):
20+
def mock_post(endpoint, data=None, headers=None, timeout=None):
2021
# Check that the data is sent to ther correct endpoint
2122
self.assertEqual(endpoint, self.host)
2223
# Check the content-type
@@ -25,9 +26,11 @@ def mock_post(endpoint, data=None, headers=None):
2526
self.assertEqual('application/msgpack', headers.get('Content-Type'))
2627
# Check the content was msgpacked correctly
2728
self.assertEqual(msgpack.unpackb(data, raw=False), self.frame)
29+
# Check that timeout is passed to the request
30+
self.assertEqual(timeout, 30)
2831

2932
post.side_effect = mock_post
30-
u = Uploader(self.source_token, self.host)
33+
u = Uploader(self.source_token, self.host, self.timeout)
3134
u(self.frame)
3235

3336
self.assertTrue(post.called)

0 commit comments

Comments
 (0)