Move count stat collecting to raw SQL

This commit is contained in:
Ske
2020-06-13 19:15:29 +02:00
parent 767a37e637
commit 2038f023a0
3 changed files with 19 additions and 46 deletions

View File

@@ -5,6 +5,8 @@ using System.Linq;
using System.Threading.Tasks;
using App.Metrics;
using Dapper;
using DSharpPlus;
using DSharpPlus.Entities;
@@ -21,7 +23,7 @@ namespace PluralKit.Bot
private IMetrics _metrics;
private CpuStatService _cpu;
private IDataStore _data;
private Database _db;
private WebhookCacheService _webhookCache;
@@ -29,14 +31,14 @@ namespace PluralKit.Bot
private ILogger _logger;
public PeriodicStatCollector(DiscordShardedClient client, IMetrics metrics, ILogger logger, WebhookCacheService webhookCache, DbConnectionCountHolder countHolder, IDataStore data, CpuStatService cpu)
public PeriodicStatCollector(DiscordShardedClient client, IMetrics metrics, ILogger logger, WebhookCacheService webhookCache, DbConnectionCountHolder countHolder, CpuStatService cpu, Database db)
{
_client = client;
_metrics = metrics;
_webhookCache = webhookCache;
_countHolder = countHolder;
_data = data;
_cpu = cpu;
_db = db;
_logger = logger.ForContext<PeriodicStatCollector>();
}
@@ -78,10 +80,11 @@ namespace PluralKit.Bot
_metrics.Measure.Gauge.SetValue(BotMetrics.MembersOnline, usersOnline.Count);
// Aggregate DB stats
_metrics.Measure.Gauge.SetValue(CoreMetrics.SystemCount, await _data.GetTotalSystems());
_metrics.Measure.Gauge.SetValue(CoreMetrics.MemberCount, await _data.GetTotalMembers());
_metrics.Measure.Gauge.SetValue(CoreMetrics.SwitchCount, await _data.GetTotalSwitches());
_metrics.Measure.Gauge.SetValue(CoreMetrics.MessageCount, await _data.GetTotalMessages());
var counts = await _db.Execute(c => c.QueryFirstAsync<Counts>("select (select count(*) from systems) as systems, (select count(*) from members) as members, (select count(*) from switches) as switches, (select count(*) from messages) as messages"));
_metrics.Measure.Gauge.SetValue(CoreMetrics.SystemCount, counts.Systems);
_metrics.Measure.Gauge.SetValue(CoreMetrics.MemberCount, counts.Members);
_metrics.Measure.Gauge.SetValue(CoreMetrics.SwitchCount, counts.Switches);
_metrics.Measure.Gauge.SetValue(CoreMetrics.MessageCount, counts.Messages);
// Process info
var process = Process.GetCurrentProcess();
@@ -101,5 +104,13 @@ namespace PluralKit.Bot
stopwatch.Stop();
_logger.Information("Updated metrics in {Time}", stopwatch.ElapsedDuration());
}
public class Counts
{
public int Systems { get; }
public int Members { get; }
public int Switches { get; }
public int Messages { get; }
}
}
}