diff --git a/src/BirdsiteLive/Component/NodeInfoViewComponent.cs b/src/BirdsiteLive/Component/NodeInfoViewComponent.cs index deb10a9..00c03f3 100644 --- a/src/BirdsiteLive/Component/NodeInfoViewComponent.cs +++ b/src/BirdsiteLive/Component/NodeInfoViewComponent.cs @@ -37,7 +37,8 @@ namespace BirdsiteLive.Component twitterAccountPolicy == ModerationTypeEnum.BlackListing, WhitelistingEnabled = followerPolicy == ModerationTypeEnum.WhiteListing || twitterAccountPolicy == ModerationTypeEnum.WhiteListing, - InstanceSaturation = statistics.Saturation + InstanceSaturation = statistics.Saturation, + SyncLag = statistics.SyncLag }; //viewModel = new NodeInfoViewModel @@ -55,5 +56,6 @@ namespace BirdsiteLive.Component public bool BlacklistingEnabled { get; set; } public bool WhitelistingEnabled { get; set; } public int InstanceSaturation { get; set; } + public TimeSpan SyncLag { get; set; } } } diff --git a/src/BirdsiteLive/Services/CachedStatisticsService.cs b/src/BirdsiteLive/Services/CachedStatisticsService.cs index 9337797..bc2235d 100644 --- a/src/BirdsiteLive/Services/CachedStatisticsService.cs +++ b/src/BirdsiteLive/Services/CachedStatisticsService.cs @@ -32,12 +32,14 @@ namespace BirdsiteLive.Services { var twitterUserMax = _instanceSettings.MaxUsersCapacity; var twitterUserCount = await _twitterUserDal.GetTwitterUsersCountAsync(); + var twitterSyncLag = await _twitterUserDal.GetTwitterSyncLag(); var saturation = (int)((double)twitterUserCount / twitterUserMax * 100); _cachedStatistics = new CachedStatistics { RefreshedTime = DateTime.UtcNow, - Saturation = saturation + Saturation = saturation, + SyncLag = twitterSyncLag }; } @@ -48,6 +50,7 @@ namespace BirdsiteLive.Services public class CachedStatistics { public DateTime RefreshedTime { get; set; } + public TimeSpan SyncLag { get; set; } public int Saturation { get; set; } } } \ No newline at end of file diff --git a/src/BirdsiteLive/Views/Shared/Components/NodeInfo/Default.cshtml b/src/BirdsiteLive/Views/Shared/Components/NodeInfo/Default.cshtml index 4e0f093..1031d0a 100644 --- a/src/BirdsiteLive/Views/Shared/Components/NodeInfo/Default.cshtml +++ b/src/BirdsiteLive/Views/Shared/Components/NodeInfo/Default.cshtml @@ -1,22 +1,10 @@ @model BirdsiteLive.Component.NodeInfoViewModel
- @if (ViewData.Model.WhitelistingEnabled) - { - Whitelisting Enabled - } - @if (ViewData.Model.BlacklistingEnabled) - { - Blacklisting Enabled - } -
- -
-
75 && ViewData.Model.InstanceSaturation < 100) ? "bg-danger ":"") - @((ViewData.Model.InstanceSaturation > 100) ? "bg-saturation-danger ":"")" style="width: @ViewData.Model.InstanceSaturation%">@ViewData.Model.InstanceSaturation%
-
+
+ Service load: + @Math.Ceiling(ViewData.Model.SyncLag.TotalMinutes) minutes to fetch all twitter users +
diff --git a/src/DataAccessLayers/BirdsiteLive.DAL.Postgres/DataAccessLayers/TwitterUserPostgresDal.cs b/src/DataAccessLayers/BirdsiteLive.DAL.Postgres/DataAccessLayers/TwitterUserPostgresDal.cs index 73f166d..07bad2a 100644 --- a/src/DataAccessLayers/BirdsiteLive.DAL.Postgres/DataAccessLayers/TwitterUserPostgresDal.cs +++ b/src/DataAccessLayers/BirdsiteLive.DAL.Postgres/DataAccessLayers/TwitterUserPostgresDal.cs @@ -85,6 +85,17 @@ namespace BirdsiteLive.DAL.Postgres.DataAccessLayers }; } + public async Task GetTwitterSyncLag() + { + var query = $"SELECT max(lastsync) - min(lastsync) as diff FROM (SELECT unnest(followings) as follow FROM followers GROUP BY follow) AS f INNER JOIN twitter_users ON f.follow=twitter_users.id;"; + + using (var dbConnection = Connection) + { + var result = (await dbConnection.QueryAsync(query)).FirstOrDefault(); + return result; + } + } + public async Task GetTwitterUsersCountAsync() { var query = $"SELECT COUNT(*) FROM {_settings.TwitterUserTableName}"; diff --git a/src/DataAccessLayers/BirdsiteLive.DAL/Contracts/ITwitterUserDal.cs b/src/DataAccessLayers/BirdsiteLive.DAL/Contracts/ITwitterUserDal.cs index a5a5df4..7126b98 100644 --- a/src/DataAccessLayers/BirdsiteLive.DAL/Contracts/ITwitterUserDal.cs +++ b/src/DataAccessLayers/BirdsiteLive.DAL/Contracts/ITwitterUserDal.cs @@ -18,6 +18,7 @@ namespace BirdsiteLive.DAL.Contracts Task DeleteTwitterUserAsync(string acct); Task DeleteTwitterUserAsync(int id); Task GetTwitterUsersCountAsync(); + Task GetTwitterSyncLag(); Task GetFailingTwitterUsersCountAsync(); } } \ No newline at end of file