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)
            });
        }
Esempio n. 2
0
        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);
        }