detectkit 0.44.0__tar.gz → 0.44.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {detectkit-0.44.0/detectkit.egg-info → detectkit-0.44.1}/PKG-INFO +1 -1
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/__init__.py +1 -1
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/assets/claude/rules/alerting.md +3 -5
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/assets/claude/rules/overview.md +1 -2
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/assets/claude/rules/project.md +1 -2
- {detectkit-0.44.0 → detectkit-0.44.1/detectkit.egg-info}/PKG-INFO +1 -1
- {detectkit-0.44.0 → detectkit-0.44.1}/LICENSE +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/MANIFEST.in +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/README.md +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/alerting/__init__.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/alerting/channels/__init__.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/alerting/channels/base.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/alerting/channels/branding.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/alerting/channels/email.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/alerting/channels/factory.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/alerting/channels/mattermost.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/alerting/channels/slack.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/alerting/channels/telegram.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/alerting/channels/webhook.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/alerting/orchestrator/__init__.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/alerting/orchestrator/_base.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/alerting/orchestrator/_cooldown.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/alerting/orchestrator/_decision.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/alerting/orchestrator/_dispatch.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/alerting/orchestrator/_recovery.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/alerting/orchestrator/_replay.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/alerting/orchestrator/_types.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/alerting/orchestrator/orchestrator.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/autotune/__init__.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/autotune/_base.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/autotune/_types.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/autotune/autotuner.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/autotune/config_emitter.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/autotune/crossval.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/autotune/detector_select.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/autotune/distribution.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/autotune/grid_search.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/autotune/labels.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/autotune/result.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/autotune/runner.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/autotune/scoring.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/autotune/seasonality_search.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/autotune/settings.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/autotune/window_select.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/__init__.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/_output.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/assets/claude/CLAUDE.section.md +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/assets/claude/rules/autotune.md +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/assets/claude/rules/cli.md +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/assets/claude/rules/detectors.md +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/assets/claude/rules/metrics.md +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/assets/claude/skills/dtk-autotune/SKILL.md +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/assets/claude/skills/dtk-feedback/SKILL.md +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/assets/claude/skills/dtk-new-metric/SKILL.md +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/assets/claude/skills/dtk-setup-project/SKILL.md +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/commands/__init__.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/commands/autotune.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/commands/clean.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/commands/init.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/commands/init_claude.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/commands/run.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/commands/test_alert.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/commands/tune.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/commands/unlock.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/main.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/config/__init__.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/config/metric_config.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/config/profile.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/config/project_config.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/config/validator.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/core/__init__.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/core/interval.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/core/models.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/database/__init__.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/database/_sql_manager.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/database/clickhouse_manager.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/database/internal_tables/__init__.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/database/internal_tables/_alert_states.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/database/internal_tables/_autotune_runs.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/database/internal_tables/_base.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/database/internal_tables/_datapoints.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/database/internal_tables/_detections.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/database/internal_tables/_maintenance.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/database/internal_tables/_metrics.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/database/internal_tables/_schema.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/database/internal_tables/_tasks.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/database/internal_tables/manager.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/database/manager.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/database/mysql_manager.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/database/postgres_manager.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/database/tables.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/detectors/__init__.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/detectors/base.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/detectors/factory.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/detectors/seasonality.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/detectors/statistical/__init__.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/detectors/statistical/_windowed.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/detectors/statistical/iqr.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/detectors/statistical/mad.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/detectors/statistical/manual_bounds.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/detectors/statistical/zscore.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/loaders/__init__.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/loaders/metric_loader.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/loaders/query_template.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/orchestration/__init__.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/orchestration/error_dispatch.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/orchestration/task_manager/__init__.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/orchestration/task_manager/_alert_step.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/orchestration/task_manager/_base.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/orchestration/task_manager/_detect_step.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/orchestration/task_manager/_load_step.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/orchestration/task_manager/_types.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/orchestration/task_manager/manager.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/reporting/__init__.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/reporting/assets/report.js +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/reporting/builder.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/reporting/html_report.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/tuning/__init__.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/tuning/assets/tune.js +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/tuning/config_writer.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/tuning/html.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/tuning/payload.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/tuning/server.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/utils/__init__.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/utils/datetime_utils.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/utils/env_interpolation.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/utils/json_utils.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit/utils/stats.py +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit.egg-info/SOURCES.txt +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit.egg-info/dependency_links.txt +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit.egg-info/entry_points.txt +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit.egg-info/requires.txt +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/detectkit.egg-info/top_level.txt +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/pyproject.toml +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/requirements.txt +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/setup.cfg +0 -0
- {detectkit-0.44.0 → detectkit-0.44.1}/setup.py +0 -0
|
@@ -4,7 +4,7 @@ detectk - Anomaly Detection for Time-Series Metrics
|
|
|
4
4
|
A Python library for data analysts and engineers to monitor metrics with automatic anomaly detection.
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
-
__version__ = "0.44.
|
|
7
|
+
__version__ = "0.44.1"
|
|
8
8
|
|
|
9
9
|
from detectkit.core.interval import Interval
|
|
10
10
|
from detectkit.core.models import ColumnDefinition, TableModel
|
|
@@ -164,8 +164,7 @@ config needed. Control it project-wide with `alert_help_url` in
|
|
|
164
164
|
- **a URL string** → your own runbook/wiki page instead
|
|
165
165
|
- **`false`** → hide the link entirely
|
|
166
166
|
|
|
167
|
-
Per-channel rendering (defaults only; resolved
|
|
168
|
-
`ProjectConfig.resolve_alert_help_url`):
|
|
167
|
+
Per-channel rendering (defaults only; the resolved help URL is rendered per channel as follows):
|
|
169
168
|
|
|
170
169
|
- **Slack / Mattermost / generic webhook** — a clickable `How to read this alert`
|
|
171
170
|
label in the compact `Links` field (alongside `Dashboard` + any extra links),
|
|
@@ -185,7 +184,7 @@ mirrors `{dashboard_url}` / `{dashboard_line}`. See the template table below.
|
|
|
185
184
|
|
|
186
185
|
With no custom `template`, each channel renders a structured, branded message
|
|
187
186
|
(alert-centric: the rule that fired leads, the anomaly value is evidence). The
|
|
188
|
-
shared value computation lives in one place
|
|
187
|
+
shared value computation lives in one place,
|
|
189
188
|
so templates and native rendering stay consistent. Every alert title/headline
|
|
190
189
|
leads with a colored **status circle** — 🔴 anomaly, 🟢 recovery, 🟡 no-data,
|
|
191
190
|
🔵 pipeline error — so the status reads from color alone. It also leads with the
|
|
@@ -241,8 +240,7 @@ Latest reading** fields bound the span. Labels are self-describing so the onset
|
|
|
241
240
|
isn't misread as the alert-fire moment: **Anomaly began** is the resolved onset,
|
|
242
241
|
**not** when the alert fired. Recovery shows the fuller **began → fired →
|
|
243
242
|
recovered** timeline (`Incident lasted …`), where **Alert fired** =
|
|
244
|
-
`onset + (consecutive_required − 1) × interval` (
|
|
245
|
-
exposed as `{fired_display}`, omitted when the run is capped). The true
|
|
243
|
+
`onset + (consecutive_required − 1) × interval` (exposed as `{fired_display}`, omitted when the run is capped). The true
|
|
246
244
|
streak/onset is resolved only when an alert fires/clears (a bounded lookback over
|
|
247
245
|
the detection history; a run older than the window shows `over …`), so the hot
|
|
248
246
|
no-alert path stays cheap. Exposed to templates as `{anomaly_lead}` /
|
|
@@ -114,6 +114,5 @@ series, watch the band recompute live, then write the config back into the metri
|
|
|
114
114
|
|
|
115
115
|
## Authoritative sources
|
|
116
116
|
|
|
117
|
-
The
|
|
118
|
-
<https://dtk.pipelab.dev>) and the `CHANGELOG.md` are authoritative for
|
|
117
|
+
The detectkit docs at <https://dtk.pipelab.dev> and the project changelog are authoritative for
|
|
119
118
|
behavior. These rule files summarize them for the installed version.
|
|
@@ -45,8 +45,7 @@ overrides it; unset → a built-in `0.5`. Tuning-only — it never touches the p
|
|
|
45
45
|
### `alert_help_url` — "How to read this alert" link
|
|
46
46
|
|
|
47
47
|
Every default-rendered alert on every channel carries a `How to read this alert`
|
|
48
|
-
link for non-operator stakeholders. Tri-state
|
|
49
|
-
`ProjectConfig.resolve_alert_help_url`:
|
|
48
|
+
link for non-operator stakeholders. Tri-state:
|
|
50
49
|
|
|
51
50
|
- **unset / null** (default) → the official detectkit guide
|
|
52
51
|
(`https://dtk.pipelab.dev/guides/reading-alerts/`).
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/assets/claude/skills/dtk-autotune/SKILL.md
RENAMED
|
File without changes
|
{detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/assets/claude/skills/dtk-feedback/SKILL.md
RENAMED
|
File without changes
|
{detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/assets/claude/skills/dtk-new-metric/SKILL.md
RENAMED
|
File without changes
|
{detectkit-0.44.0 → detectkit-0.44.1}/detectkit/cli/assets/claude/skills/dtk-setup-project/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|