Skip to content

Commit 1096dc9

Browse files
author
Dan
committed
Added test case for and updated reading influx values for multiple target series and no templates - resolves #18
1 parent 844f71d commit 1096dc9

File tree

2 files changed

+30
-16
lines changed

2 files changed

+30
-16
lines changed

influxgraph/utils.py

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ def _retrieve_field_data(infl_data, path_measurements, measurement,
179179
if 'value' in path_measurements[measurement]['fields']:
180180
_data[metric] = [d['value']
181181
for d in infl_data.get_points(measurement)]
182-
# Retrieve non value named field data
182+
# Retrieve non value named field data with fields from path_measurements
183183
_retrieve_named_field_data(infl_data, path_measurements,
184184
measurement, _data)
185185

@@ -190,18 +190,14 @@ def read_influxdb_values(influxdb_data, paths, path_measurements):
190190
influxdb_data = [influxdb_data]
191191
m_path_ind = 0
192192
seen_measurements = ()
193-
for path_ind, infl_data in enumerate(influxdb_data):
194-
# Where multiple measurements are queried we have multiple keys
195-
# per result set - path index should be result set index
196-
# plus measurement key index within result set
197-
# unless we have a path_measurements index from template
198-
# configuration
199-
for key_ind, infl_keys in enumerate(infl_data.keys()):
193+
for infl_data in influxdb_data:
194+
for infl_keys in infl_data.keys():
200195
measurement = infl_keys[0]
201196
if not path_measurements:
202-
metric = paths[path_ind + key_ind]
203-
_data[metric] = [d['value']
204-
for d in infl_data.get_points(measurement)]
197+
if not measurement in paths:
198+
continue
199+
_data[measurement] = [d['value']
200+
for d in infl_data.get_points(measurement)]
205201
continue
206202
if measurement not in seen_measurements:
207203
seen_measurements = set(tuple(seen_measurements) + (measurement,))

tests/test_influxdb_integration.py

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import time
88
import json
99
from gzip import GzipFile
10+
from random import randint
1011

1112
from influxdb import InfluxDBClient
1213
import influxdb.exceptions
@@ -34,10 +35,10 @@ def setup_db(self):
3435
"tags": {},
3536
"time": _time,
3637
"fields": {
37-
"value": 1,
38+
"value": self.series_values[i],
3839
}
3940
}
40-
for series in self.series
41+
for i, series in enumerate(self.series)
4142
for _time in [
4243
(self.end_time - datetime.timedelta(minutes=30)).strftime("%Y-%m-%dT%H:%M:%SZ"),
4344
(self.end_time - datetime.timedelta(minutes=2)).strftime("%Y-%m-%dT%H:%M:%SZ"),
@@ -72,6 +73,7 @@ def setUp(self):
7273
'integration_test.agg_path.last',
7374
'integration_test.agg_path.sum',
7475
]
76+
self.series_values = [randint(1,100) for _ in self.series]
7577
self.setup_db()
7678
self.finder = influxgraph.InfluxDBFinder(self.config)
7779

@@ -108,6 +110,19 @@ def test_configured_deltas(self):
108110
msg="Expected exactly %s data points - got %s instead" % (
109111
3601, len(data[self.series1])))
110112

113+
def test_multi_series_data(self):
114+
reader = influxgraph.InfluxDBReader(InfluxDBClient(
115+
database=self.db_name), '', influxgraph.utils.NullStatsd())
116+
nodes = [influxgraph.classes.leaf.InfluxDBLeafNode(path, reader)
117+
for path in self.series]
118+
_, data = self.finder.fetch_multi(nodes,
119+
int(self.start_time.strftime("%s")),
120+
int(self.end_time.strftime("%s")))
121+
self.assertEqual(len(data), len(self.series))
122+
for i, node in enumerate(nodes):
123+
self.assertTrue(node.path in data)
124+
self.assertTrue(data[node.path][-1] == self.series_values[i])
125+
111126
def test_find_branch(self):
112127
"""Test getting branch of metric path"""
113128
query = Query('fakeyfakeyfakefake')
@@ -170,7 +185,7 @@ def test_find_series_wildcard(self):
170185
self.assertTrue(self.metric_prefix in nodes,
171186
msg="Node list does not contain prefix '%s' - %s" % (
172187
self.metric_prefix, nodes))
173-
188+
174189
def test_find_series_glob_expansion(self):
175190
"""Test finding metric prefix by glob expansion"""
176191
query = Query('{%s}' % (self.metric_prefix))
@@ -286,6 +301,7 @@ def test_multi_fetch_data(self):
286301
self.assertTrue(len(datapoints) == self.num_datapoints,
287302
msg="Expected %s datapoints - got %s" % (
288303
self.num_datapoints, len(datapoints),))
304+
self.assertTrue(datapoints[-1] == self.series_values[0])
289305

290306
def test_single_fetch_data(self):
291307
"""Test single fetch data for a series by name"""
@@ -337,14 +353,15 @@ def test_multi_fetch_data_multi_series(self):
337353
int(self.end_time.strftime("%s")),
338354
self.step),
339355
msg="Time info and step do not match our requested values")
340-
for series in [self.series1, self.series2]:
356+
for i, series in enumerate([self.series1, self.series2]):
341357
self.assertTrue(self.steps == len(data[series]),
342358
msg="Expected %s datapoints, got %s instead" % (
343359
self.steps, len(data[series]),))
344360
datapoints = [v for v in data[series] if v]
345361
self.assertTrue(len(datapoints) == self.num_datapoints,
346362
msg="Expected %s datapoints for series %s - got %s" % (
347363
self.num_datapoints, series, len(datapoints),))
364+
self.assertTrue(datapoints[-1] == self.series_values[i])
348365

349366
def test_get_non_existant_series(self):
350367
"""Test single fetch data for a series by name"""
@@ -395,7 +412,7 @@ def test_multi_fetch_data_multi_series_configured_aggregation_functions(self):
395412
self.assertTrue(nodes[0].path in data,
396413
msg="Did not get data for requested series %s - got data for %s" % (
397414
nodes[0].path, data.keys(),))
398-
for suffix in ['min', 'max', 'last', 'sum']:
415+
for i, suffix in enumerate(['min', 'max', 'last', 'sum']):
399416
series = self.metric_prefix + ".agg_path.%s" % (suffix,)
400417
nodes = list(self.finder.find_nodes(Query(series)))
401418
time_info, data = self.finder.fetch_multi(nodes,
@@ -404,6 +421,7 @@ def test_multi_fetch_data_multi_series_configured_aggregation_functions(self):
404421
self.assertTrue(series in data,
405422
msg="Did not get data for requested series %s - got data for %s" % (
406423
series, data.keys(),))
424+
self.assertTrue(data[series][-1] == self.series_values[i-4])
407425

408426
def test_memcache_configuration_off_by_default(self):
409427
self.assertFalse(self.finder.memcache)

0 commit comments

Comments
 (0)