47fac22230
- .claude/CLAUDE.md - .claude/commands/subagentes.md - .claude/rules/INDEX.md - .mcp.json - bash/functions/cybersecurity/analyze_dns.md - bash/functions/cybersecurity/audit_http_headers.md - bash/functions/cybersecurity/audit_ssh_config.md - bash/functions/cybersecurity/check_firewall.md - bash/functions/cybersecurity/detect_suspicious_users.md - bash/functions/cybersecurity/encrypt_file.md - ... Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
57 lines
2.5 KiB
Markdown
57 lines
2.5 KiB
Markdown
---
|
|
name: metrics_drift
|
|
kind: function
|
|
lang: go
|
|
domain: datascience
|
|
version: "1.0.0"
|
|
purity: pure
|
|
signature: "func MetricsDrift(historical []int64, current int64, percentile float64) (drift float64, baseline int64)"
|
|
description: "Calcula la deriva relativa de una medicion actual respecto a una linea base historica. La linea base se obtiene como el percentil indicado del historico. drift = (current - baseline) / baseline. Retorna drift=0, baseline=0 si el historico esta vacio o la linea base es cero."
|
|
tags: [metrics, drift, percentile, statistics, monitoring, baseline, pendiente-usar]
|
|
uses_functions: [percentile_int64_go_datascience]
|
|
uses_types: []
|
|
returns: []
|
|
returns_optional: false
|
|
error_type: ""
|
|
imports: [sort]
|
|
tested: true
|
|
tests:
|
|
- "historico vacio retorna drift 0 baseline 0"
|
|
- "baseline cero retorna drift 0 baseline 0"
|
|
- "drift positivo cuando current supera baseline"
|
|
- "drift negativo cuando current es menor que baseline"
|
|
test_file_path: "functions/datascience/metrics_drift_test.go"
|
|
file_path: "functions/datascience/metrics_drift.go"
|
|
params:
|
|
- name: historical
|
|
desc: "Ventana de mediciones previas en la misma unidad que current (ms, bytes, etc.). No necesita estar ordenada."
|
|
- name: current
|
|
desc: "Medicion actual a comparar contra la linea base historica."
|
|
- name: percentile
|
|
desc: "Percentil para calcular la linea base: 0.5 = mediana, 0.95 = p95. Rango [0.0, 1.0]."
|
|
output: "drift es la desviacion relativa como fraccion (0.47 = +47% por encima de la linea base, -0.5 = 50% por debajo). baseline es el valor del percentil sobre el historico."
|
|
---
|
|
|
|
## Ejemplo
|
|
|
|
```go
|
|
historical := []int64{100, 120, 95, 110, 105} // ms de respuesta previos
|
|
current := int64(200) // ms de la ejecucion actual
|
|
|
|
drift, baseline := MetricsDrift(historical, current, 0.5)
|
|
// baseline ≈ 105 (mediana)
|
|
// drift ≈ 0.905 (+90.5% sobre la mediana)
|
|
|
|
// Con p95 como referencia de "worst case normal"
|
|
_, p95 := MetricsDrift(historical, current, 0.95)
|
|
// p95 = 120
|
|
```
|
|
|
|
## Notas
|
|
|
|
Funcion pura. El historico se ordena internamente (copia defensiva) antes de calcular el percentil con `Percentile` de `percentile_int64_go_datascience`. No muta el slice de entrada.
|
|
|
|
El drift puede ser negativo (mejora) o positivo (degradacion). El caller decide el umbral de alarma (ej. `drift > 0.5` = degradacion mayor al 50%).
|
|
|
|
Util para el agente `fn-analizador` para comparar `duration_ms` de la ejecucion actual contra el historico de `executions` en `operations.db`.
|