2014-10-31 03:51:09 +00:00
|
|
|
from moto.core import BaseBackend
|
2016-02-18 17:35:32 +00:00
|
|
|
import boto.ec2.cloudwatch
|
2016-04-04 13:27:34 +00:00
|
|
|
import datetime
|
2014-10-31 03:51:09 +00:00
|
|
|
|
|
|
|
|
|
|
|
class Dimension(object):
|
|
|
|
def __init__(self, name, value):
|
|
|
|
self.name = name
|
|
|
|
self.value = value
|
|
|
|
|
|
|
|
|
|
|
|
class FakeAlarm(object):
|
2016-08-01 21:30:11 +00:00
|
|
|
def __init__(self, name, namespace, metric_name, comparison_operator, evaluation_periods,
|
|
|
|
period, threshold, statistic, description, dimensions, alarm_actions,
|
2014-10-31 03:51:09 +00:00
|
|
|
ok_actions, insufficient_data_actions, unit):
|
|
|
|
self.name = name
|
2016-08-01 21:30:11 +00:00
|
|
|
self.namespace = namespace
|
|
|
|
self.metric_name = metric_name
|
2014-10-31 03:51:09 +00:00
|
|
|
self.comparison_operator = comparison_operator
|
|
|
|
self.evaluation_periods = evaluation_periods
|
|
|
|
self.period = period
|
|
|
|
self.threshold = threshold
|
|
|
|
self.statistic = statistic
|
|
|
|
self.description = description
|
|
|
|
self.dimensions = [Dimension(dimension['name'], dimension['value']) for dimension in dimensions]
|
|
|
|
self.alarm_actions = alarm_actions
|
|
|
|
self.ok_actions = ok_actions
|
|
|
|
self.insufficient_data_actions = insufficient_data_actions
|
|
|
|
self.unit = unit
|
2016-04-04 13:27:34 +00:00
|
|
|
self.state_updated_timestamp = datetime.datetime.now()
|
|
|
|
self.configuration_updated_timestamp = datetime.datetime.now()
|
2014-10-31 03:51:09 +00:00
|
|
|
|
|
|
|
|
2015-05-29 21:34:36 +00:00
|
|
|
class MetricDatum(object):
|
|
|
|
def __init__(self, namespace, name, value, dimensions):
|
|
|
|
self.namespace = namespace
|
|
|
|
self.name = name
|
|
|
|
self.value = value
|
|
|
|
self.dimensions = [Dimension(dimension['name'], dimension['value']) for dimension in dimensions]
|
|
|
|
|
|
|
|
|
2014-10-31 03:51:09 +00:00
|
|
|
class CloudWatchBackend(BaseBackend):
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
self.alarms = {}
|
2015-05-29 21:34:36 +00:00
|
|
|
self.metric_data = []
|
2014-10-31 03:51:09 +00:00
|
|
|
|
2016-08-01 21:30:11 +00:00
|
|
|
def put_metric_alarm(self, name, namespace, metric_name, comparison_operator, evaluation_periods,
|
2014-10-31 03:51:09 +00:00
|
|
|
period, threshold, statistic, description, dimensions,
|
|
|
|
alarm_actions, ok_actions, insufficient_data_actions, unit):
|
2016-08-01 21:30:11 +00:00
|
|
|
alarm = FakeAlarm(name, namespace, metric_name, comparison_operator, evaluation_periods, period,
|
2014-10-31 03:51:09 +00:00
|
|
|
threshold, statistic, description, dimensions, alarm_actions,
|
|
|
|
ok_actions, insufficient_data_actions, unit)
|
|
|
|
self.alarms[name] = alarm
|
|
|
|
return alarm
|
|
|
|
|
|
|
|
def get_all_alarms(self):
|
|
|
|
return self.alarms.values()
|
|
|
|
|
2015-07-23 01:08:39 +00:00
|
|
|
@staticmethod
|
|
|
|
def _list_element_starts_with(items, needle):
|
|
|
|
"""True of any of the list elements starts with needle"""
|
|
|
|
for item in items:
|
|
|
|
if item.startswith(needle):
|
|
|
|
return True
|
|
|
|
return False
|
|
|
|
|
|
|
|
def get_alarms_by_action_prefix(self, action_prefix):
|
|
|
|
return [
|
|
|
|
alarm
|
|
|
|
for alarm in self.alarms.values()
|
|
|
|
if CloudWatchBackend._list_element_starts_with(
|
|
|
|
alarm.alarm_actions, action_prefix
|
|
|
|
)
|
|
|
|
]
|
|
|
|
|
|
|
|
def get_alarms_by_alarm_name_prefix(self, name_prefix):
|
|
|
|
return [
|
|
|
|
alarm
|
|
|
|
for alarm in self.alarms.values()
|
|
|
|
if alarm.name.startswith(name_prefix)
|
|
|
|
]
|
|
|
|
|
|
|
|
def get_alarms_by_alarm_names(self, alarm_names):
|
|
|
|
return [
|
|
|
|
alarm
|
|
|
|
for alarm in self.alarms.values()
|
|
|
|
if alarm.name in alarm_names
|
|
|
|
]
|
|
|
|
|
|
|
|
def get_alarms_by_state_value(self, state):
|
|
|
|
raise NotImplementedError(
|
|
|
|
"DescribeAlarm by state is not implemented in moto."
|
|
|
|
)
|
|
|
|
|
2014-10-31 03:51:09 +00:00
|
|
|
def delete_alarms(self, alarm_names):
|
|
|
|
for alarm_name in alarm_names:
|
|
|
|
self.alarms.pop(alarm_name, None)
|
|
|
|
|
2015-05-29 21:34:36 +00:00
|
|
|
def put_metric_data(self, namespace, metric_data):
|
|
|
|
for name, value, dimensions in metric_data:
|
|
|
|
self.metric_data.append(MetricDatum(namespace, name, value, dimensions))
|
|
|
|
|
|
|
|
def get_all_metrics(self):
|
|
|
|
return self.metric_data
|
|
|
|
|
2014-10-31 03:51:09 +00:00
|
|
|
|
2016-02-18 17:35:32 +00:00
|
|
|
cloudwatch_backends = {}
|
|
|
|
for region in boto.ec2.cloudwatch.regions():
|
|
|
|
cloudwatch_backends[region.name] = CloudWatchBackend()
|