in src/actions.py [0:0]
def create_alarm_from_tag(id, alarm_tag, instance_info, metric_dimensions_map, sns_topic_arn, alarm_separator):
alarm_properties = alarm_tag['Key'].split(alarm_separator)
namespace = alarm_properties[1]
MetricName = alarm_properties[2]
dimensions = list()
for dimension_name in metric_dimensions_map.get(namespace, list()):
dimension = dict()
if dimension_name == 'AutoScalingGroupName':
# find out if the instance is part of an autoscaling group
instance_asg = next(
(tag['Value'] for tag in instance_info['Tags'] if tag['Key'] == 'aws:autoscaling:groupName'), None)
if instance_asg:
dimension_value = instance_asg
dimension['Name'] = dimension_name
dimension['Value'] = dimension_value
dimensions.append(dimension)
else:
dimension_value = instance_info.get(dimension_name, None)
if dimension_value:
dimension['Name'] = dimension_name
dimension['Value'] = dimension_value
dimensions.append(dimension)
else:
logger.warning(
"Dimension {} has been specified in APPEND_DIMENSIONS but no dimension value exists, skipping...".format(
dimension_name))
logger.debug("dimensions are {}".format(dimensions))
additional_dimensions = list()
for index, prop in enumerate(alarm_properties[3:], start=3):
if prop in valid_comparators:
prop_end_index = index
break
else:
prop_end_index = None
if prop_end_index:
additional_dimensions.extend(alarm_properties[3:prop_end_index])
else:
logger.error('Unable to determine the dimensions for alarm tag: {}'.format(alarm_tag))
raise Exception
AlarmName = 'AutoAlarm-{}-{}-{}'.format(id, namespace, MetricName)
properties_offset = 0
if additional_dimensions:
for num, dim in enumerate(additional_dimensions[::2]):
val = additional_dimensions[num * 2 + 1]
dimensions.append(
{
'Name': dim,
'Value': val
}
)
AlarmName = AlarmName + '-{}-{}'.format(dim, val)
properties_offset = properties_offset + 2
ComparisonOperator = alarm_properties[(properties_offset + 3)]
Period = alarm_properties[(properties_offset + 4)]
Statistic = alarm_properties[(properties_offset + 5)]
AlarmName = AlarmName + '-{}-{}-{}'.format(ComparisonOperator, Period, Statistic)
create_alarm(AlarmName, MetricName, ComparisonOperator, Period, alarm_tag['Value'], Statistic, namespace,
dimensions, sns_topic_arn)