Exemplo n.º 1
0
        public virtual ReleaseOverviewData PopulateOverviewData(List <Release> releaseList, DateTimeOffset finishDate, bool assessmentsTeam, bool enterpriseTeam)
        {
            var            lastReleaseByEnvironment  = new Dictionary <int, Release>();
            DateTimeOffset?earliestReleaseFinishTime = null;
            var            sumTimeToRestore          = 0.0m;

            foreach (var item in releaseList)
            {
                if (!lastReleaseByEnvironment.ContainsKey(item.ReleaseEnvironment.Id))
                {
                    lastReleaseByEnvironment.Add(item.ReleaseEnvironment.Id, new Release());
                }

                if (item.FinishTime < earliestReleaseFinishTime || earliestReleaseFinishTime == null)
                {
                    earliestReleaseFinishTime = item.FinishTime;
                }

                if (item.Attempts > 1 && lastReleaseByEnvironment[item.ReleaseEnvironment.Id].Name != item.Name &&
                    ReleaseVersionIsLater(item.Name, lastReleaseByEnvironment[item.ReleaseEnvironment.Id].Name))
                {
                    sumTimeToRestore =
                        (decimal)(item.FinishTime -
                                  lastReleaseByEnvironment[item.ReleaseEnvironment.Id].FinishTime).Value
                        .TotalMinutes;
                }

                lastReleaseByEnvironment[item.ReleaseEnvironment.Id] = item;
            }

            var releaseWeeks = (finishDate - earliestReleaseFinishTime)?.Days / 7m;

            var rolledBackReleases = GetRolledBackReleases(releaseList);

            var releaseOverviewData = new ReleaseOverviewData();

            releaseOverviewData.TotalDeploys      = releaseList.Count;
            releaseOverviewData.SuccessfulDeploys = releaseList.Count - rolledBackReleases.Count;
            releaseOverviewData.RolledBackDeploys = rolledBackReleases.Count;
            releaseOverviewData.DeployFrequency   = releaseWeeks != 0
                ? decimal.Round(decimal.Parse((releaseOverviewData.TotalDeploys / releaseWeeks)?.ToString("0.##") !), 2,
                                MidpointRounding.AwayFromZero)
                : 0;
            releaseOverviewData.MeanTimeToRestore = rolledBackReleases.Count != 0
                ? decimal.Round(decimal.Parse((sumTimeToRestore / rolledBackReleases.Count).ToString("0.##") !), 2,
                                MidpointRounding.AwayFromZero)
                : 0;
            releaseOverviewData.ChangeFailPercentage = releaseList.Count != 0
                ? decimal.Round(
                decimal.Parse(((decimal)rolledBackReleases.Count / releaseList.Count * 100).ToString("0.##") !), 2,
                MidpointRounding.AwayFromZero)
                : 0;

            return(releaseOverviewData);
        }
        public async Task When_getting_release_overview_data()
        {
            var releaseList = new List <Release>
            {
                new Release
                {
                    Id = 1
                },
                new Release
                {
                    Id = 2
                }
            };

            var overviewData = new ReleaseOverviewData {
                ChangeFailPercentage = 4.23m,
                DeployFrequency      = 5.3m,
                MeanTimeToRestore    = 4.68m,
                RolledBackDeploys    = 2,
                SuccessfulDeploys    = 43,
                TotalDeploys         = 45
            };

            var mockReleaseRepository = new Mock <ReleaseRepository>();

            mockReleaseRepository
            .Setup(x => x.GetReleaseListAsync(It.IsAny <DateTimeOffset>(), It.IsAny <DateTimeOffset>()))
            .ReturnsAsync(releaseList);

            var mockReleaseHelper = new Mock <ReleaseHelper>();

            mockReleaseHelper.Setup(x => x.DevTeamForReleaseIsSelected(true, true, It.IsAny <Release>()))
            .Returns(true);
            mockReleaseHelper
            .Setup(x => x.PopulateOverviewData(It.IsAny <List <Release> >(),
                                               It.IsAny <DateTimeOffset>(), true, true)).Returns(overviewData);

            var tempOverviewHelper = new OverviewHelper(mockReleaseRepository.Object, mockReleaseHelper.Object);

            var result = await tempOverviewHelper.GetReleaseOverviewDataAsync(new DateTimeOffset(new DateTime(2021, 1, 11)),
                                                                              new DateTimeOffset(new DateTime(2021, 1, 11)), true, true);

            Assert.That(result.ChangeFailPercentage, Is.EqualTo(overviewData.ChangeFailPercentage));
            Assert.That(result.DeployFrequency, Is.EqualTo(overviewData.DeployFrequency));
            Assert.That(result.MeanTimeToRestore, Is.EqualTo(overviewData.MeanTimeToRestore));
            Assert.That(result.RolledBackDeploys, Is.EqualTo(overviewData.RolledBackDeploys));
            Assert.That(result.SuccessfulDeploys, Is.EqualTo(overviewData.SuccessfulDeploys));
            Assert.That(result.TotalDeploys, Is.EqualTo(overviewData.TotalDeploys));
        }
Exemplo n.º 3
0
        public async Task <ReleaseOverviewData> GetReleaseOverviewDataAsync(DateTimeOffset startDate, DateTimeOffset finishDate,
                                                                            bool assessmentsTeam, bool enterpriseTeam)
        {
            AssessmentsTeam = assessmentsTeam;
            EnterpriseTeam  = enterpriseTeam;

            var releaseList = await GetReleaseData(startDate, finishDate);

            var selectedReleases = releaseList.Where(release => releaseHelper.DevTeamForReleaseIsSelected(assessmentsTeam, enterpriseTeam, release)).ToList();

            var overviewData = new ReleaseOverviewData();

            if (selectedReleases.Count != 0)
            {
                overviewData = releaseHelper.PopulateOverviewData(selectedReleases, finishDate,
                                                                  assessmentsTeam, enterpriseTeam);
            }

            return(overviewData);
        }