def from_yaml(cls, loader, node):
logging.debug('{}:from_yaml(loader={})'.format(cls.__name__, loader))
default, select, value_desc = None, list(), None
# find value description
for elem in node.value:
for key, value in elem.value:
if key.value == 'VALUE':
assert value_desc is None, "VALUE key already set"
value_desc = value
if key.value == 'SELECT':
select.append(loader.construct_mapping(value))
if key.value == 'DEFAULT':
assert default is None, "DEFAULT key already set"
default = loader.construct_object(value)
# if VALUE key isn't given, use default VALUE key
# format: `VALUE: !Number '{vl.value}'`
if value_desc is None:
value_desc = yaml.ScalarNode(tag=u'!Number', value=u'{vl.value}')
# select collectd metric based on SELECT condition
metrics = loader.collector.items(select)
assert len(metrics) < 2, \
'Wrong SELECT condition {}, selected {} metrics'.format(
select, len(metrics))
if len(metrics) > 0:
item = cls.format_node(value_desc, {'vl': metrics[0],
'system': loader.system})
return loader.construct_object(item)
# nothing has been found by SELECT condition, set to DEFAULT value.
assert default is not None, "No metrics selected by SELECT condition" \
" {} and DEFAULT key isn't set".format(select)
return default
评论列表
文章目录