Пример #1
0
        public Task <bool> Validate(SolutionDao solution, out InvalidSolutionDao invalidSolutionModel, CancellationToken token = default)
        {
            // Validate if each package has proper name

            List <InvalidPorojectDao> invalidProjects = null;

            foreach (var project in solution.Projects)
            {
                var invalidPackages = project.Packages.Where(p => string.IsNullOrEmpty(p.PackageName));
                int totalPackages   = project.Packages.Count();

                if (!invalidPackages.Any())
                {
                    continue;
                }

                invalidProjects ??= new List <InvalidPorojectDao>();

                var invalidProject = new InvalidPorojectDao()
                {
                    InvalidPackages = invalidPackages.Select(p => new InvalidPackageDao()
                    {
                        Name    = p.PackageName,
                        Version = p.PackageVersion,
                    }),
                    FailedPackages = invalidPackages.Count(),
                    TotalPackages  = totalPackages,
                    Uri            = project.Url
                };

                invalidProjects.Add(invalidProject);

                solution.FailedPackages += invalidPackages.Count();
                solution.TotalPackages  += totalPackages;
            }

            if (invalidProjects != null)
            {
                var invalidSolution = new InvalidSolutionDao()
                {
                    Uri             = solution.Url,
                    ScrappingDate   = DateTime.Now,
                    InvalidProjects = invalidProjects,
                };

                invalidSolutionModel = invalidSolution;

                // strip invalid projects, we will scrap them later
                //solution.Projects = solution.Projects.Where(p => !invalidProjects.Any(ip => p.Url == ip.Uri));

                if (invalidProjects.Count() / solution.Projects.Count() > this.options.Value.FailedPackagesThreshold)
                {
                    return(Task.FromResult(false));
                }
            }

            invalidSolutionModel = null;
            return(Task.FromResult(true));
        }
Пример #2
0
        public async Task CreateInvalidSolution(InvalidSolutionDao solution, CancellationToken cancellationToken = default)
        {
            var solutions = await this.GetInvalidSolutions(cancellationToken);

            var newSolutions = solutions.Concat(new InvalidSolutionDao[] { solution });

            var stringContent = JsonSerializer.Serialize(newSolutions);

            await lockInvalidObject.WaitAsync(cancellationToken);

            try
            {
                await File.WriteAllTextAsync(InvalidJsonPath, stringContent, cancellationToken);
            }
            finally
            {
                lockInvalidObject.Release();
            }
        }
Пример #3
0
 public static InvalidSolution Map(InvalidSolutionDao solution)
 {
     return(new InvalidSolution()
     {
         ScrappingDate = solution.ScrappingDate,
         Uri = solution.Uri,
         InvalidProjects = solution.InvalidProjects.Select(p => new InvalidProject()
         {
             Uri = p.Uri,
             FailedPackages = p.FailedPackages,
             InvalidPackages = p.InvalidPackages.Select(pg => new InvalidPackage()
             {
                 Version = pg.Version,
                 Name = pg.Name,
             }),
             TotalPackages = p.TotalPackages,
         })
     });
 }