private void SavePullRequestSimulatedRecommendationResults(KnowledgeDistributionMap knowledgeDistributioneMap, LossSimulation lossSimulation) { var results = knowledgeDistributioneMap.PullRequestSimulatedRecommendationMap.Values; var bulkPullRequestSimulatedRecommendationResults = new List <Data.PullRequestRecommendationResult>(); var bulkRecommendedPullRequestCandidatess = new List <RecommendedPullRequestCandidate>(results.Count() * 5); foreach (var result in results) { bulkPullRequestSimulatedRecommendationResults.Add(new Data.PullRequestRecommendationResult() { ActualReviewers = result.ActualReviewers?.Count() > 0 ? result.ActualReviewers?.Aggregate((a, b) => a + ", " + b) : null, SelectedReviewers = result.SelectedReviewers?.Count() > 0 ? result.SelectedReviewers?.Aggregate((a, b) => a + ", " + b) : null, SortedCandidates = result.SortedCandidates?.Count() > 0 ? result.SortedCandidates.Take(10).Select(q => q.DeveloperName)?.Aggregate((a, b) => a + ", " + b) : null, ActualReviewersLength = result.ActualReviewers.Length, SelectedReviewersLength = result.SelectedReviewers.Length, SortedCandidatesLength = result.SortedCandidates?.Length, PullRequestNumber = result.PullRequestNumber, MeanReciprocalRank = result.MeanReciprocalRank, TopFiveIsAccurate = result.TopFiveIsAccurate, TopTenIsAccurate = result.TopTenIsAccurate, IsSimulated = result.IsSimulated, LossSimulationId = lossSimulation.Id, Expertise = result.Expertise, IsRisky = result.IsRisky, Features = result.Features }); for (int i = 0; i < result.SortedCandidates.Take(10).Count(); i++) { bulkRecommendedPullRequestCandidatess.Add(new RecommendedPullRequestCandidate( lossSimulationId: lossSimulation.Id, rank: i + 1, normalizedReviewerName: result.SortedCandidates[i].DeveloperName, score: result.SortedCandidates[i].Score, pullRequestNumber: result.PullRequestNumber)); } } _dbContext.BulkInsert(bulkRecommendedPullRequestCandidatess, new BulkConfig { BatchSize = 50000, BulkCopyTimeout = 0 }); _dbContext.BulkInsert(bulkPullRequestSimulatedRecommendationResults, new BulkConfig { BatchSize = 50000, BulkCopyTimeout = 0 }); }
public async Task Execute(string token, string agenName, string owner, string repo, string branch) { using (var dbContext = new GitRepositoryDbContext(false)) { dbContext.Database.ExecuteSqlCommand($"TRUNCATE TABLE PullRequestReviewerComments"); var githubExtractor = new GithubDataFetcher(token, agenName, _logger); var pullRequestReviewerComments = await githubExtractor.FetchPullRequestReviewerCommentsFromRepository(owner, repo).ConfigureAwait(false); _logger.LogInformation("{datetime}: saving {count} review comments into database.", DateTime.Now, pullRequestReviewerComments.Length); dbContext.BulkInsert(pullRequestReviewerComments, new BulkConfig { BatchSize = 50000, BulkCopyTimeout = 0 }); _logger.LogInformation("{datetime}: {count} review comments have been saved into database.", DateTime.Now, pullRequestReviewerComments.Length); } }
public async Task Execute(string repoPath, string branchName) { using (var dbContext = new GitRepositoryDbContext(false)) { var gitRepository = new GitRepository(repoPath, _logger); var orderedCommits = gitRepository.ExtractCommitsFromBranch(branchName); gitRepository.LoadChangesOfCommits(orderedCommits); _logger.LogInformation("{dateTime}: saving committed changes", DateTime.Now); dbContext.BulkInsert(orderedCommits.SelectMany(q => q.CommittedChanges).ToArray(), new BulkConfig { BatchSize = 50000, BulkCopyTimeout = 0 }); _logger.LogInformation("{dateTime}: committed changes have been saved successfully", DateTime.Now); } }
public async Task Execute(string token, string agenName, string owner, string repo, string branch) { using (var dbContext = new GitRepositoryDbContext(false)) { var loadedPullRequests = await dbContext.PullRequests.ToArrayAsync().ConfigureAwait(false); var githubExtractor = new GithubDataFetcher(token, agenName, _logger); var files = await githubExtractor.FetchFilesOfPullRequests(owner, repo, loadedPullRequests).ConfigureAwait(false); _logger.LogInformation("{datetime}: saving {count} pull request files into database.", DateTime.Now, files.Length); dbContext.BulkInsert(files, new BulkConfig { BatchSize = 50000, BulkCopyTimeout = 0 }); _logger.LogInformation("{datetime}: pull request files have been saved successfully.", DateTime.Now, loadedPullRequests.Length); } }
public async Task Execute(string token, string agenName, string owner, string repo, string branch) { using (var dbContext = new GitRepositoryDbContext(false)) { dbContext.Database.ExecuteSqlCommand($"TRUNCATE TABLE PullRequestReviewers"); var pullRequests = await dbContext.PullRequests.AsNoTracking() .OrderBy(q => q.Number) .ToArrayAsync().ConfigureAwait(false); _logger.LogInformation("{datetime}: trying to fetch all the assigned reviewers for all {count} pull requests.", DateTime.Now, pullRequests.Length); var githubExtractor = new GithubDataFetcher(token, agenName, _logger); var pullRequestReviews = await githubExtractor.FetchReviewersOfPullRequests(owner, repo, pullRequests).ConfigureAwait(false); _logger.LogInformation("{datetime}: trying to save {count} reviewers into database.", DateTime.Now, pullRequestReviews.Length); dbContext.BulkInsert(pullRequestReviews, new BulkConfig { BatchSize = 50000, BulkCopyTimeout = 0 }); _logger.LogInformation("{datetime}: reviewers has been save successfully.", DateTime.Now, pullRequestReviews.Length); } }