Skip to content

Commit 13f3310

Browse files
committed
Added logs for Core.Compactor
1 parent f6b9643 commit 13f3310

4 files changed

Lines changed: 68 additions & 9 deletions

File tree

CompactGUI.Core/CompactGUI.Core.csproj

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,9 @@
2020
<PackageReference Include="ZLinq" Version="1.4.10" />
2121
</ItemGroup>
2222

23+
24+
<ItemGroup>
25+
<ProjectReference Include="..\CompactGUI.Logging\CompactGUI.Logging.csproj" />
26+
</ItemGroup>
27+
2328
</Project>

CompactGUI.Core/Compactor.cs

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11

2+
using CompactGUI.Logging.Core;
3+
using Microsoft.Extensions.Logging;
4+
using Microsoft.Extensions.Logging.Abstractions;
25
using Microsoft.Win32.SafeHandles;
36
using System.Collections.Concurrent;
47
using System.Diagnostics;
@@ -23,13 +26,14 @@ public class Compactor : ICompressor, IDisposable
2326
private readonly SemaphoreSlim pauseSemaphore = new SemaphoreSlim(1, 2);
2427
private readonly CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
2528

29+
private ILogger<Compactor> _logger;
2630

27-
public Compactor(string folderPath, WOFCompressionAlgorithm compressionLevel, string[] excludedFileTypes)
31+
public Compactor(string folderPath, WOFCompressionAlgorithm compressionLevel, string[] excludedFileTypes, ILogger<Compactor>? logger = null)
2832
{
2933
workingDirectory = folderPath;
3034
excludedFileExtensions = new HashSet<string>(excludedFileTypes);
3135
wofCompressionAlgorithm = compressionLevel;
32-
36+
_logger = logger ?? NullLogger<Compactor>.Instance;
3337
InitializeCompressionInfoPointer();
3438
}
3539

