public async Task<APIGatewayProxyResponse> InvokeAPIGatewayProxyAsync(
            Func<APIGatewayProxyRequest, ILambdaContext, Task<APIGatewayProxyResponse>> asyncHandler,
            APIGatewayProxyRequest request,
            ILambdaContext context,
            string operationName = null,
            IEnumerable<KeyValuePair<string, string>> tags = null)
        {
            using (var tracker = new TelemetryTracker(context, operationName, tags, request.Headers))
            {
                try
                {
                    APIGatewayProxyResponse apiGatewayProxyResponse = await asyncHandler(request, context);
                    if (!apiGatewayProxyResponse.IsSuccessStatusCode())
                    {
                        tracker.SetErrorCounter();

                        // Preserve the legacy logging.
                        LambdaLogger.Log($"[ERR] Invoking lambda function. Http status code: {apiGatewayProxyResponse.StatusCode}. Response body: {apiGatewayProxyResponse.Body}{Environment.NewLine}");
                    }

                    return apiGatewayProxyResponse;
                }
                catch (Exception e)
                {
                    tracker.SetException(e);
                    throw;
                }
            }
        }
 public async Task <TOutput> InvokeAsync <TInput, TOutput>(
     Func <TInput, ILambdaContext, Task <TOutput> > asyncHandler,
     TInput input,
     ILambdaContext context,
     string operationName = null,
     IEnumerable <KeyValuePair <string, string> > tags = null)
 {
     using (var tracker = new TelemetryTracker(context, operationName, tags))
     {
         try
         {
             return(await asyncHandler(input, context));
         }
         catch (Exception e)
         {
             tracker.SetException(e);
             throw;
         }
     }
 }
 public void Invoke <TInput>(
     Action <TInput, ILambdaContext> handler,
     TInput input,
     ILambdaContext context,
     string operationName = null,
     IEnumerable <KeyValuePair <string, string> > tags = null)
 {
     using (var tracker = new TelemetryTracker(context, operationName, tags))
     {
         try
         {
             handler(input, context);
         }
         catch (Exception e)
         {
             tracker.SetException(e);
             throw;
         }
     }
 }
        public async Task <APIGatewayHttpApiV2ProxyResponse> InvokeAPIGatewayHttpApiV2ProxyAsync(
            Func <APIGatewayHttpApiV2ProxyRequest, ILambdaContext, Task <APIGatewayHttpApiV2ProxyResponse> > asyncHandler,
            APIGatewayHttpApiV2ProxyRequest request,
            ILambdaContext context,
            string operationName = null,
            IDictionary <string, string> tags = null)
        {
            IHeadersCollection headersCollection = null;

            if (TelemetryConfiguration.ContextPropagationEnabled)
            {
                headersCollection = new CommaDelimitedValueHeaders(request.Headers);
            }

            using (var tracker = new TelemetryTracker(context, operationName, tags, headersCollection))
            {
                try
                {
                    APIGatewayHttpApiV2ProxyResponse apiGatewayProxyResponse = await asyncHandler(request, context);

                    if (!apiGatewayProxyResponse.IsSuccessStatusCode())
                    {
                        tracker.SetErrorCounter();

                        // Preserve the legacy logging.
                        LambdaLogger.Log($"[ERR] Invoking lambda function. Http status code: {apiGatewayProxyResponse.StatusCode}. Response body: {apiGatewayProxyResponse.Body}{Environment.NewLine}");
                    }

                    return(apiGatewayProxyResponse);
                }
                catch (Exception e)
                {
                    tracker.SetException(e);
                    throw;
                }
            }
        }