Skip to content

Commit

Permalink
Merge pull request #799 from tmaitz/fix-influx-uploader-plugin
Browse files Browse the repository at this point in the history
cast int metrics to float. avoid influx db cast exception
  • Loading branch information
szypulka authored Oct 14, 2019
2 parents 276065f + ee7a698 commit 963b1df
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 1 deletion.
3 changes: 2 additions & 1 deletion yandextank/plugins/InfluxUploader/decoder.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@ def decode_monitoring(self, data):
{"host": host, "comment": host_data.get("comment")},
second_data["timestamp"],
{
metric: value
# cast int to float. avoid https://github.com/yandex/yandex-tank/issues/776
metric: float(value) if isinstance(value, int) else value
for metric, value in host_data["metrics"].iteritems()
}
)
Expand Down
65 changes: 65 additions & 0 deletions yandextank/plugins/InfluxUploader/tests/test_decoder.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# -*- coding: utf-8 -*-
from uuid import uuid4
from yandextank.plugins.InfluxUploader.decoder import Decoder


class TestDecoder(object):
def test_metrics_cast(self):
test_uuid = str(uuid4())
tank_tag = 'test_tank_tag'
comment = 'test comment'
raw_metrics = {
'metric1': -123,
'metric2': -123.456,
'metric3': 123,
'metric4': 123.456,
'metric5': 0,
'metric6': -0.1,
'metric7': 0.1,
'metric8': 'down',
}
timestamp = 123456789
host = '127.0.0.1'
data = [
{
'data': {
host: {
'comment': comment,
'metrics': raw_metrics
}
},
'timestamp': timestamp
}
]
expected_metrics = {
'metric1': -123.0,
'metric2': -123.456,
'metric3': 123.0,
'metric4': 123.456,
'metric5': 0.0,
'metric6': -0.1,
'metric7': 0.1,
'metric8': 'down'
}

decoder = Decoder(tank_tag, test_uuid, {}, True, True)
result_points = decoder.decode_monitoring(data)

assert (len(result_points) == 1)
r_point = result_points[0]
# check other props
assert (r_point['time'] == timestamp)
assert (r_point['measurement'] == 'monitoring')
assert (r_point['tags']['comment'] == comment)
assert (r_point['tags']['host'] == host)
assert (r_point['tags']['tank'] == tank_tag)
assert (r_point['tags']['uuid'] == test_uuid)
# check metric cast
assert (len(r_point['fields']) == len(expected_metrics))
for metric, value in r_point['fields'].iteritems():
if metric not in expected_metrics:
assert False
if not isinstance(value, type(expected_metrics[metric])):
assert False
if not value == expected_metrics[metric]:
assert False

0 comments on commit 963b1df

Please sign in to comment.