in src/PortingAssistant.Client.Client/Reports/ReportExporter.cs [39:124]
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 =>
{
if (p.Value.IsCompletedSuccessfully)
{
packageAnalysisResults.Add(p.Value.Result);
}
else
{
packageAnalysisResultErrors.Add(p.Key, p.Value.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}." },
SchemaVersion = Common.Model.Schema.version,
SolutionFile = SolutionName,
SolutionGuid = solutionAnalysisResult.SolutionDetails.SolutionGuid,
ApplicationGuid = solutionAnalysisResult.SolutionDetails.ApplicationGuid,
RepositoryUrl = solutionAnalysisResult.SolutionDetails.RepositoryUrl,
ProjectFile = ProjectName,
} : new ProjectApiAnalysisResult
{
Errors = projectAnalysResult.Errors,
SchemaVersion = Common.Model.Schema.version,
SolutionFile = SolutionName,
SolutionGuid = solutionAnalysisResult.SolutionDetails.SolutionGuid,
ApplicationGuid = solutionAnalysisResult.SolutionDetails.ApplicationGuid,
RepositoryUrl = solutionAnalysisResult.SolutionDetails.RepositoryUrl,
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;
}
}