fix(sessions): outliers de duração ignoram outcome unknown e publicação no departamento Tecnologia (#14404)
This commit is contained in:
@@ -188,7 +188,9 @@ export function detectSkillToolPairs(ctx: DetectCtx): Pattern[] {
|
||||
}))
|
||||
}
|
||||
|
||||
/** 4. Duration outliers: sessões > p95 por projecto com outcome != completed. */
|
||||
/** 4. Duration outliers: sessões > p95 por projecto com outcome de falha medido (error/interrupted).
|
||||
* `unknown` não conta: significa outcome não medido (ex.: sessões cron do Hermes, project_slug NULL,
|
||||
* 100% `unknown`), e contá-lo gerava ~5% de "outliers" todas as semanas por construção (#14404). */
|
||||
export function detectDurationOutliers(ctx: DetectCtx): Pattern[] {
|
||||
const rows = baseRows(ctx).filter((r) => r.duration_sec != null && r.duration_sec > 0)
|
||||
const byProject = new Map<string, Array<typeof rows[number]>>()
|
||||
@@ -203,7 +205,8 @@ export function detectDurationOutliers(ctx: DetectCtx): Pattern[] {
|
||||
const durations = arr.map((r) => r.duration_sec as number).sort((a, b) => a - b)
|
||||
const p95Idx = Math.max(0, Math.floor(durations.length * 0.95) - 1)
|
||||
const p95 = durations[p95Idx]
|
||||
const outliers = arr.filter((r) => (r.duration_sec as number) > p95 && r.outcome !== 'completed')
|
||||
const outliers = arr.filter((r) => (r.duration_sec as number) > p95 &&
|
||||
r.outcome !== 'completed' && r.outcome !== 'unknown')
|
||||
if (outliers.length < 3) continue
|
||||
out.push({
|
||||
pattern_key: `duration_outliers:${proj}`,
|
||||
|
||||
Reference in New Issue
Block a user