Пример #1
0
        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();
        }
Пример #2
0
        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);
        }
Пример #3
0
        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();
            }
        }
Пример #4
0
        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}");
                }
            }
        }
Пример #5
0
 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));
 }