using System.Diagnostics;
using Dpz.Core.Service.ObjectStorage.Services;
using Hangfire;
using JetBrains.Annotations;

namespace Dpz.Core.Web.Jobs.Hangfire;

/// <summary>
/// COS 空目录清理任务执行器
/// </summary>
[UsedImplicitly]
public class CosDirectoryCleanupActivator(
    IObjectStorageOperation objectStorageOperation,
    ILogger<CosDirectoryCleanupActivator> logger
) : JobActivator
{
    /// <summary>
    /// 清理云储存中没有文件的空目录
    /// </summary>
    [ProlongExpirationTime]
    [DisableConcurrentExecution(3600)]
    public async Task CleanEmptyDirectoriesAsync()
    {
        using var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromMinutes(60));
        var cancellationToken = cancellationTokenSource.Token;
        var stopwatch = Stopwatch.StartNew();

        var deletedCount = await objectStorageOperation.CleanEmptyDirectoriesAsync(
            cancellationToken: cancellationToken
        );
        stopwatch.Stop();
        logger.LogInformation(
            "COS 空目录清理任务完成,删除 {DeletedCount} 个空目录,耗时:{ElapsedMilliseconds}ms",
            deletedCount,
            stopwatch.ElapsedMilliseconds
        );
    }
}
评论加载中...