Skip to content

Commit c3cce36

Browse files
committed
Added base logging for Analyser class
1 parent 2ec8666 commit c3cce36

7 files changed

Lines changed: 62 additions & 11 deletions

File tree

CompactGUI.Core/Analyser.cs

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
using System.Collections.Concurrent;
1+
using Microsoft.Extensions.Logging;
2+
using Microsoft.Extensions.Logging.Abstractions;
3+
using System.Collections.Concurrent;
24
using System.Diagnostics;
5+
using CompactGUI.Logging.Core;
36

47
namespace CompactGUI.Core;
58

@@ -12,18 +15,22 @@ public class Analyser
1215
public bool ContainsCompressedFiles { get; set; }
1316
public List<AnalysedFileDetails> FileCompressionDetailsList { get; set; } = new List<AnalysedFileDetails>();
1417

18+
private ILogger<Analyser> _logger;
1519

16-
public Analyser(string folder)
20+
public Analyser(string folder, ILogger<Analyser> logger)
1721
{
1822
FolderName = folder;
1923
UncompressedBytes = 0;
2024
CompressedBytes = 0;
2125
ContainsCompressedFiles = false;
26+
_logger = logger;
2227
}
2328

2429

2530
public async Task<Boolean?> AnalyseFolder(CancellationToken cancellationToken)
2631
{
32+
AnalyserLog.StartingAnalysis(_logger, FolderName);
33+
Stopwatch sw = Stopwatch.StartNew();
2734
try
2835
{
2936
var allFiles = await Task.Run(() => Directory.EnumerateFiles(FolderName, "*", new EnumerationOptions { RecurseSubdirectories = true, IgnoreInaccessible = true, AttributesToSkip = FileAttributes.ReparsePoint }).AsShortPathNames(), cancellationToken).ConfigureAwait(false);
@@ -39,22 +46,25 @@ public Analyser(string folder)
3946
ContainsCompressedFiles = fileDetails.Any(f => f.CompressionMode != WOFCompressionAlgorithm.NO_COMPRESSION);
4047

4148
FileCompressionDetailsList = fileDetails;
42-
43-
return ContainsCompressedFiles;
4449
}
4550
catch (Exception ex)
4651
{
47-
Debug.WriteLine(ex.Message);
52+
AnalyserLog.AnalysisFailed(_logger, FolderName, ex.Message);
4853
return null;
4954
}
55+
finally { sw.Stop(); }
56+
57+
AnalyserLog.AnalysisCompleted(_logger, FolderName, Math.Round(sw.Elapsed.TotalSeconds, 3), CompressedBytes, UncompressedBytes, ContainsCompressedFiles);
5058

59+
return ContainsCompressedFiles;
5160

5261

5362
}
5463

5564

5665
private AnalysedFileDetails? AnalyseFile(string file)
5766
{
67+
AnalyserLog.ProcessingFile(_logger, file);
5868
try
5969
{
6070
FileInfo fileInfo = new FileInfo(file);
@@ -67,8 +77,9 @@ public Analyser(string folder)
6777

6878
return new AnalysedFileDetails { FileName = file, CompressedSize = compressedSize, UncompressedSize = uncompressedSize, CompressionMode = compressionMode, FileInfo = fileInfo };
6979
}
70-
catch (IOException)
80+
catch (IOException ex)
7181
{
82+
AnalyserLog.ProcessingFileFailed(_logger, file, ex.Message);
7283
return null;
7384
}
7485
}

