コード例 #1
0
 def _create_dbs(self, ts=None):
     ts = ts or int(time.time())
     for db in (
         ('test', 'foo.wsp'),
         ('test', 'wat', 'welp.wsp'),
         ('test', 'bar', 'baz.wsp'),
     ):
         db_path = os.path.join(WHISPER_DIR, *db)
         os.makedirs(os.path.dirname(db_path))
         whisper.create(db_path, [(1, 60)])
         whisper.update(db_path, 1, ts)
         whisper.update(db_path, 2, ts)
コード例 #2
0
ファイル: test_render.py プロジェクト: WeiBanjo/graphite-api
    def create_db(self):
        whisper.create(self.db, [(1, 60)])

        self.ts = int(time.time())
        whisper.update(self.db, 0.5, self.ts - 2)
        whisper.update(self.db, 0.4, self.ts - 1)
        whisper.update(self.db, 0.6, self.ts)
コード例 #3
0
ファイル: test_render.py プロジェクト: edlitmus/graphite-api
    def test_templates(self):
        ts = int(time.time())
        value = 1
        for db in (
            ('hosts', 'worker1', 'cpu.wsp'),
            ('hosts', 'worker2', 'cpu.wsp'),
        ):
            db_path = os.path.join(WHISPER_DIR, *db)
            if not os.path.exists(os.path.dirname(db_path)):
                os.makedirs(os.path.dirname(db_path))
            whisper.create(db_path, [(1, 60)])
            whisper.update(db_path, value, ts)
            value += 1

        for query, expected in [
            ({'target': 'template(hosts.worker1.cpu)'}, 'hosts.worker1.cpu'),
            ({'target': 'template(constantLine($1),12)'}, '12'),
            ({'target': 'template(constantLine($1))',
              'template[1]': '12'}, '12.0'),
            ({'target': 'template(constantLine($num),num=12)'}, '12'),
            ({'target': 'template(constantLine($num))',
              'template[num]': '12'}, '12.0'),
            ({'target': 'template(time($1),"nameOfSeries")'}, 'nameOfSeries'),
            ({'target': 'template(time($1))',
              'template[1]': 'nameOfSeries'}, 'nameOfSeries'),
            ({'target': 'template(time($name),name="nameOfSeries")'},
             'nameOfSeries'),
            ({'target': 'template(time($name))',
              'template[name]': 'nameOfSeries'}, 'nameOfSeries'),
            ({'target': 'template(sumSeries(hosts.$1.cpu),"worker1")'},
             'sumSeries(hosts.worker1.cpu)'),
            ({'target': 'template(sumSeries(hosts.$1.cpu))',
              'template[1]': 'worker*'}, 'sumSeries(hosts.worker*.cpu)'),
            ({'target': 'template(sumSeries(hosts.$host.cpu))',
              'template[host]': 'worker*'}, 'sumSeries(hosts.worker*.cpu)'),
        ]:
            query['format'] = 'json'
            response = self.app.get(self.url, query_string=query)
            data = json.loads(response.data.decode('utf-8'))
            self.assertEqual(data[0]['target'], expected)
コード例 #4
0
    def create_db(self):
        whisper.create(self.db, [(1, 60)])

        self.ts = int(time.time())
        whisper.update(self.db, 0.5, self.ts - 2)
        whisper.update(self.db, 0.4, self.ts - 1)
        whisper.update(self.db, 0.6, self.ts)
