网站首页 网站源码
website
站点相关全部源代码,隐藏了一些关于服务器的信息
using System.Globalization;
using Dpz.Core.Hangfire;
using Hangfire;
using Hangfire.Dashboard;
using Microsoft.AspNetCore.Localization;

namespace Dpz.Core.Web.Jobs.Hangfire;

public static class HangfireConfiguration
{
    public static void AddAppHangfireService(this IServiceCollection services,
        IConfiguration configuration)
    {
        services.AddHangfireService(configuration, "hangfire");
        services.AddSingleton<IDashboardAuthorizationFilter, HangfireFilter>();
    }

    /// <summary>
    /// hangfire UI设置及周期性任务调度
    /// </summary>
    /// <param name="app"></param>
    /// <returns></returns>
    public static void HangfireSetting(this IApplicationBuilder app)
    {
        var supportedCultures = new[]
        {
            new CultureInfo("zh-CN"),
        };
        app.UseRequestLocalization(new RequestLocalizationOptions
        {
            DefaultRequestCulture = new RequestCulture("zh-CN"),
            // Formatting numbers, dates, etc.
            SupportedCultures = supportedCultures,
            // UI strings that we have localized.
            SupportedUICultures = supportedCultures
        });
        
        //Note 系统初始化后再调用计划任务

        var authorizationFilter = app.ApplicationServices.GetService<IDashboardAuthorizationFilter>();
        app.UseHangfireDashboard("/jobs", new DashboardOptions
        {
            Authorization = new[] { authorizationFilter },
            AppPath = "/",
            StatsPollingInterval = 5000,
            //可编辑任务
            IsReadOnlyFunc = _ => false,
            DarkModeEnabled = true,
            DashboardTitle = "任务管理",
            FaviconPath = "/favicon.ico"
        });

// #if DEBUG
//         RecurringJob.AddOrUpdate("测试", () => Console.WriteLine($"{DateTime.Now:yyyy/MM/dd HH:mm:ss}"), Cron.Minutely);
//         return;
// #endif

        //每天 UTC时间17点 北京时间1点 删除旧日志
        //RecurringJob.AddOrUpdate<LogTaskActivator>(x => x.ClearStart(), "0 0 17 * * ?");

        //每隔 5小时删除旧数据
        //RecurringJob.AddOrUpdate<ItHomeActivator>("删除旧数据", x => x.DeleteAsync(), "1 */5 * * *");

        // //每隔 3小时获取最新CnBeta数据
        // RecurringJob.AddOrUpdate<CnBetaTaskActivator>(x => x.Start(), "1 */3 * * *");

        // 每隔 3小时获取最新IT之家数据
        //RecurringJob.AddOrUpdate<ItHomeActivator>("爬取数据", x => x.StartAsync(), "1 */3 * * *");


        //每天 UTC时间20点 北京时间4点 更新Steam
        RecurringJob.AddOrUpdate<SteamActivator>("更新Steam", x => x.UpdateLibraryAsync(), "0 0 20 ? * ? ");

        //每天 UTC时间19点 北京时间3点 执行任务
        //RecurringJob.AddOrUpdate<TaskListHandleActivator>("队列任务", x => x.HandleAsync(), "0 0 19 ? * ? ");


        //每天 UTC时间22点 北京时间6点 备份
        //RecurringJob.AddOrUpdate<BackupActivator>("备份", x => x.BackupAsync(), "0 0 22 ? * ? ");
    }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

上述代码是一个 ASP.NET Core 应用程序中用于配置 Hangfire 的类,Hangfire 是一个用于在 .NET 应用程序中处理后台任务的库。代码主要分为两个部分:服务注册和 Hangfire 的设置。

1. 服务注册 (AddAppHangfireService 方法)

public static void AddAppHangfireService(this IServiceCollection services, IConfiguration configuration)
{
    services.AddHangfireService(configuration, "hangfire");
    services.AddSingleton<IDashboardAuthorizationFilter, HangfireFilter>();
}
  • AddHangfireService: 这个方法用于将 Hangfire 服务添加到依赖注入容器中。它使用传入的 IConfiguration 对象来配置 Hangfire。
  • AddSingleton<IDashboardAuthorizationFilter, HangfireFilter>: 这行代码将一个自定义的授权过滤器 HangfireFilter 注册为单例服务。这个过滤器用于控制谁可以访问 Hangfire 的仪表板。

2. Hangfire 设置 (HangfireSetting 方法)

public static void HangfireSetting(this IApplicationBuilder app)
{
    var supportedCultures = new[]
    {
        new CultureInfo("zh-CN"),
    };
    app.UseRequestLocalization(new RequestLocalizationOptions
    {
        DefaultRequestCulture = new RequestCulture("zh-CN"),
        SupportedCultures = supportedCultures,
        SupportedUICultures = supportedCultures
    });
  • 请求区域设置: 这部分代码设置了应用程序的区域文化为简体中文(zh-CN),并配置了请求的本地化选项。
var authorizationFilter = app.ApplicationServices.GetService<IDashboardAuthorizationFilter>();
app.UseHangfireDashboard("/jobs", new DashboardOptions
{
    Authorization = new[] { authorizationFilter },
    AppPath = "/",
    StatsPollingInterval = 5000,
    IsReadOnlyFunc = _ => false,
    DarkModeEnabled = true,
    DashboardTitle = "任务管理",
    FaviconPath = "/favicon.ico"
});
  • Hangfire 仪表板: 这部分代码配置了 Hangfire 的仪表板,设置了访问权限、应用路径、统计信息轮询间隔、是否只读、主题等选项。

3. 定时任务配置

RecurringJob.AddOrUpdate<ItHomeActivator>("删除旧数据", x => x.DeleteAsync(), "1 */5 * * *");
RecurringJob.AddOrUpdate<ItHomeActivator>("爬取数据", x => x.StartAsync(), "1 */3 * * *");
RecurringJob.AddOrUpdate<SteamActivator>("更新Steam", x => x.UpdateLibraryAsync(), "0 0 20 ? * ? ");
RecurringJob.AddOrUpdate<TaskListHandleActivator>("队列任务", x => x.HandleAsync(), "0 0 19 ? * ? ");
RecurringJob.AddOrUpdate<BackupActivator>("备份", x => x.BackupAsync(), "0 0 22 ? * ? ");
  • 定时任务: 这部分代码使用 RecurringJob.AddOrUpdate 方法定义了一系列定时任务。每个任务都有一个唯一的名称和一个执行的时间表(使用 Cron 表达式)。
    • 删除旧数据: 每 5 小时执行一次。
    • 爬取数据: 每 3 小时执行一次。
    • 更新 Steam: 每天 UTC 时间 20 点(北京时间 4 点)执行。
    • 队列任务: 每天 UTC 时间 19 点(北京时间 3 点)执行。
    • 备份: 每天 UTC 时间 22 点(北京时间 6 点)执行。

总结

整体来看,这段代码的功能是配置 Hangfire 以便在 ASP.NET Core 应用程序中处理后台任务,包括设置请求的区域文化、配置 Hangfire 仪表板以及定义多个定时任务。这些任务可以用于定期执行数据清理、数据抓取、更新和备份等操作。

loading