some minor fixes and improvements, probably

This commit is contained in:
Stanley Dimant
2024-11-06 12:51:23 +01:00
parent 6c5ad25d99
commit 33d5f44754
9 changed files with 85 additions and 56 deletions

View File

@@ -2,5 +2,5 @@
public interface IClientReadyMessageService
{
void SendDownloadReady(string uid, Guid requestId);
Task SendDownloadReady(string uid, Guid requestId);
}

View File

@@ -15,12 +15,9 @@ public class MainClientReadyMessageService : IClientReadyMessageService
_mareHub = mareHub;
}
public void SendDownloadReady(string uid, Guid requestId)
public async Task SendDownloadReady(string uid, Guid requestId)
{
_ = Task.Run(async () =>
{
_logger.LogInformation("Sending Client Ready for {uid}:{requestId} to SignalR", uid, requestId);
await _mareHub.Clients.User(uid).SendAsync(nameof(IMareHub.Client_DownloadReady), requestId).ConfigureAwait(false);
});
_logger.LogInformation("Sending Client Ready for {uid}:{requestId} to SignalR", uid, requestId);
await _mareHub.Clients.User(uid).SendAsync(nameof(IMareHub.Client_DownloadReady), requestId).ConfigureAwait(false);
}
}

View File

@@ -13,18 +13,19 @@ namespace MareSynchronosStaticFilesServer.Services;
public class MainFileCleanupService : IHostedService
{
private readonly IConfigurationService<StaticFilesServerConfiguration> _configuration;
private readonly IDbContextFactory<MareDbContext> _dbContextFactory;
private readonly ILogger<MainFileCleanupService> _logger;
private readonly MareMetrics _metrics;
private readonly IServiceProvider _services;
private CancellationTokenSource _cleanupCts;
public MainFileCleanupService(MareMetrics metrics, ILogger<MainFileCleanupService> logger,
IServiceProvider services, IConfigurationService<StaticFilesServerConfiguration> configuration)
IConfigurationService<StaticFilesServerConfiguration> configuration,
IDbContextFactory<MareDbContext> dbContextFactory)
{
_metrics = metrics;
_logger = logger;
_services = services;
_configuration = configuration;
_dbContextFactory = dbContextFactory;
}
public Task StartAsync(CancellationToken cancellationToken)
@@ -35,7 +36,7 @@ public class MainFileCleanupService : IHostedService
_cleanupCts = new();
_ = CleanUpTask(_cleanupCts.Token);
_ = Task.Run(() => CleanUpTask(_cleanupCts.Token)).ConfigureAwait(false);
return Task.CompletedTask;
}
@@ -155,8 +156,9 @@ public class MainFileCleanupService : IHostedService
bool useColdStorage = _configuration.GetValueOrDefault(nameof(StaticFilesServerConfiguration.UseColdStorage), false);
var hotStorageDir = _configuration.GetValue<string>(nameof(StaticFilesServerConfiguration.CacheDirectory));
var coldStorageDir = _configuration.GetValue<string>(nameof(StaticFilesServerConfiguration.ColdStorageDirectory));
using var scope = _services.CreateScope();
using var dbContext = scope.ServiceProvider.GetService<MareDbContext>()!;
using var dbContext = await _dbContextFactory.CreateDbContextAsync().ConfigureAwait(false);
_logger.LogInformation("Running File Cleanup Task");
try
{
@@ -166,16 +168,19 @@ public class MainFileCleanupService : IHostedService
var linkedToken = linkedTokenCts.Token;
DirectoryInfo dirHotStorage = new(hotStorageDir);
_logger.LogInformation("File Cleanup Task gathering hot storage files");
var allFilesInHotStorage = dirHotStorage.GetFiles("*", SearchOption.AllDirectories).ToList();
var unusedRetention = _configuration.GetValueOrDefault(nameof(StaticFilesServerConfiguration.UnusedFileRetentionPeriodInDays), 14);
var forcedDeletionAfterHours = _configuration.GetValueOrDefault(nameof(StaticFilesServerConfiguration.ForcedDeletionOfFilesAfterHours), -1);
var sizeLimit = _configuration.GetValueOrDefault<double>(nameof(StaticFilesServerConfiguration.CacheSizeHardLimitInGiB), -1);
_logger.LogInformation("File Cleanup Task cleaning up outdated hot storage files");
var remainingHotFiles = await CleanUpOutdatedFiles(hotStorageDir, allFilesInHotStorage, unusedRetention, forcedDeletionAfterHours,
deleteFromDb: !useColdStorage, dbContext: dbContext,
ct: linkedToken).ConfigureAwait(false);
_logger.LogInformation("File Cleanup Task cleaning up hot storage file beyond size limit");
var finalRemainingHotFiles = CleanUpFilesBeyondSizeLimit(remainingHotFiles, sizeLimit,
deleteFromDb: !useColdStorage, dbContext: dbContext,
ct: linkedToken);
@@ -183,15 +188,18 @@ public class MainFileCleanupService : IHostedService
if (useColdStorage)
{
DirectoryInfo dirColdStorage = new(coldStorageDir);
_logger.LogInformation("File Cleanup Task gathering cold storage files");
var allFilesInColdStorageDir = dirColdStorage.GetFiles("*", SearchOption.AllDirectories).ToList();
var coldStorageRetention = _configuration.GetValueOrDefault(nameof(StaticFilesServerConfiguration.ColdStorageUnusedFileRetentionPeriodInDays), 60);
var coldStorageSize = _configuration.GetValueOrDefault<double>(nameof(StaticFilesServerConfiguration.ColdStorageSizeHardLimitInGiB), -1);
// clean up cold storage
_logger.LogInformation("File Cleanup Task cleaning up outdated cold storage files");
var remainingColdFiles = await CleanUpOutdatedFiles(coldStorageDir, allFilesInColdStorageDir, coldStorageRetention, forcedDeletionAfterHours: -1,
deleteFromDb: true, dbContext: dbContext,
ct: linkedToken).ConfigureAwait(false);
_logger.LogInformation("File Cleanup Task cleaning up cold storage file beyond size limit");
var finalRemainingColdFiles = CleanUpFilesBeyondSizeLimit(remainingColdFiles, coldStorageSize,
deleteFromDb: true, dbContext: dbContext,
ct: linkedToken);

View File

@@ -22,27 +22,24 @@ public class ShardClientReadyMessageService : IClientReadyMessageService
_httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("MareSynchronosServer", "1.0.0.0"));
}
public void SendDownloadReady(string uid, Guid requestId)
public async Task SendDownloadReady(string uid, Guid requestId)
{
_ = Task.Run(async () =>
var mainUrl = _configurationService.GetValue<Uri>(nameof(StaticFilesServerConfiguration.MainFileServerAddress));
var path = MareFiles.MainSendReadyFullPath(mainUrl, uid, requestId);
using HttpRequestMessage msg = new()
{
var mainUrl = _configurationService.GetValue<Uri>(nameof(StaticFilesServerConfiguration.MainFileServerAddress));
var path = MareFiles.MainSendReadyFullPath(mainUrl, uid, requestId);
using HttpRequestMessage msg = new()
{
RequestUri = path
};
msg.Headers.Authorization = new AuthenticationHeaderValue("Bearer", _tokenGenerator.Token);
RequestUri = path
};
msg.Headers.Authorization = new AuthenticationHeaderValue("Bearer", _tokenGenerator.Token);
_logger.LogInformation("Sending Client Ready for {uid}:{requestId} to {path}", uid, requestId, path);
try
{
using var result = await _httpClient.SendAsync(msg).ConfigureAwait(false);
}
catch (Exception ex)
{
_logger.LogError(ex, "Failure to send for {uid}:{requestId}", uid, requestId);
}
});
_logger.LogInformation("Sending Client Ready for {uid}:{requestId} to {path}", uid, requestId, path);
try
{
using var result = await _httpClient.SendAsync(msg).ConfigureAwait(false);
}
catch (Exception ex)
{
_logger.LogError(ex, "Failure to send for {uid}:{requestId}", uid, requestId);
}
}
}