コード例 #1
0
        public async Task <HealthMetrics> CheckHealth(PackageURL purl)
        {
            // Use reflection to find the correct package management class
            var projectManagerClass = typeof(BaseProjectManager).Assembly.GetTypes()
                                      .Where(type => type.IsSubclassOf(typeof(BaseProjectManager)))
                                      .Where(type => type.Name.Equals($"{purl.Type}ProjectManager",
                                                                      StringComparison.InvariantCultureIgnoreCase))
                                      .FirstOrDefault();

            if (projectManagerClass != default)
            {
                var ctor           = projectManagerClass.GetConstructor(Array.Empty <Type>());
                var projectManager = (BaseProjectManager)(ctor.Invoke(Array.Empty <object>()));
                var content        = await projectManager.GetMetadata(purl);

                if (!string.IsNullOrWhiteSpace(content))
                {
                    foreach (var githubPurl in BaseProjectManager.ExtractGitHubPackageURLs(content))
                    {
                        try
                        {
                            var healthAlgorithm = new GitHubHealthAlgorithm(githubPurl);
                            var health          = await healthAlgorithm.GetHealth();

                            return(health);
                        }
                        catch (Exception ex)
                        {
                            Logger.Warn(ex, "Unable to calculate health for {0}: {1}", githubPurl, ex.Message);
                        }
                    }
                }
                else
                {
                    Logger.Warn("No metadata found for {0}", purl.ToString());
                }
            }
            else
            {
                throw new ArgumentException("Invalid Package URL type: {0}", purl.Type);
            }
            return(default);
コード例 #2
0
ファイル: HealthTool.cs プロジェクト: microsoft/OSSGadget
        public async Task <HealthMetrics?> CheckHealth(PackageURL purl)
        {
            BaseProjectManager?packageManager = ProjectManagerFactory.CreateProjectManager(purl);

            if (packageManager != null)
            {
                string?content = await packageManager.GetMetadataAsync(purl);

                if (!string.IsNullOrWhiteSpace(content))
                {
                    RepoSearch repoSearcher = new RepoSearch(ProjectManagerFactory);
                    foreach ((PackageURL githubPurl, double _) in await repoSearcher.ResolvePackageLibraryAsync(purl))
                    {
                        try
                        {
                            GitHubHealthAlgorithm?healthAlgorithm = new GitHubHealthAlgorithm(githubPurl);
                            HealthMetrics?        health          = await healthAlgorithm.GetHealth();

                            return(health);
                        }
                        catch (Exception ex)
                        {
                            Logger.Warn(ex, "Unable to calculate health for {0}: {1}", githubPurl, ex.Message);
                        }
                    }
                }
                else
                {
                    Logger.Warn("No metadata found for {0}", purl.ToString());
                }
            }
            else
            {
                throw new ArgumentException($"Invalid Package URL type: {purl.Type}");
            }
            return(null);
        }