diff --git a/MP.IOC/Services/MetricsDbFlushService.cs b/MP.IOC/Services/MetricsDbFlushService.cs index b6282914..67cf50f5 100644 --- a/MP.IOC/Services/MetricsDbFlushService.cs +++ b/MP.IOC/Services/MetricsDbFlushService.cs @@ -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(); var cursor = 0L; - var pattern = $"{baseKey}:stats:hours:*"; + var hourIndexPattern = $"{baseKey}:stats:hours:*"; var allHourIndices = new List(); 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(); - 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;