initial commit
This commit is contained in:
64
BlueMine/Redmine/RedmineCache.cs
Normal file
64
BlueMine/Redmine/RedmineCache.cs
Normal file
@@ -0,0 +1,64 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace BlueMine.Redmine
|
||||
{
|
||||
class RedmineCache<T> : IRedmineCache<T>
|
||||
{
|
||||
private List<T> Items { get; set; } = [];
|
||||
|
||||
public DateTime LastUpdated { get; set; } = DateTime.MinValue;
|
||||
private readonly ILogger _logger;
|
||||
private readonly TimeSpan _cacheDuration;
|
||||
private readonly object _lock = new();
|
||||
public RedmineCache(TimeSpan cacheDuration, ILogger<RedmineCache<T>> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
_cacheDuration = cacheDuration;
|
||||
}
|
||||
public RedmineCache(int cacheDurationSec, ILogger<RedmineCache<T>> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
_cacheDuration = new TimeSpan(0, 0, cacheDurationSec);
|
||||
}
|
||||
|
||||
public void RefreshCache(List<T> newItems)
|
||||
{
|
||||
_logger.LogDebug($"Refreshing cache with {newItems.Count} items");
|
||||
lock (_lock)
|
||||
{
|
||||
Items = newItems;
|
||||
LastUpdated = DateTime.UtcNow;
|
||||
_logger.LogDebug("Cache refreshed");
|
||||
}
|
||||
}
|
||||
|
||||
public void InvalidateCache()
|
||||
{
|
||||
_logger.LogDebug("Invalidating cache");
|
||||
lock (_lock)
|
||||
{
|
||||
LastUpdated = DateTime.MinValue;
|
||||
_logger.LogDebug("Cache invalidated");
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsCacheValid()
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
bool valid = DateTime.UtcNow - LastUpdated <= _cacheDuration;
|
||||
_logger.LogDebug($"Cache valid: {valid}");
|
||||
return valid;
|
||||
}
|
||||
}
|
||||
|
||||
public List<T> GetItems()
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
_logger.LogDebug($"Returning {Items.Count} cached items");
|
||||
return Items;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user