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);
});
}