@@ -179,35 +179,40 @@ def serialize_metric_set(self, metrics: Dict = None, dimensions: Dict = None, me
179
179
180
180
logger .debug ("Serializing..." , {"metrics" : metrics , "dimensions" : dimensions })
181
181
182
- dimension_keys : List [str ] = list (dimensions .keys ())
183
- metric_names_unit : List [Dict [str , str ]] = []
184
- metric_set : Dict [str , str ] = {}
182
+ metric_names_and_units : List [Dict [str , str ]] = [] # [ { "Name": "metric_name", "Unit": "Count" } ]
183
+ metric_names_and_values : Dict [str , str ] = {} # { "metric_name": 1.0 }
185
184
186
185
for metric_name in metrics :
187
186
metric : str = metrics [metric_name ]
188
187
metric_value : int = metric .get ("Value" , 0 )
189
188
metric_unit : str = metric .get ("Unit" , "" )
190
189
191
- metric_names_unit .append ({"Name" : metric_name , "Unit" : metric_unit })
192
- metric_set .update ({metric_name : metric_value })
193
-
194
- metrics_definition = {
195
- "CloudWatchMetrics" : [
196
- {"Namespace" : self .namespace , "Dimensions" : [dimension_keys ], "Metrics" : metric_names_unit }
197
- ]
190
+ metric_names_and_units .append ({"Name" : metric_name , "Unit" : metric_unit })
191
+ metric_names_and_values .update ({metric_name : metric_value })
192
+
193
+ embedded_metrics_object = {
194
+ "_aws" : {
195
+ "Timestamp" : int (datetime .datetime .now ().timestamp () * 1000 ), # epoch
196
+ "CloudWatchMetrics" : [
197
+ {
198
+ "Namespace" : self .namespace , # "test_namespace"
199
+ "Dimensions" : [list (dimensions .keys ())], # [ "service" ]
200
+ "Metrics" : metric_names_and_units ,
201
+ }
202
+ ],
203
+ },
204
+ ** dimensions , # "service": "test_service"
205
+ ** metadata , # "username": "test"
206
+ ** metric_names_and_values , # "single_metric": 1.0
198
207
}
199
- metrics_timestamp = {"Timestamp" : int (datetime .datetime .now ().timestamp () * 1000 )}
200
- metric_set ["_aws" ] = {** metrics_timestamp , ** metrics_definition }
201
- metric_set .update (** dimensions )
202
- metric_set .update (** metadata )
203
208
204
209
try :
205
- logger .debug ("Validating serialized metrics against CloudWatch EMF schema" , metric_set )
206
- fastjsonschema .validate (definition = CLOUDWATCH_EMF_SCHEMA , data = metric_set )
210
+ logger .debug ("Validating serialized metrics against CloudWatch EMF schema" , embedded_metrics_object )
211
+ fastjsonschema .validate (definition = CLOUDWATCH_EMF_SCHEMA , data = embedded_metrics_object )
207
212
except fastjsonschema .JsonSchemaException as e :
208
213
message = f"Invalid format. Error: { e .message } , Invalid item: { e .name } " # noqa: B306, E501
209
214
raise SchemaValidationError (message )
210
- return metric_set
215
+ return embedded_metrics_object
211
216
212
217
def add_dimension (self , name : str , value : str ):
213
218
"""Adds given dimension to all metrics
0 commit comments