/// <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); } }
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); }