Skip to content

Instantly share code, notes, and snippets.

@justinvdm
Last active December 10, 2015 18:19
Show Gist options
  • Save justinvdm/4474158 to your computer and use it in GitHub Desktop.
Save justinvdm/4474158 to your computer and use it in GitHub Desktop.
diff --git a/diamondash/dashboard.py b/diamondash/dashboard.py
index 13d7283..5337a63 100644
--- a/diamondash/dashboard.py
+++ b/diamondash/dashboard.py
@@ -83,7 +83,10 @@ def format_metric_target(target, bucket_size):
agg_method = 'max'
elif metric_fn in ('max', 'min', 'sum'):
agg_method = metric_fn
- return 'summarize(%s, "%s", "%s")' % (target, bucket_size, agg_method)
+
+ key = 'summarize(%s, "%s")' % (target, bucket_size)
+ target = 'summarize(%s, "%s", "%s")' % (target, bucket_size, agg_method)
+ return key, target
def build_request_url(targets, from_param):
@@ -111,6 +114,7 @@ def parse_graph_config(config, defaults):
config['width'] = parse_graph_width(config['width'])
+ target_keys = []
metric_dict = {}
bucket_size = config['bucket_size']
for m_name, m_config in config['metrics'].items():
@@ -119,9 +123,12 @@ def parse_graph_config(config, defaults):
'Widget "%s" needs a target for metric "%s".'
% (config['name'], m_name))
- m_config['original_target'] = m_config['target']
- m_config['target'] = format_metric_target(
- m_config['target'], bucket_size)
+ original_target = m_config['target']
+ m_config['original_target'] = original_target
+ target_key, target = format_metric_target(original_target, bucket_size)
+ target_keys.append(target_key)
+ m_config['target'] = target
+
m_config.setdefault('null_filter', config['null_filter'])
for threshold in ['warning_min_threshold', 'warning_max_threshold']:
@@ -133,9 +140,8 @@ def parse_graph_config(config, defaults):
metric_dict[m_name] = m_config
config['metrics'] = metric_dict
-
+ config['target_keys'] = target_keys
targets = [metric['target'] for metric in metric_dict.values()]
- config['targets'] = targets
config['request_url'] = build_request_url(targets, config['time_range'])
return config
@@ -151,6 +157,7 @@ def parse_lvalue_config(config, defaults):
config['time_range'] = parse_interval(config['time_range'])
+ target_keys = []
metric_list = []
for target in config['metrics']:
m_config = {}
@@ -159,14 +166,16 @@ def parse_lvalue_config(config, defaults):
# Set the bucket size to the passed in time range
# (for eg, if 1d was the time range, the data for the
# entire day will be aggregated).
- m_config['target'] = format_metric_target(
- target, config['time_range'])
+ bucket_size = config['time_range']
+
+ target_key, target = format_metric_target(target, bucket_size)
+ m_config['target'] = target
+ target_keys.append(target_key)
metric_list.append(m_config)
config['metrics'] = metric_list
-
targets = [metric['target'] for metric in metric_list]
- config['targets'] = targets
+ config['target_keys'] = target_keys
# Set the from param to double the bucket size. As a result, graphite will
# return two datapoints for each metric: the previous value and the last
diff --git a/diamondash/server.py b/diamondash/server.py
index 0318eac..ef99019 100644
--- a/diamondash/server.py
+++ b/diamondash/server.py
@@ -233,7 +233,8 @@ def get_result_datapoints(data, widget_config):
"""
data = json.loads(data)
datapoints_by_target = dict((m['target'], m['datapoints']) for m in data)
- return [datapoints_by_target.get(t, []) for t in widget_config['targets']]
+ return [datapoints_by_target.get(t, [])
+ for t in widget_config['target_keys']]
def render_graph(data, widget_config):
diff --git a/diamondash/tests/test_dashboard.py b/diamondash/tests/test_dashboard.py
index 6564ca2..e088240 100644
--- a/diamondash/tests/test_dashboard.py
+++ b/diamondash/tests/test_dashboard.py
@@ -131,9 +131,9 @@ class DashboardConfigTestCase(unittest.TestCase):
'target': 'summarize(foo.avg, "3600s", "avg")',
},
},
- 'targets': [
- 'summarize(foo.sum, "3600s", "sum")',
- 'summarize(foo.avg, "3600s", "avg")',
+ 'target_keys': [
+ 'summarize(foo.sum, "3600s")',
+ 'summarize(foo.avg, "3600s")',
],
'request_url': (
'render/?from=-172800s&target=summarize%28foo.sum%2C'
@@ -168,9 +168,9 @@ class DashboardConfigTestCase(unittest.TestCase):
'target': 'summarize(bar.sum, "1800s", "sum")',
},
],
- 'targets': [
- 'summarize(foo.sum, "1800s", "sum")',
- 'summarize(bar.sum, "1800s", "sum")',
+ 'target_keys': [
+ 'summarize(foo.sum, "1800s")',
+ 'summarize(bar.sum, "1800s")',
],
'request_url': (
'render/?from=-3600s&target=summarize%28foo.sum%2C'
@@ -271,22 +271,30 @@ class DashboardConfigTestCase(unittest.TestCase):
target = 'vumi.random.count.sum'
bucket_size = 120
- expected = 'summarize(vumi.random.count.sum, "120s", "sum")'
+ expected = (
+ 'summarize(vumi.random.count.sum, "120s")',
+ 'summarize(vumi.random.count.sum, "120s", "sum")')
assert_metric_target(target, bucket_size, expected)
target = 'vumi.random.count.avg'
bucket_size = 620
- expected = 'summarize(vumi.random.count.avg, "620s", "avg")'
+ expected = (
+ 'summarize(vumi.random.count.avg, "620s")',
+ 'summarize(vumi.random.count.avg, "620s", "avg")')
assert_metric_target(target, bucket_size, expected)
target = 'vumi.random.count.max'
bucket_size = 120
- expected = 'summarize(vumi.random.count.max, "120s", "max")'
+ expected = (
+ 'summarize(vumi.random.count.max, "120s")',
+ 'summarize(vumi.random.count.max, "120s", "max")')
assert_metric_target(target, bucket_size, expected)
target = 'integral(vumi.random.count.sum)'
bucket_size = 120
- expected = 'summarize(integral(vumi.random.count.sum), "120s", "max")'
+ expected = (
+ 'summarize(integral(vumi.random.count.sum), "120s")',
+ 'summarize(integral(vumi.random.count.sum), "120s", "max")')
assert_metric_target(target, bucket_size, expected)
def test_slugify(self):
diff --git a/diamondash/tests/test_server.py b/diamondash/tests/test_server.py
index 09d9519..1766e9a 100644
--- a/diamondash/tests/test_server.py
+++ b/diamondash/tests/test_server.py
@@ -471,7 +471,7 @@ class WebServerTestCase(unittest.TestCase, MockGraphiteServerMixin):
corresponding to a metric
"""
widget_config = {
- 'targets': [
+ 'target_keys': [
'vumi.random.count.sum',
'vumi.random.timer.avg',
]
@@ -480,7 +480,7 @@ class WebServerTestCase(unittest.TestCase, MockGraphiteServerMixin):
def test_get_result_datapoints_for_partial_results(self):
widget_config = {
- 'targets': [
+ 'target_keys': [
'some-metric-target',
'vumi.random.count.sum',
'vumi.random.timer.avg',
diff --git a/diamondash/tests/test_server_data/response_data.json b/diamondash/tests/test_server_data/response_data.json
index ebb42f6..a5c8483 100644
--- a/diamondash/tests/test_server_data/response_data.json
+++ b/diamondash/tests/test_server_data/response_data.json
@@ -1,30 +1,30 @@
{
"/render/?from=-3600s&target=summarize%28vumi.random.count.sum%2C+%22300s%22%2C+%22sum%22%29&format=json" : {
"code": "200 OK",
- "body" : [{"target": "summarize(vumi.random.count.sum, \"300s\", \"sum\")", "datapoints": [[2.0, 1340875945], [3.0, 1340875950], [2.0, 1340875955], [2.0, 1340875960], [4.0, 1340875965], [3.0, 1340875970], [3.0, 1340875975], [1.0, 1340875980], [3.0, 1340875985], [2.0, 1340875990], [3.0, 1340875995], [2.0, 1340876000], [null, 1340876005], [2.0, 1340876010], [1.0, 1340876015], [2.0, 1340876020], [4.0, 1340876025], [2.0, 1340876030], [2.0, 1340876035], [2.0, 1340876040], [3.0, 1340876045], [5.0, 1340876050], [1.0, 1340876055], [2.0, 1340876060], [3.0, 1340876065], [3.0, 1340876070], [2.0, 1340876075], [4.0, 1340876080], [2.0, 1340876085], [4.0, 1340876090], [3.0, 1340876095], [2.0, 1340876100], [3.0, 1340876105], [3.0, 1340876110], [2.0, 1340876115], [2.0, 1340876120], [1.0, 1340876125], [2.0, 1340876130], [2.0, 1340876135], [2.0, 1340876140], [4.0, 1340876145], [3.0, 1340876150], [2.0, 1340876155], [3.0, 1340876160], [2.0, 1340876165], [3.0, 1340876170], [2.0, 1340876175], [2.0, 1340876180], [2.0, 1340876185], [3.0, 1340876190], [1.0, 1340876195], [2.0, 1340876200], [3.0, 1340876205], [null, 1340876210], [4.0, 1340876215], [2.0, 1340876220], [2.0, 1340876225], [null, 1340876230], [null, 1340876235], [null, 1340876240]]}]
+ "body" : [{"target": "summarize(vumi.random.count.sum, \"300s\")", "datapoints": [[2.0, 1340875945], [3.0, 1340875950], [2.0, 1340875955], [2.0, 1340875960], [4.0, 1340875965], [3.0, 1340875970], [3.0, 1340875975], [1.0, 1340875980], [3.0, 1340875985], [2.0, 1340875990], [3.0, 1340875995], [2.0, 1340876000], [null, 1340876005], [2.0, 1340876010], [1.0, 1340876015], [2.0, 1340876020], [4.0, 1340876025], [2.0, 1340876030], [2.0, 1340876035], [2.0, 1340876040], [3.0, 1340876045], [5.0, 1340876050], [1.0, 1340876055], [2.0, 1340876060], [3.0, 1340876065], [3.0, 1340876070], [2.0, 1340876075], [4.0, 1340876080], [2.0, 1340876085], [4.0, 1340876090], [3.0, 1340876095], [2.0, 1340876100], [3.0, 1340876105], [3.0, 1340876110], [2.0, 1340876115], [2.0, 1340876120], [1.0, 1340876125], [2.0, 1340876130], [2.0, 1340876135], [2.0, 1340876140], [4.0, 1340876145], [3.0, 1340876150], [2.0, 1340876155], [3.0, 1340876160], [2.0, 1340876165], [3.0, 1340876170], [2.0, 1340876175], [2.0, 1340876180], [2.0, 1340876185], [3.0, 1340876190], [1.0, 1340876195], [2.0, 1340876200], [3.0, 1340876205], [null, 1340876210], [4.0, 1340876215], [2.0, 1340876220], [2.0, 1340876225], [null, 1340876230], [null, 1340876235], [null, 1340876240]]}]
},
"/render/?from=-3600s&target=summarize%28non.existent%2C+%22300s%22%2C+%22avg%22%29&target=summarize%28vumi.random.count.sum%2C+%22300s%22%2C+%22sum%22%29&format=json" : {
"code": "200 OK",
- "body" : [{"target": "summarize(vumi.random.count.sum, \"300s\", \"sum\")", "datapoints": [[2.0, 1340875945], [3.0, 1340875950], [2.0, 1340875955], [2.0, 1340875960], [4.0, 1340875965], [3.0, 1340875970], [3.0, 1340875975], [1.0, 1340875980], [3.0, 1340875985], [2.0, 1340875990], [3.0, 1340875995], [2.0, 1340876000], [null, 1340876005], [2.0, 1340876010], [1.0, 1340876015], [2.0, 1340876020], [4.0, 1340876025], [2.0, 1340876030], [2.0, 1340876035], [2.0, 1340876040], [3.0, 1340876045], [5.0, 1340876050], [1.0, 1340876055], [2.0, 1340876060], [3.0, 1340876065], [3.0, 1340876070], [2.0, 1340876075], [4.0, 1340876080], [2.0, 1340876085], [4.0, 1340876090], [3.0, 1340876095], [2.0, 1340876100], [3.0, 1340876105], [3.0, 1340876110], [2.0, 1340876115], [2.0, 1340876120], [1.0, 1340876125], [2.0, 1340876130], [2.0, 1340876135], [2.0, 1340876140], [4.0, 1340876145], [3.0, 1340876150], [2.0, 1340876155], [3.0, 1340876160], [2.0, 1340876165], [3.0, 1340876170], [2.0, 1340876175], [2.0, 1340876180], [2.0, 1340876185], [3.0, 1340876190], [1.0, 1340876195], [2.0, 1340876200], [3.0, 1340876205], [null, 1340876210], [4.0, 1340876215], [2.0, 1340876220], [2.0, 1340876225], [null, 1340876230], [null, 1340876235], [null, 1340876240]]}]
+ "body" : [{"target": "summarize(vumi.random.count.sum, \"300s\")", "datapoints": [[2.0, 1340875945], [3.0, 1340875950], [2.0, 1340875955], [2.0, 1340875960], [4.0, 1340875965], [3.0, 1340875970], [3.0, 1340875975], [1.0, 1340875980], [3.0, 1340875985], [2.0, 1340875990], [3.0, 1340875995], [2.0, 1340876000], [null, 1340876005], [2.0, 1340876010], [1.0, 1340876015], [2.0, 1340876020], [4.0, 1340876025], [2.0, 1340876030], [2.0, 1340876035], [2.0, 1340876040], [3.0, 1340876045], [5.0, 1340876050], [1.0, 1340876055], [2.0, 1340876060], [3.0, 1340876065], [3.0, 1340876070], [2.0, 1340876075], [4.0, 1340876080], [2.0, 1340876085], [4.0, 1340876090], [3.0, 1340876095], [2.0, 1340876100], [3.0, 1340876105], [3.0, 1340876110], [2.0, 1340876115], [2.0, 1340876120], [1.0, 1340876125], [2.0, 1340876130], [2.0, 1340876135], [2.0, 1340876140], [4.0, 1340876145], [3.0, 1340876150], [2.0, 1340876155], [3.0, 1340876160], [2.0, 1340876165], [3.0, 1340876170], [2.0, 1340876175], [2.0, 1340876180], [2.0, 1340876185], [3.0, 1340876190], [1.0, 1340876195], [2.0, 1340876200], [3.0, 1340876205], [null, 1340876210], [4.0, 1340876215], [2.0, 1340876220], [2.0, 1340876225], [null, 1340876230], [null, 1340876235], [null, 1340876240]]}]
},
"/render/?from=-3600s&target=summarize%28vumi.random.count.sum%2C+%22300s%22%2C+%22sum%22%29&target=summarize%28vumi.random.timer.avg%2C+%22300s%22%2C+%22avg%22%29&format=json" : {
"code": "200 OK",
- "body": [{"target": "summarize(vumi.random.count.sum, \"300s\", \"sum\")", "datapoints": [[4.0, 1341317750], [3.0, 1341317755], [1.0, 1341317760], [5.0, 1341317765], [1.0, 1341317770], [2.0, 1341317775], [2.0, 1341317780], [4.0, 1341317785], [3.0, 1341317790], [3.0, 1341317795], [3.0, 1341317800], [1.0, 1341317805], [3.0, 1341317810], [4.0, 1341317815], [2.0, 1341317820], [2.0, 1341317825], [3.0, 1341317830], [1.0, 1341317835], [2.0, 1341317840], [2.0, 1341317845], [3.0, 1341317850], [3.0, 1341317855], [2.0, 1341317860], [3.0, 1341317865], [3.0, 1341317870], [2.0, 1341317875], [5.0, 1341317880], [2.0, 1341317885], [4.0, 1341317890], [3.0, 1341317895], [3.0, 1341317900], [3.0, 1341317905], [1.0, 1341317910], [null, 1341317915], [3.0, 1341317920], [3.0, 1341317925], [2.0, 1341317930], [2.0, 1341317935], [1.0, 1341317940], [3.0, 1341317945], [3.0, 1341317950], [4.0, 1341317955], [null, 1341317960], [3.0, 1341317965], [3.0, 1341317970], [1.0, 1341317975], [3.0, 1341317980], [1.0, 1341317985], [4.0, 1341317990], [1.0, 1341317995], [1.0, 1341318000], [3.0, 1341318005], [1.0, 1341318010], [1.0, 1341318015], [3.0, 1341318020], [3.0, 1341318025], [2.0, 1341318030], [null, 1341318035], [null, 1341318040], [null, 1341318045]]}, {"target": "summarize(vumi.random.timer.avg, \"300s\", \"avg\")", "datapoints": [[0.043387, 1341317750], [0.062939, 1341317755], [0.061014, 1341317760], [0.054422, 1341317765], [0.051289, 1341317770], [0.025234, 1341317775], [0.050068, 1341317780], [0.058314, 1341317785], [0.050951, 1341317790], [0.038952, 1341317795], [0.036635, 1341317800], [0.044697, 1341317805], [0.045616, 1341317810], [0.025566, 1341317815], [0.0629, 1341317820], [0.032912, 1341317825], [0.04492, 1341317830], [0.075505, 1341317835], [0.054863, 1341317840], [0.046223, 1341317845], [0.045351, 1341317850], [0.05665, 1341317855], [0.032699, 1341317860], [0.047962, 1341317865], [0.07657, 1341317870], [0.030674, 1341317875], [0.025914, 1341317880], [0.046285, 1341317885], [0.031739, 1341317890], [0.049959, 1341317895], [0.06125, 1341317900], [0.052112, 1341317905], [0.064989, 1341317910], [0.069807, 1341317915], [0.037736, 1341317920], [0.058127, 1341317925], [0.058845, 1341317930], [0.061974, 1341317935], [0.052334, 1341317940], [0.05893, 1341317945], [0.049832, 1341317950], [0.040955, 1341317955], [0.062826, 1341317960], [0.057448, 1341317965], [0.05892, 1341317970], [0.0434, 1341317975], [0.042147, 1341317980], [0.061702, 1341317985], [0.068823, 1341317990], [0.055624, 1341317995], [0.065748, 1341318000], [0.080323, 1341318005], [0.063557, 1341318010], [0.08027, 1341318015], [0.063338, 1341318020], [0.060949, 1341318025], [0.045992, 1341318030], [null, 1341318035], [null, 1341318040], [null, 1341318045]]}]
+ "body": [{"target": "summarize(vumi.random.count.sum, \"300s\")", "datapoints": [[4.0, 1341317750], [3.0, 1341317755], [1.0, 1341317760], [5.0, 1341317765], [1.0, 1341317770], [2.0, 1341317775], [2.0, 1341317780], [4.0, 1341317785], [3.0, 1341317790], [3.0, 1341317795], [3.0, 1341317800], [1.0, 1341317805], [3.0, 1341317810], [4.0, 1341317815], [2.0, 1341317820], [2.0, 1341317825], [3.0, 1341317830], [1.0, 1341317835], [2.0, 1341317840], [2.0, 1341317845], [3.0, 1341317850], [3.0, 1341317855], [2.0, 1341317860], [3.0, 1341317865], [3.0, 1341317870], [2.0, 1341317875], [5.0, 1341317880], [2.0, 1341317885], [4.0, 1341317890], [3.0, 1341317895], [3.0, 1341317900], [3.0, 1341317905], [1.0, 1341317910], [null, 1341317915], [3.0, 1341317920], [3.0, 1341317925], [2.0, 1341317930], [2.0, 1341317935], [1.0, 1341317940], [3.0, 1341317945], [3.0, 1341317950], [4.0, 1341317955], [null, 1341317960], [3.0, 1341317965], [3.0, 1341317970], [1.0, 1341317975], [3.0, 1341317980], [1.0, 1341317985], [4.0, 1341317990], [1.0, 1341317995], [1.0, 1341318000], [3.0, 1341318005], [1.0, 1341318010], [1.0, 1341318015], [3.0, 1341318020], [3.0, 1341318025], [2.0, 1341318030], [null, 1341318035], [null, 1341318040], [null, 1341318045]]}, {"target": "summarize(vumi.random.timer.avg, \"300s\")", "datapoints": [[0.043387, 1341317750], [0.062939, 1341317755], [0.061014, 1341317760], [0.054422, 1341317765], [0.051289, 1341317770], [0.025234, 1341317775], [0.050068, 1341317780], [0.058314, 1341317785], [0.050951, 1341317790], [0.038952, 1341317795], [0.036635, 1341317800], [0.044697, 1341317805], [0.045616, 1341317810], [0.025566, 1341317815], [0.0629, 1341317820], [0.032912, 1341317825], [0.04492, 1341317830], [0.075505, 1341317835], [0.054863, 1341317840], [0.046223, 1341317845], [0.045351, 1341317850], [0.05665, 1341317855], [0.032699, 1341317860], [0.047962, 1341317865], [0.07657, 1341317870], [0.030674, 1341317875], [0.025914, 1341317880], [0.046285, 1341317885], [0.031739, 1341317890], [0.049959, 1341317895], [0.06125, 1341317900], [0.052112, 1341317905], [0.064989, 1341317910], [0.069807, 1341317915], [0.037736, 1341317920], [0.058127, 1341317925], [0.058845, 1341317930], [0.061974, 1341317935], [0.052334, 1341317940], [0.05893, 1341317945], [0.049832, 1341317950], [0.040955, 1341317955], [0.062826, 1341317960], [0.057448, 1341317965], [0.05892, 1341317970], [0.0434, 1341317975], [0.042147, 1341317980], [0.061702, 1341317985], [0.068823, 1341317990], [0.055624, 1341317995], [0.065748, 1341318000], [0.080323, 1341318005], [0.063557, 1341318010], [0.08027, 1341318015], [0.063338, 1341318020], [0.060949, 1341318025], [0.045992, 1341318030], [null, 1341318035], [null, 1341318040], [null, 1341318045]]}]
},
"/render/?from=-172800s&target=summarize%28vumi.random.count.sum%2C+%2286400s%22%2C+%22sum%22%29&format=json" : {
"code": "200 OK",
- "body": [{"target": "summarize(vumi.random.count.sum, \"86400s\", \"sum\")", "datapoints": [[3303.0, 1342224000], [5052.0, 1342310400]]}]
+ "body": [{"target": "summarize(vumi.random.count.sum, \"86400s\")", "datapoints": [[3303.0, 1342224000], [5052.0, 1342310400]]}]
},
"/render/?from=-7200s&target=summarize%28vumi.random.count.sum%2C+%223600s%22%2C+%22sum%22%29&target=summarize%28vumi.random.timer.sum%2C+%223600s%22%2C+%22sum%22%29&format=json" : {
"code": "200 OK",
- "body": [{"target": "summarize(vumi.random.timer.sum, \"3600s\", \"sum\")", "datapoints": [[null, 1342382400], [0.04924959844054583, 1342386000], [0.05052084873949578, 1342389600]]}, {"target": "summarize(vumi.random.count.sum, \"3600s\", \"sum\")", "datapoints": [[null, 1342382400], [1281.0, 1342386000], [285.0, 1342389600]]}]
+ "body": [{"target": "summarize(vumi.random.timer.sum, \"3600s\")", "datapoints": [[null, 1342382400], [0.04924959844054583, 1342386000], [0.05052084873949578, 1342389600]]}, {"target": "summarize(vumi.random.count.sum, \"3600s\")", "datapoints": [[null, 1342382400], [1281.0, 1342386000], [285.0, 1342389600]]}]
},
"/render/?from=-172800s&target=summarize%28vumi.random.count.sum%2C+%2286400s%22%2C+%22sum%22%29&target=summarize%28non.existent%2C+%2286400s%22%2C+%22avg%22%29&format=json" : {
"code": "200 OK",
- "body": [{"target": "summarize(vumi.random.count.sum, \"86400s\", \"sum\")", "datapoints": [[3303.0, 1342224000], [5052.0, 1342310400]]}]
+ "body": [{"target": "summarize(vumi.random.count.sum, \"86400s\")", "datapoints": [[3303.0, 1342224000], [5052.0, 1342310400]]}]
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment