detectkit 0.13.0__tar.gz → 0.13.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.13.0/detectkit.egg-info → detectkit-0.13.1}/PKG-INFO +1 -1
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/__init__.py +1 -1
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/cli/assets/claude/rules/alerting.md +4 -2
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/cli/assets/claude/rules/metrics.md +1 -0
- {detectkit-0.13.0 → detectkit-0.13.1/detectkit.egg-info}/PKG-INFO +1 -1
- {detectkit-0.13.0 → detectkit-0.13.1}/LICENSE +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/MANIFEST.in +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/README.md +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/alerting/__init__.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/alerting/channels/__init__.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/alerting/channels/base.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/alerting/channels/branding.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/alerting/channels/email.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/alerting/channels/factory.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/alerting/channels/mattermost.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/alerting/channels/slack.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/alerting/channels/telegram.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/alerting/channels/webhook.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/alerting/orchestrator/__init__.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/alerting/orchestrator/_base.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/alerting/orchestrator/_cooldown.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/alerting/orchestrator/_decision.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/alerting/orchestrator/_dispatch.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/alerting/orchestrator/_recovery.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/alerting/orchestrator/_types.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/alerting/orchestrator/orchestrator.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/cli/__init__.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/cli/_output.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/cli/assets/claude/CLAUDE.section.md +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/cli/assets/claude/rules/cli.md +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/cli/assets/claude/rules/detectors.md +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/cli/assets/claude/rules/overview.md +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/cli/assets/claude/rules/project.md +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/cli/assets/claude/skills/dtk-new-metric/SKILL.md +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/cli/assets/claude/skills/dtk-setup-project/SKILL.md +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/cli/commands/__init__.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/cli/commands/clean.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/cli/commands/init.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/cli/commands/init_claude.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/cli/commands/run.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/cli/commands/test_alert.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/cli/commands/unlock.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/cli/main.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/config/__init__.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/config/metric_config.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/config/profile.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/config/project_config.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/config/validator.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/core/__init__.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/core/interval.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/core/models.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/database/__init__.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/database/_sql_manager.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/database/clickhouse_manager.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/database/internal_tables/__init__.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/database/internal_tables/_alert_states.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/database/internal_tables/_base.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/database/internal_tables/_datapoints.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/database/internal_tables/_detections.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/database/internal_tables/_maintenance.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/database/internal_tables/_metrics.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/database/internal_tables/_schema.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/database/internal_tables/_tasks.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/database/internal_tables/manager.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/database/manager.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/database/mysql_manager.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/database/postgres_manager.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/database/tables.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/detectors/__init__.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/detectors/base.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/detectors/factory.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/detectors/seasonality.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/detectors/statistical/__init__.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/detectors/statistical/_windowed.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/detectors/statistical/iqr.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/detectors/statistical/mad.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/detectors/statistical/manual_bounds.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/detectors/statistical/zscore.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/loaders/__init__.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/loaders/metric_loader.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/loaders/query_template.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/orchestration/__init__.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/orchestration/error_dispatch.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/orchestration/task_manager/__init__.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/orchestration/task_manager/_alert_step.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/orchestration/task_manager/_base.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/orchestration/task_manager/_detect_step.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/orchestration/task_manager/_load_step.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/orchestration/task_manager/_types.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/orchestration/task_manager/manager.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/utils/__init__.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/utils/datetime_utils.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/utils/env_interpolation.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/utils/json_utils.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit/utils/stats.py +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit.egg-info/SOURCES.txt +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit.egg-info/dependency_links.txt +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit.egg-info/entry_points.txt +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit.egg-info/requires.txt +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/detectkit.egg-info/top_level.txt +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/pyproject.toml +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/requirements.txt +0 -0
- {detectkit-0.13.0 → detectkit-0.13.1}/setup.cfg +0 -0
- {detectkit-0.13.0 → detectkit-0.13.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.13.
|
|
7
|
+
__version__ = "0.13.1"
|
|
8
8
|
|
|
9
9
|
from detectkit.core.interval import Interval
|
|
10
10
|
from detectkit.core.models import ColumnDefinition, TableModel
|
|
@@ -156,7 +156,9 @@ custom templates — see `{dashboard_url}` / `{dashboard_line}` below.
|
|
|
156
156
|
With no custom `template`, each channel renders a structured, branded message
|
|
157
157
|
(alert-centric: the rule that fired leads, the anomaly value is evidence). The
|
|
158
158
|
shared value computation lives in one place (`BaseAlertChannel.build_context`),
|
|
159
|
-
so templates and native rendering stay consistent.
|
|
159
|
+
so templates and native rendering stay consistent. Every alert title/headline
|
|
160
|
+
leads with a colored **status circle** — 🔴 anomaly, 🟢 recovery, 🟡 no-data,
|
|
161
|
+
🔵 pipeline error — so the status reads from color alone.
|
|
160
162
|
|
|
161
163
|
- **Slack / Mattermost / generic webhook** — one message *attachment* with a
|
|
162
164
|
status-colored accent bar, a clickable title (the metric; links to
|
|
@@ -168,7 +170,7 @@ so templates and native rendering stay consistent.
|
|
|
168
170
|
branding kept, no fields grid).
|
|
169
171
|
- **Telegram** — default `parse_mode` is now **HTML**. The default message is
|
|
170
172
|
structured and HTML-escaped: a colored status dot (red anomaly / green
|
|
171
|
-
recovery / yellow no-data /
|
|
173
|
+
recovery / yellow no-data / blue error), a bold headline, the rule, then
|
|
172
174
|
evidence in `<code>` (value/expected/severity/time/detector/params), an inline
|
|
173
175
|
"Open dashboard" link, then mentions. This fixes the old Markdown mode raising
|
|
174
176
|
"can't parse entities" on params JSON containing underscores (e.g.
|
|
@@ -49,6 +49,7 @@ alerting: # optional — see alerting.md
|
|
|
49
49
|
channels: [mattermost_ops]
|
|
50
50
|
consecutive_anomalies: 3
|
|
51
51
|
alert_cooldown: "30min"
|
|
52
|
+
dashboard_url: https://grafana.ops/d/api-errors # optional; clickable in every alert
|
|
52
53
|
|
|
53
54
|
tables: # optional — per-metric internal table overrides
|
|
54
55
|
datapoints: _dtk_datapoints_api
|
|
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.13.0 → detectkit-0.13.1}/detectkit/cli/assets/claude/skills/dtk-new-metric/SKILL.md
RENAMED
|
File without changes
|
{detectkit-0.13.0 → detectkit-0.13.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
|