Skip to content

Commit 389f31e

Browse files
author
Meshwa Savalia
committed
rename storageResolution as per naming convention
1 parent b13b980 commit 389f31e

File tree

13 files changed

+55
-47
lines changed

13 files changed

+55
-47
lines changed

README.md

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ from aws_embedded_metrics import metric_scope
3939
@metric_scope
4040
def my_handler(metrics):
4141
metrics.put_dimensions({"Foo": "Bar"})
42-
metrics.put_metric("ProcessingLatency", 100, "Milliseconds", 60)
42+
metrics.put_metric("ProcessingLatency", 100, "Milliseconds", StorageResolution.STANDARD)
43+
metrics.put_metric("Memory.HeapUsed", 1600424.0, "Bytes", StorageResolution.HIGH)
4344
metrics.set_property("AccountId", "123456789012")
4445
metrics.set_property("RequestId", "422b1569-16f6-4a03")
4546
metrics.set_property("DeviceId", "61270781-c6ac-46f1")
@@ -53,7 +54,7 @@ def my_handler(metrics):
5354

5455
The `MetricsLogger` is the interface you will use to publish embedded metrics.
5556

56-
- **put_metric**(key: str, value: float, unit: str = "None", storageResolution: int = 60) -> MetricsLogger
57+
- **put_metric**(key: str, value: float, unit: str = "None", storage_resolution: int = 60) -> MetricsLogger
5758

5859
Adds a new metric to the current logger context. Multiple metrics using the same key will be appended to an array of values. Multiple metrics cannot have same key and different storage resolution. The Embedded Metric Format supports a maximum of 100 values per key. If more metric values are added than are supported by the format, the logger will be flushed to allow for new metric values to be captured.
5960

@@ -64,10 +65,18 @@ Requirements:
6465
- Values must be in the range of 8.515920e-109 to 1.174271e+108. In addition, special values (for example, NaN, +Infinity, -Infinity) are not supported.
6566
- Metrics must meet CloudWatch Metrics requirements, otherwise a `InvalidMetricError` will be thrown. See [MetricDatum](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) for valid values.
6667