@@ -47,14 +51,18 @@ public async Task<bool> RunAsync(List<string> filesList, IProgress<CompressionPr
4751
{
4852
if(cancellationTokenSource.IsCancellationRequested) { return false; }
4953

54+
CompactorLog.BuildingWorkingFilesList(_logger, workingDirectory);
5055
var workingFiles = await BuildWorkingFilesList().ConfigureAwait(false);
5156
long totalFilesSize = workingFiles.Sum((f) => f.UncompressedSize);
5257

5358
totalProcessedBytes = 0;
5459

55-
if(maxParallelism <= 0) maxParallelism = Environment.ProcessorCount;
60+
var sw = Stopwatch.StartNew();
61+
62+
if (maxParallelism <= 0) maxParallelism = Environment.ProcessorCount;
5663
ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = maxParallelism, CancellationToken = cancellationTokenSource.Token };
5764

65+
CompactorLog.StartingCompression(_logger, workingDirectory, wofCompressionAlgorithm.ToString(), maxParallelism);
5866
try
5967
{
6068
await Parallel.ForEachAsync(workingFiles, parallelOptions,
@@ -68,11 +76,15 @@ await Parallel.ForEachAsync(workingFiles, parallelOptions,
6876
catch (OperationCanceledException){ return false; }
6977
catch (Exception){ return false; }
7078

79+
80+
sw.Stop();
81+
CompactorLog.CompressionCompleted(_logger, Math.Round(sw.Elapsed.TotalSeconds, 3));
7182
return true;
7283
}
7384

7485
private async Task PauseAndProcessFile(FileDetails file, long totalFilesSize, CancellationToken token, IProgress<CompressionProgress> progressMonitor)
7586
{
87+
CompactorLog.ProcessingFile(_logger, file.FileName, file.UncompressedSize);
7688

7789
await pauseSemaphore.WaitAsync(token).ConfigureAwait(false);
7890
pauseSemaphore.Release();
@@ -94,7 +106,7 @@ private async Task PauseAndProcessFile(FileDetails file, long totalFilesSize, Ca
94106
}
95107
catch (Exception ex)
96108
{
97-
Debug.WriteLine(ex.Message);
109+
CompactorLog.FileCompressionFailed(_logger, filePath, ex.Message);
98110
return null;
99111
}
100112
}
@@ -123,18 +135,21 @@ public async Task<IEnumerable<FileDetails>> BuildWorkingFilesList()
123135

124136
public void Pause()
125137
{
138+
CompactorLog.CompressionPaused(_logger);
126139
pauseSemaphore.Wait(cancellationTokenSource.Token);
127140
}
128141

129142

130143
public void Resume()
131144
{
145+
CompactorLog.CompressionResumed(_logger);
132146
if (pauseSemaphore.CurrentCount == 0) pauseSemaphore.Release();
133147
}
134148

135149

136150
public void Cancel()
137151
{
152+
CompactorLog.CompressionCanceled(_logger);
138153
Resume();
139154
cancellationTokenSource.Cancel();
140155
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
using Microsoft.Extensions.Logging;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
8+
namespace CompactGUI.Logging.Core;
9+
10+
public static partial class CompactorLog
11+
{
12+
13+
[LoggerMessage(Level = LogLevel.Information, Message = "Starting compression in directory: {Directory} with algorithm: {Algorithm} and using {MaxParallelism} threads")]
14+
public static partial void StartingCompression(ILogger logger, string directory, string algorithm, int maxParallelism);
15+
16+
[LoggerMessage(Level = LogLevel.Debug, Message = "Building working files list for directory: {Directory}")]
17+
public static partial void BuildingWorkingFilesList(ILogger logger, string directory);
18+
19+
[LoggerMessage(Level = LogLevel.Trace, Message = "Processing file: {FileName} ({UncompressedSize} bytes)")]
20+
public static partial void ProcessingFile(ILogger logger, string fileName, long uncompressedSize);
21+
22+
[LoggerMessage(Level = LogLevel.Warning, Message = "File compression failed for: {FileName} with error: {ErrorMessage}")]
23+
public static partial void FileCompressionFailed(ILogger logger, string fileName, string errorMessage);
24+
25+
[LoggerMessage(Level = LogLevel.Information, Message = "Compression paused.")]
26+
public static partial void CompressionPaused(ILogger logger);
27+
28+
[LoggerMessage(Level = LogLevel.Information, Message = "Compression resumed.")]
29+
public static partial void CompressionResumed(ILogger logger);
30+
31+
[LoggerMessage(Level = LogLevel.Information, Message = "Compression canceled.")]
32+
public static partial void CompressionCanceled(ILogger logger);
33+
34+
[LoggerMessage(Level = LogLevel.Information, Message = "Compression completed successfully in {TimeTaken}s.")]
35+
public static partial void CompressionCompleted(ILogger logger, double timeTaken);
36+
37+
}

CompactGUI/Models/NewModels/ICompressableFolder.vb

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ Imports CommunityToolkit.Mvvm.ComponentModel
77
Imports CompactGUI.Core
88
Imports CompactGUI.Core.WOFHelper
99

10+
Imports Microsoft.Extensions.Logging
11+
1012
Imports PropertyChanged
1113

1214

@@ -72,10 +74,10 @@ Public MustInherit Class CompressableFolder : Inherits ObservableObject
7274

7375

7476
Public Compressor As ICompressor
75-
77+
Private Shared ReadOnly CompressorLogger As ILogger = Application.GetService(Of ILogger(Of Compactor))()
7678
Public Async Function CompressFolder() As Task(Of Boolean)
7779

78-
Compressor = New Compactor(FolderName, WOFConvertCompressionLevel(CompressionOptions.SelectedCompressionMode), GetSkipList)
80+
Compressor = New Compactor(FolderName, WOFConvertCompressionLevel(CompressionOptions.SelectedCompressionMode), GetSkipList, CompressorLogger)
7981
Return Await RunCompressionAsync(Compressor, Nothing, True)
8082

8183
End Function
@@ -180,7 +182,7 @@ Public MustInherit Class CompressableFolder : Inherits ObservableObject
180182
sw.Start()
181183
estimatedData = Await Task.Run(Function() estimator.EstimateCompression(AnalysisResults.ToList, IsHDD, GetThreadCount, Core.SharedMethods.GetClusterSize(FolderName), CancellationTokenSource.Token))
182184
sw.Stop()
183-
Debug.WriteLine($"Estimated compression took {sw.ElapsedMilliseconds}ms")
185+
'Debug.WriteLine($"Estimated compression took {sw.ElapsedMilliseconds}ms")
184186
Catch ex As AggregateException
185187
IsGettingEstimate = False
186188
Return
@@ -265,11 +267,11 @@ Public MustInherit Class CompressableFolder : Inherits ObservableObject
265267
Protected Overridable Function GetSkipList() As String()
266268
Dim exclist As String() = Array.Empty(Of String)()
267269
If CompressionOptions.SkipPoorlyCompressedFileTypes AndAlso SettingsHandler.AppSettings.NonCompressableList.Count <> 0 Then
268-
Debug.WriteLine("Adding non-compressable list to exclusion list")
270+
'Debug.WriteLine("Adding non-compressable list to exclusion list")
269271
exclist = exclist.Union(SettingsHandler.AppSettings.NonCompressableList).ToArray
270272
End If
271273
If CompressionOptions.SkipUserSubmittedFiletypes AndAlso WikiPoorlyCompressedFiles?.Count <> 0 Then
272-
Debug.WriteLine("Adding estimator poorly compressed list to exclusion list")
274+
'Debug.WriteLine("Adding estimator poorly compressed list to exclusion list")
273275
exclist = exclist.Union(WikiPoorlyCompressedFiles).ToArray
274276
End If
275277

0 commit comments

Comments
 (0)