backend: leave the time before the first rate record unknown in the adaptive audit

This commit is contained in:
justme committed 2026-10-22 10:57:53 +08:00
1 parent 20b0f7fbd8
commit 93abf59afb
2 files changed
+13 -11

No files matched your search

@@ -74,7 +74,8 @@ public static class AdaptiveAudit
/// <summary>
/// 把按时间排好的状态变化还原成每个时间桶里各状态的秒数。一次变化之后到下一次变化之前,是变化后的状态和频率;
/// 区间里第一次变化之前,状态是这次变化的「从」(频率不知道,不计入平均)。一种采集方法一条时间线(同一条线路上每种方法各自变化)。
/// 第一次记录之前什么都不知道,不计入任何状态(节点启动时会记一条「start → watch」,所以每个自适应的任务从启动起就有记录;
/// 没有这条记录的时段是节点还没升级到会上报的版本)。一种采集方法一条时间线(同一条线路上每种方法各自变化)。
/// </summary>
public static AdaptiveResult Summarize(IReadOnlyList<RateChange> changes, long fromMs, long toMs, long stepMs)
{
@@ -92,10 +93,10 @@ public static class AdaptiveAudit
var maxLoss = new double[count];
RateChange[] ordered = [.. group.OrderBy(c => c.AtMs)];
// 每一段:[开始, 结束) 内的状态;第一段在第一次变化之前,状态取它的「从」
string state = ordered[0].From;
double? hz = null;
long cursor = Math.Min(ordered[0].AtMs, fromMs);
// 每一段:[这次变化, 下一次变化) 内是变化后的状态和频率;第一次记录之前不知道,不计
string state = ordered[0].To;
double? hz = ordered[0].Hz;
long cursor = ordered[0].AtMs;
foreach (RateChange change in ordered)
{
AddSegment(cursor, change.AtMs, state, hz);