Sam Therapy
e2ec4a5857
Some checks failed
continuous-integration/drone Build is failing
also prepare pipelines and stuff Signed-off-by: Sam Therapy <sam@samtherapy.net>
54 lines
1.5 KiB
C#
54 lines
1.5 KiB
C#
using System.Threading.Tasks;
|
|
|
|
using BirdsiteLive.Common.Settings;
|
|
using BirdsiteLive.DAL.Contracts;
|
|
|
|
namespace BirdsiteLive.Pipeline.Tools
|
|
{
|
|
public interface IMaxUsersNumberProvider
|
|
{
|
|
Task<int> GetMaxUsersNumberAsync();
|
|
}
|
|
|
|
public class MaxUsersNumberProvider : IMaxUsersNumberProvider
|
|
{
|
|
private readonly InstanceSettings _instanceSettings;
|
|
private readonly ITwitterUserDal _twitterUserDal;
|
|
|
|
private int _totalUsersCount = -1;
|
|
private int _warmUpIterations;
|
|
private const int WarmUpMaxCapacity = 200;
|
|
|
|
#region Ctor
|
|
public MaxUsersNumberProvider(
|
|
InstanceSettings instanceSettings,
|
|
ITwitterUserDal twitterUserDal
|
|
)
|
|
{
|
|
_instanceSettings = instanceSettings;
|
|
_twitterUserDal = twitterUserDal;
|
|
}
|
|
#endregion
|
|
|
|
public async Task<int> GetMaxUsersNumberAsync()
|
|
{
|
|
// Init data
|
|
if (_totalUsersCount == -1)
|
|
{
|
|
_totalUsersCount = await _twitterUserDal.GetTwitterUsersCountAsync();
|
|
_warmUpIterations = (int)(_totalUsersCount / (float)WarmUpMaxCapacity);
|
|
}
|
|
|
|
// Return if warm up ended
|
|
if (_warmUpIterations <= 0)
|
|
return _instanceSettings.MaxUsersCapacity;
|
|
|
|
// Calculate warm up value
|
|
var maxUsers =
|
|
_warmUpIterations > 0 ? WarmUpMaxCapacity : _instanceSettings.MaxUsersCapacity;
|
|
_warmUpIterations--;
|
|
return maxUsers;
|
|
}
|
|
}
|
|
}
|