コード例 #1
0
        public BenchMarkData ConvertToBenchMarkData(List <BenchMarkResult> resultDataPoints)
        {
            var benchmarkData = new BenchMarkData()
            {
                CloudProvider      = Enum.ToObject(typeof(CloudProvider), resultDataPoints.First().CloudProvider).ToString(),
                HostingEnvironment =
                    Enum.ToObject(typeof(HostingEnvironment), resultDataPoints.First().HostingEnvironment).ToString(),
                Runtime = Enum.ToObject(typeof(Runtime), resultDataPoints.First().Runtime).ToString()
            };

            var currentDate = resultDataPoints.OrderByDescending(c => c.CreatedAt).First().CreatedAt.Date;


            var coldMedians = MedianCalculator.Calculate(currentDate, resultDataPoints, true);

            benchmarkData.ColdMedianExecutionTime = coldMedians.currentDay;

            var coldDifference =
                Math.Round(
                    ((coldMedians.currentDay - coldMedians.previousDay) /
                     Math.Abs(coldMedians.currentDay)) * 100, 2);

            benchmarkData.ColdPreviousDayDifference = coldDifference;
            benchmarkData.ColdPreviousDayPositive   = benchmarkData.ColdPreviousDayDifference < 0;

            var warmMedians = MedianCalculator.Calculate(currentDate, resultDataPoints, false);

            benchmarkData.WarmMedianExecutionTime = warmMedians.currentDay;

            var warmDifference =
                Math.Round(
                    ((warmMedians.currentDay - warmMedians.previousDay) /
                     Math.Abs(warmMedians.currentDay)) * 100, 2);

            benchmarkData.WarmPreviousDayDifference = warmDifference;
            benchmarkData.WarmPreviousDayPositive   = benchmarkData.WarmPreviousDayDifference < 0;

            var dates = new List <DateTime>();

            for (var i = 0; i < Convert.ToInt32(Environment.GetEnvironmentVariable("dayRange")); i++)
            {
                dates.Add(currentDate - TimeSpan.FromDays(i));
            }

            dates = dates.OrderBy(c => c.Date).ToList();

            foreach (var date in dates)
            {
                benchmarkData.ColdDataPoints.Add(new DataPoint(date.ToString("yyyy MMMM dd"),
                                                               resultDataPoints.Where(c => c.CreatedAt.Date == date.Date && c.IsColdRequest)
                                                               .Select(c => c.RequestDuration).ToList()));

                benchmarkData.WarmDataPoints.Add(new DataPoint(date.ToString("yyyy MMMM dd"),
                                                               resultDataPoints.Where(c => c.CreatedAt.Date == date.Date && !c.IsColdRequest)
                                                               .Select(c => c.RequestDuration).ToList()));
            }

            return(benchmarkData);
        }
コード例 #2
0
        public async Task FunctionShouldReturnOkObjectResultContainingBenchMarkData()
        {
            #region Arrange

            var benchMarkResults = new List <BenchMarkResult>()
            {
                new BenchMarkResult()
                {
                    Id                 = 1,
                    CloudProvider      = 0,
                    HostingEnvironment = 0,
                    Runtime            = 0,
                    CreatedAt          = DateTimeOffset.Now,
                    RequestDuration    = 200,
                    Success            = true
                }
            };

            _mockBenchMarkResultService.Setup(c =>
                                              c.GetBenchMarkResults(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>()))
            .Returns(Task.FromResult(benchMarkResults));

            var sampleBenchMarkData = new BenchMarkData()
            {
                CloudProvider = "Azure"
            };

            _mockResponseConverter.Setup(c => c.ConvertToBenchMarkData(benchMarkResults))
            .Returns(sampleBenchMarkData);

            var trigger = new Trigger(_mockBenchMarkResultService.Object, _mockResponseConverter.Object);
            var request = TestFactory.CreateHttpRequest(new Dictionary <string, StringValues>()
            {
                { "cloudProvider", "Azure" }, { "hostingEnvironment", "Windows" }, { "runtime", "Csharp" }
            });

            #endregion

            #region Act

            var response = await trigger.Run(request, _logger);

            #endregion

            #region Assert

            var responseObject = Assert.IsType <OkObjectResult>(response);

            var benchMarkData = Assert.IsType <BenchMarkData>(responseObject.Value);

            Assert.Equal(benchMarkData.CloudProvider, sampleBenchMarkData.CloudProvider);

            #endregion
        }
