Esempio n. 1
0
        private IEnumerable <BuildInfoDto> GetBuildInfoDtosPerBuildDefinition(List <IBuildDefinition> buildDefinitionList,
                                                                              IBuildServer buildServer, CatalogNode teamProjectNode,
                                                                              TfsTeamProjectCollection teamProjectCollection, ITestManagementService testService, DateTime filterDate)
        {
            var buildDtos = new List <BuildInfoDto>();

            try
            {
                Parallel.ForEach(buildDefinitionList, def =>
                {
                    var build = GetBuild(buildServer, teamProjectNode, def, filterDate);

                    if (build == null)
                    {
                        return;
                    }

                    var buildInfoDto = new BuildInfoDto
                    {
                        Builddefinition       = def.Name,
                        FinishBuildDateTime   = build.FinishTime,
                        LastBuildTime         = new TimeSpan(),
                        PassedNumberOfTests   = 0,
                        RequestedByName       = build.RequestedFor,
                        RequestedByPictureUrl = "",
                        StartBuildDateTime    = build.StartTime,
                        Status                = Char.ToLowerInvariant(build.Status.ToString()[0]) + build.Status.ToString().Substring(1),
                        TeamProject           = teamProjectNode.Resource.DisplayName,
                        TeamProjectCollection = teamProjectCollection.Name,
                        TotalNumberOfTests    = 0,
                        Id             = "TFS" + teamProjectNode.Resource.Identifier + def.Id,
                        BuildReportUrl = _helperClass.GetReportUrl(teamProjectCollection.Uri.ToString(), teamProjectNode.Resource.DisplayName, build.Uri.OriginalString)
                    };
                    //Retrieve testruns
                    var testResults = GetTestResults(teamProjectNode, testService, build);

                    if (testResults.ContainsKey("PassedTests"))
                    {
                        buildInfoDto.PassedNumberOfTests = testResults["PassedTests"];
                        buildInfoDto.TotalNumberOfTests  = testResults["TotalTests"];
                    }
                    //Add last succeeded build if in progress
                    if (build.Status == BuildStatus.InProgress)
                    {
                        buildInfoDto.LastBuildTime = GetLastSuccesfulBuildTime(buildServer, teamProjectNode, def);
                    }
                    lock (buildDtos)
                    {
                        buildDtos.Add(buildInfoDto);
                    }
                });
            }
            catch (Exception e)
            {
                LogService.WriteError(e);
                throw;
            }

            return(buildDtos);
        }
Esempio n. 2
0
        private IEnumerable <BuildInfoDto> GetBuildsForPollingSince(string teamProjectName, string teamProjectId, DateTime finishTime)
        {
            List <BuildInfoDto> dtos = new List <BuildInfoDto>();

            try
            {
                var polledBuilds = GetPolledBuilds(teamProjectName, finishTime);
                Parallel.ForEach(polledBuilds, new ParallelOptions {
                    MaxDegreeOfParallelism = DegreeOfParallelism
                }, build =>
                {
                    var buildInfoDto = new BuildInfoDto
                    {
                        TeamProject           = teamProjectName,
                        Status                = build.Status,
                        Builddefinition       = build.Definition.Name,
                        StartBuildDateTime    = build.StartTime,
                        FinishBuildDateTime   = build.FinishTime,
                        RequestedByName       = build.Requests.First().RequestedFor.DisplayName,
                        RequestedByPictureUrl = build.Requests.First().RequestedFor.ImageUrl,
                        TotalNumberOfTests    = 0,
                        PassedNumberOfTests   = 0,
                        BuildReportUrl        = _helperClass.ConvertReportUrl(teamProjectName, build.Uri, true),
                        Id = "VSO" + teamProjectId + build.Definition.Id
                    };
                    if (build.Status.Equals(Enum.GetName(typeof(StatusEnum.Statuses), StatusEnum.Statuses.inProgress)))
                    {
                        buildInfoDto.BuildReportUrl = _helperClass.ConvertReportUrl(teamProjectName, build.Uri, false);
                        var lastBuildTime           = GetLastBuildTime(teamProjectName, build);
                        if (lastBuildTime != null)
                        {
                            buildInfoDto.LastBuildTime = lastBuildTime.FinishTime - lastBuildTime.StartTime;
                        }
                    }
                    if (
                        build.Status.Equals(Enum.GetName(typeof(StatusEnum.Statuses),
                                                         StatusEnum.Statuses.partiallySucceeded)))
                    {
                        var results = GetTestResults(teamProjectName, build.Uri);
                        if (results != null)
                        {
                            buildInfoDto.TotalNumberOfTests  = results.Count;
                            buildInfoDto.PassedNumberOfTests =
                                results.Count(r => r.Outcome.ToLower().Equals("passed"));
                        }
                    }
                    lock (dtos)
                    {
                        dtos.Add(buildInfoDto);
                    }
                });
            }
            catch (Exception e)
            {
                LogService.WriteError(e);
                throw;
            }
            return(dtos);
        }
