예제 #1
0
    def before_request(self, request, req_body):
        execution_context = wrapper_utils.create_execution_context()
        execution_context.platform_data["request"] = request
        execution_context.platform_data["request"]["body"] = req_body

        self.plugin_context.request_count += 1
        self.execute_hook("before:invocation", execution_context)

        return execution_context
예제 #2
0
    def before_request(self, request):
        # Execution context initialization
        execution_context = wrapper_utils.create_execution_context()
        execution_context.platform_data['request'] = request

        # Execute plugin hooks before running user's handler
        self.plugin_context.request_count += 1
        self.execute_hook('before:invocation', execution_context)

        return execution_context
예제 #3
0
    def mock_before_request(self, request, req_body):
        ExecutionContextManager.set_provider(TracingExecutionContextProvider())
        execution_context = wrapper_utils.create_execution_context()
        execution_context.platform_data["request"] = request
        execution_context.platform_data["request"]["body"] = req_body

        self.plugin_context.request_count += 1
        self.execute_hook("before:invocation", execution_context)

        assert execution_context.root_span.operation_name == '/1'
        assert execution_context.root_span.get_tag('http.method') == 'GET'
        assert execution_context.root_span.get_tag('http.host') == 'testserver'
        assert execution_context.root_span.get_tag('http.query_params') == b''
        assert execution_context.root_span.get_tag('http.path') == '/1'
        assert execution_context.root_span.class_name == constants.ClassNames[
            'FASTAPI']
        assert execution_context.root_span.domain_name == 'API'

        return execution_context
예제 #4
0
        def wrapper(event, context):
            application_name = self.plugin_context.application_info.get(
                'applicationName')
            self.application_info_provider.update({
                'applicationId':
                LambdaApplicationInfoProvider.get_application_id(
                    context, application_name=application_name)
            })

            # Execution context initialization
            execution_context = wrapper_utils.create_execution_context()
            try:
                execution_context.platform_data[
                    'originalEvent'] = copy.deepcopy(event)
            except:
                execution_context.platform_data['originalEvent'] = event
            execution_context.platform_data['originalContext'] = context
            ExecutionContextManager.set(execution_context)

            # Before running user's handler
            try:
                if ConfigProvider.get(
                        config_names.THUNDRA_LAMBDA_WARMUP_WARMUPAWARE,
                        False) and self.check_and_handle_warmup_request(event):
                    return None

                self.plugin_context.request_count += 1
                self.execute_hook('before:invocation', execution_context)

                timeout_duration = self.get_timeout_duration(context)
            except Exception as e:
                logger.error(
                    "Error during the before part of Thundra: {}".format(e))
                return original_func(event, context)

            # Invoke user handler
            try:
                response = None
                with Timeout(timeout_duration, self.timeout_handler,
                             execution_context):
                    if ConfigProvider.get(
                            config_names.THUNDRA_LAMBDA_DEBUGGER_ENABLE,
                            ConfigProvider.get(
                                config_names.THUNDRA_LAMBDA_DEBUGGER_AUTH_TOKEN
                            )) and self.ptvsd_imported:
                        self.start_debugger_tracing(context)

                    response = original_func(event, context)
                    execution_context.response = response
            except Exception as e:
                try:
                    execution_context.error = {
                        'type': type(e).__name__,
                        'message': str(e),
                        'traceback': traceback.format_exc()
                    }
                    self.prepare_and_send_reports(execution_context)
                except Exception as e_in:
                    logger.error(
                        "Error during the after part of Thundra: {}".format(
                            e_in))
                    pass
                raise e
            finally:
                if ConfigProvider.get(
                        config_names.THUNDRA_LAMBDA_DEBUGGER_ENABLE,
                        ConfigProvider.get(
                            config_names.THUNDRA_LAMBDA_DEBUGGER_AUTH_TOKEN)
                ) and self.ptvsd_imported:
                    self.stop_debugger_tracing()

            # After having run the user's handler
            try:
                self.prepare_and_send_reports(execution_context)
            except Exception as e:
                logger.error(
                    "Error during the after part of Thundra: {}".format(e))

            ExecutionContextManager.clear()
            return response