fix(sessions): outliers de duração ignoram outcome unknown e publicação no departamento Tecnologia (#14404)
This commit is contained in:
@@ -87,8 +87,8 @@ interface MCPToolCallResult {
|
|||||||
const OBSERVABILIDADE_STAFF_ID = 25
|
const OBSERVABILIDADE_STAFF_ID = 25
|
||||||
/** Discussão Desk onde os resumos semanais são publicados */
|
/** Discussão Desk onde os resumos semanais são publicados */
|
||||||
const OBSERVABILIDADE_DISCUSSION_ID = 32
|
const OBSERVABILIDADE_DISCUSSION_ID = 32
|
||||||
/** Departamento "Geral" no Desk CRM (id=1) */
|
/** Departamento "Tecnologia" no Desk CRM (id=7; o id=1 é "Comercial" — #14404) */
|
||||||
const OBSERVABILIDADE_DEPARTMENT_ID = 1
|
const OBSERVABILIDADE_DEPARTMENT_ID = 7
|
||||||
|
|
||||||
function parseArgs(argv: string[]): Args {
|
function parseArgs(argv: string[]): Args {
|
||||||
const a: Args = { publish: false, force: false, backfill: false }
|
const a: Args = { publish: false, force: false, backfill: false }
|
||||||
|
|||||||
@@ -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[] {
|
export function detectDurationOutliers(ctx: DetectCtx): Pattern[] {
|
||||||
const rows = baseRows(ctx).filter((r) => r.duration_sec != null && r.duration_sec > 0)
|
const rows = baseRows(ctx).filter((r) => r.duration_sec != null && r.duration_sec > 0)
|
||||||
const byProject = new Map<string, Array<typeof rows[number]>>()
|
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 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 p95Idx = Math.max(0, Math.floor(durations.length * 0.95) - 1)
|
||||||
const p95 = durations[p95Idx]
|
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
|
if (outliers.length < 3) continue
|
||||||
out.push({
|
out.push({
|
||||||
pattern_key: `duration_outliers:${proj}`,
|
pattern_key: `duration_outliers:${proj}`,
|
||||||
|
|||||||
Reference in New Issue
Block a user