68+
- ##### Storage Resolution
69+
An OPTIONAL value representing the storage resolution for the corresponding metric. Setting this to `High` specifies this metric as a high-resolution metric, so that CloudWatch stores the metric with sub-minute resolution down to one second. Setting this to `Standard` specifies this metric as a standard-resolution metric, which CloudWatch stores at 1-minute resolution. If a value is not provided, then a default value of `Standard` is assumed. See [Cloud Watch High-Resolution metrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html#high-resolution-metrics)
70+
6771
Examples:
6872

6973
```py
70-
put_metric("Latency", 200, "Milliseconds", 60)
74+
# Standard Resolution example
75+
put_metric("Latency", 200, "Milliseconds")
76+
put_metric("Latency", 201, "Milliseconds", StorageResolution.STANDARD)
77+
78+
# High Resolution example
79+
put_metric("Memory.HeapUsed", 1600424.0, Unit.BYTES, StorageResolution.HIGH)
7180
```
7281

7382
- **set_property**(key: str, value: Any) -> MetricsLogger

aws_embedded_metrics/logger/metric.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@
1010
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1111
# See the License for the specific language governing permissions and
1212
# limitations under the License.
13-
from aws_embedded_metrics.storageResolution import StorageResolution
13+
from aws_embedded_metrics.storage_resolution import StorageResolution
1414

1515

1616
class Metric(object):
17-
def __init__(self, value: float, unit: str = None, storageResolution: StorageResolution = StorageResolution.STANDARD):
17+
def __init__(self, value: float, unit: str = None, storage_resolution: StorageResolution = StorageResolution.STANDARD):
1818
self.values = [value]
1919
self.unit = unit or "None"
20-
self.storageResolution = storageResolution or StorageResolution.STANDARD
20+
self.storage_resolution = storage_resolution or StorageResolution.STANDARD
2121

2222
def add_value(self, value: float) -> None:
2323
self.values.append(value)

aws_embedded_metrics/logger/metrics_context.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from aws_embedded_metrics.config import get_config
1717
from aws_embedded_metrics.logger.metric import Metric
1818
from aws_embedded_metrics.validator import validate_dimension_set, validate_metric
19-
from aws_embedded_metrics.storageResolution import StorageResolution
19+
from aws_embedded_metrics.storage_resolution import StorageResolution
2020
from typing import List, Dict, Any, Set
2121

2222

@@ -40,9 +40,9 @@ def __init__(
4040
self.metrics: Dict[str, Metric] = {}
4141
self.should_use_default_dimensions = True
4242
self.meta: Dict[str, Any] = {"Timestamp": utils.now()}
43-
self.metricNameAndResolutionMap: Dict[str, StorageResolution] = {}
43+
self.metric_name_and_resolution_map: Dict[str, StorageResolution] = {}
4444

45-
def put_metric(self, key: str, value: float, unit: str = None, storageResolution: StorageResolution = StorageResolution.STANDARD) -> None:
45+
def put_metric(self, key: str, value: float, unit: str = None, storage_resolution: StorageResolution = StorageResolution.STANDARD) -> None:
4646
"""
4747
Adds a metric measurement to the context.
4848
Multiple calls using the same key will be stored as an
@@ -51,14 +51,14 @@ def put_metric(self, key: str, value: float, unit: str = None, storageResolution
5151
context.put_metric("Latency", 100, "Milliseconds")
5252
```
5353
"""
54-
validate_metric(key, value, unit, storageResolution, self.metricNameAndResolutionMap)
54+
validate_metric(key, value, unit, storage_resolution, self.metric_name_and_resolution_map)
5555
metric = self.metrics.get(key)
5656
if metric:
5757
# TODO: we should log a warning if the unit has been changed
5858
metric.add_value(value)
5959
else:
60-
self.metrics[key] = Metric(value, unit, storageResolution)
61-
self.metricNameAndResolutionMap[key] = storageResolution
60+
self.metrics[key] = Metric(value, unit, storage_resolution)
61+
self.metric_name_and_resolution_map[key] = storage_resolution
6262

6363
def put_dimensions(self, dimension_set: Dict[str, str]) -> None:
6464
"""

aws_embedded_metrics/logger/metrics_logger.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from aws_embedded_metrics.logger.metrics_context import MetricsContext
1616
from aws_embedded_metrics.validator import validate_namespace
1717
from aws_embedded_metrics.config import get_config
18-
from aws_embedded_metrics.storageResolution import StorageResolution
18+
from aws_embedded_metrics.storage_resolution import StorageResolution
1919
from typing import Any, Awaitable, Callable, Dict, Tuple
2020
import sys
2121
import traceback
@@ -80,9 +80,9 @@ def set_namespace(self, namespace: str) -> "MetricsLogger":
8080
return self
8181

8282
def put_metric(
83-
self, key: str, value: float, unit: str = "None", storageResolution: StorageResolution = StorageResolution.STANDARD
83+
self, key: str, value: float, unit: str = "None", storage_resolution: StorageResolution = StorageResolution.STANDARD
8484
) -> "MetricsLogger":
85-
self.context.put_metric(key, value, unit, storageResolution)
85+
self.context.put_metric(key, value, unit, storage_resolution)
8686
return self
8787

8888
def add_stack_trace(self, key: str, details: Any = None, exc_info: Tuple = None) -> "MetricsLogger":

aws_embedded_metrics/serializers/log_serializer.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
MAX_DIMENSION_SET_SIZE, MAX_METRICS_PER_EVENT, MAX_DATAPOINTS_PER_METRIC
1919
)
2020
from aws_embedded_metrics.exceptions import DimensionSetExceededError
21-
from aws_embedded_metrics.storageResolution import StorageResolution
21+
from aws_embedded_metrics.storage_resolution import StorageResolution
2222
import json
2323
from typing import Any, Dict, List
2424

@@ -88,11 +88,11 @@ def create_body() -> Dict[str, Any]:
8888
if len(metric.values) > end_index:
8989
remaining_data = True
9090

91-
metricBody = {"Name": metric_name, "Unit": metric.unit}
92-
if metric.storageResolution == StorageResolution.HIGH:
93-
metricBody["StorageResolution"] = metric.storageResolution.value # type: ignore
91+
metric_body = {"Name": metric_name, "Unit": metric.unit}
92+
if metric.storage_resolution == StorageResolution.HIGH:
93+
metric_body["StorageResolution"] = metric.storage_resolution.value # type: ignore
9494
if not config.disable_metric_extraction:
95-
current_body["_aws"]["CloudWatchMetrics"][0]["Metrics"].append(metricBody)
95+
current_body["_aws"]["CloudWatchMetrics"][0]["Metrics"].append(metric_body)
9696
num_metrics_in_current_body += 1
9797

9898
if (num_metrics_in_current_body == MAX_METRICS_PER_EVENT):

aws_embedded_metrics/validator.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import re
1616
from typing import Dict, Optional
1717
from aws_embedded_metrics.unit import Unit
18-
from aws_embedded_metrics.storageResolution import StorageResolution
18+
from aws_embedded_metrics.storage_resolution import StorageResolution
1919
from aws_embedded_metrics.exceptions import DimensionSetExceededError, InvalidDimensionError, InvalidMetricError, InvalidNamespaceError
2020
import aws_embedded_metrics.constants as constants
2121

@@ -58,16 +58,16 @@ def validate_dimension_set(dimension_set: Dict[str, str]) -> None:
5858
raise InvalidDimensionError("Dimension name cannot start with ':'")
5959

6060

61-
def validate_metric(name: str, value: float, unit: Optional[str], storageResolution: StorageResolution, metricNameAndResolutionMap: dict) -> None: # noqa: E501
61+
def validate_metric(name: str, value: float, unit: Optional[str], storage_resolution: StorageResolution, metric_name_and_resolution_map: dict) -> None: # noqa: E501
6262
"""
6363
Validates a metric
6464
6565
Parameters:
6666
name (str): The name of the metric
6767
value (float): The value of the metric
6868
unit (Optional[str]): The unit of the metric
69-
storageResolution (Optional[int]): The storage resolution of metric
70-
metricNameAndResolutionMap (dict): The map used for validating metric
69+
storage_resolution (Optional[int]): The storage resolution of metric
70+
metric_name_and_resolution_map (dict): The map used for validating metric
7171
7272
Raises:
7373
InvalidMetricError: If the metric is invalid
@@ -84,12 +84,12 @@ def validate_metric(name: str, value: float, unit: Optional[str], storageResolut
8484
if unit is not None and unit not in Unit:
8585
raise InvalidMetricError(f"Metric unit is not valid: {unit}")
8686

87-
if storageResolution is None or storageResolution not in StorageResolution:
88-
raise InvalidMetricError(f"Metric storage Resolution is not valid: {storageResolution}")
87+
if storage_resolution is None or storage_resolution not in StorageResolution:
88+
raise InvalidMetricError(f"Metric storage resolution is not valid: {storage_resolution}")
8989

90-
if name in metricNameAndResolutionMap and metricNameAndResolutionMap.get(name) is not storageResolution:
90+
if name in metric_name_and_resolution_map and metric_name_and_resolution_map.get(name) is not storage_resolution:
9191
raise InvalidMetricError(
92-
"Resolution for metrics ${name} is already set. A single log event cannot have a metric with two different resolutions.")
92+
f"Resolution for metrics {name} is already set. A single log event cannot have a metric with two different resolutions.")
9393

9494

9595
def validate_namespace(namespace: str) -> None:

examples/ec2/app.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from aws_embedded_metrics import metric_scope
2-
from aws_embedded_metrics.storageResolution import StorageResolution
2+
from aws_embedded_metrics.storage_resolution import StorageResolution
33

44
import logging
55

examples/lambda/function.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from aws_embedded_metrics import metric_scope
2-
from aws_embedded_metrics.storageResolution import StorageResolution
2+
from aws_embedded_metrics.storage_resolution import StorageResolution
33

44

55
@metric_scope

tests/canary/agent/canary.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import aws_embedded_metrics
33
from aws_embedded_metrics import metric_scope
44
from aws_embedded_metrics.config import get_config
5-
from aws_embedded_metrics.storageResolution import StorageResolution
5+
from aws_embedded_metrics.storage_resolution import StorageResolution
66
from getversion import get_module_version
77
import os
88
import psutil

tests/logger/test_metrics_context.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import random
44
from aws_embedded_metrics import constants
55
from aws_embedded_metrics.unit import Unit
6-
from aws_embedded_metrics.storageResolution import StorageResolution
6+
from aws_embedded_metrics.storage_resolution import StorageResolution
77
from aws_embedded_metrics import config
88
from aws_embedded_metrics.logger.metrics_context import MetricsContext
99
from aws_embedded_metrics.constants import DEFAULT_NAMESPACE
@@ -264,16 +264,16 @@ def test_put_metric_adds_metrics():
264264
metric_key = fake.word()
265265
metric_value = fake.random.random()
266266
metric_unit = random.choice(list(Unit)).value
267-
metric_storageResolution = random.choice(list(StorageResolution)).value
267+
metric_storage_resolution = random.choice(list(StorageResolution)).value
268268

269269
# act
270-
context.put_metric(metric_key, metric_value, metric_unit, metric_storageResolution)
270+
context.put_metric(metric_key, metric_value, metric_unit, metric_storage_resolution)
271271

272272
# assert
273273
metric = context.metrics[metric_key]
274274
assert metric.unit == metric_unit
275275
assert metric.values == [metric_value]
276-
assert metric.storageResolution == metric_storageResolution
276+
assert metric.storage_resolution == metric_storage_resolution
277277

278278

279279
def test_put_metric_uses_none_unit_if_not_provided():
@@ -301,11 +301,11 @@ def test_put_metric_uses_standard_storage_resolution_if_not_provided():
301301

302302
# assert
303303
metric = context.metrics[metric_key]
304-
assert metric.storageResolution == StorageResolution.STANDARD
304+
assert metric.storage_resolution == StorageResolution.STANDARD
305305

306306

307307
@pytest.mark.parametrize(
308-
"name, value, unit, storageResolution",
308+
"name, value, unit, storage_resolution",
309309
[
310310
("", 1, "None", StorageResolution.STANDARD),
311311
(" ", 1, "Seconds", StorageResolution.STANDARD),
@@ -322,11 +322,11 @@ def test_put_metric_uses_standard_storage_resolution_if_not_provided():
322322
("metric", 1, "Seconds", None)
323323
]
324324
)
325-
def test_put_invalid_metric_raises_exception(name, value, unit, storageResolution):
325+
def test_put_invalid_metric_raises_exception(name, value, unit, storage_resolution):
326326
context = MetricsContext()
327327

328328
with pytest.raises(InvalidMetricError):
329-
context.put_metric(name, value, unit, storageResolution)
329+
context.put_metric(name, value, unit, storage_resolution)
330330

331331

332332
def test_create_copy_with_context_creates_new_instance():

tests/logger/test_metrics_logger.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from aws_embedded_metrics.sinks import Sink
44
from aws_embedded_metrics.environment import Environment
55
from aws_embedded_metrics.exceptions import InvalidNamespaceError, InvalidMetricError
6-
from aws_embedded_metrics.storageResolution import StorageResolution
6+
from aws_embedded_metrics.storage_resolution import StorageResolution
77
import aws_embedded_metrics.constants as constants
88
import pytest
99
from faker import Faker
@@ -59,19 +59,18 @@ async def test_can_put_metric_with_different_storage_resolution_different_flush(
5959
# arrange
6060
expected_key = fake.word()
6161
expected_value = fake.random.randrange(100)
62-
metric_storageResolution = StorageResolution.HIGH
6362

6463
logger, sink, env = get_logger_and_sink(mocker)
6564

6665
# act
67-
logger.put_metric(expected_key, expected_value, None, metric_storageResolution)
66+
logger.put_metric(expected_key, expected_value, None, StorageResolution.HIGH)
6867
await logger.flush()
6968

7069
# assert
7170
context = sink.accept.call_args[0][0]
7271
assert context.metrics[expected_key].values == [expected_value]
7372
assert context.metrics[expected_key].unit == "None"
74-
assert context.metrics[expected_key].storageResolution == metric_storageResolution
73+
assert context.metrics[expected_key].storage_resolution == StorageResolution.HIGH
7574

7675
expected_key = fake.word()
7776
expected_value = fake.random.randrange(100)
@@ -80,7 +79,7 @@ async def test_can_put_metric_with_different_storage_resolution_different_flush(
8079
context = sink.accept.call_args[0][0]
8180
assert context.metrics[expected_key].values == [expected_value]
8281
assert context.metrics[expected_key].unit == "None"
83-
assert context.metrics[expected_key].storageResolution == StorageResolution.STANDARD
82+
assert context.metrics[expected_key].storage_resolution == StorageResolution.STANDARD
8483

8584

8685
@pytest.mark.asyncio

tests/serializer/test_log_serializer.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from aws_embedded_metrics.exceptions import DimensionSetExceededError
33
from aws_embedded_metrics.logger.metrics_context import MetricsContext
44
from aws_embedded_metrics.serializers.log_serializer import LogSerializer
5-
from aws_embedded_metrics.storageResolution import StorageResolution
5+
from aws_embedded_metrics.storage_resolution import StorageResolution
66
from collections import Counter
77
from faker import Faker
88
import json
@@ -93,7 +93,7 @@ def test_serialize_metrics():
9393
assert_json_equality(result_json, expected)
9494

9595

96-
def test_serialize_metrics_with_Standard_storageResolution():
96+
def test_serialize_metrics_with_standard_storage_resolution():
9797
# arrange
9898
expected_key = fake.word()
9999
expected_value = fake.random.randrange(0, 100)
@@ -116,7 +116,7 @@ def test_serialize_metrics_with_Standard_storageResolution():
116116
assert_json_equality(result_json, expected)
117117

118118

119-
def test_serialize_metrics_with_High_storageResolution():
119+
def test_serialize_metrics_with_high_storage_resolution():
120120
# arrange
121121
expected_key = fake.word()
122122
expected_value = fake.random.randrange(0, 100)

0 commit comments

Comments
 (0)