protected override void Update() { var buildDefinitions = new ConcurrentBag <BuildDefinition>(); Parallel.ForEach(projectRepository.GetAll(), new ParallelOptions { MaxDegreeOfParallelism = AppSettings.MAX_DEGREE_OF_PARALLELISM }, project => { List <TFSAdvanced.Updater.Models.Builds.BuildDefinition> definitions = GetAsync.FetchResponseList <TFSAdvanced.Updater.Models.Builds.BuildDefinition>(requestData, $"{requestData.BaseAddress}/{project.Name}/_apis/build/definitions?api=2.2", Logger).Result; if (definitions == null) { Logger.LogInformation($"Unable to get the definition for the project {project.Name}"); return; } Parallel.ForEach(definitions, new ParallelOptions { MaxDegreeOfParallelism = AppSettings.MAX_DEGREE_OF_PARALLELISM }, definition => { TFSAdvanced.Updater.Models.Builds.BuildDefinition populatedDefinition = GetAsync.Fetch <TFSAdvanced.Updater.Models.Builds.BuildDefinition>(requestData, definition.url).Result; Repository repository = repositoryRepository.GetById(populatedDefinition.repository.id); if (repository == null) { Logger.LogDebug($"Repository no found for build definition {populatedDefinition.name} and repository {populatedDefinition.repository.name}"); } buildDefinitions.Add(new BuildDefinition { DefaultBranch = populatedDefinition.repository.defaultBranch, Folder = populatedDefinition.path, Id = populatedDefinition.id, Name = populatedDefinition.name, Url = populatedDefinition._links.web.href, Repository = repository }); }); }); buildDefinitionRepository.Update(buildDefinitions); updateStatusRepository.UpdateStatus(new UpdateStatus { LastUpdate = DateTime.Now, UpdatedRecords = buildDefinitions.Count, UpdaterName = nameof(BuildDefinitionUpdater) }); }
private Build CreateBuild(TFSAdvanced.Updater.Models.Builds.Build build) { var buildDto = new Build { Id = build.id, Name = build.definition.name, Folder = build.definition.path, Url = build._links.web.href, SourceCommit = build.sourceVersion, QueuedDate = build.queueTime, StartedDate = build.startTime, FinishedDate = build.finishTime, Creator = new User { Name = build.requestedFor.displayName, IconUrl = build.requestedFor.imageUrl } }; if (build.definition != null) { if (build.definition.repository == null) { BuildDefinition buildDefinitionDto = buildDefinitionRepository.GetBuildDefinition(build.definition.id); buildDto.Repository = buildDefinitionDto.Repository; } else { buildDto.Repository = repositoryRepository.GetById(build.definition.repository.id); } } switch (build.status) { case TFSAdvanced.Updater.Models.Builds.BuildStatus.notStarted: buildDto.BuildStatus = BuildStatus.NotStarted; break; case TFSAdvanced.Updater.Models.Builds.BuildStatus.inProgress: buildDto.BuildStatus = BuildStatus.Building; break; default: switch (build.result) { case BuildResult.abandoned: buildDto.BuildStatus = BuildStatus.Abandonded; break; case BuildResult.canceled: buildDto.BuildStatus = BuildStatus.Cancelled; break; case BuildResult.expired: buildDto.BuildStatus = BuildStatus.Expired; break; case BuildResult.failed: case BuildResult.partiallySucceeded: buildDto.BuildStatus = BuildStatus.Failed; break; case BuildResult.succeeded: buildDto.BuildStatus = BuildStatus.Succeeded; break; default: buildDto.BuildStatus = BuildStatus.NoBuild; break; } break; } return(buildDto); }