1+ import logging
12import os
23import json
4+ import traceback
5+
36import yaml
47import asyncio
58import aioboto3
69
710from asyncio import Queue
811from collections import defaultdict
912from importlib import resources
10-
11- from aws_lambda_powertools .utilities .parser import event_parser , envelopes
1213from pydantic import TypeAdapter , ValidationError , BaseModel
14+ from aws_lambda_powertools .utilities .parser import event_parser , envelopes
15+
1316from open_mpic_core .common_domain .check_request import BaseCheckRequest
1417from open_mpic_core .common_domain .check_response import CheckResponse
1518from open_mpic_core .mpic_coordinator .domain .mpic_request import MpicRequest
1821from open_mpic_core .mpic_coordinator .mpic_coordinator import MpicCoordinator , MpicCoordinatorConfiguration
1922from open_mpic_core .common_domain .enum .check_type import CheckType
2023from open_mpic_core .mpic_coordinator .domain .remote_perspective import RemotePerspective
24+ from open_mpic_core .common_util .trace_level_logger import get_logger
25+
26+ logger = get_logger (__name__ )
2127
2228
2329class PerspectiveEndpointInfo (BaseModel ):
@@ -37,6 +43,11 @@ def __init__(self):
3743 self .default_perspective_count = int (os .environ ['default_perspective_count' ])
3844 self .global_max_attempts = int (os .environ ['absolute_max_attempts' ]) if 'absolute_max_attempts' in os .environ else None
3945 self .hash_secret = os .environ ['hash_secret' ]
46+ self .log_level = os .getenv ('log_level' , None )
47+
48+ self .logger = logger .getChild (self .__class__ .__name__ )
49+ if self .log_level :
50+ self .logger .setLevel (self .log_level )
4051
4152 self .remotes_per_perspective_per_check_type = {
4253 CheckType .DCV : {perspective_code : perspective_config .dcv_endpoint_info for perspective_code , perspective_config in perspectives .items ()},
@@ -54,10 +65,7 @@ def __init__(self):
5465 self .hash_secret
5566 )
5667
57- self .mpic_coordinator = MpicCoordinator (
58- self .call_remote_perspective ,
59- self .mpic_coordinator_configuration
60- )
68+ self .mpic_coordinator = MpicCoordinator (self .call_remote_perspective , self .mpic_coordinator_configuration , self .logger .level )
6169
6270 # for correct deserialization of responses based on discriminator field (check type)
6371 self .mpic_request_adapter = TypeAdapter (MpicRequest )
@@ -125,7 +133,7 @@ async def call_remote_perspective(self, perspective: RemotePerspective, check_ty
125133 response_payload = json .loads (await response ['Payload' ].read ())
126134 return self .check_response_adapter .validate_json (response_payload ['body' ])
127135 except ValidationError as ve :
128- # We might want to handle this differently later.
136+ self . logger . log ( level = logging . ERROR , msg = f"Validation error in response from { perspective . code } : { ve } " )
129137 raise ve
130138 finally :
131139 await self .release_lambda_client (perspective .code , client )
@@ -184,6 +192,9 @@ def wrapper(*args, **kwargs):
184192 except ValidationError as validation_error :
185193 return build_400_response (MpicRequestValidationMessages .REQUEST_VALIDATION_FAILED .key , validation_error .errors ())
186194 except Exception as e :
195+ logger .error (f"An error occurred: { str (e )} " )
196+ print (traceback .format_exc ())
197+ print (f"BOY HOWDY error occurred: { str (e )} " )
187198 return {
188199 'statusCode' : 500 ,
189200 'headers' : {'Content-Type' : 'application/json' },
0 commit comments