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, }); }
public void SelectBenchmarkDefinition(IBenchmarkDefinition benchmarkDefinition) { SelectedBenchmarkDefinition = benchmarkDefinition; }
public void SelectBenchmarkDefinition(IBenchmarkDefinition benchmarkDefinition) { WrappedWakekApplication.SelectBenchmarkDefinition(benchmarkDefinition); }
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); }
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); }
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)); }