Skip to content

Commit 8d574d8

Browse files
committed
Enhance KairosDB client with debug and timeout options
- Add timeout parameter to KairosDB client initialization - Implement optional debug mode for metric posting - Improve error handling in query_metrics method - Bump version to v0.2.4 in README and setup.py
1 parent 4c7b2ac commit 8d574d8

File tree

3 files changed

+28
-31
lines changed

3 files changed

+28
-31
lines changed

README.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
Examon common utilities package
22
===============================
3-
v0.2.3
3+
v0.2.4

examon/db/kairosdb.py

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@ class KairosDB:
1111
"""
1212
KairosDB REST client
1313
"""
14-
def __init__(self, server, port, user=None, password=None):
14+
def __init__(self, server, port, user=None, password=None, timeout=60, debug=False):
1515
self.server = server
1616
self.port = port
1717
self.user = user
18+
self.debug = debug
1819
self.password = password
1920
self.s = requests.Session()
21+
self.s.timeout = timeout
2022
if self.password:
2123
self.s.auth = (self.user, self.password)
2224
#self.s.headers.update({'x-test': 'true'})
@@ -42,36 +44,31 @@ def put_metrics(self, metrics, comp=True):
4244
else:
4345
payload = json.dumps(metrics)
4446
try:
45-
self.logger.debug("Inserting %d metrics" % len(metrics))
46-
response = self.s.post(self.apis['post_metrics'], payload, headers=headers)
47-
response.raise_for_status()
47+
if not self.debug:
48+
self.logger.debug("Inserting %d metrics" % len(metrics))
49+
response = self.s.post(self.apis['post_metrics'], payload, headers=headers)
50+
response.raise_for_status()
4851

49-
# # DEBUG: send one metric at time
50-
# for m in metrics:
51-
# pay = [m]
52-
# try:
53-
# response = self.s.post(self.apis['post_metrics'], json.dumps([m]), headers=headers)
54-
# response.raise_for_status()
55-
# except:
56-
# self.logger.error("Exception in post()", exc_info=True)
57-
# self.logger.error("Request payload: %s" % (json.dumps(pay, indent=4)))
58-
# self.logger.error("Reason %s" % (response.text))
59-
52+
# DEBUG: send one metric at time
53+
else: # TODO: Make this configurable
54+
for m in metrics:
55+
pay = [m]
56+
try:
57+
response = self.s.post(self.apis['post_metrics'], json.dumps([m]), headers=headers)
58+
response.raise_for_status()
59+
except:
60+
self.logger.exception("Exception in post()")
61+
self.logger.error("Request payload: %s" % (json.dumps(pay, indent=4)))
6062
except:
61-
#e = sys.exc_info()[0]
62-
#logger.error("[%s] Exception in post(): %s", "KairosDB", e)
63-
#self.logger.error("Exception in post()", exc_info=True)
6463
self.logger.exception("Exception in post()")
65-
#if response:
66-
# self.logger.error("Reason %s" % (response.text))
67-
#self.logger.error("Request payload: %s" % (json.dumps(pay, indent=4)))
68-
#print "[%s] Exception in post(): %s" % ("KairosDB", e,)
69-
#print "[%s] Reason: " % ("KairosDB",)
70-
#print response.text
71-
#pass
7264

7365
def query_metrics(self, query):
74-
self.logger.debug("query metrics: %s" % repr(query))
75-
headers = {'Accept-Encoding': 'gzip, deflate'}
76-
response = self.s.post(self.apis['post_query'], data=json.dumps(query), headers=headers)
77-
return response.json()
66+
response = None
67+
try:
68+
self.logger.debug("query metrics: %s" % repr(query))
69+
headers = {'Accept-Encoding': 'gzip, deflate'}
70+
response = self.s.post(self.apis['post_query'], data=json.dumps(query), headers=headers)
71+
response.raise_for_status()
72+
return response.json()
73+
except:
74+
self.logger.exception("Exception in post()")

setup.py

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

44
setup(name='examon-common',
5-
version='v0.2.3',
5+
version='v0.2.4',
66
description='Examon common utilities',
77
url='http://github.com/fbeneventi/examon-common',
88
author='Francesco Beneventi',

0 commit comments

Comments
 (0)