CompactGUI.Core/Compactor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ public async Task<IEnumerable<FileDetails>> BuildWorkingFilesList()
116116
{
117117
uint clusterSize = SharedMethods.GetClusterSize(workingDirectory);
118118

119-
var analyser = new Analyser(workingDirectory);
119+
var analyser = new Analyser(workingDirectory, NullLogger<Analyser>.Instance);
120120
var ret = await analyser.AnalyseFolder(cancellationTokenSource.Token);
121121

122122
var filesList = analyser.FileCompressionDetailsList
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
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 AnalyserLog
11+
{
12+
13+
[LoggerMessage(Level = LogLevel.Information, Message = "Starting analysis of directory: {Directory}")]
14+
public static partial void StartingAnalysis(ILogger logger, string directory);
15+
16+
[LoggerMessage(Level = LogLevel.Trace, Message = "Processing file: {FileName}")]
17+
public static partial void ProcessingFile(ILogger logger, string fileName);
18+
19+
[LoggerMessage(Level = LogLevel.Warning, Message = "Processing file failed: {FileName} with message: {Message}")]
20+
public static partial void ProcessingFileFailed(ILogger logger, string fileName, string message);
21+
22+
23+
[LoggerMessage(Level = LogLevel.Trace, Message = "Processing folder: {FolderName}")]
24+
public static partial void ProcessingFolder(ILogger logger, string folderName);
25+
26+
[LoggerMessage(Level = LogLevel.Warning, Message = "Analysis failed for: {Path} with error: {ErrorMessage}")]
27+
public static partial void AnalysisFailed(ILogger logger, string path, string errorMessage);
28+
29+
[LoggerMessage(Level = LogLevel.Information, Message = "Analysis completed for directory: {Directory} in {TimeTaken}s. Uncompressed Size: {UncompressedBytes}b, CompressedSize: {CompressedBytes}b, ContainsCompressedFiles: {ContainsCompressedFiles}")]
30+
public static partial void AnalysisCompleted(ILogger logger, string directory, double timeTaken, long compressedBytes, long uncompressedBytes, bool containsCompressedFiles);
31+
}

CompactGUI.Watcher/BackgroundCompactor.vb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
Imports System.Collections.ObjectModel
22
Imports System.Threading
33

4+
Imports Microsoft.Extensions.Logging.Abstractions
5+
46
Public Class BackgroundCompactor
57

68
Public Property IsCompactorActive As Boolean = False
@@ -96,7 +98,7 @@ Public Class BackgroundCompactor
9698
If result AndAlso folders.Contains(folder) Then
9799
' Ensure the folder is still in the original collection before updating
98100

99-
Dim analyser As New Core.Analyser(folder.Folder)
101+
Dim analyser As New Core.Analyser(folder.Folder, NullLogger(Of Core.Analyser).Instance)
100102

101103
Await analyser.AnalyseFolder(Nothing)
102104

CompactGUI.Watcher/CompactGUI.Watcher.vbproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
<PrivateAssets>all</PrivateAssets>
1616
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1717
</PackageReference>
18+
<PackageReference Include="Microsoft.Extensions.Logging" Version="9.0.5" />
1819
<PackageReference Include="PropertyChanged.Fody" Version="4.1.0" PrivateAssets="All" />
1920
</ItemGroup>
2021

CompactGUI.Watcher/Watcher.vb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
Imports System.Collections.ObjectModel
22
Imports System.Text.Json
3-
Imports CompactGUI.Core
43
Imports System.Threading
4+
55
Imports CommunityToolkit.Mvvm.ComponentModel
66

7+
Imports CompactGUI.Core
8+
9+
Imports Microsoft.Extensions.Logging.Abstractions
10+
711
<PropertyChanged.AddINotifyPropertyChangedInterface>
812
Public Class Watcher : Inherits ObservableObject
913
<PropertyChanged.AlsoNotifyFor(NameOf(TotalSaved))>
@@ -325,7 +329,7 @@ Public Class Watcher : Inherits ObservableObject
325329

326330
Public Async Function Analyse(folder As String, checkDiskModified As Boolean) As Task(Of Boolean)
327331
Debug.WriteLine("Background Analysing: " & folder)
328-
Dim analyser As New Analyser(folder)
332+
Dim analyser As New Analyser(folder, NullLogger(Of Analyser).Instance)
329333

330334
Dim watched = WatchedFolders.First(Function(f) f.Folder = folder)
331335
watched.IsWorking = True

CompactGUI/Models/NewModels/ICompressableFolder.vb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@ Public MustInherit Class CompressableFolder : Inherits ObservableObject
119119
Private CancellationTokenSource As CancellationTokenSource
120120

121121
Public Analyser As Analyser
122+
Private Shared ReadOnly AnalyserLogger As ILogger = Application.GetService(Of ILogger(Of Analyser))()
123+
122124

123125
Public Async Function AnalyseFolderAsync() As Task(Of Integer)
124126

@@ -129,7 +131,7 @@ Public MustInherit Class CompressableFolder : Inherits ObservableObject
129131
CancellationTokenSource = New CancellationTokenSource()
130132
Dim token = CancellationTokenSource.Token
131133

132-
Analyser = New Analyser(FolderName)
134+
Analyser = New Analyser(FolderName, AnalyserLogger)
133135

134136
If Not Core.SharedMethods.HasDirectoryWritePermission(FolderName) Then
135137
FolderActionState = ActionState.Idle

0 commit comments

Comments
 (0)