예제 #1
0
        /// <returns>List of weights (numbers from [0, 1)) used for calculating mean and deviation for this task</returns>
        private async Task <List <double> > CalculateTaskStatisticsParametersAsync(int clientId, Guid taskId)
        {
            /* Create local submissions repo for preventing memory leaks */
            using (var scope = serviceScopeFactory.CreateScope())
            {
                db.DisableAutoDetectChanges();

                var localSubmissionsRepo = scope.ServiceProvider.GetService <ISubmissionsRepo>();

                logger.Information($"Пересчитываю статистические параметры задачи (TaskStatisticsParameters) по задаче {taskId}");
                var lastAuthorsIds = await localSubmissionsRepo.GetLastAuthorsByTaskAsync(clientId, taskId, configuration.StatisticsAnalyzing.CountOfLastAuthorsForCalculatingMeanAndDeviation).ConfigureAwait(false);

                var lastSubmissions = await localSubmissionsRepo.GetLastSubmissionsByAuthorsForTaskAsync(clientId, taskId, lastAuthorsIds).ConfigureAwait(false);

                var currentSubmissionsCount = await localSubmissionsRepo.GetSubmissionsCountAsync(clientId, taskId).ConfigureAwait(false);

                var(weights, statisticsParameters) = await statisticsParametersFinder.FindStatisticsParametersAsync(lastSubmissions).ConfigureAwait(false);

                logger.Information($"Новые статистические параметры задачи (TaskStatisticsParameters) по задаче {taskId}: Mean={statisticsParameters.Mean}, Deviation={statisticsParameters.Deviation}");
                statisticsParameters.TaskId           = taskId;
                statisticsParameters.SubmissionsCount = currentSubmissionsCount;

                await tasksRepo.SaveTaskStatisticsParametersAsync(statisticsParameters).ConfigureAwait(false);

                return(weights);
            }
        }
예제 #2
0
        public async Task CalculateTaskStatisticsParametersAsync(int clientId, Guid taskId)
        {
            logger.Information($"Пересчитываю статистические параметры задачи (TaskStatisticsParameters) по задаче {taskId}");
            var lastAuthorsIds = await submissionsRepo.GetLastAuthorsByTaskAsync(clientId, taskId, configuration.StatisticsAnalyzing.CountOfLastAuthorsForCalculatingMeanAndDeviation);

            var lastSubmissions = await submissionsRepo.GetLastSubmissionsByAuthorsForTaskAsync(clientId, taskId, lastAuthorsIds);

            var currentSubmissionsCount = await submissionsRepo.GetSubmissionsCountAsync(clientId, taskId);

            var statisticsParameters = await statisticsParametersFinder.FindStatisticsParametersAsync(lastSubmissions);

            logger.Information($"Новые статистические параметры задачи (TaskStatisticsParameters) по задаче {taskId}: Mean={statisticsParameters.Mean}, Deviation={statisticsParameters.Deviation}");
            statisticsParameters.TaskId           = taskId;
            statisticsParameters.SubmissionsCount = currentSubmissionsCount;
            await tasksRepo.SaveTaskStatisticsParametersAsync(statisticsParameters);
        }