Skip to content

Commit 528fcfe

Browse files
committed
Added logs to watcher
1 parent 7b698a7 commit 528fcfe

5 files changed

Lines changed: 113 additions & 25 deletions

File tree

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
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.Watcher;
9+
10+
public static partial class WatcherLog
11+
{
12+
// Watcher events
13+
[LoggerMessage(Level = LogLevel.Information, Message = "Watcher started.")]
14+
public static partial void WatcherStarted(ILogger logger);
15+
16+
[LoggerMessage(Level = LogLevel.Information, Message = "Watcher - Backgrounding disabled.")]
17+
public static partial void BackgroundingDisabled(ILogger logger);
18+
19+
[LoggerMessage(Level = LogLevel.Information, Message = "Watcher - Backgrounding enabled.")]
20+
public static partial void BackgroundingEnabled(ILogger logger);
21+
22+
[LoggerMessage(Level = LogLevel.Information, Message = "Watcher - Initializing watched folders.")]
23+
public static partial void InitializingWatchedFolders(ILogger logger);
24+
25+
[LoggerMessage(Level = LogLevel.Information, Message = "Watcher - Parsing watchers (ParseAll={ParseAll}).")]
26+
public static partial void ParsingWatchers(ILogger logger, bool parseAll);
27+
28+
[LoggerMessage(Level = LogLevel.Information, Message = "Watcher - Parsing single watcher: {Folder}.")]
29+
public static partial void ParsingSingleWatcher(ILogger logger, string folder);
30+
31+
[LoggerMessage(Level = LogLevel.Debug, Message = "Watcher - Removing {Count} folders that do not exist from watcher list.")]
32+
public static partial void RemovingNonexistentFolders(ILogger logger, int count);
33+
34+
[LoggerMessage(Level = LogLevel.Warning, Message = "Watcher - Failed to deserialize watcher JSON: {ErrorMessage}")]
35+
public static partial void DeserializeWatcherJsonFailed(ILogger logger, string errorMessage);
36+
37+
[LoggerMessage(Level = LogLevel.Information, Message = "Watcher - System idle detected.")]
38+
public static partial void SystemIdleDetected(ILogger logger);
39+
40+
[LoggerMessage(Level = LogLevel.Information, Message = "Watcher - System not idle.")]
41+
public static partial void SystemNotIdle(ILogger logger);
42+
43+
[LoggerMessage(Level = LogLevel.Debug, Message = "Watcher - Folder {Folder} changed and will be compressed")]
44+
public static partial void FolderChanged(ILogger logger, string folder);
45+
46+
47+
48+
49+
50+
51+
52+
53+
54+
// BackgroundCompactor events
55+
[LoggerMessage(Level = LogLevel.Information, Message = "Watcher - Background compacting started.")]
56+
public static partial void BackgroundCompactingStarted(ILogger logger);
57+
58+
[LoggerMessage(Level = LogLevel.Information, Message = "Watcher - Background compacting finished.")]
59+
public static partial void BackgroundCompactingFinished(ILogger logger);
60+
61+
[LoggerMessage(Level = LogLevel.Information, Message = "Watcher - Watcher - Compacting folder: {FolderName}.")]
62+
public static partial void CompactingFolder(ILogger logger, string folderName);
63+
64+
[LoggerMessage(Level = LogLevel.Information, Message = "Watcher - Skipping folder (recently modified): {FolderName}.")]
65+
public static partial void SkippingRecentlyModifiedFolder(ILogger logger, string folderName);
66+
67+
[LoggerMessage(Level = LogLevel.Information, Message = "Watcher - Finished compacting folder: {FolderName}.")]
68+
public static partial void FinishedCompactingFolder(ILogger logger, string folderName);
69+
70+
[LoggerMessage(Level = LogLevel.Information, Message = "Watcher - Watcher - Pausing background compactor.")]
71+
public static partial void PausingBackgroundCompactor(ILogger logger);
72+
73+
[LoggerMessage(Level = LogLevel.Information, Message = "Watcher - Resuming background compactor.")]
74+
public static partial void ResumingBackgroundCompactor(ILogger logger);
75+
76+
[LoggerMessage(Level = LogLevel.Error, Message = "Watcher - Error during background compacting: {ErrorMessage}")]
77+
public static partial void BackgroundCompactingError(ILogger logger, string errorMessage);
78+
}

CompactGUI.Watcher/BackgroundCompactor.vb

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

4+
Imports CompactGUI.Logging.Watcher
5+
6+
Imports Microsoft.Extensions.Logging
7+
48
Imports Microsoft.Extensions.Logging.Abstractions
59

610
Public Class BackgroundCompactor
@@ -20,18 +24,19 @@ Public Class BackgroundCompactor
2024

2125
Private Const LAST_SYSTEM_MODIFIED_TIME_THRESHOLD As Integer = 300 ' 5 minutes
2226

27+
Private _logger As ILogger(Of Watcher)
2328

24-
Public Sub New(excludedFileTypes As String())
29+
Public Sub New(excludedFileTypes As String(), logger As ILogger(Of Watcher))
2530

