Update DbFlushService

This commit is contained in:
Samuele E. Locatelli (W11-AI)
2026-04-08 10:20:48 +02:00
parent 3b3d611962
commit fe6f0f0e7c
+14 -20
View File
@@ -35,7 +35,7 @@ namespace MP.IOC.Services
try
{
await Task.Delay(TimeSpan.FromSeconds(interval), stoppingToken);
await FlushMetricsAsync();
await FlushLiveMetricsAsync();
}
catch (TaskCanceledException)
{
@@ -74,27 +74,19 @@ namespace MP.IOC.Services
{
try
{
var allHoursIndices = await _db.KeyExistsAsync($"{baseKey}:stats:hours:*");
if (!allHoursIndices)
{
Log.Debug("No hourly indices found in Redis");
return;
}
var detailRecordsToInsert = new List<StatsDetailModel>();
var cursor = 0L;
var pattern = $"{baseKey}:stats:hours:*";
var hourIndexPattern = $"{baseKey}:stats:hours:*";
var allHourIndices = new List<RedisKey>();
do
{
var result = await _db.KeyScanAsync(pattern, cursor);
allHourIndices.AddRange(result.Keys.Where(k => k != null));
cursor = result.Cursor;
var keysResult = await _db.KeysAsync(hourIndexPattern, cursor);
allHourIndices.AddRange(keysResult.Where(k => k != null));
cursor = keysResult.Cursor;
} while (cursor > 0 && allHourIndices.Count < 10000);
var detailRecordsToInsert = new List<StatsDetailModel>();
foreach (var hoursIndexKey in allHourIndices)
{
var keyStr = hoursIndexKey.ToString();
@@ -104,9 +96,11 @@ namespace MP.IOC.Services
var dest = parts[4];
var method = parts[5];
var dayHourPart = string.Join(":", parts.Skip(6).TakeWhile(p => DateTime.TryParseExact(p, "yyyyMMddHH", CultureInfo.InvariantCulture, DateTimeStyles.None, out _)));
if (!DateTime.TryParseExact(dayHourPart, "yyyyMMddHH", CultureInfo.InvariantCulture, DateTimeStyles.None, out var hourFromKey))
var dayPart = parts[6];
var hourPart = parts[7];
if (!DateTime.TryParseExact($"{dayPart}{hourPart}", "yyyyMMddHH", CultureInfo.InvariantCulture, DateTimeStyles.None, out var hourFromKey))
continue;
if (hourFromKey > cutoff) continue;
@@ -128,10 +122,10 @@ namespace MP.IOC.Services
if (countVal.Value.IsNullOrEmpty || totalMsVal.Value.IsNullOrEmpty) continue;
var count = long.TryParse(countVal.Value.ToString(), out var count) ? count : 0;
var totalMs = double.TryParse(totalMsVal.Value.ToString(), out var totalMs) ? totalMs : 0;
var maxMs = double.TryParse(maxMsVal.Value.ToString(), out var maxMs) ? maxMs : 0;
var minMs = double.TryParse(minMsVal.Value.ToString(), out var minMs) ? minMs : 0;
var count = long.TryParse(countVal.Value.ToString(), out var countParsed) ? countParsed : 0;
var totalMs = double.TryParse(totalMsVal.Value.ToString(), out var totalMsParsed) ? totalMsParsed : 0;
var maxMs = double.TryParse(maxMsVal.Value.ToString(), out var maxMsParsed) ? maxMsParsed : 0;
var minMs = double.TryParse(minMsVal.Value.ToString(), out var minMsParsed) ? minMsParsed : 0;
if (count == 0) continue;