Merge pull request #2929 from mikegrima/fixcw

Fixed a regression with CloudWatch
This commit is contained in:
Mike Grima 2020-04-27 13:53:23 -07:00 committed by GitHub
commit e09dfac95b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 41 additions and 38 deletions

View File

@ -384,7 +384,7 @@ LIST_METRICS_TEMPLATE = """<ListMetricsResponse xmlns="http://monitoring.amazona
</member> </member>
{% endfor %} {% endfor %}
</Dimensions> </Dimensions>
<MetricName>Metric:{{ metric.name }}</MetricName> <MetricName>{{ metric.name }}</MetricName>
<Namespace>{{ metric.namespace }}</Namespace> <Namespace>{{ metric.namespace }}</Namespace>
</member> </member>
{% endfor %} {% endfor %}

View File

@ -22,7 +22,7 @@ import six
from bisect import insort from bisect import insort
from moto.core import ACCOUNT_ID, BaseBackend, BaseModel from moto.core import ACCOUNT_ID, BaseBackend, BaseModel
from moto.core.utils import iso_8601_datetime_with_milliseconds, rfc_1123_datetime from moto.core.utils import iso_8601_datetime_with_milliseconds, rfc_1123_datetime
from moto.cloudwatch.models import metric_providers, MetricDatum from moto.cloudwatch.models import MetricDatum
from moto.utilities.tagging_service import TaggingService from moto.utilities.tagging_service import TaggingService
from .exceptions import ( from .exceptions import (
BucketAlreadyExists, BucketAlreadyExists,
@ -1159,9 +1159,11 @@ class S3Backend(BaseBackend):
self.account_public_access_block = None self.account_public_access_block = None
self.tagger = TaggingService() self.tagger = TaggingService()
# TODO: This is broken! DO NOT IMPORT MUTABLE DATA TYPES FROM OTHER AREAS -- THIS BREAKS UNMOCKING!
# WRAP WITH A GETTER/SETTER FUNCTION
# Register this class as a CloudWatch Metric Provider # Register this class as a CloudWatch Metric Provider
# Must provide a method 'get_cloudwatch_metrics' that will return a list of metrics, based on the data available # Must provide a method 'get_cloudwatch_metrics' that will return a list of metrics, based on the data available
metric_providers["S3"] = self # metric_providers["S3"] = self
def get_cloudwatch_metrics(self): def get_cloudwatch_metrics(self):
metrics = [] metrics = []

View File

@ -88,7 +88,7 @@ def test_put_metric_data():
metric_names.should.have(1) metric_names.should.have(1)
metric = metrics[0] metric = metrics[0]
metric.namespace.should.equal("tester") metric.namespace.should.equal("tester")
metric.name.should.equal("Metric:metric") metric.name.should.equal("metric")
dict(metric.dimensions).should.equal({"InstanceId": ["i-0123456,i-0123457"]}) dict(metric.dimensions).should.equal({"InstanceId": ["i-0123456,i-0123457"]})
@ -157,33 +157,34 @@ def test_get_metric_statistics():
datapoint.should.have.key("Timestamp").which.should.equal(metric_timestamp) datapoint.should.have.key("Timestamp").which.should.equal(metric_timestamp)
@mock_s3_deprecated # TODO: THIS IS CURRENTLY BROKEN!
@mock_cloudwatch_deprecated # @mock_s3_deprecated
def test_cloudwatch_return_s3_metrics(): # @mock_cloudwatch_deprecated
# def test_cloudwatch_return_s3_metrics():
region = "us-east-1" #
# region = "us-east-1"
cw = boto.ec2.cloudwatch.connect_to_region(region) #
s3 = boto.s3.connect_to_region(region) # cw = boto.ec2.cloudwatch.connect_to_region(region)
# s3 = boto.s3.connect_to_region(region)
bucket_name_1 = "test-bucket-1" #
bucket_name_2 = "test-bucket-2" # bucket_name_1 = "test-bucket-1"
# bucket_name_2 = "test-bucket-2"
bucket1 = s3.create_bucket(bucket_name=bucket_name_1) #
key = Key(bucket1) # bucket1 = s3.create_bucket(bucket_name=bucket_name_1)
key.key = "the-key" # key = Key(bucket1)
key.set_contents_from_string("foobar" * 4) # key.key = "the-key"
s3.create_bucket(bucket_name=bucket_name_2) # key.set_contents_from_string("foobar" * 4)
# s3.create_bucket(bucket_name=bucket_name_2)
metrics_s3_bucket_1 = cw.list_metrics(dimensions={"BucketName": bucket_name_1}) #
# Verify that the OOTB S3 metrics are available for the created buckets # metrics_s3_bucket_1 = cw.list_metrics(dimensions={"BucketName": bucket_name_1})
len(metrics_s3_bucket_1).should.be(2) # # Verify that the OOTB S3 metrics are available for the created buckets
metric_names = [m.name for m in metrics_s3_bucket_1] # len(metrics_s3_bucket_1).should.be(2)
sorted(metric_names).should.equal( # metric_names = [m.name for m in metrics_s3_bucket_1]
["Metric:BucketSizeBytes", "Metric:NumberOfObjects"] # sorted(metric_names).should.equal(
) # ["Metric:BucketSizeBytes", "Metric:NumberOfObjects"]
# )
# Explicit clean up - the metrics for these buckets are messing with subsequent tests #
key.delete() # # Explicit clean up - the metrics for these buckets are messing with subsequent tests
s3.delete_bucket(bucket_name_1) # key.delete()
s3.delete_bucket(bucket_name_2) # s3.delete_bucket(bucket_name_1)
# s3.delete_bucket(bucket_name_2)

View File

@ -155,7 +155,7 @@ def test_put_metric_data_no_dimensions():
metrics.should.have.length_of(1) metrics.should.have.length_of(1)
metric = metrics[0] metric = metrics[0]
metric["Namespace"].should.equal("tester") metric["Namespace"].should.equal("tester")
metric["MetricName"].should.equal("Metric:metric") metric["MetricName"].should.equal("metric")
@mock_cloudwatch @mock_cloudwatch
@ -183,7 +183,7 @@ def test_put_metric_data_with_statistics():
metrics.should.have.length_of(1) metrics.should.have.length_of(1)
metric = metrics[0] metric = metrics[0]
metric["Namespace"].should.equal("tester") metric["Namespace"].should.equal("tester")
metric["MetricName"].should.equal("Metric:statmetric") metric["MetricName"].should.equal("statmetric")
# TODO: test statistics - https://github.com/spulec/moto/issues/1615 # TODO: test statistics - https://github.com/spulec/moto/issues/1615
@ -266,12 +266,12 @@ def test_list_metrics():
{ {
u"Namespace": "list_test_1/", u"Namespace": "list_test_1/",
u"Dimensions": [], u"Dimensions": [],
u"MetricName": "Metric:metric1", u"MetricName": "metric1",
}, },
{ {
u"Namespace": "list_test_1/", u"Namespace": "list_test_1/",
u"Dimensions": [], u"Dimensions": [],
u"MetricName": "Metric:metric1", u"MetricName": "metric1",
}, },
] ]
) )