2631
_excludedFileTypes = excludedFileTypes
27-
32+
_logger = logger
2833
AddHandler IdleDetector.IsIdle, AddressOf OnSystemIdle
2934
AddHandler IdleDetector.IsNotIdle, AddressOf OnSystemNotIdle
3035

3136
End Sub
3237

3338
Private Sub OnSystemIdle(sender As Object, e As EventArgs)
34-
If Not isSystemIdle Then Debug.WriteLine("SYSTEM IDLE!")
39+
If Not isSystemIdle Then WatcherLog.SystemIdleDetected(_logger)
3540
isSystemIdle = True
3641
' Attempt to resume only if compacting was paused due to system activity
3742
If isCompactingPaused AndAlso Not isCompacting Then
@@ -40,7 +45,7 @@ Public Class BackgroundCompactor
4045
End Sub
4146

4247
Private Sub OnSystemNotIdle(sender As Object, e As EventArgs)
43-
If isSystemIdle Then Debug.WriteLine("SYSTEM NOT IDLE!")
48+
If isSystemIdle Then WatcherLog.SystemNotIdle(_logger)
4449
isSystemIdle = False
4550
' Attempt to pause only if compacting is currently active and not already paused
4651
If isCompacting AndAlso Not isCompactingPaused Then
@@ -59,7 +64,7 @@ Public Class BackgroundCompactor
5964
End Function
6065

6166
Public Async Function StartCompactingAsync(folders As ObservableCollection(Of WatchedFolder), monitors As List(Of FolderMonitor)) As Task(Of Boolean)
62-
Debug.WriteLine("Background Compacting Started")
67+
WatcherLog.BackgroundCompactingStarted(_logger)
6368
Dim cancellationToken As CancellationToken = cancellationTokenSource.Token
6469

6570
IsCompactorActive = True
@@ -75,11 +80,11 @@ Public Class BackgroundCompactor
7580
folder.IsWorking = True
7681
Dim recentThresholdDate As DateTime = DateTime.Now.AddSeconds(-LAST_SYSTEM_MODIFIED_TIME_THRESHOLD)
7782
If folder.LastSystemModifiedDate > recentThresholdDate Then
78-
Debug.WriteLine(" Skipping " & folder.DisplayName)
83+
WatcherLog.SkippingRecentlyModifiedFolder(_logger, folder.DisplayName)
7984
Continue For
8085
End If
8186

82-
Debug.WriteLine(" Compacting " & folder.DisplayName)
87+
WatcherLog.CompactingFolder(_logger, folder.DisplayName)
8388
Dim compactingTask = BeginCompacting(folder.Folder, folder.CompressionLevel)
8489
isCompacting = True
8590

@@ -120,24 +125,24 @@ Public Class BackgroundCompactor
120125
End If
121126
folder.IsWorking = False
122127
_compactor.Dispose()
123-
Debug.WriteLine(" Finished Compacting " & folder.DisplayName)
128+
WatcherLog.FinishedCompactingFolder(_logger, folder.DisplayName)
124129
Next
125130

126131
IsCompactorActive = False
127132
isCompacting = False ' Ensure compacting status is reset after operation
128-
Debug.WriteLine("Background Compacting Finished")
133+
WatcherLog.BackgroundCompactingFinished(_logger)
129134
currentProcess.PriorityClass = ProcessPriorityClass.Normal
130135
Return True
131136
End Function
132137

133138
Public Sub PauseCompacting()
134-
Debug.WriteLine(" - Pausing Background!")
139+
WatcherLog.PausingBackgroundCompactor(_logger)
135140
isCompactingPaused = True ' Indicate compacting is paused
136141
_compactor.Pause()
137142
End Sub
138143

139144
Public Sub ResumeCompacting()
140-
Debug.WriteLine(" - Resuming Background!")
145+
WatcherLog.ResumingBackgroundCompactor(_logger)
141146
isCompactingPaused = False ' Indicate compacting is no longer paused
142147
_compactor.Resume()
143148
End Sub

CompactGUI.Watcher/CompactGUI.Watcher.vbproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
<ItemGroup>
2323
<ProjectReference Include="..\CompactGUI.Core\CompactGUI.Core.csproj" />
24+
<ProjectReference Include="..\CompactGUI.Logging\CompactGUI.Logging.csproj" />
2425
</ItemGroup>
2526

2627
</Project>

CompactGUI.Watcher/Watcher.vb

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ Imports System.Threading
55
Imports CommunityToolkit.Mvvm.ComponentModel
66

77
Imports CompactGUI.Core
8+
Imports CompactGUI.Logging.Watcher
9+
10+
Imports Microsoft.Extensions.Logging
811

912
Imports Microsoft.Extensions.Logging.Abstractions
1013

@@ -34,12 +37,14 @@ Public Class Watcher : Inherits ObservableObject
3437
Private _disableCounter As Integer = 0
3538
Private _counterLock As New SemaphoreSlim(1, 1)
3639

