49 lines
1.6 KiB
C#
49 lines
1.6 KiB
C#
|
|
using StellaOps.Signals.Models;
|
|
using System;
|
|
|
|
namespace StellaOps.Signals.Options;
|
|
|
|
/// <summary>
|
|
/// Gate multiplier configuration in basis points (10000 = 100%).
|
|
/// </summary>
|
|
public sealed class SignalsGateMultiplierOptions
|
|
{
|
|
public int AuthRequiredMultiplierBps { get; set; } = 3000;
|
|
|
|
public int FeatureFlagMultiplierBps { get; set; } = 2000;
|
|
|
|
public int AdminOnlyMultiplierBps { get; set; } = 1500;
|
|
|
|
public int NonDefaultConfigMultiplierBps { get; set; } = 5000;
|
|
|
|
public int MinimumMultiplierBps { get; set; } = 500;
|
|
|
|
public int GetMultiplierBps(CallgraphGateType gateType) => gateType switch
|
|
{
|
|
CallgraphGateType.AuthRequired => AuthRequiredMultiplierBps,
|
|
CallgraphGateType.FeatureFlag => FeatureFlagMultiplierBps,
|
|
CallgraphGateType.AdminOnly => AdminOnlyMultiplierBps,
|
|
CallgraphGateType.NonDefaultConfig => NonDefaultConfigMultiplierBps,
|
|
_ => 10000
|
|
};
|
|
|
|
public void Validate()
|
|
{
|
|
EnsureBps(nameof(AuthRequiredMultiplierBps), AuthRequiredMultiplierBps);
|
|
EnsureBps(nameof(FeatureFlagMultiplierBps), FeatureFlagMultiplierBps);
|
|
EnsureBps(nameof(AdminOnlyMultiplierBps), AdminOnlyMultiplierBps);
|
|
EnsureBps(nameof(NonDefaultConfigMultiplierBps), NonDefaultConfigMultiplierBps);
|
|
EnsureBps(nameof(MinimumMultiplierBps), MinimumMultiplierBps);
|
|
}
|
|
|
|
private static void EnsureBps(string name, int value)
|
|
{
|
|
if (value < 0 || value > 10000)
|
|
{
|
|
throw new ArgumentOutOfRangeException(name, value, "Value must be between 0 and 10000.");
|
|
}
|
|
}
|
|
}
|
|
|