@@ -68,21 +68,50 @@ def get_metrics(
68
68
namespace : str ,
69
69
start_date : datetime ,
70
70
metric_name : str ,
71
- service_name : str = "" ,
72
71
dimensions : Optional [List [DimensionTypeDef ]] = None ,
73
72
cw_client : Optional [CloudWatchClient ] = None ,
74
73
end_date : Optional [datetime ] = None ,
75
74
period : int = 60 ,
76
75
stat : str = "Sum" ,
77
76
) -> MetricDataResultTypeDef :
77
+ """Fetch CloudWatch Metrics
78
+
79
+ It takes into account eventual consistency with up to 10 retries and 1s jitter.
80
+
81
+ Parameters
82
+ ----------
83
+ namespace : str
84
+ Metric Namespace
85
+ start_date : datetime
86
+ Start window to fetch metrics
87
+ metric_name : str
88
+ Metric name
89
+ dimensions : Optional[List[DimensionTypeDef]], optional
90
+ List of Metric Dimension, by default None
91
+ cw_client : Optional[CloudWatchClient], optional
92
+ Boto3 CloudWatch low-level client (boto3.client("cloudwatch"), by default None
93
+ end_date : Optional[datetime], optional
94
+ End window to fetch metrics, by default start_date + 2 minutes window
95
+ period : int, optional
96
+ Time period to fetch metrics for, by default 60
97
+ stat : str, optional
98
+ Aggregation function to use when fetching metrics, by default "Sum"
99
+
100
+ Returns
101
+ -------
102
+ MetricDataResultTypeDef
103
+ _description_
104
+
105
+ Raises
106
+ ------
107
+ ValueError
108
+ When no metric is found within retry window
109
+ """
78
110
cw_client = cw_client or boto3 .client ("cloudwatch" )
111
+ end_date = end_date or start_date + datetime .timedelta (minutes = 2 )
112
+
79
113
metric_query = build_metric_query_data (
80
- namespace = namespace ,
81
- metric_name = metric_name ,
82
- service_name = service_name ,
83
- period = period ,
84
- stat = stat ,
85
- dimensions = dimensions ,
114
+ namespace = namespace , metric_name = metric_name , period = period , stat = stat , dimensions = dimensions
86
115
)
87
116
88
117
response = cw_client .get_metric_data (
@@ -162,17 +191,11 @@ def build_random_value(nbytes: int = 10) -> str:
162
191
def build_metric_query_data (
163
192
namespace : str ,
164
193
metric_name : str ,
165
- service_name : str = "" ,
166
194
period : int = 60 ,
167
195
stat : str = "Sum" ,
168
196
dimensions : Optional [List [DimensionTypeDef ]] = None ,
169
197
) -> List [MetricDataQueryTypeDef ]:
170
198
dimensions = dimensions or []
171
-
172
- # Maintenance: get rid of service_name param to avoid future mistakes
173
- if service_name :
174
- dimensions .append ({"Name" : "service" , "Value" : service_name })
175
-
176
199
data_query : List [MetricDataQueryTypeDef ] = [
177
200
{
178
201
"Id" : metric_name .lower (),
@@ -235,24 +258,6 @@ def build_multiple_add_metric_input(
235
258
return [{"name" : metric_name , "unit" : unit , "value" : value } for _ in range (quantity )]
236
259
237
260
238
- def build_add_dimension_input (name : str , value : str ) -> DimensionTypeDef :
239
- """Create a dimension input to be used with either Metrics.add_dimension()
240
-
241
- Parameters
242
- ----------
243
- name : str
244
- dimension name
245
- value : float
246
- dimension value
247
-
248
- Returns
249
- -------
250
- Dict
251
- Metric dimension input
252
- """
253
- return {"Name" : name , "Value" : value }
254
-
255
-
256
261
def build_add_dimensions_input (** dimensions ) -> List [DimensionTypeDef ]:
257
262
"""Create dimensions input to be used with either get_metrics or Metrics.add_dimension()
258
263
0 commit comments