Beispiel #1
0
        public async Task <MetricsRun> SaveMetricsRun(MetricsRun metricsRunEntity)
        {
            var existingEntity = await this.Context.MetricsRuns.FindAsync(metricsRunEntity.MetricRunId);

            if (existingEntity == null)
            {
                this.Context.MetricsRuns.Add(metricsRunEntity);
            }
            else
            {
                this.Context.MetricsRuns.Update(metricsRunEntity);
            }

            await this.Context.SaveChangesAsync();

            return(await this.Context.MetricsRuns.FindAsync(metricsRunEntity.MetricRunId));
        }
        public async Task <WebServiceMetricsResponse> RunMetrics(WebServiceMetricsRequest request)
        {
            var response = new WebServiceMetricsResponse
            {
                WebServiceMetricsRequestMeasured = request
            };

            var metricsRunEntity = new MetricsRun()
            {
                RequestBody            = request.RequestBody,
                RequestUrl             = request.RequestUrl,
                NumberOfRequestsToSend = request.NumberOfRequestsToSend
            };

            using (var repository = new MetricsRepository())
            {
                metricsRunEntity = await repository.SaveMetricsRun(metricsRunEntity);
            }

            response.WebServiceMetricsRunId = metricsRunEntity.MetricRunId;

            var tasks = new List <Task>();

            using (var semaphore = new SemaphoreSlim(10))
            {
                for (int i = 0; i < request.NumberOfRequestsToSend; i++)
                {
                    await semaphore.WaitAsync();

                    tasks.Add(MeasureRequest(semaphore, request, response));
                }
                await Task.WhenAll(tasks);
            }

            return(response);
        }