Esempio n. 3
0
        private BuildInfoDto GetLatestBuild(string teamProjectName, string bdId, string bdUri, string bdName, string teamProjectId)
        {
            BuildInfoDto buildInfoDto = null;

            try
            {
                var latestBuild =
                    _helperClass
                    .RetrieveTask <Build>(
                        (String.Format(_configurationRestService.RetrieveLastBuildAsyncUrl, teamProjectName, bdId)))
                    .Result
                    .FirstOrDefault();
                if (latestBuild == null)
                {
                    return(null);
                }
                buildInfoDto = new BuildInfoDto
                {
                    TeamProject           = teamProjectName,
                    Status                = latestBuild.Result ?? latestBuild.Status,
                    Builddefinition       = bdName,
                    StartBuildDateTime    = latestBuild.StartTime,
                    FinishBuildDateTime   = latestBuild.FinishTime,
                    RequestedByName       = latestBuild.RequestedFor.DisplayName,
                    RequestedByPictureUrl = latestBuild.RequestedFor.ImageUrl + "&size=2",
                    TotalNumberOfTests    = 0,
                    PassedNumberOfTests   = 0,
                    BuildReportUrl        = _helperClass.ConvertReportUrl(teamProjectName, latestBuild.Uri, true),
                    Id = "VSO" + teamProjectId + bdId
                };

                if (buildInfoDto.RequestedByName.StartsWith("[DefaultCollection]"))
                {
                    buildInfoDto.RequestedByName = "Service Account";
                }

                if (latestBuild.Status.Equals(Enum.GetName(typeof(StatusEnum.Statuses), StatusEnum.Statuses.inProgress)))
                {
                    buildInfoDto.BuildReportUrl = _helperClass.ConvertReportUrl(teamProjectName, latestBuild.Uri, false);
                    buildInfoDto.Status         = StatusEnum.Statuses.inProgress.ToString();
                    var secondLastBuildList =
                        _helperClass.RetrieveTask <Build>(
                            (String.Format(_configurationRestService.RetrieveLastSuccessfulBuildUrl, teamProjectName, bdId))).Result;

                    var secondLastBuild = secondLastBuildList.FirstOrDefault();
                    if (secondLastBuild != null)
                    {
                        buildInfoDto.LastBuildTime = secondLastBuild.FinishTime - secondLastBuild.StartTime;
                    }
                }
                //if (latestBuild.Result != null &&
                //    latestBuild.Result.Equals(Enum.GetName(typeof(StatusEnum.Statuses), StatusEnum.Statuses.partiallySucceeded)))
                if (latestBuild.Result != null)
                {
                    var results = GetTestResults(teamProjectName, latestBuild.Uri);
                    if (results != null)
                    {
                        buildInfoDto.TotalNumberOfTests  = results.Count - results.Count(r => r.Outcome.ToLower().Equals("notexecuted"));
                        buildInfoDto.PassedNumberOfTests = results.Count(r => r.Outcome.ToLower().Equals("passed"));
                    }
                }
            }
            catch (Exception e)
            {
                LogService.WriteError(e);
                throw;
            }

            return(buildInfoDto);
        }