Update pricing timing

This commit is contained in:
2025-09-14 22:27:54 +07:00
parent daeb26375b
commit 2847778c7c
10 changed files with 145 additions and 351 deletions

View File

@@ -0,0 +1,46 @@
using Managing.Common;
namespace Managing.Application.Shared;
public static class GrainHelpers
{
/// <summary>
/// Gets the interval in minutes for the reminder based on the timeframe
/// </summary>
public static double GetIntervalMinutes(Enums.Timeframe timeframe)
{
return timeframe switch
{
Enums.Timeframe.OneMinute => 1.0,
Enums.Timeframe.FiveMinutes => 5.0,
Enums.Timeframe.FifteenMinutes => 7.5, // Half of the timeframe for more frequent checks
Enums.Timeframe.OneHour => 30.0, // Half of the timeframe for more frequent checks
Enums.Timeframe.FourHour => 120.0, // Half of the timeframe for more frequent checks
Enums.Timeframe.OneDay => 720.0, // Half of the timeframe for more frequent checks
_ => 5.0 // Default to 5 minutes
};
}
// Helper method to get a randomized due time and period
public static (TimeSpan dueTime, TimeSpan period) GetDynamicRandomizedTimerOptions(TimeSpan basePeriod,
int numberOfBots)
{
var random = new Random();
// Determine the jitter percentage based on bot count
// Example: 2% jitter for 100 bots, 10% for 1000 bots, etc.
// This formula can be fine-tuned based on your system's performance metrics.
double jitterPercentage = Math.Min(0.20, (double)numberOfBots / 10000); // Caps at 20% for 10,000 bots
// Calculate a random due time within the period
var dueTimeSeconds = random.Next(1, (int)basePeriod.TotalSeconds);
var dueTime = TimeSpan.FromSeconds(dueTimeSeconds);
// Add a random jitter to the period
var jitterFactor = (random.NextDouble() * jitterPercentage) - (jitterPercentage / 2);
var periodSeconds = (int)(basePeriod.TotalSeconds * (1 + jitterFactor));
var period = TimeSpan.FromSeconds(periodSeconds);
return (dueTime, period);
}
}