def test_setup_no_service_name(stdout): # GIVEN no service is explicitly defined # WHEN logger is setup # THEN service field should be "service_undefined" logger = Logger(stream=stdout) logger.info("Hello") log = json.loads(stdout.getvalue()) assert "service_undefined" == log["service"]
def test_setup_service_name(root_logger, stdout): # GIVEN service is explicitly defined # WHEN logger is setup # THEN service field should be equals service given service_name = "payment" logger = Logger(service=service_name, stream=stdout) logger.info("Hello") log = json.loads(stdout.getvalue()) assert service_name == log["service"]
def test_setup_service_env_var(monkeypatch, stdout): # GIVEN service is explicitly defined via POWERTOOLS_SERVICE_NAME env # WHEN logger is setup # THEN service field should be equals POWERTOOLS_SERVICE_NAME value service_name = "payment" monkeypatch.setenv("POWERTOOLS_SERVICE_NAME", service_name) logger = Logger(stream=stdout) logger.info("Hello") log = json.loads(stdout.getvalue()) assert service_name == log["service"]
class Utils: def __init__(self): self.logger = Logger() self.tracer = Tracer() def set_trace_id(self, lambda_handler): def get_trace_id(raw_trace_id): for t in raw_trace_id.split(';'): if t.startswith('Root'): return t.split('=')[1] return None def decorate(event, context): if '_X_AMZN_TRACE_ID' in os.environ: if get_trace_id(os.environ['_X_AMZN_TRACE_ID']) is not None: os.environ['trace_id'] = get_trace_id( os.environ['_X_AMZN_TRACE_ID']) if 'trace_id' not in os.environ: START_TIME = time.time() HEX = hex(int(START_TIME))[2:] os.environ['trace_id'] = "0-{}-{}".format( HEX, str(binascii.hexlify(urandom(12)), 'utf-8')) self.logger.structure_logs(append=True, trace_id=os.environ['trace_id']) self.logger.info(os.environ.get('trace_id')) response = lambda_handler(event, context) return response return decorate def api_gateway_response(self, lambda_handler): def decorate(event, context): response = lambda_handler(event, context) if isinstance(response, tuple): body = response[0] status = response[1] else: body = response status = 200 if isinstance(body, Exception): if status == 200: status = 400 self.logger.exception(body) self.tracer.put_annotation("ErrorCode", body.__class__.__name__) self.tracer.put_annotation("ErrorMessage", "{}".format(body)) res = { "isBase64Encoded": False, "statusCode": status, 'headers': { "Access-Control-Allow-Origin": "*", "Content-Type": "application/json" }, 'body': json.dumps({ "Code": body.__class__.__name__, "Message": "{}".format(body), "TraceId": os.environ.get('trace_id') }) } else: if body is not None and isinstance(body, str) is False: body = json.dumps(body) res = { 'isBase64Encoded': False, 'statusCode': status, 'headers': { "Access-Control-Allow-Origin": "*", "Content-Type": "application/json" } } if body is not None: res['body'] = body return res return decorate
skill_builder.add_request_handler(RepeatHandler()) skill_builder.add_request_handler(FallBackHandler()) skill_builder.add_request_handler(SessionEndedRequestHandler()) skill_builder.add_request_handler(IntentReflectorHandler()) logger.info("Adding skill exception handlers...") skill_builder.add_exception_handler(OpenDataAPIExceptionHandler()) skill_builder.add_exception_handler(GenericExceptionHandler()) logger.info("Adding skill request interceptors...") skill_builder.add_global_request_interceptor(LocalizationInterceptor()) skill_builder.add_global_request_interceptor(RequestLoggerInterceptor()) logger.info("Adding skill response interceptors...") skill_builder.add_global_response_interceptor(ResponseLoggerInterceptor()) tracer.put_annotation("SKILL_SETUP", "SUCCESS") tracer.put_metadata(key="environment", value=ENVIRONMENT.upper()) return skill_builder # Create new Open Data API client and service instances logger.info({ "operation": "Launching alexa skill", "environment": ENVIRONMENT.upper(), }) logger.info("Setting up Open Data API service") stib_service = OpenDataService(stib_api_client=OpenDataAPIClient()) # Set up the skill builder and lambda handler sb = setup_skill_builder(service=stib_service) handler = sb.lambda_handler()