public void GetSystemBuildStatisticsHappyPath_Test() { //set up ------------------------------------------------------ var dbContext = this.GetDbContext(true); var now = DateTime.Now; var buildStatisticsToSave = new BuildStatistics { Start = now, End = now.AddMinutes(1), BuildNumber = "123", Status = "Succeeded", Type = "CICD Pipeline - Website" }; dbContext.BuildStatistics.Add(buildStatisticsToSave); dbContext.SaveChanges(); //test --------------------------------------------------------- IBucketListData bd = new BucketListData(dbContext, this.userHelper); var buildStatistics = bd.GetSystemBuildStatistics(); Assert.IsNotNull(buildStatistics); var buildStatistic = buildStatistics .OrderByDescending(x => Convert.ToDateTime(x.Start)) .FirstOrDefault(); Assert.AreEqual(buildStatistic.Start, buildStatisticsToSave.Start.ToString()); Assert.AreEqual(buildStatistic.End, buildStatisticsToSave.End.ToString()); Assert.AreEqual(buildStatistic.BuildNumber, buildStatisticsToSave.BuildNumber); Assert.AreEqual(buildStatistic.Status, buildStatisticsToSave.Status); //clean up ------------------------------------------------------ dbContext.Remove(buildStatisticsToSave); dbContext.SaveChanges(); }
private BuildStatistics CreateCommitsStats(BuildCommits buildCommits, BuildInfo buildInfo) { var result = new BuildStatistics(buildInfo); var buildCommit = buildCommits.BuildCommit; var compareList = new List <Commit>(); compareList.Add(buildCommit); compareList.AddRange(buildCommits.PreviousCommits); var tracker = new FilesStatisticsTracker(); for (int i = 0; i < compareList.Count; i++) { var commitA = compareList.ElementAtOrDefault(i); var commitB = compareList.ElementAtOrDefault(i + 1); if (commitA == null || commitB == null) { break; } var commitStats = new CommitStats(); commitStats.LocalDateTime = commitA.Author.When.LocalDateTime; commitStats.Commit = commitA.Sha; commitStats.Author = commitA.Author.Name; var diff = this.repository.Diff.Compare <Patch>(commitB.Tree, commitA.Tree); foreach (var file in diff) { tracker.AddAuthor(file.Path, file.OldPath, commitA.Author.Name); tracker.IncreaseRevision(file.Path, file.OldPath); var fileStats = new FileStats(); fileStats.Path = file.Path; fileStats.OldPath = file.OldPath; fileStats.NumberOfModifiedLines = file.LinesAdded + file.LinesDeleted; fileStats.BuildResult = buildInfo.BuildResult; fileStats.GitObjectId = file.Oid.Sha; commitStats.AddFileStats(fileStats); } result.AddStats(commitStats); } foreach (var loopStat in result.CommitStats) { foreach (var loopFile in loopStat.FileStats) { loopFile.NumberOfDistinctCommitters = tracker.GetDisctinctAuthorsCount(loopFile.Path); loopFile.NumberOfRevisions = tracker.GetRevisionsCount(loopFile.Path); } } return(result); }
public async Task Export(BuildStatistics buildStatistics) { ValidationHelper.IsNotNull(buildStatistics, nameof(buildStatistics)); using (var context = this.CreateContext()) { foreach (var loopStat in buildStatistics.CommitStats) { foreach (var loopfile in loopStat.FileStats) { context.Metrics.Add(this.CreateStat(buildStatistics.BuildInfo, loopStat, loopfile)); } } await context.SaveChangesAsync(); } }
private void LogStatistics(BuildStatistics buildStatistics) { foreach (var loopStatistic in buildStatistics.CommitStats) { this.logger.Info($" Files changed in commit={loopStatistic.Commit}"); foreach (var loopStatisticFileStat in loopStatistic.FileStats) { this.logger.Info($" {loopStatisticFileStat.Path}"); if (loopStatisticFileStat.PathHasChanged) { this.logger.Info($" old: {loopStatisticFileStat.OldPath}"); } this.logger.Info($" Number of distinct commiters: {loopStatisticFileStat.NumberOfDistinctCommitters}"); this.logger.Info($" Modified lines: {loopStatisticFileStat.NumberOfModifiedLines}"); this.logger.Info($" Number of revisions: {loopStatisticFileStat.NumberOfRevisions}"); } } }
private async Task OnStatisticCreated(BuildStatistics buildStatistics) { this.LogStatistics(buildStatistics); this.logger.Info(string.Empty); await this.dataExportService.Export(buildStatistics); }
private void Builder_OnBuilderWarning(BuildWarning warning) { SetMessage(BuildStatistics.GetWarningMessage(warning)); }