コード例 #1
0
        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
            };
        }
コード例 #2
0
        //, 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;
        }