40+
Private Shared _logger As ILogger(Of Watcher)
41+
3742
Public Async Function DisableBackgrounding() As Task
3843
Await _counterLock.WaitAsync()
3944
Try
4045
_disableCounter += 1
4146
If _disableCounter = 1 Then
42-
Debug.WriteLine("Backgrounding disabled!")
47+
WatcherLog.BackgroundingDisabled(_logger)
4348
IdleDetector.Paused = True
4449
Await _parseWatchersSemaphore.WaitAsync()
4550
End If
@@ -56,7 +61,7 @@ Public Class Watcher : Inherits ObservableObject
5661
If _disableCounter = 0 Then
5762
_parseWatchersSemaphore.Release()
5863
IdleDetector.Paused = False
59-
Debug.WriteLine("Backgrounding enabled!")
64+
WatcherLog.BackgroundingEnabled(_logger)
6065
End If
6166
End If
6267
Finally
@@ -65,14 +70,14 @@ Public Class Watcher : Inherits ObservableObject
6570
End Function
6671

6772

68-
Sub New(excludedFiletypes As String())
73+
Sub New(excludedFiletypes As String(), logger As ILogger(Of Watcher))
6974

75+
WatcherLog.WatcherStarted(logger)
7076
IdleDetector.Start()
71-
Debug.WriteLine("Idle Detector Started")
7277
AddHandler IdleDetector.IsIdle, AddressOf OnSystemIdle
7378

74-
BGCompactor = New BackgroundCompactor(excludedFiletypes)
75-
79+
BGCompactor = New BackgroundCompactor(excludedFiletypes, _logger)
80+
_logger = logger
7681
InitializeWatchedFoldersAsync()
7782

7883

@@ -206,7 +211,7 @@ Public Class Watcher : Inherits ObservableObject
206211

207212
Catch ex As Exception
208213
validatedResult = (DateTime.Now, Nothing)
209-
214+
WatcherLog.DeserializeWatcherJsonFailed(_logger, ex.Message)
210215
End Try
211216

212217
Return validatedResult
@@ -228,7 +233,6 @@ Public Class Watcher : Inherits ObservableObject
228233
_isHandlingIdle = True
229234
Try
230235

231-
Debug.WriteLine("System Idle Detected")
232236
If Not IsWatchingEnabled Then Return
233237

234238
Dim recentThresholdDate As DateTime = DateTime.Now.AddSeconds(-LAST_SYSTEM_MODIFIED_TIME_THRESHOLD)
@@ -252,22 +256,22 @@ Public Class Watcher : Inherits ObservableObject
252256
If Not acquired Then Return
253257

254258
Try
255-
Debug.WriteLine("Background Parsing Watchers")
259+
WatcherLog.ParsingWatchers(_logger, ParseAll)
256260

257261
Dim WatchersToCheck = If(ParseAll, FolderMonitors, FolderMonitors.Where(Function(w) w.HasTargetChanged)).ToList()
258262

259263
If Not WatchersToCheck.Any() Then Return
260264

261265
Dim watchersToRemove = WatchersToCheck.Where(Function(f) Not IO.Directory.Exists(f.Folder)).ToList()
262266
If watchersToRemove.Any() Then
263-
Debug.WriteLine($"Removing {watchersToRemove.Count} folders that do not exist from watcher list.")
267+
WatcherLog.RemovingNonexistentFolders(_logger, watchersToRemove.Count)
264268
For Each fsWatcher In watchersToRemove
265269
RemoveWatched(WatchedFolders.FirstOrDefault(Function(f) f.Folder = fsWatcher.Folder))
266270
Next
267271
End If
268272

269273
For Each fsWatcher In WatchersToCheck.OrderBy(Function(f) f.DisplayName)
270-
274+
WatcherLog.FolderChanged(_logger, fsWatcher.DisplayName)
271275
Await Analyse(fsWatcher.Folder, ParseAll)
272276
Next
273277

@@ -328,7 +332,7 @@ Public Class Watcher : Inherits ObservableObject
328332

329333

330334
Public Async Function Analyse(folder As String, checkDiskModified As Boolean) As Task(Of Boolean)
331-
Debug.WriteLine("Background Analysing: " & folder)
335+
332336
Dim analyser As New Analyser(folder, NullLogger(Of Analyser).Instance)
333337

334338
Dim watched = WatchedFolders.First(Function(f) f.Folder = folder)

CompactGUI/Application.xaml.vb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,8 @@ Partial Public Class Application
8181
services.AddTransient(Of DatabaseViewModel)()
8282

8383
'Other services
84-
services.AddSingleton(Of Watcher.Watcher)(Function()
85-
Return New Watcher.Watcher({})
84+
services.AddSingleton(Of Watcher.Watcher)(Function(s)
85+
Return New Watcher.Watcher({}, s.GetRequiredService(Of ILogger(Of Watcher.Watcher)))
8686
End Function)
8787
services.AddSingleton(Of TrayNotifierService)(Function(sp)
8888
Return New TrayNotifierService(sp.GetRequiredService(Of MainWindow)(), Icon.ExtractAssociatedIcon(Environment.ProcessPath), "CompactGUI")

0 commit comments

Comments
 (0)