Releases: sslinNn/devalerts
Releases · sslinNn/devalerts
Release list
v0.3.0
Added
devalerts.init(slack_webhook_url=...): Slack delivery via an incoming webhook, alongside or instead of Telegram — every configured channel gets every alert.devalerts.init(..., blame=True): runsgit blameon the line that raised and adds the author, short commit hash, and date to the alert.devalerts.LogHandler: reportsERROR+ log records, catching exceptions that are logged and swallowed (logger.exception(...)) rather than left to propagate.- Alerts now mark the first-ever occurrence of an error group with a 🆕 New error badge.
Full changelog: https://github.com/sslinNn/devalerts/blob/main/CHANGELOG.md#030---2026-07-19
v0.2.3
Fixed
devalerts dashboardno longer crashes withUnicodeEncodeErroron
consoles using a legacy codepage (e.g.cp1251) when a group's backoff
multiplier is shown — the×suffix (limited ×2) now falls back to
x2like the dashboard's other unicode characters already did.
Added
- README: demo GIF showing setup, the dashboard,
mute, and a real alert
landing in Telegram with the collapsed traceback.
v0.2.2
v0.2.1
v0.2.0
Added
devalerts.init_celery(): reports Celery task failures automatically via
thetask_failuresignal.init()'s excepthook alone never sees
exceptions raised inside a task, since Celery catches those itself to
record the task'sFAILUREstate — same class of problemASGIMiddleware
solves for ASGI request errors. Tags each alert with the task name and id.
Celery is imported lazily, not a devalerts dependency.- Every alert now includes the sending host (
socket.gethostname()) — useful
when one bot serves multiple processes/servers.init(tags={...})adds
global tags to every alert;report(extra={...})/capture(extra={...})
add ad-hoc tags to a single call, overridinginit()'s tags on key
collision. - Chronic error groups (occurrences piling up while rate-limited) now back
off exponentially: each chronic resend doubles the effective
rate_limit_secondsfor that group, capped at 8x. A group that goes quiet
and reappears once (no pile-up) resets to the base rate immediately.
dashboard/--jsonshow the active multiplier. devalerts mute <fingerprint>/devalerts unmute <fingerprint>: silence
or re-enable alerts for a specific error group without touching code.
Unmuting resends with the accumulated skip count, same as a rate-limit
window expiring.devalerts clear <fingerprint>/devalerts clear --all: delete error
group(s) from local state. All three commands accept a unique prefix of
the fingerprint (theIDcolumn shown bydashboard).devalerts dashboard --json: machine-readable output for scripting.devalerts test --bot-token ... --chat-id ...CLI command: sends a one-off
message so you can verifybot_token/chat_idare wired up correctly
before touching any code.- Test coverage for
ASGIMiddleware(previously untested) and for
_excepthook/_threading_excepthook's "must never raise" guarantee,
raising overall coverage from 86% to 95%. - GitHub repo topics for discoverability.
Fixed
devalerts dashboardnow uses each error group's actually configured
rate_limit_seconds(persisted to the local DB) to decidelimitedvs
sendingstatus, instead of always assuming the library default.
Changed
_send_telegram_messagenow returnsTrue/Falseinstead ofNone, so
callers (like the newtestcommand) can tell whether delivery succeeded.- Telegram delivery now retries once on failure (honoring
Retry-Afteron a
429, up to 10s) before giving up. If every attempt fails, the message is
appended to~/.devalerts/failed.loginstead of just being dropped.