Add put_metric_data and list_metrics
This commit is contained in:
parent
55f36a3a43
commit
d5d9c13975
@ -25,10 +25,19 @@ class FakeAlarm(object):
|
||||
self.unit = unit
|
||||
|
||||
|
||||
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]
|
||||
|
||||
|
||||
class CloudWatchBackend(BaseBackend):
|
||||
|
||||
def __init__(self):
|
||||
self.alarms = {}
|
||||
self.metric_data = []
|
||||
|
||||
def put_metric_alarm(self, name, comparison_operator, evaluation_periods,
|
||||
period, threshold, statistic, description, dimensions,
|
||||
@ -46,5 +55,12 @@ class CloudWatchBackend(BaseBackend):
|
||||
for alarm_name in alarm_names:
|
||||
self.alarms.pop(alarm_name, None)
|
||||
|
||||
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
|
||||
|
||||
|
||||
cloudwatch_backend = CloudWatchBackend()
|
||||
|
@ -38,6 +38,38 @@ class CloudWatchResponse(BaseResponse):
|
||||
template = self.response_template(DELETE_METRIC_ALARMS_TEMPLATE)
|
||||
return template.render()
|
||||
|
||||
def put_metric_data(self):
|
||||
namespace = self._get_param('Namespace')
|
||||
metric_data = []
|
||||
metric_index = 1
|
||||
while True:
|
||||
try:
|
||||
metric_name = self.querystring['MetricData.member.{0}.MetricName'.format(metric_index)][0]
|
||||
except KeyError:
|
||||
break
|
||||
value = self.querystring.get('MetricData.member.{0}.Value'.format(metric_index), [None])[0]
|
||||
dimensions = []
|
||||
dimension_index = 1
|
||||
while True:
|
||||
try:
|
||||
dimension_name = self.querystring['MetricData.member.{0}.Dimensions.member.{1}.Name'.format(metric_index, dimension_index)][0]
|
||||
except KeyError:
|
||||
break
|
||||
dimension_value = self.querystring['MetricData.member.{0}.Dimensions.member.{1}.Value'.format(metric_index, dimension_index)][0]
|
||||
dimensions.append({'name': dimension_name, 'value': dimension_value})
|
||||
dimension_index += 1
|
||||
metric_data.append([metric_name, value, dimensions])
|
||||
metric_index += 1
|
||||
cloudwatch_backend.put_metric_data(namespace, metric_data)
|
||||
template = self.response_template(PUT_METRIC_DATA_TEMPLATE)
|
||||
return template.render()
|
||||
|
||||
def list_metrics(self):
|
||||
metrics = cloudwatch_backend.get_all_metrics()
|
||||
template = self.response_template(LIST_METRICS_TEMPLATE)
|
||||
return template.render(metrics=metrics)
|
||||
|
||||
|
||||
PUT_METRIC_ALARM_TEMPLATE = """<PutMetricAlarmResponse xmlns="http://monitoring.amazonaws.com/doc/2010-08-01/">
|
||||
<ResponseMetadata>
|
||||
<RequestId>
|
||||
@ -102,3 +134,35 @@ DELETE_METRIC_ALARMS_TEMPLATE = """<DeleteMetricAlarmResponse xmlns="http://moni
|
||||
</RequestId>
|
||||
</ResponseMetadata>
|
||||
</DeleteMetricAlarmResponse>"""
|
||||
|
||||
PUT_METRIC_DATA_TEMPLATE = """<PutMetricDataResponse xmlns="http://monitoring.amazonaws.com/doc/2010-08-01/">
|
||||
<ResponseMetadata>
|
||||
<RequestId>
|
||||
2690d7eb-ed86-11dd-9877-6fad448a8419
|
||||
</RequestId>
|
||||
</ResponseMetadata>
|
||||
</PutMetricDataResponse>"""
|
||||
|
||||
LIST_METRICS_TEMPLATE = """<ListMetricsResponse xmlns="http://monitoring.amazonaws.com/doc/2010-08-01/">
|
||||
<ListMetricsResult>
|
||||
<Metrics>
|
||||
{% for metric in metrics %}
|
||||
<member>
|
||||
<Dimensions>
|
||||
{% for dimension in metric.dimensions %}
|
||||
<member>
|
||||
<Name>{{ dimension.name }}</Name>
|
||||
<Value>{{ dimension.value }}</Value>
|
||||
</member>
|
||||
{% endfor %}
|
||||
</Dimensions>
|
||||
<MetricName>{{ metric.name }}</MetricName>
|
||||
<Namespace>{{ metric.namespace }}</Namespace>
|
||||
</member>
|
||||
{% endfor %}
|
||||
</Metrics>
|
||||
<NextToken>
|
||||
96e88479-4662-450b-8a13-239ded6ce9fe
|
||||
</NextToken>
|
||||
</ListMetricsResult>
|
||||
</ListMetricsResponse>"""
|
||||
|
@ -69,3 +69,22 @@ def test_delete_alarm():
|
||||
|
||||
alarms = conn.describe_alarms()
|
||||
alarms.should.have.length_of(0)
|
||||
|
||||
|
||||
@mock_cloudwatch
|
||||
def test_put_metric_data():
|
||||
conn = boto.connect_cloudwatch()
|
||||
|
||||
conn.put_metric_data(
|
||||
namespace='tester',
|
||||
name='metric',
|
||||
value=1.5,
|
||||
dimensions={'InstanceId': ['i-0123456,i-0123457']},
|
||||
)
|
||||
|
||||
metrics = conn.list_metrics()
|
||||
metrics.should.have.length_of(1)
|
||||
metric = metrics[0]
|
||||
metric.namespace.should.equal('tester')
|
||||
metric.name.should.equal('metric')
|
||||
dict(metric.dimensions).should.equal({'InstanceId': ['i-0123456,i-0123457']})
|
||||
|
Loading…
Reference in New Issue
Block a user