コード例 #3
0
        public BenchMarkData ConvertToBenchMarkData(List <BenchMarkResult> resultDataPoints)
        {
            var firstResult   = resultDataPoints.OrderByDescending(c => c.CreatedAt).First();
            var benchmarkData = new BenchMarkData()
            {
                CloudProvider      = firstResult.CloudProvider.ToString(),
                HostingEnvironment = firstResult.HostingEnvironment.ToString(),
                Runtime            = firstResult.Runtime.ToString()
            };

            var currentDate = firstResult.CreatedAt.Date;


            var coldDataPoints = resultDataPoints.Where(c => c.IsColdRequest).ToList();
            var coldMedians    = MedianCalculator.Calculate(currentDate, coldDataPoints);

            benchmarkData.ColdMedianExecutionTime   = coldMedians.CurrentDay;
            benchmarkData.ColdPreviousDayDifference = coldMedians.DifferencePercentage;
            benchmarkData.ColdPreviousDayPositive   = benchmarkData.ColdPreviousDayDifference < 0;

            var warmDataPoints = resultDataPoints.Where(c => !c.IsColdRequest).ToList();
            var warmMedians    = MedianCalculator.Calculate(currentDate, warmDataPoints);

            benchmarkData.WarmMedianExecutionTime   = warmMedians.CurrentDay;
            benchmarkData.WarmPreviousDayDifference = warmMedians.DifferencePercentage;
            benchmarkData.WarmPreviousDayPositive   = benchmarkData.WarmPreviousDayDifference < 0;


            var dates = new List <DateTime>();

            for (var i = 0; i < Convert.ToInt32(Environment.GetEnvironmentVariable("dayRange")); i++)
            {
                dates.Add(currentDate - TimeSpan.FromDays(i));
            }

            dates = dates.OrderBy(c => c.Date).ToList();

            foreach (var date in dates)
            {
                benchmarkData.ColdDataPoints.Add(new DataPoint(date.ToString("yyyy MMMM dd"),
                                                               coldDataPoints.Where(c => c.CreatedAt.Date == date.Date)
                                                               .Select(c => c.RequestDuration).ToList()));

                benchmarkData.WarmDataPoints.Add(new DataPoint(date.ToString("yyyy MMMM dd"),
                                                               warmDataPoints.Where(c => c.CreatedAt.Date == date.Date)
                                                               .Select(c => c.RequestDuration).ToList()));
            }

            return(benchmarkData);
        }
コード例 #4
0
        public async Task Run_Should_Return_OkObjectResult_Containing_ConvertedBenchMarkData_From_Service()
        {
            //  Arrange

            var benchMarkResults = new List <BenchMarkResult>()
            {
                new BenchMarkResult()
                {
                    Success = true,
                }
            };

            Environment.SetEnvironmentVariable("dayRange", "1");
            _mockBenchMarkResultService.Setup(c => c.GetDateTimeNow()).Returns(new DateTime(2020, 1, 2));
            _mockBenchMarkResultService.Setup(c =>
                                              c.GetBenchMarkResultsAsync(It.IsAny <CloudProvider>(), It.IsAny <HostEnvironment>(), It.IsAny <Runtime>(), It.IsAny <DateTime>()))
            .Returns(Task.FromResult(benchMarkResults));

            var sampleBenchMarkData = new BenchMarkData()
            {
                CloudProvider = "ReturnedData"
            };

            _mockResponseConverter.Setup(c => c.ConvertToBenchMarkData(benchMarkResults))
            .Returns(sampleBenchMarkData);

            var trigger = new Trigger(_mockBenchMarkResultService.Object, _mockResponseConverter.Object);
            var request = TestFactory.CreateHttpRequest(new Dictionary <string, StringValues>()
            {
                { "cloudProvider", "Firebase" }, { "hostingEnvironment", "Linux" }, { "runtime", "Fsharp" }
            });



            //  Act

            var response = await trigger.Run(request, _logger);



            //  Assert

            var responseObject = Assert.IsType <OkObjectResult>(response);

            var benchMarkData = Assert.IsType <BenchMarkData>(responseObject.Value);

            Assert.Equal(sampleBenchMarkData.CloudProvider, benchMarkData.CloudProvider);
        }
