Skip to content
This repository was archived by the owner on Oct 29, 2024. It is now read-only.

Commit b0517c7

Browse files
author
Aistis Jokubauskas
committed
Separate single line creation for line_protocol
1 parent 898c4b6 commit b0517c7

File tree

1 file changed

+51
-40
lines changed

1 file changed

+51
-40
lines changed

influxdb/line_protocol.py

Lines changed: 51 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,49 @@ def _get_unicode(data, force=False):
102102
return data
103103

104104

105+
def make_line(measurement, tags=None, fields=None, time=None, precision=None):
106+
tags = tags or {}
107+
fields = fields or {}
108+
109+
line = _escape_tag(_get_unicode(measurement))
110+
111+
# tags should be sorted client-side to take load off server
112+
tag_list = []
113+
for tag_key in sorted(tags.keys()):
114+
key = _escape_tag(tag_key)
115+
value = _escape_tag(tags[tag_key])
116+
117+
if key != '' and value != '':
118+
tag_list.append(
119+
"{key}={value}".format(key=key, value=value)
120+
)
121+
122+
if tag_list:
123+
line += ',' + ','.join(tag_list)
124+
125+
field_list = []
126+
for field_key in sorted(fields.keys()):
127+
key = _escape_tag(field_key)
128+
value = _escape_value(fields[field_key])
129+
130+
if key != '' and value != '':
131+
field_list.append("{key}={value}".format(
132+
key=key,
133+
value=value
134+
))
135+
136+
if field_list:
137+
line += ' ' + ','.join(field_list)
138+
139+
if time:
140+
timestamp = _get_unicode(str(int(
141+
_convert_timestamp(time, precision)
142+
)))
143+
line += ' ' + timestamp
144+
145+
return line
146+
147+
105148
def make_lines(data, precision=None):
106149
"""
107150
Extracts the points from the given dict and returns a Unicode string
@@ -110,52 +153,20 @@ def make_lines(data, precision=None):
110153
lines = []
111154
static_tags = data.get('tags', None)
112155
for point in data['points']:
113-
elements = []
114-
115-
# add measurement name
116-
measurement = _escape_tag(_get_unicode(
117-
point.get('measurement', data.get('measurement'))
118-
))
119-
key_values = [measurement]
120-
121-
# add tags
122156
if static_tags is None:
123157
tags = point.get('tags', {})
124158
else:
125159
tags = copy(static_tags)
126160
tags.update(point.get('tags', {}))
127161

128-
# tags should be sorted client-side to take load off server
129-
for tag_key in sorted(tags.keys()):
130-
key = _escape_tag(tag_key)
131-
value = _escape_tag(tags[tag_key])
132-
133-
if key != '' and value != '':
134-
key_values.append("{key}={value}".format(key=key, value=value))
135-
key_values = ','.join(key_values)
136-
elements.append(key_values)
137-
138-
# add fields
139-
field_values = []
140-
for field_key in sorted(point['fields'].keys()):
141-
key = _escape_tag(field_key)
142-
value = _escape_value(point['fields'][field_key])
143-
if key != '' and value != '':
144-
field_values.append("{key}={value}".format(
145-
key=key,
146-
value=value
147-
))
148-
field_values = ','.join(field_values)
149-
elements.append(field_values)
150-
151-
# add timestamp
152-
if 'time' in point:
153-
timestamp = _get_unicode(str(int(
154-
_convert_timestamp(point['time'], precision)
155-
)))
156-
elements.append(timestamp)
157-
158-
line = ' '.join(elements)
162+
line = make_line(
163+
point.get('measurement', data.get('measurement')),
164+
tags=tags,
165+
fields=point['fields'],
166+
precision=precision,
167+
time=point.get('time')
168+
)
159169
lines.append(line)
170+
160171
lines = '\n'.join(lines)
161172
return lines + '\n'

0 commit comments

Comments
 (0)