public static void SolutionAssessmentCollect()

in src/PortingAssistantExtensionTelemetry/Collector.cs [13:95]


        public static void SolutionAssessmentCollect(SolutionAnalysisResult result, string runId, string triggerType, string targetFramework, string extensionVersion, string visualStudioVersion, double time)
        {
            var sha256hash = SHA256.Create();
            var date = DateTime.Now;
            var solutionDetail = result.SolutionDetails;
            // Solution Metrics
            var solutionMetrics = new SolutionMetrics
            {
                MetricsType = MetricsType.solution,
                RunId = runId,
                TriggerType = triggerType,
                PortingAssistantExtensionVersion = extensionVersion,
                VisualStudioClientVersion = visualStudioVersion,
                TargetFramework = targetFramework,
                TimeStamp = date.ToString("MM/dd/yyyy HH:mm"),
                SolutionPath = GetHash(sha256hash, solutionDetail.SolutionFilePath),
                ApplicationGuid = result.SolutionDetails.ApplicationGuid,
                SolutionGuid = result.SolutionDetails.SolutionGuid,
                RepositoryUrl = result.SolutionDetails.RepositoryUrl,
                AnalysisTime = time,
            };
            TelemetryCollector.Collect<SolutionMetrics>(solutionMetrics);

            result.ProjectAnalysisResults.ForEach(projectAnalysisResult => {
                if (projectAnalysisResult == null) 
                {
                    return;
                }
                var projectMetrics = new ProjectMetrics
                {
                    MetricsType = MetricsType.project,
                    RunId = runId,
                    TriggerType = triggerType,
                    PortingAssistantExtensionVersion = extensionVersion,
                    VisualStudioClientVersion = visualStudioVersion,
                    TargetFramework = targetFramework,
                    sourceFrameworks = projectAnalysisResult.TargetFrameworks,
                    TimeStamp = date.ToString("MM/dd/yyyy HH:mm"),
                    projectGuid = projectAnalysisResult.ProjectGuid,
                    projectType = projectAnalysisResult.ProjectType,
                    numNugets = projectAnalysisResult.PackageReferences.Count,
                    numReferences = projectAnalysisResult.ProjectReferences.Count,
                    isBuildFailed = projectAnalysisResult.IsBuildFailed,
                    compatibilityResult = projectAnalysisResult.ProjectCompatibilityResult
                };
                TelemetryCollector.Collect<ProjectMetrics>(projectMetrics);

            });

            //nuget metrics
            result.ProjectAnalysisResults.ForEach(project =>
            {
                foreach (var nuget in project.PackageAnalysisResults)
                {
                    nuget.Value.Wait();
                    var nugetMetrics = new NugetMetrics
                    {
                        MetricsType = MetricsType.nuget,
                        RunId = runId,
                        TriggerType = triggerType,
                        PortingAssistantExtensionVersion = extensionVersion,
                        VisualStudioClientVersion = visualStudioVersion,
                        TargetFramework = targetFramework,
                        TimeStamp = date.ToString("MM/dd/yyyy HH:mm"),
                        pacakgeName = nuget.Value.Result.PackageVersionPair.PackageId,
                        packageVersion = nuget.Value.Result.PackageVersionPair.Version,
                        compatibility = nuget.Value.Result.CompatibilityResults[targetFramework].Compatibility,
                    };
                    TelemetryCollector.Collect<NugetMetrics>(nugetMetrics);
                }


                var allActions = project.SourceFileAnalysisResults.SelectMany(a => a.RecommendedActions);
                var selectedApis = project.SourceFileAnalysisResults.SelectMany(s => s.ApiAnalysisResults);

                allActions.ToList().ForEach(action => {
                    var selectedApi = selectedApis.FirstOrDefault(s => s.CodeEntityDetails.TextSpan.Equals(action.TextSpan));
                    selectedApi?.Recommendations?.RecommendedActions?.Add(action);
                });

                FileAssessmentCollect(selectedApis, runId, triggerType, targetFramework, extensionVersion, visualStudioVersion);
            });
        }