public async Task <IList <ITelemetryData> > ReadAsync(IBenchmarkDefinition benchmarkDefinition)
        {
            if (string.IsNullOrEmpty(benchmarkDefinition?.Url) || string.IsNullOrEmpty(benchmarkDefinition.TelemetryUrl))
            {
                return(new List <ITelemetryData>());
            }

            var url = benchmarkDefinition.Url;

            url = url.Substring(url.IndexOf(@"//", StringComparison.Ordinal) + 2);
            if (string.IsNullOrEmpty(url))
            {
                return(new List <ITelemetryData>());
            }

            url = url.Substring(url.IndexOf(@"/", StringComparison.Ordinal) + 1);
            if (string.IsNullOrEmpty(url))
            {
                return(new List <ITelemetryData>());
            }

            url = benchmarkDefinition.TelemetryUrl + "?url=" + HttpUtility.UrlEncode(url);

            var client = new HttpClient();
            var data   = await client.GetStringAsync(url);

            if (string.IsNullOrEmpty(data))
            {
                return(new List <ITelemetryData>());
            }

            return(!vTelemetryDataParser.TryParse(data, out var result) ? new List <ITelemetryData>() : result);
        }
        public IBenchmarkExecution CreateBenchmarkExecution(IBenchmarkDefinition benchmarkDefinition)
        {
            if (string.IsNullOrEmpty(benchmarkDefinition.Guid))
            {
                throw new NullReferenceException("benchmarkDefinition.Guid");
            }

            return(new BenchmarkExecution {
                SequenceNumber = vSequenceNumberGenerator.NewSequenceNumber(nameof(BenchmarkExecution)),
                Guid = Guid.NewGuid().ToString(),
                BenchmarkDefinitionGuid = benchmarkDefinition.Guid,
            });
        }
Exemple #3
0
 public void SelectBenchmarkDefinition(IBenchmarkDefinition benchmarkDefinition)
 {
     SelectedBenchmarkDefinition = benchmarkDefinition;
 }
Exemple #4
0
 public void SelectBenchmarkDefinition(IBenchmarkDefinition benchmarkDefinition)
 {
     WrappedWakekApplication.SelectBenchmarkDefinition(benchmarkDefinition);
 }
Exemple #5
0
        private async Task <BenchmarkExecutionState> ExecuteForThreadNativeCsAsync(IApplicationCommandExecutionContext context, IBenchmarkDefinition benchmarkDefinition, IBenchmarkExecution benchmarkExecution, int threadNumber, DateTime executionStart, IHttpClient client)
        {
            var result = await BeginExecuteForThreadAsync(context, benchmarkDefinition, benchmarkExecution, threadNumber, executionStart);

            var benchmarkExecutionState = result.BenchmarkExecutionState;
            var threadExecutionEnd      = result.ThreadExecutionEnd;

            var counter = 0;

            do
            {
                if (string.IsNullOrEmpty(benchmarkDefinition.Url))
                {
                    Thread.Sleep(TimeSpan.FromMilliseconds(500));
                }
                else
                {
                    try {
                        var requestedAt = DateTime.Now;
                        await client.GetStringAsync("?g=" + Guid.NewGuid());

                        var requestDuration = DateTime.Now.Subtract(requestedAt);
                        await context.ReportAsync(new FeedbackToApplication {
                            Type    = FeedbackType.LogInformation,
                            Message = string.Format(Properties.Resources.WebRequestFinished, (int)requestDuration.TotalMilliseconds, threadNumber)
                        });

                        benchmarkExecutionState.Successes++;
                    }
                    catch {
                        benchmarkExecutionState.Failures++;
                    }
                }

                benchmarkExecutionState.ExecutingForHowManySeconds = (int)Math.Floor((DateTime.Now - executionStart).TotalSeconds);

                counter = (counter + 1) % 10;
                if (counter == 1)
                {
                    await context.ReportAsync(new FeedbackToApplication { Type = FeedbackType.ImportantMessage, Message = XmlSerializer.Serialize(benchmarkExecutionState) });
                }
            } while (DateTime.Now < threadExecutionEnd);

            await EndExecuteForThreadAsync(context, threadNumber, executionStart, benchmarkExecutionState);

            return(benchmarkExecutionState);
        }
Exemple #6
0
        private async Task <ExtendedBenchmarkExecutionState> BeginExecuteForThreadAsync(IApplicationCommandExecutionContext context, IBenchmarkDefinition benchmarkDefinition, IBenchmarkExecution benchmarkExecution, int threadNumber, DateTime executionStart)
        {
            var result = new ExtendedBenchmarkExecutionState();

            result.BenchmarkExecutionState = BenchmarkExecutionFactory.CreateBenchmarkExecutionState(benchmarkExecution, threadNumber) as BenchmarkExecutionState;
            if (result.BenchmarkExecutionState == null)
            {
                throw new NullReferenceException();
            }

            result.ThreadExecutionEnd = executionStart.AddSeconds(benchmarkDefinition.ExecutionTimeInSeconds);

            await context.ReportAsync(new FeedbackToApplication { Type = FeedbackType.ImportantMessage, Message = XmlSerializer.Serialize(result.BenchmarkExecutionState) });

            await context.ReportAsync(new FeedbackToApplication { Type = FeedbackType.LogInformation, Message = string.Format(Properties.Resources.CreatedThread, threadNumber) });

            return(result);
        }
Exemple #7
0
        private async Task <BenchmarkExecutionState> ExecuteForThreadJavaScriptAsync(IApplicationCommandExecutionContext context, IBenchmarkDefinition benchmarkDefinition, IBenchmarkExecution benchmarkExecution, DateTime executionStart, IHttpClient client)
        {
            var jQueryScript = await client.GetStringAsync("http://code.jquery.com/jquery-2.0.0.min.js");

            var html = @"<!DOCTYPE html><html><head><meta http-equiv='X-UA-Compatible' content='IE=edge;chrome=1' /><script type='text/javascript'>" + jQueryScript + ' '
                       + @"$(document).ready(function() { executionEndTime  = new Date(); executionEndTime.setSeconds(executionEndTime.getSeconds() + "
                       + benchmarkDefinition.ExecutionTimeInSeconds + @"); successes = 0; function callAsManyTimesAsPossible(x) { "
                       + @"$.ajax({ url: '" + benchmarkDefinition.Url + @"', cache: false, async: true }).success(function(text) { "
                       + @"successes ++; currentTime = new Date(); if (currentTime <= executionEndTime) { callAsManyTimesAsPossible(x); } else { $(""#content"").html(successes); } "
                       + @"}); } ["
                       + string.Join(",", Enumerable.Range(1, benchmarkDefinition.NumberOfCallsInParallel))
                       + @"].forEach(function(x) { callAsManyTimesAsPossible(x); });
                });
                </script>
                </head><body lang='en'><div id='content'>Please wait..</div></body></html>";

            var benchmarkExecutionState = (await BeginExecuteForThreadAsync(context, benchmarkDefinition, benchmarkExecution, 1, executionStart)).BenchmarkExecutionState;

            // var task = Task.Factory.StartNew(() => ContextOwner.NavigateToStringReturnContentAsNumber(html));
            // return await task.ContinueWith(t => JavaScriptFinishedAsync(t, context, executionStart, benchmarkExecutionState));
            return(await JavaScriptFinishedAsync(ContextOwner.NavigateToStringReturnContentAsNumber(html), context, executionStart, benchmarkExecutionState));
        }