fix: avoid blocking sentinel on terminal timing correction (#992)
Co-authored-by: Codex <codex@noreply.local>
This commit is contained in:
@@ -91,6 +91,7 @@ export function nodeWebObserveAnalyzerTimingSource(): string {
|
||||
elapsedZeroResets: timingEvents.elapsedZeroResets,
|
||||
totalElapsedForwardJumps: timingEvents.totalElapsedForwardJumps,
|
||||
terminalElapsedGrowth: timingEvents.terminalElapsedGrowth,
|
||||
terminalElapsedCorrections: timingEvents.terminalElapsedCorrections,
|
||||
recentUpdateResets: timingEvents.recentUpdateResets,
|
||||
recentUpdateSteps: timingEvents.recentUpdateSteps
|
||||
};
|
||||
@@ -120,6 +121,7 @@ function detectTurnTimingNonMonotonic(columns, rows) {
|
||||
const elapsedZeroResets = [];
|
||||
const totalElapsedForwardJumps = [];
|
||||
const terminalElapsedGrowth = [];
|
||||
const terminalElapsedCorrections = [];
|
||||
const recentUpdateResets = [];
|
||||
const recentUpdateSteps = [];
|
||||
for (const column of columns) {
|
||||
@@ -135,6 +137,9 @@ function detectTurnTimingNonMonotonic(columns, rows) {
|
||||
const previous = previousByMetric.get(metric);
|
||||
if (previous && metric === "totalElapsedSeconds" && current < previous.value) {
|
||||
const anomaly = previous.value > 0 && current === 0 ? "zero-reset" : "decrease";
|
||||
const terminalTransition = !isTerminalTurnStatus(previous.status) && isTerminalTurnStatus(cell.status);
|
||||
const dropSeconds = previous.value - current;
|
||||
const allowedDropSeconds = Math.max(1, Number(alertThresholds?.turnTimingSampleSlackSeconds || 0));
|
||||
const event = {
|
||||
columnId: column.id,
|
||||
columnLabel: column.label,
|
||||
@@ -144,9 +149,11 @@ function detectTurnTimingNonMonotonic(columns, rows) {
|
||||
fromSeq: previous.seq,
|
||||
fromTs: previous.ts,
|
||||
fromValue: previous.value,
|
||||
fromStatus: previous.status ?? null,
|
||||
toSeq: row.seq ?? null,
|
||||
toTs: row.ts ?? null,
|
||||
toValue: current,
|
||||
toStatus: cell.status ?? null,
|
||||
delta: current - previous.value,
|
||||
traceId: cell.traceId ?? column.traceId ?? null,
|
||||
messageId: cell.messageId ?? column.messageId ?? null,
|
||||
@@ -158,8 +165,17 @@ function detectTurnTimingNonMonotonic(columns, rows) {
|
||||
pageEpoch: cell.pageEpoch ?? row.pageEpoch ?? column.pageEpoch ?? null,
|
||||
valuesRedacted: true
|
||||
};
|
||||
anomalies.push(event);
|
||||
if (anomaly === "zero-reset") elapsedZeroResets.push(event);
|
||||
if (terminalTransition && anomaly === "decrease" && dropSeconds <= allowedDropSeconds) {
|
||||
terminalElapsedCorrections.push({
|
||||
...event,
|
||||
anomaly: "terminal-boundary-correction",
|
||||
expectedPattern: "terminal-sealed-duration-may-correct-running-elapsed-within-slack",
|
||||
allowedDropSeconds,
|
||||
});
|
||||
} else {
|
||||
anomalies.push(event);
|
||||
if (anomaly === "zero-reset") elapsedZeroResets.push(event);
|
||||
}
|
||||
}
|
||||
if (previous && metric === "totalElapsedSeconds" && current > previous.value) {
|
||||
const sampleDeltaSeconds = elapsedSecondsBetween(previous.ts, row.ts);
|
||||
@@ -319,7 +335,7 @@ function detectTurnTimingNonMonotonic(columns, rows) {
|
||||
}
|
||||
}
|
||||
}
|
||||
return { anomalies, elapsedZeroResets, totalElapsedForwardJumps, terminalElapsedGrowth, recentUpdateResets, recentUpdateSteps };
|
||||
return { anomalies, elapsedZeroResets, totalElapsedForwardJumps, terminalElapsedGrowth, terminalElapsedCorrections, recentUpdateResets, recentUpdateSteps };
|
||||
}
|
||||
|
||||
function elapsedSecondsBetween(fromTs, toTs) {
|
||||
|
||||
Reference in New Issue
Block a user