@@ -133,6 +133,17 @@ public DependencyManager(string srcDir, IDependencyOptions options, ILogger logg
133133 logger . LogInfo ( $ "{ conflictedReferences , align } resolved assembly conflicts") ;
134134 logger . LogInfo ( $ "{ dotnetFrameworkVersionVariantCount , align } restored .NET framework variants") ;
135135 logger . LogInfo ( $ "Build analysis completed in { DateTime . Now - startTime } ") ;
136+
137+ CompilationInfos . AddRange ( [
138+ ( "Source files on filesystem" , nonGeneratedSources . Count . ToString ( ) ) ,
139+ ( "Source files generated" , generatedSources . Count . ToString ( ) ) ,
140+ ( "Solution files on filesystem" , allSolutions . Count . ToString ( ) ) ,
141+ ( "Project files on filesystem" , allProjects . Count . ToString ( ) ) ,
142+ ( "Resolved references" , usedReferences . Keys . Count . ToString ( ) ) ,
143+ ( "Unresolved references" , unresolvedReferences . Count . ToString ( ) ) ,
144+ ( "Resolved assembly conflicts" , conflictedReferences . ToString ( ) ) ,
145+ ( "Restored .NET framework variants" , dotnetFrameworkVersionVariantCount . ToString ( ) ) ,
146+ ] ) ;
136147 }
137148
138149 private HashSet < string > AddFrameworkDlls ( HashSet < string > dllPaths )
@@ -146,12 +157,18 @@ private HashSet<string> AddFrameworkDlls(HashSet<string> dllPaths)
146157 return frameworkLocations ;
147158 }
148159
149- private void RestoreNugetPackages ( List < FileInfo > allNonBinaryFiles , IEnumerable < string > allProjects , IEnumerable < string > allSolutions , HashSet < string > dllPaths )
160+ private void RestoreNugetPackages ( List < FileInfo > allNonBinaryFiles , List < string > allProjects , List < string > allSolutions , HashSet < string > dllPaths )
150161 {
151162 try
152163 {
153164 var nuget = new NugetPackages ( sourceDir . FullName , legacyPackageDirectory , logger ) ;
154- nuget . InstallPackages ( ) ;
165+ var count = nuget . InstallPackages ( ) ;
166+
167+ if ( nuget . PackageCount > 0 )
168+ {
169+ CompilationInfos . Add ( ( "packages.config files" , nuget . PackageCount . ToString ( ) ) ) ;
170+ CompilationInfos . Add ( ( "Successfully restored packages.config files" , count . ToString ( ) ) ) ;
171+ }
155172
156173 var nugetPackageDlls = legacyPackageDirectory . DirInfo . GetFiles ( "*.dll" , new EnumerationOptions { RecurseSubdirectories = true } ) ;
157174 var nugetPackageDllPaths = nugetPackageDlls . Select ( f => f . FullName ) . ToHashSet ( ) ;
@@ -629,6 +646,11 @@ private void ResolveConflicts(IEnumerable<string> frameworkPaths)
629646 /// </summary>
630647 public IEnumerable < string > UnresolvedReferences => unresolvedReferences . Select ( r => r . Key ) ;
631648
649+ /// <summary>
650+ /// List of `(key, value)` tuples, that are stored in the DB for telemetry purposes.
651+ /// </summary>
652+ public List < ( string , string ) > CompilationInfos { get ; } = new List < ( string , string ) > ( ) ;
653+
632654 /// <summary>
633655 /// Record that a particular reference couldn't be resolved.
634656 /// Note that this records at most one project file per missing reference.
@@ -697,17 +719,24 @@ private void AnalyseProject(FileInfo project)
697719 /// Returns a list of projects that are up to date with respect to restore.
698720 /// </summary>
699721 /// <param name="solutions">A list of paths to solution files.</param>
700- private IEnumerable < string > RestoreSolutions ( IEnumerable < string > solutions , out IEnumerable < string > assets )
722+ private IEnumerable < string > RestoreSolutions ( List < string > solutions , out IEnumerable < string > assets )
701723 {
724+ var successCount = 0 ;
702725 var assetFiles = new List < string > ( ) ;
703726 var projects = solutions . SelectMany ( solution =>
704727 {
705728 logger . LogInfo ( $ "Restoring solution { solution } ...") ;
706729 var res = dotnet . Restore ( new ( solution , packageDirectory . DirInfo . FullName , ForceDotnetRefAssemblyFetching : true ) ) ;
730+ if ( res . Success )
731+ {
732+ successCount ++ ;
733+ }
707734 assetFiles . AddRange ( res . AssetsFilePaths ) ;
708735 return res . RestoredProjects ;
709- } ) ;
736+ } ) . ToList ( ) ;
710737 assets = assetFiles ;
738+ CompilationInfos . Add ( ( "Successfully restored solution files" , successCount . ToString ( ) ) ) ;
739+ CompilationInfos . Add ( ( "Restored projects through solution files" , projects . Count . ToString ( ) ) ) ;
711740 return projects ;
712741 }
713742
@@ -719,14 +748,24 @@ private IEnumerable<string> RestoreSolutions(IEnumerable<string> solutions, out
719748 /// <param name="projects">A list of paths to project files.</param>
720749 private void RestoreProjects ( IEnumerable < string > projects , out IEnumerable < string > assets )
721750 {
751+ var successCount = 0 ;
722752 var assetFiles = new List < string > ( ) ;
753+ var sync = new object ( ) ;
723754 Parallel . ForEach ( projects , new ParallelOptions { MaxDegreeOfParallelism = options . Threads } , project =>
724755 {
725756 logger . LogInfo ( $ "Restoring project { project } ...") ;
726757 var res = dotnet . Restore ( new ( project , packageDirectory . DirInfo . FullName , ForceDotnetRefAssemblyFetching : true ) ) ;
727- assetFiles . AddRange ( res . AssetsFilePaths ) ;
758+ lock ( sync )
759+ {
760+ if ( res . Success )
761+ {
762+ successCount ++ ;
763+ }
764+ assetFiles . AddRange ( res . AssetsFilePaths ) ;
765+ }
728766 } ) ;
729767 assets = assetFiles ;
768+ CompilationInfos . Add ( ( "Successfully restored project files" , successCount . ToString ( ) ) ) ;
730769 }
731770
732771 private void DownloadMissingPackages ( List < FileInfo > allFiles , ISet < string > dllPaths )
@@ -767,6 +806,11 @@ private void DownloadMissingPackages(List<FileInfo> allFiles, ISet<string> dllPa
767806 logger . LogInfo ( $ "Using nuget.config file { nugetConfig } .") ;
768807 }
769808
809+ CompilationInfos . Add ( ( "Fallback nuget restore" , notYetDownloadedPackages . Count . ToString ( ) ) ) ;
810+
811+ var successCount = 0 ;
812+ var sync = new object ( ) ;
813+
770814 Parallel . ForEach ( notYetDownloadedPackages , new ParallelOptions { MaxDegreeOfParallelism = options . Threads } , package =>
771815 {
772816 logger . LogInfo ( $ "Restoring package { package } ...") ;
@@ -798,9 +842,25 @@ private void DownloadMissingPackages(List<FileInfo> allFiles, ISet<string> dllPa
798842 {
799843 logger . LogInfo ( $ "Failed to restore nuget package { package } ") ;
800844 }
845+ else
846+ {
847+ lock ( sync )
848+ {
849+ successCount ++ ;
850+ }
851+ }
852+ }
853+ else
854+ {
855+ lock ( sync )
856+ {
857+ successCount ++ ;
858+ }
801859 }
802860 } ) ;
803861
862+ CompilationInfos . Add ( ( "Successfully ran fallback nuget restore" , successCount . ToString ( ) ) ) ;
863+
804864 dllPaths . Add ( missingPackageDirectory . DirInfo . FullName ) ;
805865 }
806866
0 commit comments