コード例 #5
0
    def test_templates(self):
        ts = int(time.time())
        value = 1
        for db in (
            ('hosts', 'worker1', 'cpu.wsp'),
            ('hosts', 'worker2', 'cpu.wsp'),
        ):
            db_path = os.path.join(WHISPER_DIR, *db)
            if not os.path.exists(os.path.dirname(db_path)):
                os.makedirs(os.path.dirname(db_path))
            whisper.create(db_path, [(1, 60)])
            whisper.update(db_path, value, ts)
            value += 1

        for query, expected in [
            ({'target': 'template(hosts.worker1.cpu)'}, 'hosts.worker1.cpu'),
            ({'target': 'template(constantLine($1),12)'}, '12'),
            ({'target': 'template(constantLine($1))',
              'template[1]': '12'}, '12.0'),
            ({'target': 'template(constantLine($num),num=12)'}, '12'),
            ({'target': 'template(constantLine($num))',
              'template[num]': '12'}, '12.0'),
            ({'target': 'template(time($1),"nameOfSeries")'}, 'nameOfSeries'),
            ({'target': 'template(time($1))',
              'template[1]': 'nameOfSeries'}, 'nameOfSeries'),
            ({'target': 'template(time($name),name="nameOfSeries")'},
             'nameOfSeries'),
            ({'target': 'template(time($name))',
              'template[name]': 'nameOfSeries'}, 'nameOfSeries'),
            ({'target': 'template(sumSeries(hosts.$1.cpu),"worker1")'},
             'sumSeries(hosts.worker1.cpu)'),
            ({'target': 'template(sumSeries(hosts.$1.cpu))',
              'template[1]': 'worker*'}, 'sumSeries(hosts.worker*.cpu)'),
            ({'target': 'template(sumSeries(hosts.$host.cpu))',
              'template[host]': 'worker*'}, 'sumSeries(hosts.worker*.cpu)'),
        ]:
            query['format'] = 'json'
            response = self.app.get(self.url, query_string=query)
            data = json.loads(response.data.decode('utf-8'))
            self.assertEqual(data[0]['target'], expected)
コード例 #6
0
ファイル: test_render.py プロジェクト: WeiBanjo/graphite-api
    def test_render_options(self):
        self.create_db()
        db2 = os.path.join(WHISPER_DIR, 'foo.wsp')
        whisper.create(db2, [(1, 60)])
        ts = int(time.time())
        whisper.update(db2, 0.5, ts - 2)

        for qs in [
            {'logBase': 'e'},
            {'logBase': 1},
            {'logBase': 0.5},
            {'margin': -1},
            {'colorList': 'orange,green,blue,#0f0'},
            {'bgcolor': 'orange'},
            {'bgcolor': 'aaabbb'},
            {'bgcolor': '#aaabbb'},
            {'bgcolor': '#aaabbbff'},
            {'fontBold': 'true'},
            {'title': 'Hellò'},
            {'title': 'true'},
            {'vtitle': 'Hellò'},
            {'title': 'Hellò', 'yAxisSide': 'right'},
            {'uniqueLegend': 'true', '_expr': 'secondYAxis({0})'},
            {'uniqueLegend': 'true', 'vtitleRight': 'foo',
             '_expr': 'secondYAxis({0})'},
            {'graphOnly': 'true', 'yUnitSystem': 'si'},
            {'lineMode': 'staircase'},
            {'lineMode': 'slope'},
            {'lineMode': 'connected'},
            {'min': 1, 'max': 1, 'thickness': 2, 'yUnitSystem': 'welp'},
            {'yMax': 5, 'yLimit': 0.5, 'yStep': 0.1},
            {'yMax': 'max', 'yUnitSystem': 'binary'},
            {'areaMode': 'stacked', '_expr': 'stacked({0})'},
            {'lineMode': 'staircase', '_expr': 'stacked({0})'},
            {'areaMode': 'first', '_expr': 'stacked({0})'},
            {'areaMode': 'all', '_expr': 'stacked({0})'},
            {'areaMode': 'stacked', 'areaAlpha': 0.5, '_expr': 'stacked({0})'},
            {'areaMode': 'stacked', 'areaAlpha': 'a', '_expr': 'stacked({0})'},
            {'_expr': 'dashed(lineWidth({0}, 5))'},
            {'target': 'areaBetween(*)'},
            {'drawNullAsZero': 'true'},
            {'_expr': 'drawAsInfinite({0})'},
            {'graphType': 'pie', 'pieMode': 'average', 'title': 'Pie'},
            {'graphType': 'pie', 'pieMode': 'average', 'hideLegend': 'true'},
            {'graphType': 'pie', 'pieMode': 'average', 'valueLabels': 'none'},
            {'graphType': 'pie', 'pieMode': 'average',
             'valueLabels': 'number'},
            {'graphType': 'pie', 'pieMode': 'average', 'pieLabels': 'rotated'},
            {'noCache': 'true'},
            {'cacheTimeout': 5},
            {'cacheTimeout': 5},  # cache hit
        ]:
            if qs.setdefault('target', ['foo', 'test']) == ['foo', 'test']:
                if '_expr' in qs:
                    expr = qs.pop('_expr')
                    qs['target'] = [expr.format(t) for t in qs['target']]
            response = self.app.get(self.url, query_string=qs)
            self.assertEqual(response.status_code, 200)
            self.assertEqual(response.headers['Content-Type'], 'image/png')
            if Cache is None or qs.get('noCache'):
                self.assertEqual(response.headers['Pragma'], 'no-cache')
                self.assertEqual(response.headers['Cache-Control'], 'no-cache')
                self.assertFalse('Expires' in response.headers)
            else:
                self.assertEqual(response.headers['Cache-Control'],
                                 'max-age={0}'.format(
                                     qs.get('cacheTimeout', 60)))
                self.assertNotEqual(response.headers['Cache-Control'],
                                    'no-cache')
                self.assertFalse('Pragma' in response.headers)

        for qs in [
            {'bgcolor': 'foo'},
        ]:
            qs['target'] = 'test'
            with self.assertRaises(ValueError):
                response = self.app.get(self.url, query_string=qs)

        for qs in [
            {'lineMode': 'stacked'},
        ]:
            qs['target'] = 'test'
            with self.assertRaises(AssertionError):
                response = self.app.get(self.url, query_string=qs)