コード例 #5
0
        public async Task Run_Should_Call_ResponseConverter_With_Result_Of_BenchmarkResultService()
        {
            //  Arrange

            var benchMarkResults = new List <BenchMarkResult>()
            {
                new BenchMarkResult()
                {
                    Id      = 77,
                    Success = true,
                }
            };

            Environment.SetEnvironmentVariable("dayRange", "1");
            _mockBenchMarkResultService.Setup(c => c.GetDateTimeNow()).Returns(new DateTime(2020, 1, 2));
            _mockBenchMarkResultService.Setup(c =>
                                              c.GetBenchMarkResultsAsync(It.IsAny <CloudProvider>(), It.IsAny <HostEnvironment>(), It.IsAny <Runtime>(), It.IsAny <DateTime>()))
            .Returns(Task.FromResult(benchMarkResults));

            var sampleBenchMarkData = new BenchMarkData()
            {
                CloudProvider = "ReturnedData"
            };

            var trigger = new Trigger(_mockBenchMarkResultService.Object, _mockResponseConverter.Object);
            var request = TestFactory.CreateHttpRequest(new Dictionary <string, StringValues>()
            {
                { "cloudProvider", "Firebase" }, { "hostingEnvironment", "Linux" }, { "runtime", "Fsharp" }
            });



            //  Act

            var response = await trigger.Run(request, _logger);



            //  Assert

            _mockResponseConverter.Verify(service => service.ConvertToBenchMarkData(
                                              It.Is <List <BenchMarkResult> >(results => results[0].Id == benchMarkResults[0].Id)), Times.Once);
        }
コード例 #6
0
        public async Task Run_Should_Call_BenchMarkResultService_With_QueryParameters()
        {
            //  Arrange

            var benchMarkResults = new List <BenchMarkResult>();

            Environment.SetEnvironmentVariable("dayRange", "1");
            _mockBenchMarkResultService.Setup(c => c.GetDateTimeNow()).Returns(new DateTime(2020, 1, 2));
            _mockBenchMarkResultService.Setup(c =>
                                              c.GetBenchMarkResultsAsync(It.IsAny <CloudProvider>(), It.IsAny <HostEnvironment>(), It.IsAny <Runtime>(), It.IsAny <DateTime>()))
            .Returns(Task.FromResult(benchMarkResults));

            var sampleBenchMarkData = new BenchMarkData()
            {
                CloudProvider = "Azure"
            };

            _mockResponseConverter.Setup(c => c.ConvertToBenchMarkData(benchMarkResults))
            .Returns(sampleBenchMarkData);

            var trigger = new Trigger(_mockBenchMarkResultService.Object, _mockResponseConverter.Object);
            var request = TestFactory.CreateHttpRequest(new Dictionary <string, StringValues>()
            {
                { "cloudProvider", "Firebase" }, { "hostingEnvironment", "Linux" }, { "runtime", "Fsharp" }
            });



            //  Act

            var response = await trigger.Run(request, _logger);



            //  Assert

            _mockBenchMarkResultService.Verify(service => service.GetBenchMarkResultsAsync(
                                                   It.Is <CloudProvider>(cloudProvider => cloudProvider == CloudProvider.Firebase),
                                                   It.Is <HostEnvironment>(hostingEnvironment => hostingEnvironment == HostEnvironment.Linux),
                                                   It.Is <Runtime>(runtime => runtime == Runtime.Fsharp),
                                                   It.IsAny <DateTime>()), Times.Once);
        }