Пример #1
0
        /// <summary>
        ///     Downloads data from CiDataProvider for given project
        /// </summary>
        /// <param name="projectId"></param>
        /// <returns>All pipelines</returns>
        public async Task UpdateCiDataForProjectAsync(int projectId)
        {
            var project = await GetProjectByIdAsync(projectId);

            if (project == null)
            {
                return;
            }

            PipelinesMerger merger       = new PipelinesMerger();
            var             dataProvider = _ciDataProviderFactory.CreateForProviderName(project.DataProviderName);

            var staticBranchesNamesDb = await _staticBranchPanelRepository.GetBranchNamesFromStaticPanelsForProject(projectId);

            var staticBranchesPipelines = await Task.WhenAll(staticBranchesNamesDb.Select(b => dataProvider.FetchPipeLineByBranch(project.ApiHostUrl, project.ApiAuthenticationToken, project.ApiProjectId, b)));

            var targetPipelineNumber = project.PipelinesNumber - project.Pipelines.Count;

            await DownloadNewestPipelinesNotInBrancNameList(dataProvider, project, targetPipelineNumber, staticBranchesNamesDb, merger);

            ////Merge
            var mergeResult = merger.MergePipelines(project.Pipelines, staticBranchesPipelines, project.PipelinesNumber);

            await SaveMergedInDB(mergeResult, project);

            _logger.LogInformation($"Updated cidata for project: {project.Id}");
        }
Пример #2
0
        private async Task InsertPipelineToDB(Pipeline pipeline, Project project)
        {
            var staticBranchesNamesDb = await _staticBranchPanelRepository.GetBranchNamesFromStaticPanelsForProject(project.Id);

            PipelinesMerger merger           = new PipelinesMerger();
            List <Pipeline> projectPipelines = new List <Pipeline>(project.Pipelines);

            merger.AddPipelinesPageAtEnd(new List <Pipeline>()
            {
                pipeline
            });
            var staticPipelines = project.Pipelines.Where(p => staticBranchesNamesDb.Contains(p.Ref));
            var mergeResult     = merger.MergePipelines(project.Pipelines, staticPipelines, project.PipelinesNumber);

            await SaveMergedInDB(mergeResult, project);
        }
Пример #3
0
        private async Task DownloadNewestPipelinesNotInBrancNameList(ICiDataProvider dataProvider, Project project, int howMany, IEnumerable <string> branchNames, PipelinesMerger merger)
        {
            var branchNamesSet    = new HashSet <string>(branchNames);
            var pageCounter       = 0;
            var maxPagesToLookFor = int.Parse(_configuration["DataProviders:NewestPipelinesMaxPages"]);

            while (merger.NewestPipelinesCount < howMany && pageCounter++ <= maxPagesToLookFor)
            {
                var pagedNewest = await dataProvider.FetchNewestPipelines(project.ApiHostUrl, project.ApiAuthenticationToken, project.ApiProjectId, pageCounter, perPage : howMany);

                var pagePipelinesNotInLocalStatic = pagedNewest.pipelines.Where(p => !branchNamesSet.Contains(p.Ref));

                merger.AddPipelinesPageAtEnd(pagePipelinesNotInLocalStatic);

                if (pageCounter >= pagedNewest.totalPages) //If last page
                {
                    break;
                }
            }
        }