Exemplo n.º 1
0
        public static void SolutionAssessmentCollect(SolutionAnalysisResult result, string targetFramework, string version, string source, double analysisTime, string tag)
        {
            var sha256hash     = SHA256.Create();
            var date           = DateTime.Now;
            var solutionDetail = result.SolutionDetails;
            // Solution Metrics
            var solutionMetrics = createSolutionMetric(solutionDetail, targetFramework, version, source, analysisTime, tag, sha256hash, date);

            TelemetryCollector.Collect <SolutionMetrics>(solutionMetrics);

            foreach (var project in solutionDetail.Projects)
            {
                var projectMetrics = createProjectMetric(project, targetFramework, version, source, analysisTime, tag, sha256hash, date);
                TelemetryCollector.Collect <ProjectMetrics>(projectMetrics);
            }

            //nuget metrics
            result.ProjectAnalysisResults.ForEach(project =>
            {
                foreach (var nuget in project.PackageAnalysisResults)
                {
                    nuget.Value.Wait();
                    var packageID      = nuget.Value.Result.PackageVersionPair.PackageId;
                    var packageVersion = nuget.Value.Result.PackageVersionPair.Version;
                    var compatability  = nuget.Value.Result.CompatibilityResults[targetFramework].Compatibility;
                    var nugetMetrics   = createNugetMetric(targetFramework, version, source, analysisTime, tag, date, packageID, packageVersion, compatability);
                    TelemetryCollector.Collect <NugetMetrics>(nugetMetrics);
                }

                foreach (var sourceFile in project.SourceFileAnalysisResults)
                {
                    FileAssessmentCollect(sourceFile, targetFramework, version, source, tag);
                }
            });
        }
        public bool GenerateJsonReport(
            SolutionAnalysisResult solutionAnalysisResult,
            string outputFolder)
        {
            try
            {
                string SolutionName = solutionAnalysisResult.SolutionDetails.SolutionName;
                string BaseDir      = Path.Combine(outputFolder, SolutionName + AnalyzeRootFolder, SolutionAnalyzeFolder);
                Dictionary <string, string> FailedProjects = new Dictionary <string, string>();

                solutionAnalysisResult.ProjectAnalysisResults.ForEach(projectAnalysResult =>
                {
                    if (projectAnalysResult == null)
                    {
                        return;
                    }
                    List <Task <bool> > writeToFiles = new List <Task <bool> >();
                    string ProjectName = projectAnalysResult.ProjectName;
                    string FileDir     = Path.Combine(BaseDir, ProjectName);
                    Directory.CreateDirectory(FileDir);
                    List <PackageAnalysisResult> packageAnalysisResults = new List <PackageAnalysisResult>();
                    Dictionary <PackageVersionPair, string> packageAnalysisResultErrors = new Dictionary <PackageVersionPair, string>();

                    projectAnalysResult.PackageAnalysisResults.ToList()
                    .ForEach(p =>
                    {
                        p.Value.ContinueWith(result =>
                        {
                            if (result.IsCompletedSuccessfully)
                            {
                                packageAnalysisResults.Add(result.Result);
                            }
                            else
                            {
                                packageAnalysisResultErrors.Add(p.Key, result.Exception.Message);
                            }
                        });
                    });

                    //project apis analsis result
                    string ApiAnalyzeFileName    = ProjectName + "-api-analysis.json";
                    var projectApiAnalysisResult = projectAnalysResult.IsBuildFailed ? new ProjectApiAnalysisResult
                    {
                        Errors = new List <string> {
                            $"Errors during compilation in {projectAnalysResult.ProjectName}."
                        },
                        SolutionFile = SolutionName,
                        ProjectFile  = ProjectName,
                    } : new ProjectApiAnalysisResult
                    {
                        Errors       = projectAnalysResult.Errors,
                        SolutionFile = SolutionName,
                        ProjectFile  = ProjectName,
                        SourceFileAnalysisResults = projectAnalysResult.SourceFileAnalysisResults
                    };
                    writeToFiles.Add(WriteReportToFileAsync(projectApiAnalysisResult, Path.Combine(FileDir, ApiAnalyzeFileName)));

                    //project packages analsis result
                    string PackageAnalyzeFileName = ProjectName + "-package-analysis.json";
                    writeToFiles.Add(WriteReportToFileAsync(packageAnalysisResults, Path.Combine(FileDir, PackageAnalyzeFileName)));

                    //project failed packages result
                    if (packageAnalysisResultErrors != null && packageAnalysisResultErrors.Count != 0)
                    {
                        string PackageAnalyzeErrorFileName = ProjectName + "-package-analysis-error.json";
                        writeToFiles.Add(WriteReportToFileAsync(packageAnalysisResults, Path.Combine(FileDir, PackageAnalyzeErrorFileName)));
                    }
                    Task.WaitAll(writeToFiles.ToArray());
                });
                if (FailedProjects?.Count != 0)
                {
                    WriteReportToFileAsync(FailedProjects, Path.Combine(BaseDir, "failed.json")).Wait();
                }
                return(true);
            }
            catch (Exception ex)
            {
                _logger.LogError("failed to generate analyze report: {0}", ex);
                return(false);
            }
        }
Exemplo n.º 3
0
 public SolutionAnalysis(Solution solution, SolutionAnalysisResult result) =>
 (Solution, Result) = (solution, result);