diff --git a/EQToolApis/DB/Models/EQitem.cs b/EQToolApis/DB/Models/EQitem.cs index 4bf2442f..84f8d02f 100644 --- a/EQToolApis/DB/Models/EQitem.cs +++ b/EQToolApis/DB/Models/EQitem.cs @@ -10,5 +10,17 @@ public class EQitem [MaxLength(64)] public string ItemName { get; set; } + + public int TotalAuctionCount { get; set; } + + public int TotalLast30DaysCount { get; set; } + + public int TotalLast60DaysCount { get; set; } + + public int TotalLast90DaysCount { get; set; } + + public int TotalLast6MonthsCount { get; set; } + + public int TotalLastYearCount { get; set; } } } \ No newline at end of file diff --git a/EQToolApis/EQToolApis.csproj b/EQToolApis/EQToolApis.csproj index 8adfe630..7ffe6b49 100644 --- a/EQToolApis/EQToolApis.csproj +++ b/EQToolApis/EQToolApis.csproj @@ -10,6 +10,8 @@ + + diff --git a/EQToolApis/Program.cs b/EQToolApis/Program.cs index f609ad50..b23b15b9 100644 --- a/EQToolApis/Program.cs +++ b/EQToolApis/Program.cs @@ -1,8 +1,8 @@ using EQToolApis.DB; using EQToolApis.Services; +using Hangfire; +using Hangfire.SqlServer; using Microsoft.EntityFrameworkCore; -using static EQToolApis.Services.DiscordService; - var builder = WebApplication.CreateBuilder(args); // Add services to the container. @@ -10,12 +10,25 @@ builder.Services.AddRazorPages(); builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddHangfire(configuration => configuration + .SetDataCompatibilityLevel(CompatibilityLevel.Version_170) + .UseSimpleAssemblyNameTypeSerializer() + .UseRecommendedSerializerSettings() + .UseSqlServerStorage(builder.Configuration.GetConnectionString("HangfireConnection"), new SqlServerStorageOptions + { + CommandBatchMaxTimeout = TimeSpan.FromMinutes(5), + SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5), + QueuePollInterval = TimeSpan.Zero, + UseRecommendedIsolationLevel = true, + DisableGlobalLocks = true, + DashboardJobListLimit = 2 + })); +builder.Services.AddHangfireServer(); builder.Services.Configure(options => { options.token = builder.Configuration.GetValue("DiscordToken"); }) .AddSingleton(); -builder.Services.AddHostedService(); builder.Services.AddMvc(); var app = builder.Build(); @@ -27,6 +40,29 @@ app.UseHttpsRedirection(); app.UseRouting(); +app.UseAuthorization(); +app.UseEndpoints(endpoints => +{ + endpoints.MapControllers(); + endpoints.MapHangfireDashboard(); +}); app.MapControllers(); app.MapRazorPages(); + +var isrelease = false; + +#if !DEBUG + isrelease = true; +#endif + +if (isrelease) +{ + using (var scope = app.Services.CreateScope()) + { + var backgroundclient = scope.ServiceProvider.GetRequiredService(); + backgroundclient.AddOrUpdate(nameof(DiscordService.DiscordJob.ReadFutureMessages), (a) => a.ReadFutureMessages(), Cron.Minutely()); + backgroundclient.AddOrUpdate(nameof(DiscordService.DiscordJob.ReadPastMessages), (a) => a.ReadPastMessages(), Cron.Minutely()); + backgroundclient.AddOrUpdate(nameof(DiscordService.DiscordJob.StartItemPricing), (a) => a.StartItemPricing(), Cron.Daily()); + } +} app.Run(); diff --git a/EQToolApis/Services/Discrod.cs b/EQToolApis/Services/Discrod.cs index 270e6094..c92a73dc 100644 --- a/EQToolApis/Services/Discrod.cs +++ b/EQToolApis/Services/Discrod.cs @@ -169,28 +169,19 @@ public List ReadMessageHistory(long? lastid) } } - public class TimedHostedService : IHostedService, IDisposable + public class DiscordJob { - private readonly ILogger _logger; - private Timer? _timer = null; + private readonly ILogger _logger; private readonly IDiscordService discordService; - private readonly IServiceProvider services; - private bool Processing = false; + private readonly EQToolContext dbcontext; - public TimedHostedService(ILogger logger, IDiscordService discordService, IServiceProvider services) + public DiscordJob(ILogger logger, IDiscordService discordService, EQToolContext dbcontext) { - this.services = services; + this.dbcontext = dbcontext; _logger = logger; this.discordService = discordService; } - public Task StartAsync(CancellationToken stoppingToken) - { - _logger.LogInformation("Timed Hosted Service running."); - _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(10)); - return Task.CompletedTask; - } - private void AddMessages(List messages, EQToolContext dbcontext) { foreach (var item in messages) @@ -241,50 +232,27 @@ private void AddMessages(List messages, EQToolContext dbcontext) } _ = dbcontext.SaveChanges(); } - private void DoWork(object? state) - { - if (Processing) - { - return; - } -#if DEBUG - return; -#endif - Processing = true; - try - { - discordService.Login(); - using (var scope = services.CreateScope()) - { - var dbcontext = scope.ServiceProvider.GetRequiredService(); - var lastidread = dbcontext.EQTunnelMessages.Where(a => a.Server == Servers.Green).Select(a => (long?)a.DiscordMessageId).OrderByDescending(a => a).FirstOrDefault(); - AddMessages(discordService.ReadMessages(lastidread), dbcontext); - lastidread = dbcontext.EQTunnelMessages.Where(a => a.Server == Servers.Green).Select(a => (long?)a.DiscordMessageId).OrderBy(a => a).FirstOrDefault(); - AddMessages(discordService.ReadMessageHistory(lastidread), dbcontext); - } - _logger.LogInformation("Timed Hosted Service is working."); - } - catch (Exception e) - { - _logger.LogError(e.ToString()); - } - finally - { - Processing = false; - } + public void ReadFutureMessages() + { + discordService.Login(); + var lastidread = dbcontext.EQTunnelMessages.Where(a => a.Server == Servers.Green).Select(a => (long?)a.DiscordMessageId).OrderByDescending(a => a).FirstOrDefault(); + AddMessages(discordService.ReadMessages(lastidread), dbcontext); } - public Task StopAsync(CancellationToken stoppingToken) + public void ReadPastMessages() { - _logger.LogInformation("Timed Hosted Service is stopping."); - _ = (_timer?.Change(Timeout.Infinite, 0)); - return Task.CompletedTask; + discordService.Login(); + var lastidread = dbcontext.EQTunnelMessages.Where(a => a.Server == Servers.Green).Select(a => (long?)a.DiscordMessageId).OrderBy(a => a).FirstOrDefault(); + AddMessages(discordService.ReadMessageHistory(lastidread), dbcontext); } - public void Dispose() + public void StartItemPricing() { - _timer?.Dispose(); + return; + discordService.Login(); + var lastidread = dbcontext.EQTunnelMessages.Where(a => a.Server == Servers.Green).Select(a => (long?)a.DiscordMessageId).OrderBy(a => a).FirstOrDefault(); + AddMessages(discordService.ReadMessageHistory(lastidread), dbcontext); } } } diff --git a/EQToolApis/appsettings.json b/EQToolApis/appsettings.json index cf689772..56b213cb 100644 --- a/EQToolApis/appsettings.json +++ b/EQToolApis/appsettings.json @@ -2,7 +2,8 @@ "Logging": { "LogLevel": { "Default": "Information", - "Microsoft.AspNetCore": "Warning" + "Microsoft.AspNetCore": "Warning", + "Hangfire": "Information" } }, "AllowedHosts": "*",