コード例 #7
0
    def test_render_options(self):
        self.create_db()
        db2 = os.path.join(WHISPER_DIR, 'foo.wsp')
        whisper.create(db2, [(1, 60)])
        ts = int(time.time())
        whisper.update(db2, 0.5, ts - 2)

        for qs in [
            {'logBase': 'e'},
            {'logBase': 1},
            {'logBase': 0.5},
            {'margin': -1},
            {'colorList': 'orange,green,blue,#0f0'},
            {'bgcolor': 'orange'},
            {'bgcolor': 'aaabbb'},
            {'bgcolor': '#aaabbb'},
            {'bgcolor': '#aaabbbff'},
            {'fontBold': 'true'},
            {'title': 'Hellò'},
            {'title': 'true'},
            {'vtitle': 'Hellò'},
            {'title': 'Hellò', 'yAxisSide': 'right'},
            {'uniqueLegend': 'true', '_expr': 'secondYAxis({0})'},
            {'uniqueLegend': 'true', 'vtitleRight': 'foo',
             '_expr': 'secondYAxis({0})'},
            {'graphOnly': 'true', 'yUnitSystem': 'si'},
            {'lineMode': 'staircase'},
            {'lineMode': 'slope'},
            {'lineMode': 'connected'},
            {'min': 1, 'max': 1, 'thickness': 2, 'yUnitSystem': 'welp'},
            {'yMax': 5, 'yLimit': 0.5, 'yStep': 0.1},
            {'yMax': 'max', 'yUnitSystem': 'binary'},
            {'areaMode': 'stacked', '_expr': 'stacked({0})'},
            {'lineMode': 'staircase', '_expr': 'stacked({0})'},
            {'areaMode': 'first', '_expr': 'stacked({0})'},
            {'areaMode': 'all', '_expr': 'stacked({0})'},
            {'areaMode': 'stacked', 'areaAlpha': 0.5, '_expr': 'stacked({0})'},
            {'areaMode': 'stacked', 'areaAlpha': 'a', '_expr': 'stacked({0})'},
            {'_expr': 'dashed(lineWidth({0}, 5))'},
            {'target': 'areaBetween(*)'},
            {'drawNullAsZero': 'true'},
            {'_expr': 'drawAsInfinite({0})'},
            {'graphType': 'pie', 'pieMode': 'average', 'title': 'Pie'},
            {'graphType': 'pie', 'pieMode': 'average', 'hideLegend': 'true'},
            {'graphType': 'pie', 'pieMode': 'average', 'valueLabels': 'none'},
            {'graphType': 'pie', 'pieMode': 'average',
             'valueLabels': 'number'},
            {'graphType': 'pie', 'pieMode': 'average', 'pieLabels': 'rotated'},
            {'noCache': 'true'},
            {'cacheTimeout': 5},
            {'cacheTimeout': 5},  # cache hit
        ]:
            if qs.setdefault('target', ['foo', 'test']) == ['foo', 'test']:
                if '_expr' in qs:
                    expr = qs.pop('_expr')
                    qs['target'] = [expr.format(t) for t in qs['target']]
            response = self.app.get(self.url, query_string=qs)
            self.assertEqual(response.status_code, 200)
            self.assertEqual(response.headers['Content-Type'], 'image/png')

        for qs in [
            {'bgcolor': 'foo'},
        ]:
            qs['target'] = 'test'
            with self.assertRaises(ValueError):
                response = self.app.get(self.url, query_string=qs)

        for qs in [
            {'lineMode': 'stacked'},
        ]:
            qs['target'] = 'test'
            with self.assertRaises(AssertionError):
                response = self.app.get(self.url, query_string=qs)
