Various optimisations
This commit is contained in:
parent
dfdcb77924
commit
7f772ca125
6 changed files with 23 additions and 14 deletions
|
@ -60,7 +60,7 @@ namespace BirdsiteLive.Pipeline.Processors
|
||||||
await _twitterUserDal.UpdateTwitterUserAsync(user.Id, user.LastTweetPostedId, user.LastTweetSynchronizedForAllFollowersId, user.FetchingErrorCount, now);
|
await _twitterUserDal.UpdateTwitterUserAsync(user.Id, user.LastTweetPostedId, user.LastTweetSynchronizedForAllFollowersId, user.FetchingErrorCount, now);
|
||||||
}
|
}
|
||||||
|
|
||||||
await Task.Delay(2 * 1000);
|
await Task.Delay(1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
return usersWtTweets.ToArray();
|
return usersWtTweets.ToArray();
|
||||||
|
|
|
@ -42,7 +42,7 @@ namespace BirdsiteLive.Pipeline.Processors
|
||||||
|
|
||||||
//var splitUsers = users.Split(25).ToList();
|
//var splitUsers = users.Split(25).ToList();
|
||||||
var maxUsersNumber = await _maxUsersNumberProvider.GetMaxUsersNumberAsync();
|
var maxUsersNumber = await _maxUsersNumberProvider.GetMaxUsersNumberAsync();
|
||||||
var users = await _twitterUserDal.GetAllTwitterUsersAsync(maxUsersNumber);
|
var users = await _twitterUserDal.GetAllTwitterUsersWithFollowersAsync(maxUsersNumber);
|
||||||
|
|
||||||
var userCount = users.Any() ? Math.Min(users.Length, 25) : 1;
|
var userCount = users.Any() ? Math.Min(users.Length, 25) : 1;
|
||||||
//var splitNumber = (int) Math.Ceiling(userCount / 15d);
|
//var splitNumber = (int) Math.Ceiling(userCount / 15d);
|
||||||
|
|
|
@ -39,7 +39,7 @@ namespace BirdsiteLive.Twitter.Tools
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
|
|
||||||
aTimer = new System.Timers.Timer();
|
aTimer = new System.Timers.Timer();
|
||||||
aTimer.Interval = 900000; // 15 minutes
|
aTimer.Interval = 5 * 60 * 1000;
|
||||||
aTimer.Elapsed += async (sender, e) => await RefreshCred();
|
aTimer.Elapsed += async (sender, e) => await RefreshCred();
|
||||||
|
|
||||||
aTimer.Start();
|
aTimer.Start();
|
||||||
|
|
|
@ -86,6 +86,19 @@ namespace BirdsiteLive.DAL.Postgres.DataAccessLayers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<SyncTwitterUser[]> GetAllTwitterUsersWithFollowersAsync(int maxNumber)
|
||||||
|
{
|
||||||
|
var query = "SELECT * FROM (SELECT unnest(followings) as follow FROM followers GROUP BY follow) AS f INNER JOIN twitter_users ON f.follow=twitter_users.id LIMIT @maxNumber";
|
||||||
|
|
||||||
|
using (var dbConnection = Connection)
|
||||||
|
{
|
||||||
|
dbConnection.Open();
|
||||||
|
|
||||||
|
var result = await dbConnection.QueryAsync<SyncTwitterUser>(query, new { maxNumber });
|
||||||
|
return result.ToArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<SyncTwitterUser[]> GetAllTwitterUsersAsync(int maxNumber)
|
public async Task<SyncTwitterUser[]> GetAllTwitterUsersAsync(int maxNumber)
|
||||||
{
|
{
|
||||||
var query = $"SELECT * FROM {_settings.TwitterUserTableName} ORDER BY lastSync ASC NULLS FIRST LIMIT @maxNumber";
|
var query = $"SELECT * FROM {_settings.TwitterUserTableName} ORDER BY lastSync ASC NULLS FIRST LIMIT @maxNumber";
|
||||||
|
|
|
@ -9,6 +9,7 @@ namespace BirdsiteLive.DAL.Contracts
|
||||||
Task CreateTwitterUserAsync(string acct, long lastTweetPostedId);
|
Task CreateTwitterUserAsync(string acct, long lastTweetPostedId);
|
||||||
Task<SyncTwitterUser> GetTwitterUserAsync(string acct);
|
Task<SyncTwitterUser> GetTwitterUserAsync(string acct);
|
||||||
Task<SyncTwitterUser> GetTwitterUserAsync(int id);
|
Task<SyncTwitterUser> GetTwitterUserAsync(int id);
|
||||||
|
Task<SyncTwitterUser[]> GetAllTwitterUsersWithFollowersAsync(int maxNumber);
|
||||||
Task<SyncTwitterUser[]> GetAllTwitterUsersAsync(int maxNumber);
|
Task<SyncTwitterUser[]> GetAllTwitterUsersAsync(int maxNumber);
|
||||||
Task<SyncTwitterUser[]> GetAllTwitterUsersAsync();
|
Task<SyncTwitterUser[]> GetAllTwitterUsersAsync();
|
||||||
Task UpdateTwitterUserAsync(int id, long lastTweetPostedId, long lastTweetSynchronizedForAllFollowersId, int fetchingErrorCount, DateTime lastSync);
|
Task UpdateTwitterUserAsync(int id, long lastTweetPostedId, long lastTweetSynchronizedForAllFollowersId, int fetchingErrorCount, DateTime lastSync);
|
||||||
|
|
|
@ -39,7 +39,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors
|
||||||
|
|
||||||
var twitterUserDalMock = new Mock<ITwitterUserDal>(MockBehavior.Strict);
|
var twitterUserDalMock = new Mock<ITwitterUserDal>(MockBehavior.Strict);
|
||||||
twitterUserDalMock
|
twitterUserDalMock
|
||||||
.Setup(x => x.GetAllTwitterUsersAsync(
|
.Setup(x => x.GetAllTwitterUsersWithFollowersAsync(
|
||||||
It.Is<int>(y => y == maxUsers)))
|
It.Is<int>(y => y == maxUsers)))
|
||||||
.ReturnsAsync(users);
|
.ReturnsAsync(users);
|
||||||
|
|
||||||
|
@ -82,7 +82,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors
|
||||||
|
|
||||||
var twitterUserDalMock = new Mock<ITwitterUserDal>(MockBehavior.Strict);
|
var twitterUserDalMock = new Mock<ITwitterUserDal>(MockBehavior.Strict);
|
||||||
twitterUserDalMock
|
twitterUserDalMock
|
||||||
.SetupSequence(x => x.GetAllTwitterUsersAsync(
|
.SetupSequence(x => x.GetAllTwitterUsersWithFollowersAsync(
|
||||||
It.Is<int>(y => y == maxUsers)))
|
It.Is<int>(y => y == maxUsers)))
|
||||||
.ReturnsAsync(users.ToArray())
|
.ReturnsAsync(users.ToArray())
|
||||||
.ReturnsAsync(new SyncTwitterUser[0])
|
.ReturnsAsync(new SyncTwitterUser[0])
|
||||||
|
@ -129,7 +129,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors
|
||||||
|
|
||||||
var twitterUserDalMock = new Mock<ITwitterUserDal>(MockBehavior.Strict);
|
var twitterUserDalMock = new Mock<ITwitterUserDal>(MockBehavior.Strict);
|
||||||
twitterUserDalMock
|
twitterUserDalMock
|
||||||
.SetupSequence(x => x.GetAllTwitterUsersAsync(
|
.SetupSequence(x => x.GetAllTwitterUsersWithFollowersAsync(
|
||||||
It.Is<int>(y => y == maxUsers)))
|
It.Is<int>(y => y == maxUsers)))
|
||||||
.ReturnsAsync(users.ToArray())
|
.ReturnsAsync(users.ToArray())
|
||||||
.ReturnsAsync(new SyncTwitterUser[0])
|
.ReturnsAsync(new SyncTwitterUser[0])
|
||||||
|
@ -143,13 +143,8 @@ namespace BirdsiteLive.Pipeline.Tests.Processors
|
||||||
var processor = new RetrieveTwitterUsersProcessor(twitterUserDalMock.Object, maxUsersNumberProviderMock.Object, loggerMock.Object);
|
var processor = new RetrieveTwitterUsersProcessor(twitterUserDalMock.Object, maxUsersNumberProviderMock.Object, loggerMock.Object);
|
||||||
processor.WaitFactor = 2;
|
processor.WaitFactor = 2;
|
||||||
var t = processor.GetTwitterUsersAsync(buffer, CancellationToken.None);
|
var t = processor.GetTwitterUsersAsync(buffer, CancellationToken.None);
|
||||||
var t2 = Task.Run(async () =>
|
|
||||||
{
|
|
||||||
while (buffer.Count < 11)
|
|
||||||
await Task.Delay(50);
|
|
||||||
});
|
|
||||||
|
|
||||||
await Task.WhenAny(t, t2, Task.Delay(5000));
|
await Task.WhenAny(t, Task.Delay(5000));
|
||||||
|
|
||||||
#region Validations
|
#region Validations
|
||||||
maxUsersNumberProviderMock.VerifyAll();
|
maxUsersNumberProviderMock.VerifyAll();
|
||||||
|
@ -177,7 +172,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors
|
||||||
|
|
||||||
var twitterUserDalMock = new Mock<ITwitterUserDal>(MockBehavior.Strict);
|
var twitterUserDalMock = new Mock<ITwitterUserDal>(MockBehavior.Strict);
|
||||||
twitterUserDalMock
|
twitterUserDalMock
|
||||||
.Setup(x => x.GetAllTwitterUsersAsync(
|
.Setup(x => x.GetAllTwitterUsersWithFollowersAsync(
|
||||||
It.Is<int>(y => y == maxUsers)))
|
It.Is<int>(y => y == maxUsers)))
|
||||||
.ReturnsAsync(new SyncTwitterUser[0]);
|
.ReturnsAsync(new SyncTwitterUser[0]);
|
||||||
|
|
||||||
|
@ -214,7 +209,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors
|
||||||
|
|
||||||
var twitterUserDalMock = new Mock<ITwitterUserDal>(MockBehavior.Strict);
|
var twitterUserDalMock = new Mock<ITwitterUserDal>(MockBehavior.Strict);
|
||||||
twitterUserDalMock
|
twitterUserDalMock
|
||||||
.Setup(x => x.GetAllTwitterUsersAsync(
|
.Setup(x => x.GetAllTwitterUsersWithFollowersAsync(
|
||||||
It.Is<int>(y => y == maxUsers)))
|
It.Is<int>(y => y == maxUsers)))
|
||||||
.Returns(async () => await DelayFaultedTask<SyncTwitterUser[]>(new Exception()));
|
.Returns(async () => await DelayFaultedTask<SyncTwitterUser[]>(new Exception()));
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue