예제 #1
0
        public object Post([FromBody] object data)
        {
            if (Request.Body.CanSeek)
            {
                Request.Body.Position = 0;
            }

            return(_invoker.Execute(_function, Request));
        }
예제 #2
0
        public object Execute()
        {
            logger.LogInformation("{0}: Function Started. HTTP Method: {1}, Path: {2}.", DateTime.Now.ToString(), Request.Method, Request.Path);

            Event   @event  = null;
            Context context = null;

            try
            {
                (@event, context) = parameterHandler.GetFunctionParameters(Request);
                var cancellationSource = new CancellationTokenSource();

                var output = invoker.Execute(cancellationSource, @event, context);

                logger.LogInformation("{0}: Function Executed. HTTP response: {1}.", DateTime.Now.ToString(), 200);

                LogMetrics(context, 200);
                return(output);
            }
            catch (OperationCanceledException exception)
            {
                logger.LogError(exception, "{0}: Function Cancelled. HTTP Response: {1}. Reason: {2}.", DateTime.Now.ToString(), 408, "Timeout");
                LogMetrics(context, 408);
                return(new StatusCodeResult(408));
            }
            catch (Exception exception)
            {
                logger.LogCritical(exception, "{0}: Function Corrupted. HTTP Response: {1}. Reason: {2}.", DateTime.Now.ToString(), 500, exception.Message);
                LogMetrics(context, 500);
                return(new StatusCodeResult(500));
            }
        }
예제 #3
0
        public object Execute()
        {
            Console.WriteLine("{0}: Function Started. HTTP Method: {1}, Path: {2}.", DateTime.Now.ToString(), Request.Method, Request.Path);

            try
            {
                (Event _event, Context _context) = _parameterManager.GetFunctionParameters(Request);

                CancellationTokenSource _cancellationSource = new CancellationTokenSource();

                var output = _invoker.Execute(_function, _cancellationSource, _event, _context);

                Console.WriteLine("{0}: Function Executed. HTTP response: {1}.", DateTime.Now.ToString(), 200);
                return(output);
            }
            catch (OperationCanceledException)
            {
                Console.WriteLine("{0}: Function Cancelled. HTTP Response: {1}. Reason: {2}.", DateTime.Now.ToString(), 408, "Timeout");
                return(new StatusCodeResult(408));
            }
            catch (Exception ex)
            {
                Console.WriteLine("{0}: Function Corrupted. HTTP Response: {1}. Reason: {2}.", DateTime.Now.ToString(), 500, ex.Message);
                throw;
            }
        }
        public async Task <object> Execute()
        {
            _logger.LogInformation($"{DateTime.Now}: Function Started. HTTP Method: {Request.Method}, Path: {Request.Path}.");

            Event   @event  = null;
            Context context = null;

            try
            {
                (@event, context) = await _parameterHandler.GetFunctionParameters(Request);

                object output;
                var    durationMetrics = DurationSeconds.WithLabels(context.ModuleName, context.FunctionName, context.Runtime);
                using (durationMetrics.NewTimer()) {
                    output = await _invoker.Execute(@event, context);
                }

                _logger.LogInformation($"{DateTime.Now}: Function Executed. HTTP response: 200.");

                LogMetrics(context, 200);
                return(output);
            }
            catch (OperationCanceledException exception)
            {
                _logger.LogError(exception, $"{DateTime.Now}: Function Cancelled. HTTP Response: 408. Reason: Timeout.");
                LogMetrics(context, 408);
                return(new StatusCodeResult(408));
            }
            catch (Exception exception)
            {
                _logger.LogCritical(exception, $"{DateTime.Now}: Function Corrupted. HTTP Response: 500. Reason: {exception.Message}.");
                LogMetrics(context, 500);
                return(new StatusCodeResult(500));
            }
        }
 private object CallFunction()
 {
     if (!_function.IsCompiled())
     {
         _compiler.Compile(_function);
     }
     return(_invoker.Execute(_function, Request));
 }
예제 #6
0
        public void RunWithExecutionTimeGreaterThanTimeout(string language, string functionFileName, string moduleName, string functionHandler, int durationTime, int timeout)
        {
            // Arrange
            IInvoker invoker = InvokerFactory.GetFunctionInvoker(language, functionFileName, moduleName, functionHandler, timeout);
            Event    @event  = new Event(durationTime);
            Context  context = new Context();

            //Assert
            Assert.ThrowsAsync <OperationCanceledException>(async() => await invoker.Execute(@event, context));
        }
예제 #7
0
        public void InvokeRegularFunction(string language, string functionFileName, string moduleName, string functionHandler)
        {
            // Arrange
            IInvoker invoker = InvokerFactory.GetFunctionInvoker(language, functionFileName, moduleName, functionHandler);
            Event    @event  = new Event();
            Context  context = new Context();
            CancellationTokenSource token = new CancellationTokenSource();

            // Act
            object result = invoker.Execute(token, @event, context);

            // Assert
        }
예제 #8
0
        public async void RunWithoutTimeout(string language, string functionFileName, string moduleName, string functionHandler, int durationTime, int timeout)
        {
            // Arrange
            IInvoker invoker = InvokerFactory.GetFunctionInvoker(language, functionFileName, moduleName, functionHandler, timeout);
            Event    @event  = new Event(durationTime);
            Context  context = new Context();

            // Act
            object result = await invoker.Execute(@event, context);

            // Assert
            Assert.Equal("This is a long run!", result.ToString());
        }
예제 #9
0
        public void InvokeRegularFunctionWithData(string language, string functionFileName, string moduleName, string functionHandler)
        {
            // Arrange
            string inputData = "expected returned message";

            IInvoker invoker = InvokerFactory.GetFunctionInvoker(language, functionFileName, moduleName, functionHandler);
            Event    @event  = new Event(inputData);
            Context  context = new Context();
            CancellationTokenSource token = new CancellationTokenSource();

            // Act
            object result = invoker.Execute(token, @event, context);

            // Assert
            Assert.Equal(inputData, result.ToString());
        }
예제 #10
0
        public void RunWithoutTimeout(string language, string functionFileName, string moduleName, string functionHandler, int durationTime, int timeoutSeconds)
        {
            // Arrange
            int      sleepTime            = durationTime;
            int      timeout              = timeoutSeconds * 1000;
            IInvoker invoker              = InvokerFactory.GetFunctionInvoker(language, functionFileName, moduleName, functionHandler, timeout);
            Event    @event               = new Event(sleepTime);
            Context  context              = new Context();
            CancellationTokenSource token = new CancellationTokenSource();

            // Act
            object result = invoker.Execute(token, @event, context);

            // Assert
            Assert.Equal("This is a long run!", result.ToString());
        }
예제 #11
0
        public void RunWithExecutionTimeGreaterThanTimeout(string language, string functionFileName, string moduleName, string functionHandler, int durationTime, int timeoutSeconds)
        {
            // Arrange
            int      sleepTime            = durationTime * 1000;
            int      timeout              = timeoutSeconds * 1000;
            IInvoker invoker              = InvokerFactory.GetFunctionInvoker(language, functionFileName, moduleName, functionHandler, timeout);
            Event    @event               = new Event(sleepTime);
            Context  context              = new Context();
            CancellationTokenSource token = new CancellationTokenSource();

            // Act
            Action timeoutAction = () =>
            {
                object result = invoker.Execute(token, @event, context);
            };

            //Assert
            Assert.Throws <OperationCanceledException>(timeoutAction);
        }