Skip to content

Commit 2ec8666

Browse files
committed
Added logging for Uncompactor
- Fixed some parts of Compactor
1 parent 13f3310 commit 2ec8666

4 files changed

Lines changed: 63 additions & 7 deletions

File tree

CompactGUI.Core/Compactor.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,10 @@ await Parallel.ForEachAsync(workingFiles, parallelOptions,
7575
}
7676
catch (OperationCanceledException){ return false; }
7777
catch (Exception){ return false; }
78+
finally { sw.Stop();}
7879

7980

80-
sw.Stop();
81+
8182
CompactorLog.CompressionCompleted(_logger, Math.Round(sw.Elapsed.TotalSeconds, 3));
8283
return true;
8384
}
@@ -142,16 +143,16 @@ public void Pause()
142143

143144
public void Resume()
144145
{
145-
CompactorLog.CompressionResumed(_logger);
146146
if (pauseSemaphore.CurrentCount == 0) pauseSemaphore.Release();
147+
CompactorLog.CompressionResumed(_logger);
147148
}
148149

149150

150151
public void Cancel()
151152
{
152-
CompactorLog.CompressionCanceled(_logger);
153153
Resume();
154154
cancellationTokenSource.Cancel();
155+
CompactorLog.CompressionCanceled(_logger);
155156
}
156157

157158

CompactGUI.Core/Uncompactor.cs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11

2+
using Microsoft.Extensions.Logging;
3+
using Microsoft.Extensions.Logging.Abstractions;
24
using Microsoft.Win32.SafeHandles;
35
using System.Collections.Concurrent;
46
using Windows.Win32;
7+
using CompactGUI.Logging.Core;
8+
using System.Diagnostics;
59

610
namespace CompactGUI.Core;
711

@@ -12,6 +16,12 @@ public class Uncompactor : ICompressor, IDisposable
1216
private CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
1317
private ConcurrentDictionary<string, int> processedFileCount = new ConcurrentDictionary<string, int>();
1418

19+
private readonly ILogger<Uncompactor> _logger;
20+
21+
public Uncompactor(ILogger<Uncompactor>? logger = null)
22+
{
23+
_logger = logger ?? NullLogger<Uncompactor>.Instance;
24+
}
1525

1626
public async Task<bool> RunAsync(List<string> filesList, IProgress<CompressionProgress>? progressMonitor = null, int maxParallelism = 1)
1727
{
@@ -20,6 +30,8 @@ public async Task<bool> RunAsync(List<string> filesList, IProgress<CompressionPr
2030
ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = maxParallelism };
2131
processedFileCount.Clear();
2232

33+
UncompactorLog.StartingDecompression(_logger, totalFiles, maxParallelism);
34+
Stopwatch sw = Stopwatch.StartNew();
2335
try
2436
{
2537
await Parallel.ForEachAsync(filesList, parallelOptions,
@@ -30,13 +42,16 @@ await Parallel.ForEachAsync(filesList, parallelOptions,
3042
});
3143
}
3244
catch (OperationCanceledException) { return false; }
45+
finally { sw.Stop(); }
3346

47+
UncompactorLog.DecompressionCompleted(_logger, Math.Round(sw.Elapsed.TotalSeconds, 3));
3448
return true;
3549

3650
}
3751

3852
private async Task PauseAndProcessFile(string file, int totalFiles, IProgress<CompressionProgress>? progressMonitor, CancellationToken ctx)
3953
{
54+
UncompactorLog.ProcessingFile(_logger, file);
4055
try
4156
{
4257
await pauseSemaphore.WaitAsync(ctx).ConfigureAwait(false);
@@ -64,25 +79,31 @@ private async Task PauseAndProcessFile(string file, int totalFiles, IProgress<Co
6479
return res;
6580
}
6681
}
67-
catch (Exception) { return null; }
82+
catch (Exception ex) {
83+
UncompactorLog.FileDecompressionFailed(_logger, file, ex.Message);
84+
return null;
85+
}
6886
}
6987

7088
public void Pause()
7189
{
90+
UncompactorLog.DecompressionPaused(_logger);
7291
pauseSemaphore.Wait();
7392
}
7493

7594

7695
public void Resume()
7796
{
7897
if (pauseSemaphore.CurrentCount == 0) pauseSemaphore.Release();
98+
UncompactorLog.DecompressionResumed(_logger);
7999
}
80100

81101

82102
public void Cancel()
83103
{
84104
Resume();
85105
cancellationTokenSource.Cancel();
106+
UncompactorLog.DecompressionCanceled(_logger);
86107
}
87108

88109

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
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 UncompactorLog
11+
{
12+
[LoggerMessage(Level = LogLevel.Information, Message = "Starting decompression of {FileCount} files with {MaxParallelism} threads")]
13+
public static partial void StartingDecompression(ILogger logger, int fileCount, int maxParallelism);
14+
15+
[LoggerMessage(Level = LogLevel.Trace, Message = "Processing file: {FileName}")]
16+
public static partial void ProcessingFile(ILogger logger, string fileName);
17+
18+
[LoggerMessage(Level = LogLevel.Warning, Message = "File decompression failed for: {FileName} with error: {ErrorMessage}")]
19+
public static partial void FileDecompressionFailed(ILogger logger, string fileName, string errorMessage);
20+
21+
[LoggerMessage(Level = LogLevel.Information, Message = "Decompression paused.")]
22+
public static partial void DecompressionPaused(ILogger logger);
23+
24+
[LoggerMessage(Level = LogLevel.Information, Message = "Decompression resumed.")]
25+
public static partial void DecompressionResumed(ILogger logger);
26+
27+
[LoggerMessage(Level = LogLevel.Information, Message = "Decompression canceled.")]
28+
public static partial void DecompressionCanceled(ILogger logger);
29+
30+
[LoggerMessage(Level = LogLevel.Information, Message = "Decompression completed successfully in {TimeTaken}s.")]
31+
public static partial void DecompressionCompleted(ILogger logger, double timeTaken);
32+
}

CompactGUI/Models/NewModels/ICompressableFolder.vb

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,18 +74,20 @@ Public MustInherit Class CompressableFolder : Inherits ObservableObject
7474

7575

7676
Public Compressor As ICompressor
77-
Private Shared ReadOnly CompressorLogger As ILogger = Application.GetService(Of ILogger(Of Compactor))()
77+
Private Shared ReadOnly CompactorLogger As ILogger = Application.GetService(Of ILogger(Of Compactor))()
78+
Private Shared ReadOnly UncompactorLogger As ILogger = Application.GetService(Of ILogger(Of Uncompactor))()
79+
7880
Public Async Function CompressFolder() As Task(Of Boolean)
7981

80-
Compressor = New Compactor(FolderName, WOFConvertCompressionLevel(CompressionOptions.SelectedCompressionMode), GetSkipList, CompressorLogger)
82+
Compressor = New Compactor(FolderName, WOFConvertCompressionLevel(CompressionOptions.SelectedCompressionMode), GetSkipList, CompactorLogger)
8183
Return Await RunCompressionAsync(Compressor, Nothing, True)
8284

8385
End Function
8486

8587

8688
Public Async Function UncompressFolder() As Task(Of Boolean)
8789

88-
Compressor = New Uncompactor
90+
Compressor = New Uncompactor(UncompactorLogger)
8991
Dim compressedFilesList = AnalysisResults.Where(Function(rs) rs.CompressedSize < rs.UncompressedSize).Select(Of String)(Function(f) f.FileName).ToList
9092
Return Await RunCompressionAsync(Compressor, compressedFilesList, isCompressing:=False)
9193

0 commit comments

Comments
 (0)