From 57ae3b5e499ddf0ea75e18430bddf57f3977fd2d Mon Sep 17 00:00:00 2001 From: alyssa Date: Sun, 5 Jan 2025 01:49:32 +0000 Subject: [PATCH] fix(bot): add shard up count to stats embed, add stats fallback --- PluralKit.Bot/Commands/Misc.cs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/PluralKit.Bot/Commands/Misc.cs b/PluralKit.Bot/Commands/Misc.cs index 97f4f0ca..1e6333f9 100644 --- a/PluralKit.Bot/Commands/Misc.cs +++ b/PluralKit.Bot/Commands/Misc.cs @@ -61,11 +61,23 @@ public class Misc var shards = await _shards.GetShards(); var shardInfo = shards.Where(s => s.ShardId == ctx.ShardId).FirstOrDefault(); + var shardsUp = shards.Where(s => s.Up).Count(); + + if (stats == null) + { + var content = $"Stats unavailable (is scheduled_tasks service running?)\n\n**Quick info:**" + + $"\nPluralKit [{BuildInfoService.Version}]()" + + $"\nCurrently on shard {ctx.ShardId}, {shardsUp}/{shards.Count()} shards up," + + $" API latency: {apiLatency.TotalMilliseconds:F0}ms"; + await ctx.Rest.EditMessage(msg.ChannelId, msg.Id, + new MessageEditRequest { Content = content }); + return; + } var embed = new EmbedBuilder(); embed - .Field(new("Connection status", $"**{shards.Count()}** shards across **{shards.Select(s => s.ClusterId).Distinct().Count()}** clusters\n" + .Field(new("Connection status", $"**{shards.Count()}** shards across **{shards.Select(s => s.ClusterId).Distinct().Count()}** clusters (**{shardsUp} up**)\n" + $"Current server is on **shard {ctx.ShardId} (cluster {shardInfo.ClusterId ?? 0})**\n" + $"Latency: API **{apiLatency.TotalMilliseconds:F0}ms** (p90: {stats.prom.nirn_proxy_latency_p90 * 1000:F0}ms, p99: {stats.prom.nirn_proxy_latency_p99 * 1000:F0}ms), " + $"shard **{shardInfo.Latency}ms** (avg: {stats.prom.shard_latency_average}ms)", true)) @@ -91,11 +103,11 @@ public class Misc new MessageEditRequest { Content = "", Embeds = new[] { embed.Build() } }); } - private async Task GetStats(Context ctx) + private async Task GetStats(Context ctx) { var db = ctx.Redis.Connection.GetDatabase(); var data = await db.StringGetAsync("statsapi"); - return JsonConvert.DeserializeObject(data); + return data.HasValue ? JsonConvert.DeserializeObject(data) : null; } }