diff --git a/tempodb/base.py b/tempodb/base.py index 521d506..c007c5e 100644 --- a/tempodb/base.py +++ b/tempodb/base.py @@ -75,12 +75,13 @@ def from_json(json): class DataSet(object): - def __init__(self, series, start, end, data=[], summary=None): + def __init__(self, series, start, end, data=[], summary=None, rollup=None): self.series = series self.start = start self.end = end self.data = data self.summary = summary + self.rollup = rollup def __str__(self): return str(self.__dict__) @@ -97,7 +98,8 @@ def from_json(json): data = [DataPoint.from_json(dp) for dp in json.get("data", [])] summary = Summary.from_json(json.get('summary', {})) if 'summary' in json else None - return DataSet(series, start_date, end_date, data, summary) + rollup = Rollup.from_json(json.get('rollup', {})) if 'rollup' in json else None + return DataSet(series, start_date, end_date, data, summary, rollup) class Summary(object): @@ -115,4 +117,18 @@ def from_json(json): return summary +class Rollup(object): + + def __init__(self, **kwargs): + self.__dict__.update(kwargs) + + def __eq__(self, other): + return self.__dict__ == other.__dict__ + + @staticmethod + def from_json(json): + rollup = Rollup() + rollup.__dict__.update(json) + return rollup + diff --git a/tests/base/rollup_tests.py b/tests/base/rollup_tests.py new file mode 100644 index 0000000..61f511f --- /dev/null +++ b/tests/base/rollup_tests.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python +# encoding: utf-8 + +from unittest2 import TestCase + +from tempodb import Rollup + + +class RollupTest(TestCase): + + def test_init(self): + rollup = Rollup(interval="PT6H", function="avg", tz="UTC") + self.assertEqual(rollup.interval, "PT6H") + self.assertEqual(rollup.function, "avg") + self.assertEqual(rollup.tz, "UTC") + + def test_from_json(self): + json = { + "interval":"PT6H", + "function":"avg", + "tz":"UTC" + } + rollup = Rollup.from_json(json) + expected = Rollup(interval="PT6H", function="avg", tz="UTC") + self.assertEqual(rollup, expected) \ No newline at end of file diff --git a/tests/client/tests.py b/tests/client/tests.py index 2f5f038..504ffef 100644 --- a/tests/client/tests.py +++ b/tests/client/tests.py @@ -8,7 +8,7 @@ from unittest2 import TestCase import tempodb -from tempodb import Client, DataPoint, DataSet, Series, Summary +from tempodb import Client, DataPoint, DataSet, Series, Summary, Rollup class MockResponse(object): @@ -62,7 +62,6 @@ def test_port_defaults(self): self.assertEqual(client.build_full_url('/etc'), 'https://example.com:88/v1/etc') client = Client('key', 'secret', 'example.com', 80, True) self.assertEqual(client.build_full_url('/etc'), 'https://example.com:80/v1/etc') - def test_get_series(self): self.client.session.get.return_value = MockResponse(200, """[{ "id": "id", @@ -130,14 +129,15 @@ def test_read_id(self): "start": "2012-03-27T00:00:00.000", "end": "2012-03-28T00:00:00.000", "data": [{"t": "2012-03-27T00:00:00.000", "v": 12.34}], - "summary": {} + "summary": {}, + "rollup": {} }""") start = datetime.datetime(2012, 3, 27) end = datetime.datetime(2012, 3, 28) dataset = self.client.read_id('id', start, end) - expected = DataSet(Series('id', 'key'), start, end, [DataPoint(start, 12.34)], Summary()) + expected = DataSet(Series('id', 'key'), start, end, [DataPoint(start, 12.34)], Summary(), Rollup()) self.client.session.get.assert_called_once_with( 'https://example.com/v1/series/id/id/data/?start=2012-03-27T00%3A00%3A00&end=2012-03-28T00%3A00%3A00', auth=('key', 'secret'), @@ -157,14 +157,15 @@ def test_read_key(self): "start": "2012-03-27T00:00:00.000", "end": "2012-03-28T00:00:00.000", "data": [{"t": "2012-03-27T00:00:00.000", "v": 12.34}], - "summary": {} + "summary": {}, + "rollup": {} }""") start = datetime.datetime(2012, 3, 27) end = datetime.datetime(2012, 3, 28) dataset = self.client.read_key('key1', start, end) - expected = DataSet(Series('id', 'key1'), start, end, [DataPoint(start, 12.34)], Summary()) + expected = DataSet(Series('id', 'key1'), start, end, [DataPoint(start, 12.34)], Summary(), Rollup()) self.client.session.get.assert_called_once_with( 'https://example.com/v1/series/key/key1/data/?start=2012-03-27T00%3A00%3A00&end=2012-03-28T00%3A00%3A00', auth=('key', 'secret'), @@ -184,19 +185,22 @@ def test_read_key_escape(self): "start": "2012-03-27T00:00:00.000", "end": "2012-03-28T00:00:00.000", "data": [{"t": "2012-03-27T00:00:00.000", "v": 12.34}], - "summary": {} + "summary": {}, + "rollup": {} }""") start = datetime.datetime(2012, 3, 27) end = datetime.datetime(2012, 3, 28) dataset = self.client.read_key('ke:y/1', start, end) - expected = DataSet(Series('id', 'ke:y/1'), start, end, [DataPoint(start, 12.34)], Summary()) + expected = DataSet(Series('id', 'ke:y/1'), start, end, [DataPoint(start, 12.34)], Summary(), Rollup()) self.client.session.get.assert_called_once_with( 'https://example.com/v1/series/key/ke%3Ay%2F1/data/?start=2012-03-27T00%3A00%3A00&end=2012-03-28T00%3A00%3A00', auth=('key', 'secret'), headers=self.get_headers ) + print dataset + print expected self.assertEqual(dataset, expected) def test_read(self): @@ -211,14 +215,15 @@ def test_read(self): "start": "2012-03-27T00:00:00.000", "end": "2012-03-28T00:00:00.000", "data": [{"t": "2012-03-27T00:00:00.000", "v": 12.34}], - "summary": {} + "summary": {}, + "rollup": {} }]""") start = datetime.datetime(2012, 3, 27) end = datetime.datetime(2012, 3, 28) datasets = self.client.read(start, end, keys=['key1']) - expected = [DataSet(Series('id', 'key1'), start, end, [DataPoint(start, 12.34)], Summary())] + expected = [DataSet(Series('id', 'key1'), start, end, [DataPoint(start, 12.34)], Summary(), Rollup())] self.client.session.get.assert_called_once_with( 'https://example.com/v1/data/?start=2012-03-27T00%3A00%3A00&end=2012-03-28T00%3A00%3A00&key=key1', auth=('key', 'secret'),