From b245261954def5c37ce045f04b81a2ce745b6515 Mon Sep 17 00:00:00 2001 From: Andrei Ignat Date: Tue, 15 Oct 2024 19:03:45 +0300 Subject: [PATCH] display summary --- .../.config/dotnet-tools.json | 7 +++ .../AnalyzeMerge/AnalyzeMerge.csproj | 2 +- .../NPA.HtmlData/ExtractImages.cs | 28 ++++++--- .../NPA.HtmlData/NPA.HtmlData.csproj | 4 ++ .../NPA.HtmlData/globals.cs | 3 - .../NetPackageAnalyzerConsole.csproj | 12 +--- .../NetPackageAnalyzerConsole/Program.cs | 12 ++-- .../NetPackageAnalyzerConsole/RealMain.cs | 1 - .../GenerateHTML.cs | 11 +++- .../HtmlSummary.cshtml | 6 +- .../MDSummaryData.cs | 7 +++ .../NetPackageAnalyzerExportHTML.csproj | 4 +- .../Templates/MDSummary.cshtml | 54 ++++++++++++++++++ .../Templates/NamePerCountDisplay.cshtml | 57 ++++++++++++++++++- .../Templates/YEARNamePerCountDisplay.cshtml | 2 +- .../NetPackageAnalyzerObjects.csproj | 4 +- .../NetPackageAnalyzerDocusaurus.csproj | 4 +- 17 files changed, 176 insertions(+), 42 deletions(-) create mode 100644 src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/MDSummaryData.cs create mode 100644 src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/Templates/MDSummary.cshtml diff --git a/src/NetPackageAnalyzer/.config/dotnet-tools.json b/src/NetPackageAnalyzer/.config/dotnet-tools.json index 2da9aa4..d609e1d 100644 --- a/src/NetPackageAnalyzer/.config/dotnet-tools.json +++ b/src/NetPackageAnalyzer/.config/dotnet-tools.json @@ -15,6 +15,13 @@ "PackageAnalyzer" ], "rollForward": false + }, + "dotnet-depends": { + "version": "0.8.0", + "commands": [ + "dotnet-depends" + ], + "rollForward": false } } } \ No newline at end of file diff --git a/src/NetPackageAnalyzer/AnalyzeMerge/AnalyzeMerge.csproj b/src/NetPackageAnalyzer/AnalyzeMerge/AnalyzeMerge.csproj index be29433..9d51899 100644 --- a/src/NetPackageAnalyzer/AnalyzeMerge/AnalyzeMerge.csproj +++ b/src/NetPackageAnalyzer/AnalyzeMerge/AnalyzeMerge.csproj @@ -30,7 +30,7 @@ - + diff --git a/src/NetPackageAnalyzer/NPA.HtmlData/ExtractImages.cs b/src/NetPackageAnalyzer/NPA.HtmlData/ExtractImages.cs index 8359225..fe87c48 100644 --- a/src/NetPackageAnalyzer/NPA.HtmlData/ExtractImages.cs +++ b/src/NetPackageAnalyzer/NPA.HtmlData/ExtractImages.cs @@ -25,6 +25,17 @@ public async Task GetImagesAsync() { var dir = Path.GetDirectoryName(HtmlPath)!; + var nameFile= Path.GetFileNameWithoutExtension(HtmlPath); + var imagesDir = Path.Combine(dir, "images"); + if (!Directory.Exists(imagesDir)) + { + Directory.CreateDirectory(imagesDir); + } + imagesDir = Path.Combine(imagesDir, nameFile); + if (!Directory.Exists(imagesDir)) + { + Directory.CreateDirectory(imagesDir); + } using var playwright = await Playwright.CreateAsync(); await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions() { @@ -37,23 +48,26 @@ public async Task GetImagesAsync() var page = await context.NewPageAsync(); //await page.SetContentAsync(File.ReadAllText(HtmlPath)); - await page.GotoAsync(new Uri(HtmlPath).AbsoluteUri); + var resp= await page.GotoAsync(new Uri(HtmlPath).AbsoluteUri); await page.WaitForLoadStateAsync(LoadState.NetworkIdle); - + await page.EvaluateAsync("driverObj.destroy()"); var titles = await page.Locator("//div[starts-with(@title,'image')]").AllAsync(); var nr = titles.Count(); - Console.WriteLine($"Found {nr} images"); + //Console.WriteLine($"Found {nr} images"); for (var i = 0; i < nr; i++) { var title = titles[i]; var name=await title.GetAttributeAsync("title"); - name=name.Replace("image", "").Trim(); - + if(string.IsNullOrWhiteSpace(name)) + continue; + name =name.Replace("image", "").Trim(); + name = name.Replace(" ", "-"); var buffer = await title.ScreenshotAsync(); - await File.WriteAllBytesAsync(Path.Combine(dir, $"{name}.png"), buffer); + + await File.WriteAllBytesAsync(Path.Combine(imagesDir, $"{name}.png"), buffer); } await browser.CloseAsync(); - Console.WriteLine("Done in "+dir); + //Console.WriteLine("Done in "+dir); return true; } } diff --git a/src/NetPackageAnalyzer/NPA.HtmlData/NPA.HtmlData.csproj b/src/NetPackageAnalyzer/NPA.HtmlData/NPA.HtmlData.csproj index 114fb3b..e3492bf 100644 --- a/src/NetPackageAnalyzer/NPA.HtmlData/NPA.HtmlData.csproj +++ b/src/NetPackageAnalyzer/NPA.HtmlData/NPA.HtmlData.csproj @@ -4,8 +4,12 @@ net8.0 enable enable + CS0436 + true + + diff --git a/src/NetPackageAnalyzer/NPA.HtmlData/globals.cs b/src/NetPackageAnalyzer/NPA.HtmlData/globals.cs index a9f5205..68ea132 100644 --- a/src/NetPackageAnalyzer/NPA.HtmlData/globals.cs +++ b/src/NetPackageAnalyzer/NPA.HtmlData/globals.cs @@ -5,6 +5,3 @@ using System.Threading.Tasks; namespace NPA.HtmlData; -internal class globals -{ -} diff --git a/src/NetPackageAnalyzer/NetPackageAnalyzerConsole/NetPackageAnalyzerConsole.csproj b/src/NetPackageAnalyzer/NetPackageAnalyzerConsole/NetPackageAnalyzerConsole.csproj index 3b14a9a..a5cad86 100644 --- a/src/NetPackageAnalyzer/NetPackageAnalyzerConsole/NetPackageAnalyzerConsole.csproj +++ b/src/NetPackageAnalyzer/NetPackageAnalyzerConsole/NetPackageAnalyzerConsole.csproj @@ -31,7 +31,6 @@ 8.2024.1014.2028 - True true PackageAnalyzer Andrei Ignat @@ -75,11 +74,11 @@ - + true @@ -87,12 +86,5 @@ $(InterceptorsPreviewNamespaces);RSCG_InterceptorTemplate - - False - - - - False - diff --git a/src/NetPackageAnalyzer/NetPackageAnalyzerConsole/Program.cs b/src/NetPackageAnalyzer/NetPackageAnalyzerConsole/Program.cs index 36fef10..157a703 100644 --- a/src/NetPackageAnalyzer/NetPackageAnalyzerConsole/Program.cs +++ b/src/NetPackageAnalyzer/NetPackageAnalyzerConsole/Program.cs @@ -65,12 +65,12 @@ // "--verbose","false" //}; - //args = new[] { "generateFiles", - // "--folder", @"D:\gth\RSCG_Examples\v2", - // "-wg","HtmlSummary", - // "--where", @"D:\gth\PackageAnalyzer\src\documentation1", - // "--verbose","false" - //}; + args = new[] { "generateFiles", + "--folder", @"D:\gth\RSCG_Examples\v2", + "-wg","HtmlSummary", + "--where", @"D:\gth\PackageAnalyzer\src\documentation1", + "--verbose","false" + }; //args = new[] { "generateFiles", // "--folder", @"D:\source\test\NetPackageAnalyzer", // "-wg","HtmlSummary", diff --git a/src/NetPackageAnalyzer/NetPackageAnalyzerConsole/RealMain.cs b/src/NetPackageAnalyzer/NetPackageAnalyzerConsole/RealMain.cs index 01148a2..9d6b612 100644 --- a/src/NetPackageAnalyzer/NetPackageAnalyzerConsole/RealMain.cs +++ b/src/NetPackageAnalyzer/NetPackageAnalyzerConsole/RealMain.cs @@ -1,5 +1,4 @@  -using Microsoft.Extensions.Logging; using NetPackageAnalyzerExportHTML; using System.Runtime.InteropServices; diff --git a/src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/GenerateHTML.cs b/src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/GenerateHTML.cs index 565edf0..26c7cfd 100644 --- a/src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/GenerateHTML.cs +++ b/src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/GenerateHTML.cs @@ -33,11 +33,16 @@ public override async Task GenerateNow(string folder, string where) var nameFile = Path.Combine(where, $"{NameSolution}_summary.html"); await system.File.WriteAllTextAsync(nameFile, html); - WriteJs(where); + WriteJs(where); var ex = new ExtractImages(nameFile); await ex.GetImagesAsync(); - - + MDSummaryData md = new (); + md.nameSolution = GlobalsForGenerating.NameSolution; + md.ExistsMajorDiffers= (modelMore1Version.KeysPackageMultipleMajorDiffers().Length > 0); + var mdSummary = new MDSummary(md); + var mdHtml = mdSummary.Render(); + var nameFileMD = Path.Combine(where, $"{NameSolution}_summary.md"); + await system.File.WriteAllTextAsync(nameFileMD, mdHtml); return nameFile; } finally diff --git a/src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/HtmlSummary.cshtml b/src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/HtmlSummary.cshtml index ba07cc2..feb7143 100644 --- a/src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/HtmlSummary.cshtml +++ b/src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/HtmlSummary.cshtml @@ -409,7 +409,7 @@ With most Cyclomatic Complexity - :@CycAssIndex.First1()?Count + :@CycAssIndex.First1()?.Count @CycAssIndex.First1()?.Name @@ -476,7 +476,7 @@ @(++tableRow) - With most lines:@execClassLines.First1()??.Count + With most lines:@execClassLines.First1()?.Count @execClassLines.First1()?.Name @@ -1073,7 +1073,7 @@ columns: [

@keysPackageMultiple.Length Packages with major version different

@if (keysPackageMultiple.Length > 0) { - +
diff --git a/src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/MDSummaryData.cs b/src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/MDSummaryData.cs new file mode 100644 index 0000000..90393c2 --- /dev/null +++ b/src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/MDSummaryData.cs @@ -0,0 +1,7 @@ + +namespace NetPackageAnalyzerExportHTML; +internal class MDSummaryData +{ + public string nameSolution { get; set; }=string.Empty; + public bool ExistsMajorDiffers { get; internal set; } +} diff --git a/src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/NetPackageAnalyzerExportHTML.csproj b/src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/NetPackageAnalyzerExportHTML.csproj index 60cf365..7760a4b 100644 --- a/src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/NetPackageAnalyzerExportHTML.csproj +++ b/src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/NetPackageAnalyzerExportHTML.csproj @@ -6,9 +6,9 @@ enableCS0436 - false + true - + diff --git a/src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/Templates/MDSummary.cshtml b/src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/Templates/MDSummary.cshtml new file mode 100644 index 0000000..16c9012 --- /dev/null +++ b/src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/Templates/MDSummary.cshtml @@ -0,0 +1,54 @@ +@inherits RazorBlade.PlainTextTemplate +@{ + var name = Model.nameSolution; + var nameFolder = name + "_summary"; +} + +# Summary for @name + +## Project relations + +![Project relations](./images/@(nameFolder)/projects-without-tests.png) + + + +## Project Data + +### Public Classes per project + +![Class per project](./images/@(nameFolder)/Public-class-per-project.png) + +### Number lines per project + +![Number lines per project](./images/@(nameFolder)/Number-exec-lines-per-project.png) + + +## Class data + +### Public methods per class + +![Public methods](./images/@(nameFolder)/Public-methods-per-class.png) + +### Number methods per class + +![Number-methods-per-class](./images/@(nameFolder)/Number-methods-per-class.png) + +### Number lines per class +![Number-exec-lines-per-class](./images/@(nameFolder)/Number-exec-lines-per-class.png) + +## Method data + +### Cyclomatic complexity per method + +![Cyclomatic-Complexity-for-Method](./images/@(nameFolder)/Cyclomatic-Complexity-for-Method.png) + +### Maintainability index per method +![Maintainability-for-Method](./images/@(nameFolder)/Maintainability-for-Method.png) + +### Number lines per method +![Number-exec-lines-per-method](./images/@(nameFolder)/Number-exec-lines-per-method.png) + + + +## Commits +![Number-exec-lines-per-method](./images/@(nameFolder)/commits-year-project.png) diff --git a/src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/Templates/NamePerCountDisplay.cshtml b/src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/Templates/NamePerCountDisplay.cshtml index 242e5ab..1af3d77 100644 --- a/src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/Templates/NamePerCountDisplay.cshtml +++ b/src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/Templates/NamePerCountDisplay.cshtml @@ -34,11 +34,65 @@ + "]"; var maxCount = nameCount.Max(it => it.Count); var yAxis = "[" + string.Join(',', nameCount.Select(it => it.Count).ToArray()) + "]"; + + var nameCountGraphic = nameCount; + if (nameCount.Length > 10) + { + nameCountGraphic = nameCount.Take(10).ToArray(); + } + string assNamesMaintIndex = string.Join(",", nameCountGraphic.Select(it => "'" + it.Name + "'")); + string valuesMaintIndex = string.Join(",\r\n", + nameCountGraphic.Select(it => "{value:" + it.Count +"}") + ); + StatisticsDisplay statisticsDisplay = new(arr.Statistics()); } @statisticsDisplay.Render() + +
+ + + +@*
--- config: @@ -57,7 +111,8 @@ y-axis "" 0--> @maxCount bar @yAxis
-
+ *@ +
Nr