Skip to content

Commit c9b018f

Browse files
committed
optimize docstring
1 parent 10514f7 commit c9b018f

File tree

1 file changed

+33
-11
lines changed

1 file changed

+33
-11
lines changed

aws_lambda_powertools/metrics/provider/datadog_provider_draft.py

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,35 +5,45 @@
55
import numbers
66
import time
77
import warnings
8-
from typing import Dict, List
8+
from typing import Dict, List, Optional
99

1010
from aws_lambda_powertools.metrics.exceptions import MetricValueError
1111
from aws_lambda_powertools.metrics.provider import MetricsBase, MetricsProviderBase
1212

1313
logger = logging.getLogger(__name__)
1414

15-
# Check if using layer
15+
# Check if using datadog layer
1616
try:
1717
from datadog_lambda.metric import lambda_metric # type: ignore
1818
except ImportError:
1919
lambda_metric = None
2020

2121

2222
class DataDogProvider(MetricsProviderBase):
23-
"""Class for datadog provider."""
23+
"""Class for datadog provider.
24+
all datadog metric data will be stored as
25+
see https://github.com/DataDog/datadog-lambda-python/blob/main/datadog_lambda/metric.py#L77
26+
{
27+
"m": metric_name,
28+
"v": value,
29+
"e": timestamp
30+
"t": List["tag:value","tag2:value2"]
31+
}
32+
"""
2433

2534
def __init__(self, namespace):
2635
self.metrics = []
2736
self.namespace = namespace
2837
super().__init__()
2938

30-
# adding timestamp, tags. unit, resolution, name will not be used
31-
def add_metric(self, name: str, value: float, timestamp: float, tag: List):
39+
# adding name,value,timestamp,tags
40+
# consider directly calling lambda_metric function here
41+
def add_metric(self, name: str, value: float, timestamp: Optional[int] = None, tags: Optional[List] = None):
3242
if not isinstance(value, numbers.Real):
3343
raise MetricValueError(f"{value} is not a valid number")
3444
if not timestamp:
3545
timestamp = time.time()
36-
self.metrics.append({"m": name, "v": float(value), "e": timestamp, "t": []})
46+
self.metrics.append({"m": name, "v": int(value), "e": timestamp, "t": tags})
3747

3848
# serialize for flushing
3949
def serialize(self) -> Dict:
@@ -57,16 +67,17 @@ def serialize(self) -> Dict:
5767
def flush(self, metrics):
5868
# submit through datadog extension
5969
if lambda_metric:
70+
# use lambda_metric function from datadog package, submit metrics to datadog
6071
for metric_item in metrics.get("List"):
6172
lambda_metric(
6273
metric_name=metric_item["m"],
6374
value=metric_item["v"],
6475
timestamp=metric_item["e"],
6576
tags=metric_item["t"],
6677
)
67-
# flush to log with datadog format
68-
# https://github.com/DataDog/datadog-lambda-python/blob/main/datadog_lambda/metric.py#L77
6978
else:
79+
# flush to log with datadog format
80+
# https://github.com/DataDog/datadog-lambda-python/blob/main/datadog_lambda/metric.py#L77
7081
for metric_item in metrics.get("List"):
7182
print(json.dumps(metric_item, separators=(",", ":")))
7283

@@ -75,14 +86,25 @@ def clear(self):
7586

7687

7788
class DataDogMetrics(MetricsBase):
78-
"""Class for datadog metrics."""
89+
"""Class for datadog metrics standalone class.
7990
91+
Example
92+
-------
93+
dd_provider = DataDogProvider(namespace="default")
94+
metrics = DataDogMetrics(provider=dd_provider)
95+
96+
@metrics.log_metrics(capture_cold_start_metric: bool = True, raise_on_empty_metrics: bool = False)
97+
def lambda_handler(event, context)
98+
metrics.add_metric(name="item_sold",value=1,tags)
99+
"""
100+
101+
# `log_metrics` and `_add_cold_start_metric` are directly inherited from `MetricsBase`
80102
def __init__(self, provider):
81103
self.provider = provider
82104
super().__init__()
83105

84-
def add_metric(self, name: str, value: float, timestamp: float, tags: List):
85-
self.provider.add_metric(name, value, timestamp, tags)
106+
def add_metric(self, name: str, value: float, timestamp: Optional[int] = None, tags: Optional[List] = None):
107+
self.provider.add_metric(name=name, value=value, timestamp=timestamp, tags=tags)
86108

87109
def flush_metrics(self, raise_on_empty_metrics: bool = False) -> None:
88110
metrics = self.provider.serialize()

0 commit comments

Comments
 (0)