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); }
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); }
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); }