コード例 #8
0
ファイル: test_render.py プロジェクト: michi42/graphite-api
    def test_render_options(self):
        self.create_db()
        db2 = os.path.join(WHISPER_DIR, 'foo.wsp')
        whisper.create(db2, [(1, 60)])
        ts = int(time.time())
        whisper.update(db2, 0.5, ts - 2)

        for qs in [
            {
                'logBase': 'e'
            },
            {
                'logBase': 1
            },
            {
                'logBase': 0.5
            },
            {
                'logBase': 10
            },
            {
                'margin': -1
            },
            {
                'colorList': 'orange,green,blue,#0f00f0'
            },
            {
                'bgcolor': 'orange'
            },
            {
                'bgcolor': '000000'
            },
            {
                'bgcolor': '#000000'
            },
            {
                'bgcolor': '123456'
            },
            {
                'bgcolor': '#123456'
            },
            {
                'bgcolor': '#12345678'
            },
            {
                'bgcolor': 'aaabbb'
            },
            {
                'bgcolor': '#aaabbb'
            },
            {
                'bgcolor': '#aaabbbff'
            },
            {
                'fontBold': 'true'
            },
            {
                'title': 'Hellò'
            },
            {
                'title': 'true'
            },
            {
                'vtitle': 'Hellò'
            },
            {
                'title': 'Hellò',
                'yAxisSide': 'right'
            },
            {
                'uniqueLegend': 'true',
                '_expr': 'secondYAxis({0})'
            },
            {
                'uniqueLegend': 'true',
                'vtitleRight': 'foo',
                '_expr': 'secondYAxis({0})'
            },
            {
                'rightWidth': '1',
                '_expr': 'secondYAxis({0})'
            },
            {
                'rightDashed': '1',
                '_expr': 'secondYAxis({0})'
            },
            {
                'rightColor': 'black',
                '_expr': 'secondYAxis({0})'
            },
            {
                'leftWidth': '1',
                'target': ['secondYAxis(foo)', 'test']
            },
            {
                'leftDashed': '1',
                'target': ['secondYAxis(foo)', 'test']
            },
            {
                'leftColor': 'black',
                'target': ['secondYAxis(foo)', 'test']
            },
            {
                'width': '10',
                '_expr': 'secondYAxis({0})'
            },
            {
                'logBase': 'e',
                'target': ['secondYAxis(foo)', 'test']
            },
            {
                'graphOnly': 'true',
                'yUnitSystem': 'si'
            },
            {
                'graphOnly': 'true',
                'yUnitSystem': 'wat'
            },
            {
                'lineMode': 'staircase'
            },
            {
                'lineMode': 'slope'
            },
            {
                'lineMode': 'slope',
                'from': '-1s'
            },
            {
                'lineMode': 'connected'
            },
            {
                'min': 1,
                'max': 2,
                'thickness': 2,
                'yUnitSystem': 'none'
            },
            {
                'yMax': 5,
                'yLimit': 0.5,
                'yStep': 0.1
            },
            {
                'yMax': 'max',
                'yUnitSystem': 'binary'
            },
            {
                'yMaxLeft': 5,
                'yLimitLeft': 0.5,
                'yStepLeft': 0.1,
                '_expr': 'secondYAxis({0})'
            },
            {
                'yMaxRight': 5,
                'yLimitRight': 0.5,
                'yStepRight': 0.1,
                '_expr': 'secondYAxis({0})'
            },
            {
                'yMin': 0,
                'yLimit': 0.5,
                'yStep': 0.1
            },
            {
                'yMinLeft': 0,
                'yLimitLeft': 0.5,
                'yStepLeft': 0.1,
                '_expr': 'secondYAxis({0})'
            },
            {
                'yMinRight': 0,
                'yLimitRight': 0.5,
                'yStepRight': 0.1,
                '_expr': 'secondYAxis({0})'
            },
            {
                'areaMode': 'stacked',
                '_expr': 'stacked({0})'
            },
            {
                'lineMode': 'staircase',
                '_expr': 'stacked({0})'
            },
            {
                'areaMode': 'first',
                '_expr': 'stacked({0})'
            },
            {
                'areaMode': 'all',
                '_expr': 'stacked({0})'
            },
            {
                'areaMode': 'all',
                'areaAlpha': 0.5,
                '_expr': 'secondYAxis({0})'
            },
            {
                'areaMode': 'all',
                'areaAlpha': 0.5,
                'target': ['secondYAxis(foo)', 'test']
            },
            {
                'areaMode': 'stacked',
                'areaAlpha': 0.5,
                '_expr': 'stacked({0})'
            },
            {
                'areaMode': 'stacked',
                'areaAlpha': 'a',
                '_expr': 'stacked({0})'
            },
            {
                'areaMode': 'stacked',
                '_expr': 'drawAsInfinite({0})'
            },
            {
                '_expr': 'dashed(lineWidth({0}, 5))'
            },
            {
                'target': 'areaBetween(*)'
            },
            {
                'drawNullAsZero': 'true'
            },
            {
                '_expr': 'drawAsInfinite({0})'
            },
            {
                'graphType': 'pie',
                'pieMode': 'average',
                'title': 'Pie'
            },
            {
                'graphType': 'pie',
                'pieMode': 'maximum',
                'title': 'Pie'
            },
            {
                'graphType': 'pie',
                'pieMode': 'minimum',
                'title': 'Pie'
            },
            {
                'graphType': 'pie',
                'pieMode': 'average',
                'hideLegend': 'true'
            },
            {
                'graphType': 'pie',
                'pieMode': 'average',
                'valueLabels': 'none'
            },
            {
                'graphType': 'pie',
                'pieMode': 'average',
                'valueLabels': 'number'
            },
            {
                'graphType': 'pie',
                'pieMode': 'average',
                'pieLabels': 'rotated'
            },
            {
                'graphType': 'pie',
                'pieMode': 'average',
                'areaAlpha': '0.1'
            },
            {
                'graphType': 'pie',
                'pieMode': 'average',
                'areaAlpha': 'none'
            },
            {
                'graphType': 'pie',
                'pieMode': 'average',
                'valueLabelsColor': 'white'
            },
            {
                'noCache': 'true'
            },
            {
                'cacheTimeout': 5
            },
            {
                'cacheTimeout': 5
            },  # cache hit
            {
                'tz': 'Europe/Berlin'
            },
        ]:
            if qs.setdefault('target', ['foo', 'test']) == ['foo', 'test']:
                if '_expr' in qs:
                    expr = qs.pop('_expr')
                    qs['target'] = [expr.format(t) for t in qs['target']]
            response = self.app.get(self.url, query_string=qs)
            self.assertEqual(response.status_code, 200)
            self.assertEqual(response.headers['Content-Type'], 'image/png')
            if Cache is None or qs.get('noCache'):
                self.assertEqual(response.headers['Pragma'], 'no-cache')
                self.assertEqual(response.headers['Cache-Control'], 'no-cache')
                self.assertFalse('Expires' in response.headers)
            else:
                self.assertEqual(
                    response.headers['Cache-Control'],
                    'max-age={0}'.format(qs.get('cacheTimeout', 60)))
                self.assertNotEqual(response.headers['Cache-Control'],
                                    'no-cache')
                self.assertFalse('Pragma' in response.headers)

        for qs in [
            {
                'bgcolor': 'foo'
            },
        ]:
            qs['target'] = 'test'
            with self.assertRaises(ValueError):
                response = self.app.get(self.url, query_string=qs)

        for qs in [
            {
                'lineMode': 'stacked'
            },
        ]:
            qs['target'] = 'test'
            with self.assertRaises(AssertionError):
                response = self.app.get(self.url, query_string=qs)
