本文整理汇总了Python中target.Target.get_graph_info方法的典型用法代码示例。如果您正苦于以下问题:Python Target.get_graph_info方法的具体用法?Python Target.get_graph_info怎么用?Python Target.get_graph_info使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类target.Target
的用法示例。
在下文中一共展示了Target.get_graph_info方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_aggregation
# 需要导入模块: from target import Target [as 别名]
# 或者: from target.Target import get_graph_info [as 别名]
def test_aggregation():
# note: uneven aggregation: we only want 1 resulting metric,
query = Query("")
query["avg_by"] = {"server": [""]}
query["sum_by"] = {"type": [""]}
targets = {
"web1.db": {"id": "web1.db", "tags": {"server": "web1", "type": "db", "n3": "foo"}},
"web1.php": {"id": "web1.php", "tags": {"server": "web1", "type": "php", "n3": "foo"}},
"web2.db": {"id": "web2.db", "tags": {"server": "web2", "type": "db", "n3": "foo"}},
"web2.php": {"id": "web2.php", "tags": {"server": "web2", "type": "php", "n3": "foo"}},
"web2.memcache": {"id": "web2.memcache", "tags": {"server": "web2", "type": "memcache", "n3": "foo"}},
}
from pprint import pprint
for (k, v) in targets.items():
v = Target(v)
v.get_graph_info(group_by={})
targets[k] = v
graphs, _query = build_graphs_from_targets(targets, query)
# TODO: there should be only 1 graph, containing all 5 items
print "Graphs:"
for (k, v) in graphs.items():
print "graph key"
pprint(k)
print "val:"
pprint(v)
assert {} == graphs
示例2: build_graphs_from_targets
# 需要导入模块: from target import Target [as 别名]
# 或者: from target.Target import get_graph_info [as 别名]
def build_graphs_from_targets(targets, query):
graphs = {}
if not targets:
return (graphs, query)
group_by = query['group_by']
sum_by = query['sum_by']
avg_by = query['avg_by']
avg_over = query['avg_over']
# i'm gonna assume you never use second and your datapoints are stored with
# minutely resolution. later on we can use config options for this (or
# better: somehow query graphite about it)
# note, the day/week/month numbers are not technically accurate, but
# since we're doing movingAvg that's ok
averaging = {
'M': 1,
'h': 60,
'd': 60 * 24,
'w': 60 * 24 * 7,
'mo': 60 * 24 * 30
}
if avg_over is not None:
avg_over_amount = avg_over[0]
avg_over_unit = avg_over[1]
if avg_over_unit in averaging.keys():
multiplier = averaging[avg_over_unit]
query['target_modifiers'].append(
Query.graphite_function_applier('movingAverage', avg_over_amount * multiplier))
# for each group_by bucket, make 1 graph.
# so for each graph, we have:
# the "constants": tags in the group_by
# the "variables": tags not in the group_by, which can have arbitrary
# values, or different values from a group_by tag that match the same
# bucket pattern
# go through all targets and group them into graphs:
for _target_id, target_data in sorted(targets.items()):
# FWIW. has an 'id' which timeserieswidget doesn't care about
target = Target(target_data)
target['target'] = target['id']
(graph_key, constants) = target.get_graph_info(group_by)
if graph_key not in graphs:
graph = {'from': query['from'], 'until': query['to']}
graph.update({'constants': constants, 'targets': []})
graphs[graph_key] = graph
graphs[graph_key]['targets'].append(target)
# ok so now we have a graphs dictionary with a graph for every appropriate
# combination of group_by tags, and each graph contains all targets that
# should be shown on it. but the user may have asked to aggregate certain
# targets together, by summing and/or averaging across different values of
# (a) certain tag(s). let's process the aggregations now.
if (sum_by or avg_by):
for (graph_key, graph_config) in graphs.items():
graph_config['targets_sum_candidates'] = {}
graph_config['targets_avg_candidates'] = {}
graph_config['normal_targets'] = []
for target in graph_config['targets']:
sum_id = target.get_agg_key(sum_by)
if sum_id:
if sum_id not in graph_config['targets_sum_candidates']:
graphs[graph_key]['targets_sum_candidates'][sum_id] = []
graph_config['targets_sum_candidates'][sum_id].append(target)
for (sum_id, targets) in graph_config['targets_sum_candidates'].items():
if len(targets) > 1:
for t in targets:
graph_config['targets'].remove(t)
graph_config['targets'].append(
graphite_func_aggregate(targets, sum_by, "sumSeries"))
for target in graph_config['targets']:
# Now that any summing is done, we look at aggregating by
# averaging because avg(foo+bar+baz) is more efficient
# than avg(foo)+avg(bar)+avg(baz)
# aggregate targets (whether those are sums or regular ones)
avg_id = target.get_agg_key(avg_by)
if avg_id:
if avg_id not in graph_config['targets_avg_candidates']:
graph_config['targets_avg_candidates'][avg_id] = []
graph_config['targets_avg_candidates'][avg_id].append(target)
for (avg_id, targets) in graph_config['targets_avg_candidates'].items():
if len(targets) > 1:
for t in targets:
graph_config['targets'].remove(t)
graph_config['targets'].append(
graphite_func_aggregate(targets, avg_by, "averageSeries"))
# remove targets/graphs over the limit
graphs = graphs_limit_targets(graphs, query['limit_targets'])
# Apply target modifiers (like movingAverage, summarize, ...)
for (graph_key, graph_config) in graphs.items():
for target in graph_config['targets']:
for target_modifier in query['target_modifiers']:
target_modifier(target, graph_config)
# if in a graph all targets have a tag with the same value, they are
#.........这里部分代码省略.........
示例3: test_nontrivial_implicit_aggregation
# 需要导入模块: from target import Target [as 别名]
# 或者: from target.Target import get_graph_info [as 别名]
def test_nontrivial_implicit_aggregation():
# we ultimately want 1 graph with 1 line for each server,
# irrespective of the values of the other tags (n1 and n2)
# and even whether or not the metrics have those tags at all.
query = Query("")
query['group_by'] = {}
query['sum_by'] = {'n1': [''], 'n2': ['']}
targets = {
# web1 : one with and without n2
'web1.a.a': {
'id': 'web1.a.a',
'tags': {
'server': 'web1',
'n1': 'a',
'n2': 'a'
}
},
'web1.a': {
'id': 'web1.a',
'tags': {
'server': 'web1',
'n1': 'a',
}
},
# web 2: 2 different values of n2
'web2.a.a': {
'id': 'web2.a.a',
'tags': {
'server': 'web2',
'n1': 'a',
'n2': 'a'
}
},
'web2.a.b': {
'id': 'web2.a.b',
'tags': {
'server': 'web2',
'n1': 'a',
'n2': 'b'
}
},
# web3: with and without n2, diff value for n1
'web3.a.a': {
'id': 'web3.a.a',
'tags': {
'server': 'web3',
'n1': 'a',
'n2': 'a'
}
},
'web3.b': {
'id': 'web3.b',
'tags': {
'server': 'web3',
'n1': 'b'
}
}
}
from pprint import pprint
for (k, v) in targets.items():
v = Target(v)
v.get_graph_info(group_by={})
targets[k] = v
graphs, _query = build_graphs_from_targets(targets, query)
# TODO: there should be only 1 graph, containing 3 lines, with each 2 targets per server
# i.e. something like this:
expected = {
'targets': {
{'id': ['web1.a.a', 'web1.a']},
{'id': ['web2.a.a', 'web2.a.b']},
{'id': ['web3.a.a', 'web3.b']}
}
}
print "Graphs:"
for (k, v) in graphs.items():
print "graph key"
pprint(k)
print "val:"
pprint(v)
assert expected == graphs
示例4: test_aggregation
# 需要导入模块: from target import Target [as 别名]
# 或者: from target.Target import get_graph_info [as 别名]
def test_aggregation():
preferences = DummyPrefs()
# note: uneven aggregation: we only want 1 resulting metric,
query = Query("")
query['avg_by'] = {'server': ['']}
query['sum_by'] = {'type': ['']}
targets = {
'web1.db': {
'id': 'web1.db',
'tags': {
'server': 'web1',
'type': 'db',
'n3': 'foo'
}
},
'web1.php': {
'id': 'web1.php',
'tags': {
'server': 'web1',
'type': 'php',
'n3': 'foo'
}
},
'web2.db': {
'id': 'web2.db',
'tags': {
'server': 'web2',
'type': 'db',
'n3': 'foo'
}
},
'web2.php': {
'id': 'web2.php',
'tags': {
'server': 'web2',
'type': 'php',
'n3': 'foo'
}
},
'web2.memcache': {
'id': 'web2.memcache',
'tags': {
'server': 'web2',
'type': 'memcache',
'n3': 'foo'
}
}
}
from pprint import pprint
for (k, v) in targets.items():
v = Target(v)
v.get_graph_info(group_by={})
targets[k] = v
graphs, _query = g.build_from_targets(targets, query, preferences)
# TODO: there should be only 1 graph, containing all 5 items
print "Graphs:"
for (k, v) in graphs.items():
print "graph key"
pprint(k)
print "val:"
pprint(v)
assert {} == graphs