public AggregationSummary GenerateSummary() { Project project = GetProject(_projectName); //------------------------------------------------------------------------------------------------- //// This stuff will get refactored out to when the calulation is submitted //// Create a random number generator //Distribution randomNumberGenerator = new FisherTippettDistribution(); //// Create a TaskAggregator, passing in the RNG and the project //TaskAggregator taskAggregator = new TaskAggregator(project, randomNumberGenerator, 100000); //// Invoke the TaskAggregator Aggregate method, returning a List<double> of numbers //List<double> aggregatedDurations = taskAggregator.Aggregate(); //------------------------------------------------------------------------------------------------- // Get the list of aggregated durations from Azure storage CalculatorDataSource dataSource = new CalculatorDataSource(_projectName); IEnumerable<ProjectCalculationEntry> entries = dataSource.GetEntries(_projectName); //foreach (ProjectCalculationEntry projectCalculationEntry in entries) //{ // aggregatedDurations.Add(projectCalculationEntry.Duration); //} List<double> aggregatedDurations = entries.Select(projectCalculationEntry => projectCalculationEntry.Duration).ToList(); // Calculate the mean and variance double mean = CalculateMean(aggregatedDurations); double variance = CalculateVariance(aggregatedDurations, mean); // Get the distribution of durations List<DistributionPoint> dataPoints = TransformToDistribuion(aggregatedDurations); // Create and return an AggregationSummary, passing in the List, mean, variance and task count and project name return new AggregationSummary { ProjectName = project.Name, DistributionPoints = dataPoints, MeanDuration = mean, Variance = variance, TaskCount = project.Tasks.Count }; }
//, TimeSpan timeSinceFirstRequest) private static bool IsCalculationReady(string projectName, int iterationCount) { // Go to the storage and find if all the simulation calculations have been returned //bool calculationIsReady = timeSinceFirstRequest.Seconds > 10; // HACK bool calculationIsReady = false; try { CalculatorDataSource dataSource = new CalculatorDataSource("simulation"); IEnumerable<ProjectCalculationEntry> entries = dataSource.GetEntries(projectName); int count = entries.Count(); calculationIsReady = count >= iterationCount; } catch { // do nothing } return calculationIsReady; }