80 lines
No EOL
2.4 KiB
C#
80 lines
No EOL
2.4 KiB
C#
using System.Threading;
|
|
using System.Timers;
|
|
using BirdsiteLive.Twitter.Models;
|
|
|
|
namespace BirdsiteLive.Statistics.Domain
|
|
{
|
|
public interface ITwitterStatisticsHandler
|
|
{
|
|
void CalledUserApi();
|
|
void CalledTweetApi();
|
|
void CalledTimelineApi();
|
|
ApiStatistics GetStatistics();
|
|
}
|
|
|
|
//Rate limits: https://developer.twitter.com/en/docs/twitter-api/v1/rate-limits
|
|
public class TwitterStatisticsHandler : ITwitterStatisticsHandler
|
|
{
|
|
private static int _previousUserCalls;
|
|
private static int _previousTweetCalls;
|
|
private static int _previousTimelineCalls;
|
|
|
|
private static int _userCalls;
|
|
private static int _tweetCalls;
|
|
private static int _timelineCalls;
|
|
|
|
private static System.Timers.Timer _resetTimer;
|
|
|
|
#region Ctor
|
|
public TwitterStatisticsHandler()
|
|
{
|
|
if (_resetTimer == null)
|
|
{
|
|
_resetTimer = new System.Timers.Timer();
|
|
_resetTimer.Elapsed += OnTimeResetEvent;
|
|
_resetTimer.Interval = 15 * 60 * 1000; // 15"
|
|
_resetTimer.Enabled = true;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
private void OnTimeResetEvent(object sender, ElapsedEventArgs e)
|
|
{
|
|
_previousUserCalls = _userCalls;
|
|
_previousTweetCalls = _tweetCalls;
|
|
_previousTimelineCalls = _timelineCalls;
|
|
|
|
Interlocked.Exchange(ref _userCalls, 0);
|
|
Interlocked.Exchange(ref _tweetCalls, 0);
|
|
Interlocked.Exchange(ref _timelineCalls, 0);
|
|
}
|
|
|
|
public void CalledUserApi() //GET users/show - 900/15mins
|
|
{
|
|
Interlocked.Increment(ref _userCalls);
|
|
}
|
|
|
|
public void CalledTweetApi() //GET statuses/lookup - 300/15mins
|
|
{
|
|
Interlocked.Increment(ref _tweetCalls);
|
|
}
|
|
|
|
public void CalledTimelineApi() // GET statuses/user_timeline - 1500/15 mins
|
|
{
|
|
Interlocked.Increment(ref _timelineCalls);
|
|
}
|
|
|
|
public ApiStatistics GetStatistics()
|
|
{
|
|
return new ApiStatistics
|
|
{
|
|
UserCallsCount = _previousUserCalls,
|
|
UserCallsMax = 900,
|
|
TweetCallsCount = _previousTweetCalls,
|
|
TweetCallsMax = 300,
|
|
TimelineCallsCount = _previousTimelineCalls,
|
|
TimelineCallsMax = 1500
|
|
};
|
|
}
|
|
}
|
|
} |