feat(management): 确定性异常规则×4——P90恶化/回复率骤降/活动骤降/过载+derive_metrics公有化

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-09-09 18:06:08 +08:00
parent 07c9d091a1
commit 03c08881b6
3 changed files with 471 additions and 5 deletions
+8 -5
View File
@@ -61,8 +61,11 @@ def normalize(spec: dict, value: float | None) -> float | None:
raise ValueError(f"未知指标类型 {mtype!r}(须 target/reverse/band)")
def _derive_metrics(pm: PeriodMetrics) -> dict[str, float | None]:
"""从 PeriodMetrics 派生可评分指标值(键=指标名,None=无值≠0)。"""
def derive_metrics(pm: PeriodMetrics) -> dict[str, float | None]:
"""从 PeriodMetrics 派生可评分指标值(键=指标名,None=无值≠0)。
公有供 anomalies(B3)/dashboard(B4) 复用——评分与异常对比同一派生口径。
"""
out: dict[str, float | None] = {
"fr_p90_ms": pm.fr_p90_ms,
"active_friends": pm.active_friends, # band 用,周期 distinct
@@ -121,9 +124,9 @@ def score_employee(
team 为指标级中位数(键=派生指标名,可 None)。返回结构见模块 docstring
——metrics_detail 键=配置里的 metric_code(band 型如 active_friends_band)。
"""
cur_vals = _derive_metrics(current)
prev_vals = _derive_metrics(prev) if prev is not None else None
base_vals = _derive_metrics(baseline) if baseline is not None else None
cur_vals = derive_metrics(current)
prev_vals = derive_metrics(prev) if prev is not None else None
base_vals = derive_metrics(baseline) if baseline is not None else None
guards = config.get("sample_guards", {})
soft = guards.get("soft_threads", 10)
minimum = guards.get("min_threads", 30)