Increase trigger interval limit (#34)
This commit is contained in:
@@ -139,8 +139,8 @@ services:
|
|||||||
| LOGGING__FILE__PATH | No | Directory where to save the log files | empty |
|
| LOGGING__FILE__PATH | No | Directory where to save the log files | empty |
|
||||||
| LOGGING__ENHANCED | No | Enhance logs whenever possible<br>A more detailed description is provided [here](variables.md#LOGGING__ENHANCED) | true |
|
| LOGGING__ENHANCED | No | Enhance logs whenever possible<br>A more detailed description is provided [here](variables.md#LOGGING__ENHANCED) | true |
|
||||||
|||||
|
|||||
|
||||||
| TRIGGERS__QUEUECLEANER | Yes if queue cleaner is enabled | [Quartz cron trigger](https://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html)<br>Can be a max of 1h interval | 0 0/5 * * * ? |
|
| TRIGGERS__QUEUECLEANER | Yes if queue cleaner is enabled | [Quartz cron trigger](https://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html)<br>Can be a max of 6h interval<br>**Is ignored if `QUEUECLEANER__RUNSEQUENTIALLY=true` and `CONTENTBLOCKER__ENABLED=true`** | 0 0/5 * * * ? |
|
||||||
| TRIGGERS__CONTENTBLOCKER | Yes if content blocker is enabled | [Quartz cron trigger](https://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html)<br>Can be a max of 1h interval | 0 0/5 * * * ? |
|
| TRIGGERS__CONTENTBLOCKER | Yes if content blocker is enabled | [Quartz cron trigger](https://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html)<br>Can be a max of 6h interval | 0 0/5 * * * ? |
|
||||||
|||||
|
|||||
|
||||||
| QUEUECLEANER__ENABLED | No | Enable or disable the queue cleaner | true |
|
| QUEUECLEANER__ENABLED | No | Enable or disable the queue cleaner | true |
|
||||||
| QUEUECLEANER__RUNSEQUENTIALLY | No | If set to true, the queue cleaner will run after the content blocker instead of running in parallel, streamlining the cleaning process | true |
|
| QUEUECLEANER__RUNSEQUENTIALLY | No | If set to true, the queue cleaner will run after the content blocker instead of running in parallel, streamlining the cleaning process | true |
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
namespace Common.Helpers;
|
||||||
|
|
||||||
|
public static class Constants
|
||||||
|
{
|
||||||
|
public static readonly TimeSpan TriggerMaxLimit = TimeSpan.FromHours(6);
|
||||||
|
public static readonly TimeSpan CacheLimitBuffer = TimeSpan.FromHours(2);
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
namespace Common.Helpers;
|
||||||
|
|
||||||
|
public static class StaticConfiguration
|
||||||
|
{
|
||||||
|
public static TimeSpan TriggerValue { get; set; } = TimeSpan.Zero;
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
using Common.Configuration;
|
using Common.Configuration;
|
||||||
using Common.Configuration.ContentBlocker;
|
using Common.Configuration.ContentBlocker;
|
||||||
using Common.Configuration.QueueCleaner;
|
using Common.Configuration.QueueCleaner;
|
||||||
|
using Common.Helpers;
|
||||||
using Executable.Jobs;
|
using Executable.Jobs;
|
||||||
using Infrastructure.Verticals.ContentBlocker;
|
using Infrastructure.Verticals.ContentBlocker;
|
||||||
using Infrastructure.Verticals.Jobs;
|
using Infrastructure.Verticals.Jobs;
|
||||||
@@ -96,19 +97,25 @@ public static class QuartzDI
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var triggerObj = (IOperableTrigger)TriggerBuilder.Create()
|
IOperableTrigger triggerObj = (IOperableTrigger)TriggerBuilder.Create()
|
||||||
.WithIdentity("ExampleTrigger")
|
.WithIdentity("ExampleTrigger")
|
||||||
.StartNow()
|
.StartNow()
|
||||||
.WithCronSchedule(trigger)
|
.WithCronSchedule(trigger)
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
var nextFireTimes = TriggerUtils.ComputeFireTimes(triggerObj, null, 2);
|
IReadOnlyList<DateTimeOffset> nextFireTimes = TriggerUtils.ComputeFireTimes(triggerObj, null, 2);
|
||||||
|
TimeSpan triggerValue = nextFireTimes[1] - nextFireTimes[0];
|
||||||
|
|
||||||
if (nextFireTimes[1] - nextFireTimes[0] > TimeSpan.FromHours(1))
|
if (triggerValue > Constants.TriggerMaxLimit)
|
||||||
{
|
{
|
||||||
throw new Exception($"{trigger} should have a fire time of maximum 1 hour");
|
throw new Exception($"{trigger} should have a fire time of maximum 1 hour");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (triggerValue > StaticConfiguration.TriggerValue)
|
||||||
|
{
|
||||||
|
StaticConfiguration.TriggerValue = triggerValue;
|
||||||
|
}
|
||||||
|
|
||||||
q.AddTrigger(opts =>
|
q.AddTrigger(opts =>
|
||||||
{
|
{
|
||||||
opts.ForJob(typeName)
|
opts.ForJob(typeName)
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using Domain.Enums;
|
using Common.Helpers;
|
||||||
|
using Domain.Enums;
|
||||||
using Microsoft.Extensions.Caching.Memory;
|
using Microsoft.Extensions.Caching.Memory;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
@@ -15,7 +16,7 @@ public class Striker
|
|||||||
_logger = logger;
|
_logger = logger;
|
||||||
_cache = cache;
|
_cache = cache;
|
||||||
_cacheOptions = new MemoryCacheEntryOptions()
|
_cacheOptions = new MemoryCacheEntryOptions()
|
||||||
.SetSlidingExpiration(TimeSpan.FromHours(2));
|
.SetSlidingExpiration(StaticConfiguration.TriggerValue + Constants.CacheLimitBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool StrikeAndCheckLimit(string hash, string itemName, ushort maxStrikes, StrikeType strikeType)
|
public bool StrikeAndCheckLimit(string hash, string itemName, ushort maxStrikes, StrikeType strikeType)
|
||||||
|
|||||||
Reference in New Issue
Block a user