コード例 #9
0
    def test_render_options(self):
        self.create_db()
        db2 = os.path.join(WHISPER_DIR, "foo.wsp")
        whisper.create(db2, [(1, 60)])
        ts = int(time.time())
        whisper.update(db2, 0.5, ts - 2)

        for qs in [
            {"logBase": "e"},
            {"logBase": 1},
            {"logBase": 0.5},
            {"margin": -1},
            {"colorList": "orange,green,blue,#0f0"},
            {"bgcolor": "orange"},
            {"bgcolor": "aaabbb"},
            {"bgcolor": "#aaabbb"},
            {"bgcolor": "#aaabbbff"},
            {"fontBold": "true"},
            {"title": "Hellò"},
            {"title": "true"},
            {"vtitle": "Hellò"},
            {"title": "Hellò", "yAxisSide": "right"},
            {"uniqueLegend": "true", "_expr": "secondYAxis({0})"},
            {"uniqueLegend": "true", "vtitleRight": "foo", "_expr": "secondYAxis({0})"},
            {"graphOnly": "true", "yUnitSystem": "si"},
            {"lineMode": "staircase"},
            {"lineMode": "slope"},
            {"lineMode": "connected"},
            {"min": 1, "max": 1, "thickness": 2, "yUnitSystem": "welp"},
            {"yMax": 5, "yLimit": 0.5, "yStep": 0.1},
            {"yMax": "max", "yUnitSystem": "binary"},
            {"areaMode": "stacked", "_expr": "stacked({0})"},
            {"lineMode": "staircase", "_expr": "stacked({0})"},
            {"areaMode": "first", "_expr": "stacked({0})"},
            {"areaMode": "all", "_expr": "stacked({0})"},
            {"areaMode": "stacked", "areaAlpha": 0.5, "_expr": "stacked({0})"},
            {"areaMode": "stacked", "areaAlpha": "a", "_expr": "stacked({0})"},
            {"_expr": "dashed(lineWidth({0}, 5))"},
            {"target": "areaBetween(*)"},
            {"drawNullAsZero": "true"},
            {"_expr": "drawAsInfinite({0})"},
            {"graphType": "pie", "pieMode": "average", "title": "Pie"},
            {"graphType": "pie", "pieMode": "average", "hideLegend": "true"},
            {"graphType": "pie", "pieMode": "average", "valueLabels": "none"},
            {"graphType": "pie", "pieMode": "average", "valueLabels": "number"},
            {"graphType": "pie", "pieMode": "average", "pieLabels": "rotated"},
            {"noCache": "true"},
            {"cacheTimeout": 5},
            {"cacheTimeout": 5},  # cache hit
        ]:
            if qs.setdefault("target", ["foo", "test"]) == ["foo", "test"]:
                if "_expr" in qs:
                    expr = qs.pop("_expr")
                    qs["target"] = [expr.format(t) for t in qs["target"]]
            response = self.app.get(self.url, query_string=qs)
            self.assertEqual(response.status_code, 200)
            self.assertEqual(response.headers["Content-Type"], "image/png")

        for qs in [{"bgcolor": "foo"}]:
            qs["target"] = "test"
            with self.assertRaises(ValueError):
                response = self.app.get(self.url, query_string=qs)

        for qs in [{"lineMode": "stacked"}]:
            qs["target"] = "test"
            with self.assertRaises(AssertionError):
                response = self.app.get(self.url, query_string=qs)