网站首页 网站源码
website
站点相关全部源代码,隐藏了一些关于服务器的信息
using Dpz.Core.EnumLibrary;
using Dpz.Core.Public.ViewModel;
using Dpz.Core.Service.ObjectStorage.Services;
using Dpz.Core.Service.RepositoryService;
using Hangfire;

namespace Dpz.Core.Web.Jobs.Hangfire;

public class TaskListHandleActivator : JobActivator
{
    private readonly IObjectStorageOperation _objectStorageService;
    private readonly IWaitExecutionService _waitExecutionService;
    private readonly ILogger<TaskListHandleActivator> _logger;
    private readonly string _host;

    public TaskListHandleActivator(
        IObjectStorageOperation objectStorageService,
        IWaitExecutionService waitExecutionService,
        IConfiguration configuration,
        ILogger<TaskListHandleActivator> logger)
    {
        _objectStorageService = objectStorageService;
        _waitExecutionService = waitExecutionService;
        _logger = logger;

        _host = configuration.GetSection("upyun")["Host"] ?? throw new Exception("upyun Host is null");
    }

    [ProlongExpirationTime]
    public async Task HandleAsync()
    {
        var taskList = await _waitExecutionService.GetNotExecuteTaskAsync();
        // foreach (var item in taskList.Where(x => x.Category == ExecuteCategory.Delete))
        // {
        //     await DeleteAsync(item);
        // }

        await Parallel.ForEachAsync(taskList, async (item, _) =>
        {
            if (item.Category == ExecuteCategory.Delete)
            {
                await DeleteAsync(item);
            }
        });

        await _waitExecutionService.ClearExpiredAsync();
    }

    private async Task DeleteAsync(VmWaitExecution task)
    {
        switch (task.Scheme)
        {
            case ExecuteScheme.DeleteUpyun:
                try
                {
                    if (!string.IsNullOrEmpty(task.Relation) &&
                        task.Relation.StartsWith(_host, StringComparison.CurrentCultureIgnoreCase))
                    {
                        var relation = task.Relation[_host.Length..];
                        await _objectStorageService.DeleteAsync(relation);
                    }
                }
                catch (Exception e)
                {
                    _logger.LogError(e, "delete fail");
                    await _waitExecutionService.UpdateStatusAsync(task.Id, ExecuteStatus.ExecuteFail);
                }

                await _waitExecutionService.UpdateStatusAsync(task.Id, ExecuteStatus.ExecuteComplete);
                break;
            case ExecuteScheme.None:
            default:
                _logger.LogInformation("execute scheme:{ExecuteScheme}", task.Scheme.ToString());
                break;
        }
    }
}
loading