Пример #1
0
        public async Task SaveTaskStatisticsParametersAsync(TaskStatisticsParameters parameters)
        {
            using (var transaction = db.Database.BeginTransaction())
            {
                db.AddOrUpdate(parameters, p => p.TaskId == parameters.TaskId);
                await db.SaveChangesAsync();

                transaction.Commit();
            }
        }
Пример #2
0
        private async Task TrySaveTaskStatisticsParametersAsync(TaskStatisticsParameters parameters)
        {
            using (var transaction = await db.Database.BeginTransactionAsync(IsolationLevel.Serializable).ConfigureAwait(false))
            {
                db.AddOrUpdate(parameters, p => p.TaskId == parameters.TaskId);
                await db.SaveChangesAsync().ConfigureAwait(false);

                transaction.Commit();
            }
        }
Пример #3
0
        private async Task TrySaveTaskStatisticsParametersAsync(TaskStatisticsParameters parameters)
        {
            using (var ts = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromSeconds(30), TransactionScopeAsyncFlowOption.Enabled))
            {
                db.AddOrUpdate(parameters, p => p.TaskId == parameters.TaskId);
                await db.SaveChangesAsync().ConfigureAwait(false);

                ts.Complete();
            }
        }
Пример #4
0
 /* It's very important that SaveTaskStatisticsParametersAsync() works with disabled EF's Change Tracker */
 public Task SaveTaskStatisticsParametersAsync(TaskStatisticsParameters parameters, List <TaskStatisticsSourceData> sourceData)
 {
     return(FuncUtils.TrySeveralTimesAsync(
                async() =>
     {
         await TrySaveTaskStatisticsParametersAsync(parameters, sourceData).ConfigureAwait(false);
         return true;
     },
                3,
                () => Task.Delay(TimeSpan.FromSeconds(1)),
                typeof(SqlException)
                ));
 }
Пример #5
0
 public async Task SaveTaskStatisticsParametersAsync(TaskStatisticsParameters parameters)
 {
     await FuncUtils.TrySeveralTimesAsync(
         async() =>
     {
         await TrySaveTaskStatisticsParametersAsync(parameters);
         return(true);
     },
         3,
         () => Task.Delay(TimeSpan.FromSeconds(1)),
         typeof(SqlException)
         );
 }
Пример #6
0
        private async Task TrySaveTaskStatisticsParametersAsync(TaskStatisticsParameters parameters, List <TaskStatisticsSourceData> sourceData)
        {
            using (var ts = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromSeconds(30), TransactionScopeAsyncFlowOption.Enabled))
            {
                await db.TaskStatisticsSourceData
                .Where(d => d.Submission1.TaskId == parameters.TaskId)
                .DeleteAsync();

                db.AddOrUpdate(parameters, p => p.TaskId == parameters.TaskId);
                db.TaskStatisticsSourceData.AddRange(sourceData);
                await db.SaveChangesAsync().ConfigureAwait(false);

                ts.Complete();
            }
        }
Пример #7
0
 /* It's very important that SaveTaskStatisticsParametersAsync() works with disabled EF's Change Tracker */
 public async Task SaveTaskStatisticsParametersAsync(TaskStatisticsParameters parameters, List <TaskStatisticsSourceData> sourceData)
 {
     var executionStrategy = new NpgsqlRetryingExecutionStrategy(db, 5);
     await executionStrategy.ExecuteAsync(async() =>
     {
         using (var ts = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromSeconds(30), TransactionScopeAsyncFlowOption.Enabled))
         {
             await db.TaskStatisticsSourceData
             .Where(d => d.Submission1.TaskId == parameters.TaskId && d.Submission1.Language == parameters.Language)
             .DeleteAsync();
             db.AddOrUpdate(parameters, p => p.TaskId == parameters.TaskId && p.Language == parameters.Language);
             db.TaskStatisticsSourceData.AddRange(sourceData);
             await db.SaveChangesAsync().ConfigureAwait(false);
             ts.Complete();
         }
     });
 }
Пример #8
0
        private (double automaticFaintSuspicion, double automaticStrongSuspicion) GetAutomaticSuspicionLevels(TaskStatisticsParameters taskStatisticsParameters)
        {
            var faintSuspicionCoefficient  = configuration.AntiPlagiarism.StatisticsAnalyzing.FaintSuspicionCoefficient;
            var strongSuspicionCoefficient = configuration.AntiPlagiarism.StatisticsAnalyzing.StrongSuspicionCoefficient;
            var minFaintSuspicionLevel     = configuration.AntiPlagiarism.StatisticsAnalyzing.MinFaintSuspicionLevel;
            var minStrongSuspicionLevel    = configuration.AntiPlagiarism.StatisticsAnalyzing.MinStrongSuspicionLevel;
            var maxFaintSuspicionLevel     = configuration.AntiPlagiarism.StatisticsAnalyzing.MaxFaintSuspicionLevel;
            var maxStrongSuspicionLevel    = configuration.AntiPlagiarism.StatisticsAnalyzing.MaxStrongSuspicionLevel;

            var(faintSuspicion, strongSuspicion)
                = StatisticsParametersFinder.GetSuspicionLevels(taskStatisticsParameters.Mean, taskStatisticsParameters.Deviation, faintSuspicionCoefficient, strongSuspicionCoefficient);

            var automaticFaintSuspicion  = GetSuspicionLevelWithThreshold(faintSuspicion, minFaintSuspicionLevel, maxFaintSuspicionLevel);
            var automaticStrongSuspicion = GetSuspicionLevelWithThreshold(strongSuspicion, minStrongSuspicionLevel, maxStrongSuspicionLevel);

            return(automaticFaintSuspicion, automaticStrongSuspicion);
        }